Source Code
Latest 25 from a total of 47 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Batch Withdraw F... | 112106617 | 825 days ago | IN | 0 ETH | 0.000090424703 | ||||
| Batch Withdraw F... | 110244494 | 868 days ago | IN | 0 ETH | 0.000037592068 | ||||
| Batch Withdraw F... | 107980560 | 921 days ago | IN | 0 ETH | 0.000041721359 | ||||
| Batch Withdraw F... | 106183275 | 962 days ago | IN | 0 ETH | 0.000118102822 | ||||
| Batch Withdraw F... | 105568168 | 976 days ago | IN | 0 ETH | 0.000050627421 | ||||
| Batch Withdraw F... | 105263016 | 984 days ago | IN | 0 ETH | 0.0000679508 | ||||
| Batch Withdraw F... | 105263016 | 984 days ago | IN | 0 ETH | 0.000093347547 | ||||
| Batch Withdraw F... | 103146678 | 991 days ago | IN | 0 ETH | 0.000175567941 | ||||
| Batch Withdraw F... | 100957066 | 998 days ago | IN | 0 ETH | 0.000221476077 | ||||
| Batch Withdraw F... | 99141072 | 1004 days ago | IN | 0 ETH | 0.000352953767 | ||||
| Batch Withdraw F... | 97203727 | 1012 days ago | IN | 0 ETH | 0.000311791573 | ||||
| Batch Withdraw F... | 96050525 | 1019 days ago | IN | 0 ETH | 0.00035060355 | ||||
| Batch Withdraw F... | 94347208 | 1026 days ago | IN | 0 ETH | 0.000203342991 | ||||
| Batch Withdraw F... | 92165951 | 1032 days ago | IN | 0 ETH | 0.000783333886 | ||||
| Set Token Config | 89811796 | 1038 days ago | IN | 0 ETH | 0.000188400973 | ||||
| Set Token Config | 89811693 | 1038 days ago | IN | 0 ETH | 0.0001871793 | ||||
| Set Token Config | 89811669 | 1039 days ago | IN | 0 ETH | 0.000187586531 | ||||
| Set Token Config | 89811611 | 1039 days ago | IN | 0 ETH | 0.000181899858 | ||||
| Set Token Config | 89811588 | 1039 days ago | IN | 0 ETH | 0.000181897481 | ||||
| Set Token Config | 89811563 | 1039 days ago | IN | 0 ETH | 0.000187193739 | ||||
| Batch Withdraw F... | 89360131 | 1040 days ago | IN | 0 ETH | 0.000131928393 | ||||
| Batch Withdraw F... | 86375748 | 1047 days ago | IN | 0 ETH | 0.000172814561 | ||||
| Batch Withdraw F... | 84513993 | 1054 days ago | IN | 0 ETH | 0.000147894106 | ||||
| Set Is Swap Enab... | 84358415 | 1054 days ago | IN | 0 ETH | 0.000116374034 | ||||
| Set Swap Fees | 84086245 | 1055 days ago | IN | 0 ETH | 0.000450927682 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107554257 | 930 days ago | 0 ETH | ||||
| 107550211 | 931 days ago | 0 ETH | ||||
| 107550211 | 931 days ago | 0 ETH | ||||
| 107550211 | 931 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Timelock
Compiler Version
v0.6.12+commit.27d51765
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/IAlpManager.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 "../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 alpManager;
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 _alpManager,
uint256 _maxTokenSupply,
uint256 _marginFeeBasisPoints,
uint256 _maxMarginFeeBasisPoints
) public {
require(_buffer <= MAX_BUFFER, "Timelock: invalid _buffer");
admin = _admin;
buffer = _buffer;
tokenManager = _tokenManager;
mintReceiver = _mintReceiver;
alpManager = _alpManager;
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 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 = IAlpManager(alpManager).usdg();
uint256 balance = IERC20(usdg).balanceOf(alpManager);
IUSDG(usdg).addVault(address(this));
if (usdgAmount > balance) {
uint256 mintAmount = usdgAmount.sub(balance);
IUSDG(usdg).mint(alpManager, mintAmount);
} else {
uint256 burnAmount = balance.sub(usdgAmount);
IUSDG(usdg).burn(alpManager, burnAmount);
}
IUSDG(usdg).removeVault(address(this));
}
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");
if (!IHandlerTarget(_vester).isHandler(address(this))) {
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);
}
}
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 IAlpManager {
function usdg() external view returns (address);
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 _minAlp) external returns (uint256);
function addLiquidityForAccount(address _fundingAccount, address _account, address _token, uint256 _amount, uint256 _minUsdg, uint256 _minAlp) external returns (uint256);
function removeLiquidity(address _tokenOut, uint256 _alpAmount, uint256 _minOut, address _receiver) external returns (uint256);
function removeLiquidityForAccount(address _account, address _tokenOut, uint256 _alpAmount, uint256 _minOut, address _receiver) external returns (uint256);
}// 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 liquidatePosition(address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver) external;
function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256);
function priceFeed() external view returns (address);
function fundingRateFactor() external view returns (uint256);
function stableFundingRateFactor() external view returns (uint256);
function cumulativeFundingRates(address _token) external view returns (uint256);
function getNextFundingRate(address _token) external view returns (uint256);
function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256);
function liquidationFeeUsd() external view returns (uint256);
function taxBasisPoints() external view returns (uint256);
function stableTaxBasisPoints() external view returns (uint256);
function mintBurnFeeBasisPoints() external view returns (uint256);
function swapFeeBasisPoints() external view returns (uint256);
function stableSwapFeeBasisPoints() external view returns (uint256);
function marginFeeBasisPoints() external view returns (uint256);
function allWhitelistedTokensLength() external view returns (uint256);
function allWhitelistedTokens(uint256) external view returns (address);
function whitelistedTokens(address _token) external view returns (bool);
function stableTokens(address _token) external view returns (bool);
function shortableTokens(address _token) external view returns (bool);
function feeReserves(address _token) external view returns (uint256);
function globalShortSizes(address _token) external view returns (uint256);
function globalShortAveragePrices(address _token) external view returns (uint256);
function maxGlobalShortSizes(address _token) external view returns (uint256);
function tokenDecimals(address _token) external view returns (uint256);
function tokenWeights(address _token) external view returns (uint256);
function guaranteedUsd(address _token) external view returns (uint256);
function poolAmounts(address _token) external view returns (uint256);
function bufferAmounts(address _token) external view returns (uint256);
function reservedAmounts(address _token) external view returns (uint256);
function usdgAmounts(address _token) external view returns (uint256);
function maxUsdgAmounts(address _token) external view returns (uint256);
function getRedemptionAmount(address _token, uint256 _usdgAmount) external view returns (uint256);
function getMaxPrice(address _token) external view returns (uint256);
function getMinPrice(address _token) external view returns (uint256);
function getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) external view returns (bool, uint256);
function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256);
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IVaultUtils {
function updateCumulativeFundingRate(address _collateralToken, address _indexToken) external returns (bool);
function validateIncreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external view;
function validateDecreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external view;
function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256);
function getEntryFundingRate(address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256);
function getPositionFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta) external view returns (uint256);
function getFundingFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate) external view returns (uint256);
function getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256);
function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256);
function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdgAmount) external view returns (uint256);
function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256);
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IHandlerTarget {
function isHandler(address _account) external returns (bool);
function setHandler(address _handler, bool _isActive) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface ITimelock {
function setAdmin(address _admin) external;
function enableLeverage(address _vault) external;
function disableLeverage(address _vault) external;
function setIsLeverageEnabled(address _vault, bool _isLeverageEnabled) external;
function signalSetGov(address _target, address _gov) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface ITimelockTarget {
function setGov(address _gov) external;
function withdrawToken(address _token, address _account, uint256 _amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IReferralStorage {
function codeOwners(bytes32 _code) external view returns (address);
function 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 IVester {
function rewardTracker() external view returns (address);
function claimForAccount(address _account, address _receiver) external returns (uint256);
function claimable(address _account) external view returns (uint256);
function cumulativeClaimAmounts(address _account) external view returns (uint256);
function claimedAmounts(address _account) external view returns (uint256);
function pairAmounts(address _account) external view returns (uint256);
function getVestedAmount(address _account) external view returns (uint256);
function transferredAverageStakedAmounts(address _account) external view returns (uint256);
function transferredCumulativeRewards(address _account) external view returns (uint256);
function cumulativeRewardDeductions(address _account) external view returns (uint256);
function bonusRewards(address _account) external view returns (uint256);
function transferStakeValues(address _sender, address _receiver) external;
function setTransferredAverageStakedAmounts(address _account, uint256 _amount) external;
function setTransferredCumulativeRewards(address _account, uint256 _amount) external;
function setCumulativeRewardDeductions(address _account, uint256 _amount) external;
function setBonusRewards(address _account, uint256 _amount) external;
function getMaxVestableAmount(address _account) external view returns (uint256);
function getCombinedAverageStakedAmount(address _account) external view returns (uint256);
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IBaseToken {
function totalStaked() external view returns (uint256);
function stakedBalance(address _account) external view returns (uint256);
function removeAdmin(address _account) external;
function setInPrivateTransferMode(bool _inPrivateTransferMode) external;
function withdrawToken(address _token, address _account, uint256 _amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IMintable {
function isMinter(address _account) external returns (bool);
function setMinter(address _minter, bool _isActive) external;
function mint(address _account, uint256 _amount) external;
function burn(address _account, uint256 _amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IUSDG {
function addVault(address _vault) external;
function removeVault(address _vault) external;
function mint(address _account, uint256 _amount) external;
function burn(address _account, uint256 _amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IYieldToken {
function totalStaked() external view returns (uint256);
function stakedBalance(address _account) external view returns (uint256);
function removeAdmin(address _account) external;
}{
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "none",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 1
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}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":"_alpManager","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":[],"name":"alpManager","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":[{"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":[{"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":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buffer","type":"uint256"}],"name":"setBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setContractHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"name":"setExternalAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_taxBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_stableTaxBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_mintBurnFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_swapFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_stableSwapFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_marginFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_liquidationFeeUsd","type":"uint256"},{"internalType":"uint256","name":"_minProfitTime","type":"uint256"},{"internalType":"bool","name":"_hasDynamicFees","type":"bool"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_fundingInterval","type":"uint256"},{"internalType":"uint256","name":"_fundingRateFactor","type":"uint256"},{"internalType":"uint256","name":"_stableFundingRateFactor","type":"uint256"}],"name":"setFundingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_inPrivateLiquidationMode","type":"bool"}],"name":"setInPrivateLiquidationMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_inPrivateTransferMode","type":"bool"}],"name":"setInPrivateTransferMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_isLeverageEnabled","type":"bool"}],"name":"setIsLeverageEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_isSwapEnabled","type":"bool"}],"name":"setIsSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_liquidator","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setLiquidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marginFeeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_maxMarginFeeBasisPoints","type":"uint256"}],"name":"setMarginFeeBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_maxGasPrice","type":"uint256"}],"name":"setMaxGasPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxGlobalShortSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_maxLeverage","type":"uint256"}],"name":"setMaxLeverage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_priceFeed","type":"address"}],"name":"setPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"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
60806040523480156200001157600080fd5b506040516200560f3803806200560f83398181016040526101008110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e09097015195969495939492939192909162069780871115620000c4576040805162461bcd60e51b815260206004820152601960248201527f54696d656c6f636b3a20696e76616c6964205f62756666657200000000000000604482015290519081900360640190fd5b600180546001600160a01b03998a166001600160a01b03199182161790915560009790975560028054968916968816969096179095556003805494881694871694909417909355600480549290961691909416179093556005919091556006919091556007556154d5806200013a6000396000f3fe608060405234801561001057600080fd5b50600436106102ea5760003560e01c80629a698e146102ef5780630191c2371461042457806309cc9a081461045a5780630e0dc426146104905780630e9587f3146104de5780631154e80814610516578063117cf2041461054e578063185051c11461057c578063204bbc54146105aa57806321754d9e146105e057806321bd05921461061c578063227f03eb1461064a57806323aaad121461068257806324ccbe301461069e578063268959e5146106d65780632a709b14146107045780632ba3725a14610728578063318bc6891461074257806346ea87af1461074a57806347de43e2146107705780634cd23f3b146107a857806350f7c204146107e457806351a6de0d146107ec578063558182941461081a57806355ef13951461085257806361d075691461088057806363960074146108885780636ba42aaa146108905780636d63c1d0146108b65780636e5227d4146108dc578063704b6c021461093d57806370ac0a931461096357806376e1128614610999578063781cc3d3146109c75780637b6f775a146109e457806380894d6214610a1057806381774b3d14610a3e57806386803c7214610a5b5780638a39735a14610a895780638bf22c4614610a915780638e34c98f14610abd57806395082d2514610adc578063996a7a1e14610ae4578063996e2bc914610b125780639b53ad2214610b1a578063adc7ea3714610c4d578063bc476dfd14610c6a578063bc8a8ab914610c98578063c142940a14610cce578063c7bb26a014610d04578063cd2b123014610d0c578063d1b9e85314610d3a578063d3c87bbb14610d68578063da76231614610d8e578063db1c844114610dd2578063dce6e18d14610e2b578063df3a66d914610e61578063e1f21c6714610e97578063e21b459114610ecd578063e30569e514610ef0578063e3cbeb0f14610f0d578063e4652f4914610f66578063e8ae227114610f9c578063edaafe201461104d578063f851a44014611055575b600080fd5b6104226004803603606081101561030557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561032f57600080fd5b82018360208201111561034157600080fd5b803590602001918460208302840111600160201b8311171561036257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103b157600080fd5b8201836020820111156103c357600080fd5b803590602001918460208302840111600160201b831117156103e457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061105d945050505050565b005b6104226004803603606081101561043a57600080fd5b506001600160a01b038135811691602081013590911690604001356112ce565b6104226004803603606081101561047057600080fd5b506001600160a01b038135811691602081013590911690604001356113cc565b610422600480360360e08110156104a657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c001356114cb565b610422600480360360608110156104f457600080fd5b506001600160a01b038135811691602081013582169160409091013516611944565b6104226004803603606081101561052c57600080fd5b506001600160a01b038135811691602081013590911690604001351515611a22565b6104226004803603604081101561056457600080fd5b506001600160a01b0381351690602001351515611b53565b6104226004803603604081101561059257600080fd5b506001600160a01b0381351690602001351515611c38565b610422600480360360608110156105c057600080fd5b506001600160a01b03813581169160208101359160409091013516611cb0565b610422600480360360808110156105f657600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611da5565b6104226004803603604081101561063257600080fd5b506001600160a01b0381351690602001351515611ef0565b6104226004803603608081101561066057600080fd5b506001600160a01b038135169060208101359060408101359060600135611f85565b61068a6120da565b604080519115158252519081900360200190f35b610422600480360360608110156106b457600080fd5b506001600160a01b0381358116916020810135909116906040013515156120e3565b610422600480360360408110156106ec57600080fd5b506001600160a01b03813581169160200135166121ec565b61070c612288565b604080516001600160a01b039092168252519081900360200190f35b610730612297565b60408051918252519081900360200190f35b61073061229e565b61068a6004803603602081101561076057600080fd5b50356001600160a01b03166122a4565b6104226004803603606081101561078657600080fd5b506001600160a01b0381358116916020810135909116906040013515156122b9565b610422600480360360808110156107be57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561235f565b61073061247a565b6104226004803603604081101561080257600080fd5b506001600160a01b0381358116916020013516612480565b6104226004803603608081101561083057600080fd5b506001600160a01b03813516906020810135906040810135906060013561257a565b6104226004803603604081101561086857600080fd5b506001600160a01b0381358116916020013516612651565b610730612747565b61070c61274e565b61068a600480360360208110156108a657600080fd5b50356001600160a01b031661275d565b610422600480360360208110156108cc57600080fd5b50356001600160a01b0316612772565b61042260048036036101408110156108f357600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612c28565b6104226004803603602081101561095357600080fd5b50356001600160a01b0316612d58565b6104226004803603606081101561097957600080fd5b506001600160a01b03813581169160208101359091169060400135612dc7565b610422600480360360408110156109af57600080fd5b506001600160a01b03813581169160200135166131c5565b610422600480360360208110156109dd57600080fd5b50356132c4565b610422600480360360408110156109fa57600080fd5b506001600160a01b03813516906020013561331d565b61042260048036036040811015610a2657600080fd5b506001600160a01b0381358116916020013516613407565b61042260048036036020811015610a5457600080fd5b50356134fd565b61042260048036036040811015610a7157600080fd5b506001600160a01b038135169060200135151561382e565b6107306138c3565b61042260048036036040811015610aa757600080fd5b506001600160a01b0381351690602001356138c8565b61042260048036036020811015610ad357600080fd5b503515156139ab565b610730613a25565b61042260048036036040811015610afa57600080fd5b506001600160a01b0381358116916020013516613a35565b610730613b26565b61042260048036036060811015610b3057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b5a57600080fd5b820183602082011115610b6c57600080fd5b803590602001918460208302840111600160201b83111715610b8d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610bdc57600080fd5b820183602082011115610bee57600080fd5b803590602001918460208302840111600160201b83111715610c0f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613b2c945050505050565b61042260048036036020811015610c6357600080fd5b5035613c5a565b61042260048036036040811015610c8057600080fd5b506001600160a01b0381358116916020013516613d40565b61042260048036036060811015610cae57600080fd5b506001600160a01b03813581169160208101359091169060400135613ddc565b61042260048036036060811015610ce457600080fd5b506001600160a01b03813581169160208101359091169060400135613e98565b61070c613f70565b61042260048036036040811015610d2257600080fd5b506001600160a01b0381351690602001351515613f7f565b61042260048036036040811015610d5057600080fd5b506001600160a01b038135169060200135151561402e565b61042260048036036020811015610d7e57600080fd5b50356001600160a01b03166140a6565b610422600480360360c0811015610da457600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a001356143e0565b6104226004803603610100811015610de957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614651565b61042260048036036060811015610e4157600080fd5b506001600160a01b038135811691602081013590911690604001356147ae565b61042260048036036060811015610e7757600080fd5b506001600160a01b038135811691602081013590911690604001356148b0565b61042260048036036060811015610ead57600080fd5b506001600160a01b03813581169160208101359091169060400135614954565b61042260048036036040811015610ee357600080fd5b5080359060200135614a89565b61073060048036036020811015610f0657600080fd5b5035614afb565b6104226004803603610100811015610f2457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614b0d565b61042260048036036060811015610f7c57600080fd5b506001600160a01b03813581169160208101359091169060400135614c92565b61042260048036036040811015610fb257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610fdc57600080fd5b820183602082011115610fee57600080fd5b803590602001918460208302840111600160201b8311171561100f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614d38945050505050565b610730614e74565b61070c614e7a565b6001546001600160a01b03163314806110855750336000908152600a602052604090205460ff165b8061109f5750336000908152600b602052604090205460ff165b6110de576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b8051825114611130576040805162461bcd60e51b815260206004820152601960248201527854696d656c6f636b3a20696e76616c6964206c656e6774687360381b604482015290519081900360640190fd5b604080516346ea87af60e01b815230600482015290516001600160a01b038516916346ea87af9160248083019260209291908290030181600087803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b505050506040513d60208110156111a257600080fd5b505161120f5760408051639cb7de4b60e01b81523060048201526001602482015290516001600160a01b03851691639cb7de4b91604480830192600092919082900301818387803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b505050505b60005b82518110156112c857600083828151811061122957fe5b60200260200101519050600083838151811061124157fe5b60200260200101519050856001600160a01b03166341f2272483836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50506001909401935061121292505050565b50505050565b6001546001600160a01b0316331461131b576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061137c81614e89565b604080516001600160a01b0380871682528516602082015280820184905290517fe6bd553b6ef21f3a22ebc877b3aaedc30fe15826b8156d4e8c8b373ebf11d78b9181900360600190a150505050565b6001546001600160a01b03163314611419576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c909201909252805191012061147481614e89565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f23d37bec99db82564427c9bbfe48ad7434bccf413a40fd357fb838c90a0d68289181900360800190a150505050565b6001546001600160a01b03163314806114f35750336000908152600a602052604090205460ff165b8061150d5750336000908152600b602052604090205460ff165b61154c576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6101f48411156115a3576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b1580156115ed57600080fd5b505afa158015611601573d6000803e3d6000fd5b505050506040513d602081101561161757600080fd5b50516116545760405162461bcd60e51b81526004018080602001828103825260238152602001806153f36023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156116a357600080fd5b505afa1580156116b7573d6000803e3d6000fd5b505050506040513d60208110156116cd57600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b15801561171f57600080fd5b505afa158015611733573d6000803e3d6000fd5b505050506040513d602081101561174957600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b15801561184157600080fd5b505af1158015611855573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050508a6001600160a01b031663d66b000d8b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b03163314611991576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505050506040513d6020811015611a1b57600080fd5b5050505050565b6001546001600160a01b03163314611a6f576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611ad381614f2d565b611adc81614fd9565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b0316331480611b7b5750336000908152600a602052604090205460ff165b80611b955750336000908152600b602052604090205460ff165b611bd4576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314611c85576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331480611cd85750336000908152600a602052604090205460ff165b80611cf25750336000908152600b602052604090205460ff165b611d31576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b158015611d8857600080fd5b505af1158015611d9c573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b03163314611df2576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b16605583015260698083018590528351808403909101815260899092019092528051910120611e6081614f2d565b611e6981614fd9565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611f3d576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b0316331480611fad5750336000908152600a602052604090205460ff165b80611fc75750336000908152600b602052604090205460ff165b612006576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60c882106120455760405162461bcd60e51b81526004018080602001828103825260248152602001806153ad6024913960400191505060405180910390fd5b60c881106120845760405162461bcd60e51b815260040180806020018281038252602a81526020018061549f602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611b3557600080fd5b60085460ff1681565b6001546001600160a01b03163314612130576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b6052830152825160338184030181526053909201909252805191012061219481614e89565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b03163314612239576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c1c57600080fd5b6002546001600160a01b031681565b6207a12081565b60065481565b600a6020526000908152604090205460ff1681565b6001546001600160a01b03163314612306576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b031633146123ac576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061241a81614e89565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b60055481565b6001546001600160a01b031633146124cd576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061252281614f2d565b61252b81614fd9565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b03163314806125a25750336000908152600a602052604090205460ff165b806125bc5750336000908152600b602052604090205460ff165b6125fb576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611b3557600080fd5b6001546001600160a01b0316331461269e576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6001600160a01b0382163014156126f8576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c1c57600080fd5b6206978081565b6004546001600160a01b031681565b600b6020526000908152604090205460ff1681565b6001546001600160a01b031633148061279a5750336000908152600a602052604090205460ff165b6127d9576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600854819060ff16156128475760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561288f57600080fd5b505afa1580156128a3573d6000803e3d6000fd5b505050506040513d60208110156128b957600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b1580156128fb57600080fd5b505afa15801561290f573d6000803e3d6000fd5b505050506040513d602081101561292557600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561296757600080fd5b505afa15801561297b573d6000803e3d6000fd5b505050506040513d602081101561299157600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b1580156129d357600080fd5b505afa1580156129e7573d6000803e3d6000fd5b505050506040513d60208110156129fd57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051600654604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612aae57600080fd5b505afa158015612ac2573d6000803e3d6000fd5b505050506040513d6020811015612ad857600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612b1a57600080fd5b505afa158015612b2e573d6000803e3d6000fd5b505050506040513d6020811015612b4457600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d6020811015612bb057600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015611c1c57600080fd5b6001546001600160a01b0316331480612c505750336000908152600a602052604090205460ff165b80612c6a5750336000908152600b602052604090205460ff165b612ca9576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6006849055600754604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612da5576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612e14576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015260528083018590528351808403909101815260729092019092528051910120612e7581614f2d565b612e7e81614fd9565b6000846001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612eb957600080fd5b505afa158015612ecd573d6000803e3d6000fd5b505050506040513d6020811015612ee357600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b158015612f3757600080fd5b505af1158015612f4b573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b158015612f9657600080fd5b505af1158015612faa573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561306b57600080fd5b505af115801561307f573d6000803e3d6000fd5b505050506040513d602081101561309557600080fd5b505060035460408051630711e61960e41b81526001600160a01b038781166004830152928316602482015290519187169163711e6190916044808201926020929091908290030181600087803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b505050506040513d602081101561311857600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561316657600080fd5b505af115801561317a573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611ed157600080fd5b6001546001600160a01b03163314613212576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061326c81614f2d565b61327581614fd9565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b03163314613311576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b61331a81614fd9565b50565b6001546001600160a01b0316331461336a576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6207a12081116133c1576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b03163314613454576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b168284015282516034818403018152605490920190925280519101206134ae81614e89565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314806135255750336000908152600a602052604090205460ff165b8061353f5750336000908152600b602052604090205460ff165b61357e576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ce57600080fd5b505afa1580156135e2573d6000803e3d6000fd5b505050506040513d60208110156135f857600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b15801561364e57600080fd5b505afa158015613662573d6000803e3d6000fd5b505050506040513d602081101561367857600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b1580156136c557600080fd5b505af11580156136d9573d6000803e3d6000fd5b50505050808311156137685760006136f1848361507e565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b15801561374a57600080fd5b505af115801561375e573d6000803e3d6000fd5b50505050506137e7565b6000613774828561507e565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b1580156137cd57600080fd5b505af11580156137e1573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b158015611d8857600080fd5b6001546001600160a01b0316331461387b576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b60c881565b6001546001600160a01b03163314613915576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b64012a05f2008111613965576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b03163314806139d35750336000908152600a602052604090205460ff165b613a12576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6008805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b03163314613a82576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e9092019092528051910120613ad781614e89565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60075481565b6001546001600160a01b0316331480613b545750336000908152600a602052604090205460ff165b80613b6e5750336000908152600b602052604090205460ff165b613bad576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60005b82518110156112c857836001600160a01b031663d66b000d848381518110613bd457fe5b6020026020010151848481518110613be857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015613c3657600080fd5b505af1158015613c4a573d6000803e3d6000fd5b505060019092019150613bb09050565b6001546001600160a01b03163314613ca7576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b62069780811115613cfb576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b6000548111613d3b5760405162461bcd60e51b815260040180806020018281038252602481526020018061543a6024913960400191505060405180910390fd5b600055565b6001546001600160a01b03163314613d8d576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b03163314613e29576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c9092019092528051910120613e8481614f2d565b613e8d81614fd9565b6112c88484846150c7565b6001546001600160a01b0316331480613ec05750336000908152600a602052604090205460ff165b80613eda5750336000908152600b602052604090205460ff165b613f19576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d8857600080fd5b6003546001600160a01b031681565b6001546001600160a01b0316331480613fa75750336000908152600a602052604090205460ff165b613fe6576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b0316331461407b576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806140ce5750336000908152600a602052604090205460ff165b61410d576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600854819060ff16156141795760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561416057600080fd5b505af1158015614174573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141c157600080fd5b505afa1580156141d5573d6000803e3d6000fd5b505050506040513d60208110156141eb57600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b15801561422d57600080fd5b505afa158015614241573d6000803e3d6000fd5b505050506040513d602081101561425757600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561429957600080fd5b505afa1580156142ad573d6000803e3d6000fd5b505050506040513d60208110156142c357600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b15801561430557600080fd5b505afa158015614319573d6000803e3d6000fd5b505050506040513d602081101561432f57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b15801561437157600080fd5b505afa158015614385573d6000803e3d6000fd5b505050506040513d602081101561439b57600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612aae57600080fd5b6001546001600160a01b03163314806144085750336000908152600a602052604090205460ff165b806144225750336000908152600b602052604090205460ff165b614461576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600754886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b1580156144b657600080fd5b505afa1580156144ca573d6000803e3d6000fd5b505050506040513d60208110156144e057600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b15801561452257600080fd5b505afa158015614536573d6000803e3d6000fd5b505050506040513d602081101561454c57600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b15801561458e57600080fd5b505afa1580156145a2573d6000803e3d6000fd5b505050506040513d60208110156145b857600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b15801561463057600080fd5b505af1158015614644573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b0316331461469e576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd909201909252805191012061473381614e89565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b031633146147fb576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f909201909252805191012061485981614e89565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b031633146148fd576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b031633146149a1576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f90920190925280519101206149ff81614f2d565b614a0881614fd9565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015614a5f57600080fd5b505af1158015614a73573d6000803e3d6000fd5b505050506040513d6020811015611c3057600080fd5b6001546001600160a01b0316331480614ab15750336000908152600a602052604090205460ff165b614af0576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600691909155600755565b60096020526000908152604090205481565b6001546001600160a01b03163314614b5a576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614bef81614f2d565b614bf881614fd9565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b158015614c6f57600080fd5b505af1158015614c83573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b03163314614cdf576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b1580156119f157600080fd5b6001546001600160a01b0316331480614d605750336000908152600a602052604090205460ff165b80614d7a5750336000908152600b602052604090205460ff165b614db9576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60005b8151811015614e6f57826001600160a01b031663f2555278838381518110614de057fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b158015614e3b57600080fd5b505af1158015614e4f573d6000803e3d6000fd5b505050506040513d6020811015614e6557600080fd5b5050600101614dbc565b505050565b60005481565b6001546001600160a01b031681565b60008181526009602052604090205415614ed45760405162461bcd60e51b81526004018080602001828103825260228152602001806153d16022913960400191505060405180910390fd5b600054614ee29042906152bd565b60008281526009602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b600081815260096020526040902054614f8d576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b600081815260096020526040902054421161331a5760405162461bcd60e51b81526004018080602001828103825260248152602001806154166024913960400191505060405180910390fd5b600081815260096020526040902054615035576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b600081815260096020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b60006150c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615315565b9392505050565b604080516355138f0d60e11b8152306004820152905184916001600160a01b0383169163aa271e1a916024808201926020929091908290030181600087803b15801561511257600080fd5b505af1158015615126573d6000803e3d6000fd5b505050506040513d602081101561513c57600080fd5b50516151a9576040805163cf456ae760e01b81523060048201526001602482015290516001600160a01b0383169163cf456ae791604480830192600092919082900301818387803b15801561519057600080fd5b505af11580156151a4573d6000803e3d6000fd5b505050505b806001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561520057600080fd5b505af1158015615214573d6000803e3d6000fd5b50505050600554846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561525457600080fd5b505afa158015615268573d6000803e3d6000fd5b505050506040513d602081101561527e57600080fd5b505111156112c85760405162461bcd60e51b815260040180806020018281038252602181526020018061547e6021913960400191505060405180910390fd5b6000828201838110156150c0576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600081848411156153a45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615369578181015183820152602001615351565b50505050905090810190601f1680156153965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a206275666665722063616e6e6f742062652064656372656173656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a206d6178546f6b656e537570706c7920657863656564656454696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a164736f6c634300060c000a000000000000000000000000904a08be742bd5bc6ad10f0924f06b0b23d1175c000000000000000000000000000000000000000000000000000000000001518000000000000000000000000008b6e4578ddc23c7f802be4f765cd20adf95c06100000000000000000000000008b6e4578ddc23c7f802be4f765cd20adf95c061000000000000000000000000bea6c7d964ae3ae7234b383e2a86752f9568eadb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102ea5760003560e01c80629a698e146102ef5780630191c2371461042457806309cc9a081461045a5780630e0dc426146104905780630e9587f3146104de5780631154e80814610516578063117cf2041461054e578063185051c11461057c578063204bbc54146105aa57806321754d9e146105e057806321bd05921461061c578063227f03eb1461064a57806323aaad121461068257806324ccbe301461069e578063268959e5146106d65780632a709b14146107045780632ba3725a14610728578063318bc6891461074257806346ea87af1461074a57806347de43e2146107705780634cd23f3b146107a857806350f7c204146107e457806351a6de0d146107ec578063558182941461081a57806355ef13951461085257806361d075691461088057806363960074146108885780636ba42aaa146108905780636d63c1d0146108b65780636e5227d4146108dc578063704b6c021461093d57806370ac0a931461096357806376e1128614610999578063781cc3d3146109c75780637b6f775a146109e457806380894d6214610a1057806381774b3d14610a3e57806386803c7214610a5b5780638a39735a14610a895780638bf22c4614610a915780638e34c98f14610abd57806395082d2514610adc578063996a7a1e14610ae4578063996e2bc914610b125780639b53ad2214610b1a578063adc7ea3714610c4d578063bc476dfd14610c6a578063bc8a8ab914610c98578063c142940a14610cce578063c7bb26a014610d04578063cd2b123014610d0c578063d1b9e85314610d3a578063d3c87bbb14610d68578063da76231614610d8e578063db1c844114610dd2578063dce6e18d14610e2b578063df3a66d914610e61578063e1f21c6714610e97578063e21b459114610ecd578063e30569e514610ef0578063e3cbeb0f14610f0d578063e4652f4914610f66578063e8ae227114610f9c578063edaafe201461104d578063f851a44014611055575b600080fd5b6104226004803603606081101561030557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561032f57600080fd5b82018360208201111561034157600080fd5b803590602001918460208302840111600160201b8311171561036257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103b157600080fd5b8201836020820111156103c357600080fd5b803590602001918460208302840111600160201b831117156103e457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061105d945050505050565b005b6104226004803603606081101561043a57600080fd5b506001600160a01b038135811691602081013590911690604001356112ce565b6104226004803603606081101561047057600080fd5b506001600160a01b038135811691602081013590911690604001356113cc565b610422600480360360e08110156104a657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c001356114cb565b610422600480360360608110156104f457600080fd5b506001600160a01b038135811691602081013582169160409091013516611944565b6104226004803603606081101561052c57600080fd5b506001600160a01b038135811691602081013590911690604001351515611a22565b6104226004803603604081101561056457600080fd5b506001600160a01b0381351690602001351515611b53565b6104226004803603604081101561059257600080fd5b506001600160a01b0381351690602001351515611c38565b610422600480360360608110156105c057600080fd5b506001600160a01b03813581169160208101359160409091013516611cb0565b610422600480360360808110156105f657600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611da5565b6104226004803603604081101561063257600080fd5b506001600160a01b0381351690602001351515611ef0565b6104226004803603608081101561066057600080fd5b506001600160a01b038135169060208101359060408101359060600135611f85565b61068a6120da565b604080519115158252519081900360200190f35b610422600480360360608110156106b457600080fd5b506001600160a01b0381358116916020810135909116906040013515156120e3565b610422600480360360408110156106ec57600080fd5b506001600160a01b03813581169160200135166121ec565b61070c612288565b604080516001600160a01b039092168252519081900360200190f35b610730612297565b60408051918252519081900360200190f35b61073061229e565b61068a6004803603602081101561076057600080fd5b50356001600160a01b03166122a4565b6104226004803603606081101561078657600080fd5b506001600160a01b0381358116916020810135909116906040013515156122b9565b610422600480360360808110156107be57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561235f565b61073061247a565b6104226004803603604081101561080257600080fd5b506001600160a01b0381358116916020013516612480565b6104226004803603608081101561083057600080fd5b506001600160a01b03813516906020810135906040810135906060013561257a565b6104226004803603604081101561086857600080fd5b506001600160a01b0381358116916020013516612651565b610730612747565b61070c61274e565b61068a600480360360208110156108a657600080fd5b50356001600160a01b031661275d565b610422600480360360208110156108cc57600080fd5b50356001600160a01b0316612772565b61042260048036036101408110156108f357600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c08101359060e0810135906101008101359061012001351515612c28565b6104226004803603602081101561095357600080fd5b50356001600160a01b0316612d58565b6104226004803603606081101561097957600080fd5b506001600160a01b03813581169160208101359091169060400135612dc7565b610422600480360360408110156109af57600080fd5b506001600160a01b03813581169160200135166131c5565b610422600480360360208110156109dd57600080fd5b50356132c4565b610422600480360360408110156109fa57600080fd5b506001600160a01b03813516906020013561331d565b61042260048036036040811015610a2657600080fd5b506001600160a01b0381358116916020013516613407565b61042260048036036020811015610a5457600080fd5b50356134fd565b61042260048036036040811015610a7157600080fd5b506001600160a01b038135169060200135151561382e565b6107306138c3565b61042260048036036040811015610aa757600080fd5b506001600160a01b0381351690602001356138c8565b61042260048036036020811015610ad357600080fd5b503515156139ab565b610730613a25565b61042260048036036040811015610afa57600080fd5b506001600160a01b0381358116916020013516613a35565b610730613b26565b61042260048036036060811015610b3057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b5a57600080fd5b820183602082011115610b6c57600080fd5b803590602001918460208302840111600160201b83111715610b8d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610bdc57600080fd5b820183602082011115610bee57600080fd5b803590602001918460208302840111600160201b83111715610c0f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613b2c945050505050565b61042260048036036020811015610c6357600080fd5b5035613c5a565b61042260048036036040811015610c8057600080fd5b506001600160a01b0381358116916020013516613d40565b61042260048036036060811015610cae57600080fd5b506001600160a01b03813581169160208101359091169060400135613ddc565b61042260048036036060811015610ce457600080fd5b506001600160a01b03813581169160208101359091169060400135613e98565b61070c613f70565b61042260048036036040811015610d2257600080fd5b506001600160a01b0381351690602001351515613f7f565b61042260048036036040811015610d5057600080fd5b506001600160a01b038135169060200135151561402e565b61042260048036036020811015610d7e57600080fd5b50356001600160a01b03166140a6565b610422600480360360c0811015610da457600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a001356143e0565b6104226004803603610100811015610de957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614651565b61042260048036036060811015610e4157600080fd5b506001600160a01b038135811691602081013590911690604001356147ae565b61042260048036036060811015610e7757600080fd5b506001600160a01b038135811691602081013590911690604001356148b0565b61042260048036036060811015610ead57600080fd5b506001600160a01b03813581169160208101359091169060400135614954565b61042260048036036040811015610ee357600080fd5b5080359060200135614a89565b61073060048036036020811015610f0657600080fd5b5035614afb565b6104226004803603610100811015610f2457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c081013515159060e001351515614b0d565b61042260048036036060811015610f7c57600080fd5b506001600160a01b03813581169160208101359091169060400135614c92565b61042260048036036040811015610fb257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610fdc57600080fd5b820183602082011115610fee57600080fd5b803590602001918460208302840111600160201b8311171561100f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614d38945050505050565b610730614e74565b61070c614e7a565b6001546001600160a01b03163314806110855750336000908152600a602052604090205460ff165b8061109f5750336000908152600b602052604090205460ff165b6110de576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b8051825114611130576040805162461bcd60e51b815260206004820152601960248201527854696d656c6f636b3a20696e76616c6964206c656e6774687360381b604482015290519081900360640190fd5b604080516346ea87af60e01b815230600482015290516001600160a01b038516916346ea87af9160248083019260209291908290030181600087803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b505050506040513d60208110156111a257600080fd5b505161120f5760408051639cb7de4b60e01b81523060048201526001602482015290516001600160a01b03851691639cb7de4b91604480830192600092919082900301818387803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b505050505b60005b82518110156112c857600083828151811061122957fe5b60200260200101519050600083838151811061124157fe5b60200260200101519050856001600160a01b03166341f2272483836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50506001909401935061121292505050565b50505050565b6001546001600160a01b0316331461131b576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e8301526052808301859052835180840390910181526072909201909252805191012061137c81614e89565b604080516001600160a01b0380871682528516602082015280820184905290517fe6bd553b6ef21f3a22ebc877b3aaedc30fe15826b8156d4e8c8b373ebf11d78b9181900360600190a150505050565b6001546001600160a01b03163314611419576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c909201909252805191012061147481614e89565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f23d37bec99db82564427c9bbfe48ad7434bccf413a40fd357fb838c90a0d68289181900360800190a150505050565b6001546001600160a01b03163314806114f35750336000908152600a602052604090205460ff165b8061150d5750336000908152600b602052604090205460ff165b61154c576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6101f48411156115a3576040805162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a20696e76616c6964205f6d696e50726f66697442707300604482015290519081900360640190fd5b60408051630daf9c2160e41b81526001600160a01b0388811660048301529151899283169163daf9c210916024808301926020929190829003018186803b1580156115ed57600080fd5b505afa158015611601573d6000803e3d6000fd5b505050506040513d602081101561161757600080fd5b50516116545760405162461bcd60e51b81526004018080602001828103825260238152602001806153f36023913960400191505060405180910390fd5b6000816001600160a01b0316638ee573ac896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156116a357600080fd5b505afa1580156116b7573d6000803e3d6000fd5b505050506040513d60208110156116cd57600080fd5b5051604080516342b60b0360e01b81526001600160a01b038b811660048301529151929350600092918516916342b60b0391602480820192602092909190829003018186803b15801561171f57600080fd5b505afa158015611733573d6000803e3d6000fd5b505050506040513d602081101561174957600080fd5b50516040805163db3555fb60e01b81526001600160a01b038c8116600483015291519293506000929186169163db3555fb91602480820192602092909190829003018186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b505160408051633c5a6e3560e01b81526001600160a01b038d8116600483015260248201879052604482018d9052606482018c9052608482018b905285151560a483015283151560c48301529151929350908d1691633c5a6e359160e48082019260009290919082900301818387803b15801561184157600080fd5b505af1158015611855573d6000803e3d6000fd5b505050508a6001600160a01b0316638585f4d28b886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050508a6001600160a01b031663d66b000d8b876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b03163314611991576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b031663f255527883836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505050506040513d6020811015611a1b57600080fd5b5050505050565b6001546001600160a01b03163314611a6f576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b60528301528251603381840301815260539092019092528051910120611ad381614f2d565b611adc81614fd9565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b0316331480611b7b5750336000908152600a602052604090205460ff165b80611b955750336000908152600b602052604090205460ff165b611bd4576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b03166330455ede826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314611c85576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331480611cd85750336000908152600a602052604090205460ff165b80611cf25750336000908152600b602052604090205460ff165b611d31576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b031663dfcfa25083836040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050600060405180830381600087803b158015611d8857600080fd5b505af1158015611d9c573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b03163314611df2576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b16605583015260698083018590528351808403909101815260899092019092528051910120611e6081614f2d565b611e6981614fd9565b846001600160a01b03166301e336678585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314611f3d576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b031663f07bbf77826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b0316331480611fad5750336000908152600a602052604090205460ff165b80611fc75750336000908152600b602052604090205460ff165b612006576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60c882106120455760405162461bcd60e51b81526004018080602001828103825260248152602001806153ad6024913960400191505060405180910390fd5b60c881106120845760405162461bcd60e51b815260040180806020018281038252602a81526020018061549f602a913960400191505060405180910390fd5b836001600160a01b0316638a27d4688484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611b3557600080fd5b60085460ff1681565b6001546001600160a01b03163314612130576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b6052830152825160338184030181526053909201909252805191012061219481614e89565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b03163314612239576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b0316631785f53c826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c1c57600080fd5b6002546001600160a01b031681565b6207a12081565b60065481565b600a6020526000908152604090205460ff1681565b6001546001600160a01b03163314612306576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b0316634453a37483836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b031633146123ac576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516c3bb4ba34323930bbaa37b5b2b760991b6020808301919091526001600160601b0319606088811b8216602d85015287811b8216604185015286901b1660558301526069808301859052835180840390910181526089909201909252805191012061241a81614e89565b604080516001600160a01b0380881682528087166020830152851681830152606081018490526080810183905290517f9ed7b0f07a9eed51079fab67f6d0f141f167f5b17fdb5a23282280e15fcafed39181900360a00190a15050505050565b60055481565b6001546001600160a01b031633146124cd576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061252281614f2d565b61252b81614fd9565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b03163314806125a25750336000908152600a602052604090205460ff165b806125bc5750336000908152600b602052604090205460ff165b6125fb576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b836001600160a01b031663836a01878484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015611b3557600080fd5b6001546001600160a01b0316331461269e576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6001600160a01b0382163014156126f8576040805162461bcd60e51b8152602060048201526019602482015278151a5b595b1bd8dace881a5b9d985b1a590817dd185c99d95d603a1b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c1c57600080fd5b6206978081565b6004546001600160a01b031681565b600b6020526000908152604090205460ff1681565b6001546001600160a01b031633148061279a5750336000908152600a602052604090205460ff165b6127d9576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600854819060ff16156128475760408051637c2eb9f760e01b81526001600482015290516001600160a01b03831691637c2eb9f791602480830192600092919082900301818387803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561288f57600080fd5b505afa1580156128a3573d6000803e3d6000fd5b505050506040513d60208110156128b957600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b1580156128fb57600080fd5b505afa15801561290f573d6000803e3d6000fd5b505050506040513d602081101561292557600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561296757600080fd5b505afa15801561297b573d6000803e3d6000fd5b505050506040513d602081101561299157600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b1580156129d357600080fd5b505afa1580156129e7573d6000803e3d6000fd5b505050506040513d60208110156129fd57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051600654604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612aae57600080fd5b505afa158015612ac2573d6000803e3d6000fd5b505050506040513d6020811015612ad857600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b158015612b1a57600080fd5b505afa158015612b2e573d6000803e3d6000fd5b505050506040513d6020811015612b4457600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d6020811015612bb057600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b158015611c1c57600080fd5b6001546001600160a01b0316331480612c505750336000908152600a602052604090205460ff165b80612c6a5750336000908152600b602052604090205460ff165b612ca9576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6006849055600754604080516320759c0160e11b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a481019290925260c4820185905260e48201849052821515610104830152516001600160a01b038c16916340eb38029161012480830192600092919082900301818387803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b5050505050505050505050505050565b6002546001600160a01b03163314612da5576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314612e14576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516972656465656d5573646760b01b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015260528083018590528351808403909101815260729092019092528051910120612e7581614f2d565b612e7e81614fd9565b6000846001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612eb957600080fd5b505afa158015612ecd573d6000803e3d6000fd5b505050506040513d6020811015612ee357600080fd5b5051604080516352f4877760e11b81523060048201526001602482015290519192506001600160a01b0387169163a5e90eee9160448082019260009290919082900301818387803b158015612f3757600080fd5b505af1158015612f4b573d6000803e3d6000fd5b5050604080516312b5ad0160e11b815230600482015290516001600160a01b038516935063256b5a029250602480830192600092919082900301818387803b158015612f9657600080fd5b505af1158015612faa573d6000803e3d6000fd5b5050604080516340c10f1960e01b81523060048201526024810187905290516001600160a01b03851693506340c10f199250604480830192600092919082900301818387803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb86856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561306b57600080fd5b505af115801561307f573d6000803e3d6000fd5b505050506040513d602081101561309557600080fd5b505060035460408051630711e61960e41b81526001600160a01b038781166004830152928316602482015290519187169163711e6190916044808201926020929091908290030181600087803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b505050506040513d602081101561311857600080fd5b5050604080516352f4877760e11b815230600482015260006024820181905291516001600160a01b0388169263a5e90eee926044808201939182900301818387803b15801561316657600080fd5b505af115801561317a573d6000803e3d6000fd5b50506040805163ceb68c2360e01b815230600482015290516001600160a01b038516935063ceb68c239250602480830192600092919082900301818387803b158015611ed157600080fd5b6001546001600160a01b03163314613212576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b1682840152825160348184030181526054909201909252805191012061326c81614f2d565b61327581614fd9565b826001600160a01b031663724e78da836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b03163314613311576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b61331a81614fd9565b50565b6001546001600160a01b0316331461336a576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6207a12081116133c1576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20696e76616c6964205f6d61784c657665726167650000604482015290519081900360640190fd5b816001600160a01b031663d3127e63826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b03163314613454576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516b1cd95d141c9a58d95199595960a21b6020808301919091526001600160601b0319606086811b8216602c85015285901b168284015282516034818403018152605490920190925280519101206134ae81614e89565b604080516001600160a01b0380861682528416602082015280820183905290517fb878dd4b5762f4118ad54995be907dd2bcd915d942e4ac75580fba9b4ee4727f9181900360600190a1505050565b6001546001600160a01b03163314806135255750336000908152600a602052604090205460ff165b8061353f5750336000908152600b602052604090205460ff165b61357e576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f5b91b7b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ce57600080fd5b505afa1580156135e2573d6000803e3d6000fd5b505050506040513d60208110156135f857600080fd5b505160048054604080516370a0823160e01b81526001600160a01b039283169381019390935251929350600092908416916370a08231916024808301926020929190829003018186803b15801561364e57600080fd5b505afa158015613662573d6000803e3d6000fd5b505050506040513d602081101561367857600080fd5b5051604080516312b5ad0160e11b815230600482015290519192506001600160a01b0384169163256b5a029160248082019260009290919082900301818387803b1580156136c557600080fd5b505af11580156136d9573d6000803e3d6000fd5b50505050808311156137685760006136f1848361507e565b60048054604080516340c10f1960e01b81526001600160a01b039283169381019390935260248301849052519293508516916340c10f199160448082019260009290919082900301818387803b15801561374a57600080fd5b505af115801561375e573d6000803e3d6000fd5b50505050506137e7565b6000613774828561507e565b6004805460408051632770a7eb60e21b81526001600160a01b03928316938101939093526024830184905251929350851691639dc29fac9160448082019260009290919082900301818387803b1580156137cd57600080fd5b505af11580156137e1573d6000803e3d6000fd5b50505050505b6040805163ceb68c2360e01b815230600482015290516001600160a01b0384169163ceb68c2391602480830192600092919082900301818387803b158015611d8857600080fd5b6001546001600160a01b0316331461387b576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b0316635a47a1a7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b60c881565b6001546001600160a01b03163314613915576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b64012a05f2008111613965576040805162461bcd60e51b8152602060048201526014602482015273496e76616c6964205f6d6178476173507269636560601b604482015290519081900360640190fd5b816001600160a01b031663d2fa635e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b03163314806139d35750336000908152600a602052604090205460ff165b613a12576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6008805460ff1916911515919091179055565b68327cb2734119d3b7a9601e1b81565b6001546001600160a01b03163314613a82576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e9092019092528051910120613ad781614e89565b604080516001600160a01b0380861682528416602082015280820183905290517f2701a94fd55a560e291f3c54d36580040670d6fde558a77a75d619e38139f7139181900360600190a1505050565b60075481565b6001546001600160a01b0316331480613b545750336000908152600a602052604090205460ff165b80613b6e5750336000908152600b602052604090205460ff165b613bad576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60005b82518110156112c857836001600160a01b031663d66b000d848381518110613bd457fe5b6020026020010151848481518110613be857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015613c3657600080fd5b505af1158015613c4a573d6000803e3d6000fd5b505060019092019150613bb09050565b6001546001600160a01b03163314613ca7576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b62069780811115613cfb576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb13ab33332b960391b604482015290519081900360640190fd5b6000548111613d3b5760405162461bcd60e51b815260040180806020018281038252602481526020018061543a6024913960400191505060405180910390fd5b600055565b6001546001600160a01b03163314613d8d576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b03166371089f4d826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b03163314613e29576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051631b5a5b9d60e21b6020808301919091526001600160601b0319606087811b8216602485015286901b166038830152604c80830185905283518084039091018152606c9092019092528051910120613e8481614f2d565b613e8d81614fd9565b6112c88484846150c7565b6001546001600160a01b0316331480613ec05750336000908152600a602052604090205460ff165b80613eda5750336000908152600b602052604090205460ff165b613f19576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b0316633fb8b32383836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d8857600080fd5b6003546001600160a01b031681565b6001546001600160a01b0316331480613fa75750336000908152600a602052604090205460ff165b613fe6576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b816001600160a01b0316637c2eb9f7826040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b158015611c1c57600080fd5b6001546001600160a01b0316331461407b576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314806140ce5750336000908152600a602052604090205460ff165b61410d576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600854819060ff16156141795760408051637c2eb9f760e01b815260006004820181905291516001600160a01b03841692637c2eb9f7926024808201939182900301818387803b15801561416057600080fd5b505af1158015614174573d6000803e3d6000fd5b505050505b806001600160a01b03166340eb3802826001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141c157600080fd5b505afa1580156141d5573d6000803e3d6000fd5b505050506040513d60208110156141eb57600080fd5b505160408051630875ab6160e11b815290516001600160a01b038616916310eb56c2916004808301926020929190829003018186803b15801561422d57600080fd5b505afa158015614241573d6000803e3d6000fd5b505050506040513d602081101561425757600080fd5b505160408051631351ecc160e21b815290516001600160a01b03871691634d47b304916004808301926020929190829003018186803b15801561429957600080fd5b505afa1580156142ad573d6000803e3d6000fd5b505050506040513d60208110156142c357600080fd5b50516040805163511791c960e11b815290516001600160a01b0388169163a22f2392916004808301926020929190829003018186803b15801561430557600080fd5b505afa158015614319573d6000803e3d6000fd5b505050506040513d602081101561432f57600080fd5b50516040805163df73a26760e01b815290516001600160a01b0389169163df73a267916004808301926020929190829003018186803b15801561437157600080fd5b505afa158015614385573d6000803e3d6000fd5b505050506040513d602081101561439b57600080fd5b5051600754604080516305d349a560e21b815290516001600160a01b038b169163174d2694916004808301926020929190829003018186803b158015612aae57600080fd5b6001546001600160a01b03163314806144085750336000908152600a602052604090205460ff165b806144225750336000908152600b602052604090205460ff165b614461576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6000869050806001600160a01b03166340eb38028787878787600754886001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b1580156144b657600080fd5b505afa1580156144ca573d6000803e3d6000fd5b505050506040513d60208110156144e057600080fd5b50516040805163d9ac422560e01b815290516001600160a01b038c169163d9ac4225916004808301926020929190829003018186803b15801561452257600080fd5b505afa158015614536573d6000803e3d6000fd5b505050506040513d602081101561454c57600080fd5b505160408051639f392eb360e01b815290516001600160a01b038d1691639f392eb3916004808301926020929190829003018186803b15801561458e57600080fd5b505afa1580156145a2573d6000803e3d6000fd5b505050506040513d60208110156145b857600080fd5b5051604080516001600160e01b031960e08d901b168152600481019a909a5260248a019890985260448901969096526064880194909452608487019290925260a486015260c485015260e484015215156101048301525161012480830192600092919082900301818387803b15801561463057600080fd5b505af1158015614644573d6000803e3d6000fd5b5050505050505050505050565b6001546001600160a01b0316331461469e576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd909201909252805191012061473381614e89565b604080516001600160a01b03808c1682528a166020820152808201899052606081018890526080810187905260a0810186905284151560c082015283151560e082015290517f3510e9d8245371c6c1061c33781ce16bd0eafa03cd3d0781865036520af4c743918190036101000190a1505050505050505050565b6001546001600160a01b031633146147fb576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f909201909252805191012061485981614e89565b604080516001600160a01b038087168252851660208201528082018490526060810183905290517f6af9d86ba7407a934e941ed8ae5f779369a88fe8ba2cd1c204185d6f8a8287fd9181900360800190a150505050565b6001546001600160a01b031633146148fd576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b826001600160a01b031663efa10a6e83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d8857600080fd5b6001546001600160a01b031633146149a1576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606087811b8216602785015286901b16603b830152604f80830185905283518084039091018152606f90920190925280519101206149ff81614f2d565b614a0881614fd9565b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015614a5f57600080fd5b505af1158015614a73573d6000803e3d6000fd5b505050506040513d6020811015611c3057600080fd5b6001546001600160a01b0316331480614ab15750336000908152600a602052604090205460ff165b614af0576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b600691909155600755565b60096020526000908152604090205481565b6001546001600160a01b03163314614b5a576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60408051727661756c74536574546f6b656e436f6e66696760681b6020808301919091526001600160601b031960608c811b821660338501528b901b166047830152605b8201899052607b8201889052609b820187905260bb820186905284151560f890811b60db840152841515901b60dc830152825160bd81840301815260dd9092019092528051910120614bef81614f2d565b614bf881614fd9565b60408051633c5a6e3560e01b81526001600160a01b038a81166004830152602482018a905260448201899052606482018890526084820187905285151560a483015284151560c48301529151918b1691633c5a6e359160e48082019260009290919082900301818387803b158015614c6f57600080fd5b505af1158015614c83573d6000803e3d6000fd5b50505050505050505050505050565b6001546001600160a01b03163314614cdf576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b1580156119f157600080fd5b6001546001600160a01b0316331480614d605750336000908152600a602052604090205460ff165b80614d7a5750336000908152600b602052604090205460ff165b614db9576040805162461bcd60e51b8152602060048201526013602482015260008051602061545e833981519152604482015290519081900360640190fd5b60005b8151811015614e6f57826001600160a01b031663f2555278838381518110614de057fe5b602090810291909101810151600154604080516001600160e01b031960e087901b1681526001600160a01b03938416600482015292909116602483015251604480830193928290030181600087803b158015614e3b57600080fd5b505af1158015614e4f573d6000803e3d6000fd5b505050506040513d6020811015614e6557600080fd5b5050600101614dbc565b505050565b60005481565b6001546001600160a01b031681565b60008181526009602052604090205415614ed45760405162461bcd60e51b81526004018080602001828103825260228152602001806153d16022913960400191505060405180910390fd5b600054614ee29042906152bd565b60008281526009602090815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b600081815260096020526040902054614f8d576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c65640000604482015290519081900360640190fd5b600081815260096020526040902054421161331a5760405162461bcd60e51b81526004018080602001828103825260248152602001806154166024913960400191505060405180910390fd5b600081815260096020526040902054615035576040805162461bcd60e51b81526020600482015260196024820152782a34b6b2b637b1b59d1034b73b30b634b2102fb0b1ba34b7b760391b604482015290519081900360640190fd5b600081815260096020908152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b60006150c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615315565b9392505050565b604080516355138f0d60e11b8152306004820152905184916001600160a01b0383169163aa271e1a916024808201926020929091908290030181600087803b15801561511257600080fd5b505af1158015615126573d6000803e3d6000fd5b505050506040513d602081101561513c57600080fd5b50516151a9576040805163cf456ae760e01b81523060048201526001602482015290516001600160a01b0383169163cf456ae791604480830192600092919082900301818387803b15801561519057600080fd5b505af11580156151a4573d6000803e3d6000fd5b505050505b806001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561520057600080fd5b505af1158015615214573d6000803e3d6000fd5b50505050600554846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561525457600080fd5b505afa158015615268573d6000803e3d6000fd5b505050506040513d602081101561527e57600080fd5b505111156112c85760405162461bcd60e51b815260040180806020018281038252602181526020018061547e6021913960400191505060405180910390fd5b6000828201838110156150c0576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600081848411156153a45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615369578181015183820152602001615351565b50505050905090810190601f1680156153965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe54696d656c6f636b3a20696e76616c6964205f66756e64696e6752617465466163746f7254696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c656454696d656c6f636b3a20746f6b656e206e6f74207965742077686974656c697374656454696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656454696d656c6f636b3a206275666665722063616e6e6f742062652064656372656173656454696d656c6f636b3a20666f7262696464656e0000000000000000000000000054696d656c6f636b3a206d6178546f6b656e537570706c7920657863656564656454696d656c6f636b3a20696e76616c6964205f737461626c6546756e64696e6752617465466163746f72a164736f6c634300060c000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000904a08be742bd5bc6ad10f0924f06b0b23d1175c000000000000000000000000000000000000000000000000000000000001518000000000000000000000000008b6e4578ddc23c7f802be4f765cd20adf95c06100000000000000000000000008b6e4578ddc23c7f802be4f765cd20adf95c061000000000000000000000000bea6c7d964ae3ae7234b383e2a86752f9568eadb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _admin (address): 0x904A08Be742bD5BC6ad10f0924F06b0B23d1175C
Arg [1] : _buffer (uint256): 86400
Arg [2] : _tokenManager (address): 0x08b6E4578DdC23C7f802Be4F765Cd20ADf95c061
Arg [3] : _mintReceiver (address): 0x08b6E4578DdC23C7f802Be4F765Cd20ADf95c061
Arg [4] : _alpManager (address): 0xbEa6C7d964Ae3Ae7234b383e2A86752F9568eadb
Arg [5] : _maxTokenSupply (uint256): 0
Arg [6] : _marginFeeBasisPoints (uint256): 10
Arg [7] : _maxMarginFeeBasisPoints (uint256): 500
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000904a08be742bd5bc6ad10f0924f06b0b23d1175c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [2] : 00000000000000000000000008b6e4578ddc23c7f802be4f765cd20adf95c061
Arg [3] : 00000000000000000000000008b6e4578ddc23c7f802be4f765cd20adf95c061
Arg [4] : 000000000000000000000000bea6c7d964ae3ae7234b383e2a86752f9568eadb
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [7] : 00000000000000000000000000000000000000000000000000000000000001f4
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.