ETH Price: $3,347.87 (-0.87%)
Gas: 6.45 Gwei

Token

SpeedXStable (SXST)
 

Overview

Max Total Supply

1,953,806.684008112 SXST

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
24.859555654 SXST

Value
$0.00
0x62b85f0dd05b3b0ee8ec0d4f3787486527ebddb6
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SpeedXStable

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library Constants {
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _launchSupply = 100000 * 10**9;
    uint256 private constant _largeTotal = (MAX - (MAX % _launchSupply));

    uint256 private constant _baseExpansionFactor = 100;
    uint256 private constant _baseContractionFactor = 100;
    uint256 private constant _baseUtilityFee = 50;
    uint256 private constant _baseContractionCap = 1000;

    uint256 private constant _stabilizerFee = 250;
    uint256 private constant _stabilizationLowerBound = 50;
    uint256 private constant _stabilizationLowerReset = 75;
    uint256 private constant _stabilizationUpperBound = 150;
    uint256 private constant _stabilizationUpperReset = 125;
    uint256 private constant _stabilizePercent = 10;

    uint256 private constant _treasuryFee = 250;

    uint256 private constant _presaleMinIndividualCap = 1 ether;
    uint256 private constant _presaleMaxIndividualCap = 3 ether;
    uint256 private constant _presaleCap = 55000 * 10**9;
    uint256 private constant _maxPresaleGas = 200000000000;

    uint256 private constant _epochLength = 30 minutes;

    uint256 private constant _liquidityReward = 5 * 10**9;
    uint256 private constant _minForLiquidity = 20 * 10**9;
    uint256 private constant _minForCallerLiquidity = 20 * 10**9;

    address private constant _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address private constant _factoryAddress = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
    address payable private constant _deployerAddress = 0xc540DA538385ee0aa19dBDfF372edDB9Bb6F47fA;
    address private constant _treasuryAddress = 0xc540DA538385ee0aa19dBDfF372edDB9Bb6F47fA;

    uint256 private constant _presaleRate = 27500;
    uint256 private constant _listingRate = 23333;

    string private constant _name = "SpeedXStable";
    string private constant _symbol = "SXST";
    uint8 private constant _decimals = 9;

    /****** Getters *******/
    function getPresaleRate() internal pure returns (uint256) {
        return _presaleRate;
    }
     function getListingRate() internal pure returns (uint256) {
        return _listingRate;
    }
    function getLaunchSupply() internal pure returns (uint256) {
        return _launchSupply;
    }
    function getLargeTotal() internal pure returns (uint256) {
        return _largeTotal;
    }
    function getPresaleCap() internal pure returns (uint256) {
        return _presaleCap;
    }
    function getPresaleMinIndividualCap() internal pure returns (uint256) {
        return _presaleMinIndividualCap;
    }
    function getPresaleMaxIndividualCap() internal pure returns (uint256) {
        return _presaleMaxIndividualCap;
    }
    function getMaxPresaleGas() internal pure returns (uint256) {
        return _maxPresaleGas;
    }
    function getBaseExpansionFactor() internal pure returns (uint256) {
        return _baseExpansionFactor;
    }
    function getBaseContractionFactor() internal pure returns (uint256) {
        return _baseContractionFactor;
    }
    function getBaseContractionCap() internal pure returns (uint256) {
        return _baseContractionCap;
    }
    function getBaseUtilityFee() internal pure returns (uint256) {
        return _baseUtilityFee;
    }
    function getStabilizerFee() internal pure returns (uint256) {
        return _stabilizerFee;
    }
    function getStabilizationLowerBound() internal pure returns (uint256) {
        return _stabilizationLowerBound;
    }
    function getStabilizationLowerReset() internal pure returns (uint256) {
        return _stabilizationLowerReset;
    }
    function getStabilizationUpperBound() internal pure returns (uint256) {
        return _stabilizationUpperBound;
    }
    function getStabilizationUpperReset() internal pure returns (uint256) {
        return _stabilizationUpperReset;
    }
    function getStabilizePercent() internal pure returns (uint256) {
        return _stabilizePercent;
    }
    function getTreasuryFee() internal pure returns (uint256) {
        return _treasuryFee;
    }
    function getEpochLength() internal pure returns (uint256) {
        return _epochLength;
    }
    function getLiquidityReward() internal pure returns (uint256) {
        return _liquidityReward;
    }
    function getMinForLiquidity() internal pure returns (uint256) {
        return _minForLiquidity;
    }
    function getMinForCallerLiquidity() internal pure returns (uint256) {
        return _minForCallerLiquidity;
    }
    function getRouterAdd() internal pure returns (address) {
        return _routerAddress;
    }
    function getFactoryAdd() internal pure returns (address) {
        return _factoryAddress;
    }
    function getDeployerAdd() internal pure returns (address payable) {
        return _deployerAddress;
    }
    function getTreasuryAdd() internal pure returns (address) {
        return _treasuryAddress;
    }
    function getName() internal pure returns (string memory)  {
        return _name;
    }
    function getSymbol() internal pure returns (string memory) {
        return _symbol;
    }
    function getDecimals() internal pure returns (uint8) {
        return _decimals;
    }
}
contract State {

    mapping (address => uint256) _largeBalances;
    mapping (address => mapping (address => uint256)) _allowances;

    // Supported pools and data for measuring mint & burn factors
    struct PoolCounter {
        address pairToken;
        uint256 tokenBalance;
        uint256 pairTokenBalance;
        uint256 lpBalance;
        uint256 startTokenBalance;
        uint256 startPairTokenBalance;
    }
    address[] _supportedPools;
    mapping (address => PoolCounter) _poolCounters;
    mapping (address => bool) _isSupportedPool;
    address _mainPool;

    uint256 _currentEpoch;
    
    //Creating locked balances
    struct LockBox {
        address beneficiary;
        uint256 lockedBalance;
        uint256 unlockTime;
        bool locked;
    }
    LockBox[] _lockBoxes;
    mapping(address => uint256) _lockedBalance;
    mapping(address => bool) _hasLockedBalance;
    uint256 _totalLockedBalance;
 
    uint256 _largeTotal;
    uint256 _totalSupply;

    address _liquidityReserve;
    address _stabilizer;

    bool _presaleDone;
    address _presaleCon;
    
    bool _paused;
    
    bool _taxLess;
    mapping(address=>bool) _isTaxlessSetter;
}
contract Getters is State {
    using SafeMath for uint256;
    using Address for address;

    function getLargeBalances(address account) public view returns (uint256) {
        return _largeBalances[account];
    }
    function getAllowances(address account, address spender) public view returns (uint256) {
        return _allowances[account][spender];
    } 
    function getSupportedPools(uint256 index) public view returns (address) {
        return _supportedPools[index];
    }
    function getPoolCounters(address pool) public view returns (address, uint256, uint256, uint256, uint256, uint256) {
        PoolCounter memory pc = _poolCounters[pool];
        return (pc.pairToken, pc.tokenBalance, pc.pairTokenBalance, pc.lpBalance, pc.startTokenBalance, pc.startPairTokenBalance);
    }
    function isSupportedPool(address pool) public view returns (bool) {
        return _isSupportedPool[pool];
    }
    function mainPool() public view returns (address) {
        return _mainPool;
    }
    function getCurrentEpoch() public view returns (uint256) {
        return _currentEpoch;
    }
    function getLockBoxes(uint256 box) public view returns (address, uint256, uint256, bool) {
        LockBox memory lb = _lockBoxes[box];
        return (lb.beneficiary, lb.lockedBalance, lb.unlockTime, lb.locked);
    }
    function getLockedBalance(address account) public view returns (uint256) {
        return _lockedBalance[account];
    }
    function hasLockedBalance(address account) public view returns (bool) {
        return _hasLockedBalance[account];
    }
    function getTotalLockedBalance() public view returns (uint256) {
        return _totalLockedBalance;
    }
    function getLargeTotal() public view returns (uint256) {
        return _largeTotal;
    }
    function getTotalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function getLiquidityReserve() public view returns (address) {
        return _liquidityReserve;
    }
    function getStabilizer() public view returns (address) {
        return _stabilizer;
    }
    function isPresaleDone() public view returns (bool) {
        return _presaleDone;
    }
    function getPresaleAddress() public view returns (address) {
        return _presaleCon;
    }
    function isPaused() public view returns (bool) {
        return _paused;
    }
    function isTaxLess() public view returns (bool) {
        return _taxLess;
    }
    function isTaxlessSetter(address account) public view returns (bool) {
        return _isTaxlessSetter[account];
    }
    function getUniswapRouter() public view returns (IUniswapV2Router02) {
        return IUniswapV2Router02(Constants.getRouterAdd());
    }
    function getUniswapFactory() public view returns (IUniswapV2Factory) {
        return IUniswapV2Factory(Constants.getFactoryAdd());
    }
    function getFactor() public view returns(uint256) {
        if (_presaleDone) {
            return _largeTotal.div(_totalSupply);
        } else {
            return _largeTotal.div(Constants.getLaunchSupply());
        }
    }
    function getUpdatedPoolCounters(address pool, address pairToken) public view returns (uint256, uint256, uint256) {
        uint256 lpBalance = IERC20(pool).totalSupply();
        uint256 tokenBalance = IERC20(address(this)).balanceOf(pool);
        uint256 pairTokenBalance = IERC20(address(pairToken)).balanceOf(pool);
        return (tokenBalance, pairTokenBalance, lpBalance);
    }
    function getMintValue(address sender, uint256 amount) internal view returns(uint256, uint256, uint256) {
        uint256 expansionR = (_poolCounters[sender].pairTokenBalance).mul(_poolCounters[sender].startTokenBalance).mul(100).div(_poolCounters[sender].startPairTokenBalance).div(_poolCounters[sender].tokenBalance);
        uint256 mintAmount;
        if (expansionR > (Constants.getBaseExpansionFactor()).add(10000).div(100)) {
            uint256 mintFactor = expansionR.mul(expansionR);
            mintAmount = amount.mul(mintFactor.sub(10000)).div(10000);
        } else {
            mintAmount = amount.mul(Constants.getBaseExpansionFactor()).div(10000);
        }
        return (mintAmount.mul(Constants.getStabilizerFee()).div(10000),mintAmount.mul(Constants.getTreasuryFee()).div(10000),mintAmount);
    }

    function getBurnValues(address recipient, uint256 amount) internal view returns(uint256, uint256) {
        uint256 currentFactor = getFactor();
        uint256 contractionR;
        if (isSupportedPool(recipient)) {
            contractionR = (_poolCounters[recipient].tokenBalance).mul(_poolCounters[recipient].startPairTokenBalance).mul(100).div(_poolCounters[recipient].pairTokenBalance).div(_poolCounters[recipient].startTokenBalance);
        } else {
            contractionR = (_poolCounters[_mainPool].tokenBalance).mul(_poolCounters[_mainPool].startPairTokenBalance).mul(100).div(_poolCounters[_mainPool].pairTokenBalance).div(_poolCounters[_mainPool].startTokenBalance);
        }
        uint256 burnAmount;
        if (contractionR > (Constants.getBaseContractionFactor().add(10000)).div(100)) {
            uint256 burnFactor = contractionR.mul(contractionR);
            burnAmount = amount.mul(burnFactor.sub(10000)).div(10000);
            if (burnAmount > amount.mul(Constants.getBaseContractionCap()).div(10000)) burnAmount = amount.mul(Constants.getBaseContractionCap()).div(10000);
        } else {
            burnAmount = amount.mul(Constants.getBaseContractionFactor()).div(10000);
        }
        return (burnAmount, burnAmount.mul(currentFactor));
    }

    function getUtilityFee(uint256 amount) internal view returns(uint256, uint256) {
        uint256 currentFactor = getFactor();
        uint256 utilityFee = amount.mul(Constants.getBaseUtilityFee()).div(10000);
        return (utilityFee, utilityFee.mul(currentFactor));
    }
    function getMintRate(address pool) external view returns (uint256) {
        uint256 expansionR = (_poolCounters[pool].pairTokenBalance).mul(_poolCounters[pool].startTokenBalance).mul(100).div(_poolCounters[pool].startPairTokenBalance).div(_poolCounters[pool].tokenBalance);
        if (expansionR > (Constants.getBaseExpansionFactor()).add(10000).div(100)) {
            uint256 mintFactor = expansionR.mul(expansionR);
            return mintFactor.sub(10000);
        } else {
            return Constants.getBaseExpansionFactor();
        }
    }
    function getBurnRate(address pool) external view returns (uint256) {
        uint256 contractionR = (_poolCounters[pool].tokenBalance).mul(_poolCounters[pool].startPairTokenBalance).mul(100).div(_poolCounters[pool].pairTokenBalance).div(_poolCounters[pool].startTokenBalance);
        uint256 burnRate;
        if (contractionR > (Constants.getBaseContractionFactor().add(10000)).div(100)) {
            uint256 burnFactor = contractionR.mul(contractionR);
            burnRate = burnFactor.sub(10000);
            if (burnRate > Constants.getBaseContractionCap()) {
                return Constants.getBaseContractionCap();
            }
            return burnRate;

        } else {
            return Constants.getBaseContractionFactor();
        }
    }
}
contract Setters is State, Getters {
    function updatePresaleAddress(address presaleAddress) internal {
        _presaleCon = presaleAddress;
    }
    function setAllowances(address owner, address spender, uint256 amount) internal {
        _allowances[owner][spender] = amount;
    }
    function addToAccount(address account, uint256 amount) internal {
        uint256 currentFactor = getFactor();
        uint256 largeAmount = amount.mul(currentFactor);
        _largeBalances[account] = _largeBalances[account].add(largeAmount);
        _totalSupply = _totalSupply.add(amount);
    }
    function addToAll(uint256 amount) internal {
        _totalSupply = _totalSupply.add(amount);
    }
    function initializeEpoch() internal {
        _currentEpoch = now;
    }
    function updateEpoch() internal {
        initializeEpoch();
        for (uint256 i=0; i<_supportedPools.length; i++) {
            _poolCounters[_supportedPools[i]].startTokenBalance = _poolCounters[_supportedPools[i]].tokenBalance;
            _poolCounters[_supportedPools[i]].startPairTokenBalance = _poolCounters[_supportedPools[i]].pairTokenBalance;
        }
    }
    function initializeLargeTotal() internal {
        _largeTotal = Constants.getLargeTotal();
    }
    function syncPair(address pool) internal returns(bool) {
        (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, _poolCounters[pool].pairToken);
        bool lpBurn = lpBalance < _poolCounters[pool].lpBalance;
        _poolCounters[pool].lpBalance = lpBalance;
        _poolCounters[pool].tokenBalance = tokenBalance;
        _poolCounters[pool].pairTokenBalance = pairTokenBalance;
        return (lpBurn);
    }
    function silentSyncPair(address pool) public {
        (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, _poolCounters[pool].pairToken);
        _poolCounters[pool].lpBalance = lpBalance;
        _poolCounters[pool].tokenBalance = tokenBalance;
        _poolCounters[pool].pairTokenBalance = pairTokenBalance;
    }
    function addSupportedPool(address pool, address pairToken) internal {
        require(!isSupportedPool(pool),"This pool is already supported");
        _isSupportedPool[pool] = true;
        _supportedPools.push(pool);
        (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, pairToken);
        _poolCounters[pool] = PoolCounter(pairToken, tokenBalance, pairTokenBalance, lpBalance, tokenBalance, pairTokenBalance);
    }
    function removeSupportedPool(address pool) internal {
        require(isSupportedPool(pool), "This pool is currently not supported");
        for (uint256 i = 0; i < _supportedPools.length; i++) {
            if (_supportedPools[i] == pool) {
                _supportedPools[i] = _supportedPools[_supportedPools.length - 1];
                _isSupportedPool[pool] = false;
                delete _poolCounters[pool];
                _supportedPools.pop();
                break;
            }
        }
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract Stabilizer {
    constructor() public {

    }
}
contract SpeedXStable is Setters, Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    modifier onlyTaxless {
        require(isTaxlessSetter(_msgSender()),"not taxless");
        _;
    }
    modifier onlyPresale {
        require(_msgSender()==getPresaleAddress(),"not presale");
        require(!isPresaleDone(), "Presale over");
        _;
    }
    modifier pausable {
        require(!isPaused(), "Paused");
        _;
    }
    modifier taxlessTx {
        _taxLess = true;
        _;
        _taxLess = false;
    }

    constructor() public {
        updateEpoch();
        initializeLargeTotal();
        setStabilizer(address(new Stabilizer()));
    }

    function name() public view returns (string memory) {
        return Constants.getName();
    }
    
    function symbol() public view returns (string memory) {
        return Constants.getSymbol();
    }
    
    function decimals() public view returns (uint8) {
        return Constants.getDecimals();
    }
    
    function totalSupply() public view override returns (uint256) {
        return getTotalSupply();
    }
    
    function circulatingSupply() public view returns (uint256) {
        uint256 currentFactor = getFactor();
        return getTotalSupply().sub(getTotalLockedBalance().div(currentFactor)).sub(balanceOf(address(this))).sub(balanceOf(getStabilizer()));
    }
    
    function balanceOf(address account) public view override returns (uint256) {
        uint256 currentFactor = getFactor();
        if (hasLockedBalance(account)) return (getLargeBalances(account).add(getLockedBalance(account)).div(currentFactor));
        return getLargeBalances(account).div(currentFactor);
    }
    
    function unlockedBalanceOf(address account) public view returns (uint256) {
        uint256 currentFactor = getFactor();
        return getLargeBalances(account).div(currentFactor); 
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return getAllowances(owner,spender);
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), getAllowances(sender,_msgSender()).sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, getAllowances(_msgSender(),spender).add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, getAllowances(_msgSender(),spender).sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function mint(address to, uint256 amount) public onlyPresale {
        addToAccount(to,amount);
        emit Transfer(address(0),to,amount);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        setAllowances(owner, spender, amount);
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private pausable {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Amount must be greater than zero");
        require(amount <= balanceOf(sender),"Amount exceeds balance");
        require(amount <= unlockedBalanceOf(sender),"Amount exceeds unlocked balance");
        require(isPresaleDone(),"Presale yet to close");
        if (now > getCurrentEpoch().add(Constants.getEpochLength())) updateEpoch();
        uint256 currentFactor = getFactor();
        uint256 largeAmount = amount.mul(currentFactor);
        uint256 txType;
        if (isTaxLess()) {
            txType = 3;
        } else {
            bool lpBurn;
            if (isSupportedPool(sender)) {
                lpBurn = syncPair(sender);
            } else if (isSupportedPool(recipient)){
                silentSyncPair(recipient);
            } else {
                silentSyncPair(_mainPool);
            }
            txType = _getTxType(sender, recipient, lpBurn);
        }
        // Buy Transaction from supported pools - requires mint, no utility fee
        if (txType == 1) {
            (uint256 stabilizerMint, uint256 treasuryMint, uint256 totalMint) = getMintValue(sender, amount);
            // uint256 mintSize = amount.div(100);
            _largeBalances[sender] = _largeBalances[sender].sub(largeAmount);
            _largeBalances[recipient] = _largeBalances[recipient].add(largeAmount);
            _largeBalances[getStabilizer()] = _largeBalances[getStabilizer()].add(stabilizerMint.mul(currentFactor));
            _largeBalances[Constants.getTreasuryAdd()] = _largeBalances[Constants.getTreasuryAdd()].add(treasuryMint.mul(currentFactor));
            _totalSupply = _totalSupply.add(totalMint);
            emit Transfer(sender, recipient, amount);
            emit Transfer(address(0),getStabilizer(),stabilizerMint);
            emit Transfer(address(0),Constants.getTreasuryAdd(),treasuryMint);
        }
        // Sells to supported pools or unsupported transfer - requires exit burn and utility fee
        else if (txType == 2) {
            (uint256 burnSize, uint256 largeBurnSize) = getBurnValues(recipient, amount);
            (uint256 utilityFee, uint256 largeUtilityFee) = getUtilityFee(amount);
            uint256 actualTransferAmount = amount.sub(burnSize).sub(utilityFee);
            uint256 largeTransferAmount = actualTransferAmount.mul(currentFactor);
            _largeBalances[sender] = _largeBalances[sender].sub(largeAmount);
            _largeBalances[recipient] = _largeBalances[recipient].add(largeTransferAmount);
            _largeBalances[_liquidityReserve] = _largeBalances[_liquidityReserve].add(largeUtilityFee);
            _totalSupply = _totalSupply.sub(burnSize);
            _largeTotal = _largeTotal.sub(largeBurnSize);
            emit Transfer(sender, recipient, actualTransferAmount);
            emit Transfer(sender, address(0), burnSize);
            emit Transfer(sender, _liquidityReserve, utilityFee);
        } 
        // Add Liquidity via interface or Remove Liquidity Transaction to supported pools - no fee of any sort
        else if (txType == 3) {
            _largeBalances[sender] = _largeBalances[sender].sub(largeAmount);
            _largeBalances[recipient] = _largeBalances[recipient].add(largeAmount);
            emit Transfer(sender, recipient, amount);
        }
    }

    function _getTxType(address sender, address recipient, bool lpBurn) private returns(uint256) {
        uint256 txType = 2;
        if (isSupportedPool(sender)) {
            if (lpBurn) {
                txType = 3;
            } else {
                txType = 1;
            }
        } else if (sender == Constants.getRouterAdd()) {
            txType = 3;
        }
        return txType;
    }

    function setPresale(address presaleAdd) external onlyOwner() {
        require(!isPresaleDone(), "Presale is already completed");
        updatePresaleAddress(presaleAdd);
    }

    function setPresaleDone() public payable onlyPresale {
        require(totalSupply() <= Constants.getLaunchSupply(), "Total supply is already minted");
        _mintRemaining();
        _presaleDone = true;
        _createEthPool();
    }

    function _mintRemaining() private {
        require(!isPresaleDone(), "Cannot mint post presale");
        addToAccount(Constants.getDeployerAdd(), 10000 * 10**9);
        Constants.getDeployerAdd().transfer(address(this).balance.div(4));
        uint256 toMint = Constants.getLaunchSupply().sub(totalSupply());
        uint256 tokensToAdd = address(this).balance.div(10**11).mul(Constants.getListingRate());
        if(toMint > tokensToAdd) {
            addToAccount(address(0),toMint.sub(tokensToAdd));
            emit Transfer(address(0),address(0),toMint.sub(tokensToAdd));
        }
        addToAccount(address(this), tokensToAdd);
        emit Transfer(address(0),Constants.getDeployerAdd(),10000 * 10**9);
        emit Transfer(address(0),address(this),tokensToAdd);
    }

    function mintLockedTranche(address account, uint256 unlockTime, uint256 amount) external onlyOwner() {
        require(!isPresaleDone(), "Cannot mint post presale");
        uint256 currentFactor = getFactor();
        uint256 largeAmount = amount.mul(currentFactor);
        _lockBoxes.push(LockBox(account, largeAmount, unlockTime, true));
        _lockedBalance[account] = _lockedBalance[account].add(largeAmount);
        _hasLockedBalance[account] = true;
        _totalLockedBalance = _totalLockedBalance.add(largeAmount);
        _totalSupply = _totalSupply.add(amount);
        emit Transfer(address(0),account,amount);
    }
    
    function mintUnlockedTranche(address account, uint256 amount) external onlyOwner() {
        require(!isPresaleDone(), "Cannot mint post presale");
        addToAccount(account, amount);
        emit Transfer(address(0),account,amount);
    }

    function unlockTranche(uint256 tranche) external {
        require(hasLockedBalance(_msgSender()),"Caller has no locked balance");
        (address beneficiary, uint256 balance, uint256 unlockTime, bool locked) = getLockBoxes(tranche);
        require(unlockTime <= now,"This tranche cannot be unlocked yet");
        require(beneficiary == _msgSender(),"You are not the owner of this tranche");
        require(locked ==  true, "This tranche has already been unlocked");
        _totalLockedBalance = _totalLockedBalance.sub(balance);
        _largeBalances[_msgSender()] = _largeBalances[_msgSender()].add(balance);
        _lockedBalance[_msgSender()] = _lockedBalance[_msgSender()].sub(balance);
        if (_lockedBalance[_msgSender()] <= 0) _hasLockedBalance[_msgSender()] = false;
        _lockBoxes[tranche].lockedBalance = 0;
        _lockBoxes[tranche].locked = false;
    }

    function reassignTranche(uint256 tranche, address beneficiary) external onlyOwner() {
        (address oldBeneficiary, uint256 balance, uint256 unlockTime, bool locked) = getLockBoxes(tranche);
        require(locked == true, "This tranche has already been unlocked");
        require(unlockTime > now,"This tranche has already been vested");
        _lockedBalance[oldBeneficiary] = _lockedBalance[oldBeneficiary].sub(balance);
        _lockedBalance[beneficiary] = _lockedBalance[beneficiary].add(balance);
        if (_lockedBalance[oldBeneficiary] == 0) _hasLockedBalance[oldBeneficiary] = false;
        _hasLockedBalance[beneficiary] = true; 
        _lockBoxes[tranche].beneficiary = beneficiary;
        uint256 currentFactor = getFactor();
        emit Transfer(oldBeneficiary,beneficiary,balance.div(currentFactor));
    }

    function _createEthPool() private taxlessTx {
        IUniswapV2Router02 uniswapRouterV2 = getUniswapRouter();
        IUniswapV2Factory uniswapFactory = getUniswapFactory();
        address tokenUniswapPair;
        if (uniswapFactory.getPair(address(uniswapRouterV2.WETH()), address(this)) == address(0)) {
            tokenUniswapPair = uniswapFactory.createPair(
            address(uniswapRouterV2.WETH()), address(this));
        } else {
            tokenUniswapPair = uniswapFactory.getPair(address(this),uniswapRouterV2.WETH());
        }
        uint256 tokensToAdd = balanceOf(address(this));        
        _approve(address(this), 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, tokensToAdd);
        uniswapRouterV2.addLiquidityETH{value: address(this).balance}(address(this),
           tokensToAdd, 0, 0, Constants.getDeployerAdd(), block.timestamp);
        addSupportedPool(tokenUniswapPair, address(uniswapRouterV2.WETH()));
        _mainPool = tokenUniswapPair;
    }

    function createTokenPool(address pairToken, uint256 amount) external onlyOwner() taxlessTx {
        IUniswapV2Router02 uniswapRouterV2 = getUniswapRouter();
        IUniswapV2Factory uniswapFactory = getUniswapFactory();
        address tokenUniswapPair;
        if (uniswapFactory.getPair(pairToken, address(this)) == address(0)) {
            tokenUniswapPair = uniswapFactory.createPair(
            pairToken, address(this));
        } else {
            tokenUniswapPair = uniswapFactory.getPair(pairToken,address(this));
        }
        require(uniswapFactory.getPair(pairToken,address(uniswapRouterV2.WETH())) != address(0), "Eth pairing does not exist");
        require(balanceOf(address(this)) >= amount, "Amount exceeds the token balance");
        uint256 toConvert = amount.div(2);
        uint256 toAdd = amount.sub(toConvert);
        uint256 initialBalance = IERC20(pairToken).balanceOf(address(this));
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapRouterV2.WETH();
        path[2] = pairToken;
        _approve(address(this), address(uniswapRouterV2), toConvert);
        uniswapRouterV2.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            toConvert, 0, path, address(this), block.timestamp);
        uint256 newBalance = IERC20(pairToken).balanceOf(address(this)).sub(initialBalance);
        _approve(address(this), address(uniswapRouterV2), toAdd);
        IERC20(pairToken).approve(address(uniswapRouterV2), newBalance);
        uniswapRouterV2.addLiquidity(address(this),pairToken,toAdd,newBalance,0,0,address(this),block.timestamp);
        addSupportedPool(tokenUniswapPair, pairToken);
    }

    function addNewSupportedPool(address pool, address pairToken) external onlyOwner() {
        addSupportedPool(pool, pairToken);
    }

    function removeOldSupportedPool(address pool) external onlyOwner() {
        removeSupportedPool(pool);
    }

    function setTaxlessSetter(address cont) external onlyOwner() {
        require(!isTaxlessSetter(cont),"already setter");
        _isTaxlessSetter[cont] = true;
    }

    function setTaxless(bool flag) public onlyTaxless {
        _taxLess = flag;
    }

    function removeTaxlessSetter(address cont) external onlyOwner() {
        require(isTaxlessSetter(cont),"not setter");
        _isTaxlessSetter[cont] = false;
    }

    function setLiquidityReserve(address reserve) external onlyOwner() {
        require(Address.isContract(reserve),"Need a contract");
        _isTaxlessSetter[_liquidityReserve] = false;
        uint256 oldBalance = balanceOf(_liquidityReserve);
        if (oldBalance > 0) {
            _transfer(_liquidityReserve, reserve, oldBalance);
            emit Transfer(_liquidityReserve, reserve, oldBalance);
        }
        _liquidityReserve = reserve;
        _isTaxlessSetter[reserve] = true;
    }

    function setStabilizer(address reserve) public onlyOwner() taxlessTx {
        require(Address.isContract(reserve),"Need a contract");
        _isTaxlessSetter[_stabilizer] = false;
        uint256 oldBalance = balanceOf(_stabilizer);
        if (oldBalance > 0) {
            _transfer(_stabilizer, reserve, oldBalance);
            emit Transfer(_stabilizer, reserve, oldBalance);
        }
        _stabilizer = reserve;
        _isTaxlessSetter[reserve] = true;
    }
    
    function pauseContract(bool flag) external onlyOwner() {
        _paused = flag;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"addNewSupportedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createTokenPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"getAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLargeBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLargeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReserve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"box","type":"uint256"}],"name":"getLockBoxes","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getMintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCounters","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStabilizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSupportedPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"getUpdatedPoolCounters","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"hasLockedBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isSupportedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxLess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxlessSetter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintLockedTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintUnlockedTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tranche","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"reassignTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"removeOldSupportedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cont","type":"address"}],"name":"removeTaxlessSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"setLiquidityReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAdd","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPresaleDone","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"setStabilizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cont","type":"address"}],"name":"setTaxlessSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"silentSyncPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tranche","type":"uint256"}],"name":"unlockTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060006200001e620000bc565b601180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076620000c1565b6200008062000206565b620000b66040516200009290620015e8565b604051809103906000f080158015620000af573d6000803e3d6000fd5b5062000220565b620018d9565b335b90565b620000cb62000386565b60005b60025481101562000203576003600060028381548110620000eb57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106200013f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060040191909155600280546003929190849081106200017e57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110620001d257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101620000ce565b50565b6200021b6200038c60201b620027941760201c565b600b55565b6200022a620000bc565b6011546001600160a01b03908116911614620002635760405162461bcd60e51b81526004016200025a90620017f6565b60405180910390fd5b600f8054600160a81b60ff60a81b199091161790556200028f8162000397602090811b6200279f17901c565b620002ae5760405162461bcd60e51b81526004016200025a90620018a7565b600e80546001600160a01b039081166000908152601060205260408120805460ff191690559154620002e19116620003a1565b905080156200033e57600e5462000303906001600160a01b0316838362000428565b600e546040516001600160a01b038085169216906000805160206200630f8339815191529062000335908590620018d0565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b42600655565b6507326b47ffff1990565b803b15155b919050565b600080620003ae62000c06565b9050620003bb8362000c72565b1562000411576200040881620003f4620003d58662000c90565b620003e08762000cab565b62000cc660201b620027a51790919060201c565b62000cf760201b620027ca1790919060201c565b9150506200039c565b6200042181620003f48562000cab565b9392505050565b6200043262000d41565b15620004525760405162461bcd60e51b81526004016200025a90620016f2565b6001600160a01b0383166200047b5760405162461bcd60e51b81526004016200025a9062001862565b6001600160a01b038216620004a45760405162461bcd60e51b81526004016200025a90620016af565b60008111620004c75760405162461bcd60e51b81526004016200025a9062001749565b620004d283620003a1565b811115620004f45760405162461bcd60e51b81526004016200025a9062001678565b620004ff8362000d51565b811115620005215760405162461bcd60e51b81526004016200025a906200182b565b6200052b62000d70565b6200054a5760405162461bcd60e51b81526004016200025a906200177e565b6200056d6200056362000d8060201b6200280c1760201c565b620003e062000d86565b4211156200057f576200057f620000c1565b60006200058b62000c06565b90506000620005a9828462000d8c60201b620028121790919060201c565b90506000620005b762000dcc565b15620005c65750600362000636565b6000620005d38762000ddc565b15620005ec57620005e48762000dfa565b905062000625565b620005f78662000ddc565b156200060e57620006088662000e67565b62000625565b60055462000625906001600160a01b031662000e67565b6200063287878362000ece565b9150505b8060011415620008e4576000808062000650898862000f38565b6001600160a01b038c1660009081526020818152604090912054939650919450925062000689919087906200284c620010ec821b17901c565b6001600160a01b03808b1660009081526020818152604080832094909455918b1681529190912054620006c7918790620027a562000cc6821b17901c565b6001600160a01b0389166000908152602081815260409091209190915562000743906200070190859089906200281262000d8c821b17901c565b6000806200070e62001136565b6001600160a01b03166001600160a01b031681526020019081526020016000205462000cc660201b620027a51790919060201c565b6000806200075062001136565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550620007aa62000792878462000d8c60201b620028121790919060201c565b6000806200070e6200114560201b6200288e1760201c565b600080620007c26200114560201b6200288e1760201c565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506200080281600c5462000cc660201b620027a51790919060201c565b600c81905550876001600160a01b0316896001600160a01b03166000805160206200630f833981519152896040516200083c9190620018d0565b60405180910390a36200084e62001136565b6001600160a01b031660006001600160a01b03166000805160206200630f83398151915285604051620008829190620018d0565b60405180910390a36200089f6200114560201b6200288e1760201c565b6001600160a01b031660006001600160a01b03166000805160206200630f83398151915284604051620008d39190620018d0565b60405180910390a350505062000bfe565b806002141562000b3a57600080620008fd87876200115d565b9092509050600080620009108862001349565b915091506000620009498362000935878c620010ec60201b6200284c1790919060201c565b620010ec60201b6200284c1790919060201c565b9050600062000967898362000d8c60201b620028121790919060201c565b6001600160a01b038d16600090815260208181526040909120549192506200099b91908a906200284c620010ec821b17901c565b6001600160a01b03808e1660009081526020818152604080832094909455918e1681529190912054620009d9918390620027a562000cc6821b17901c565b6001600160a01b03808d1660009081526020818152604080832094909455600d549092168152919091205462000a1a918590620027a562000cc6821b17901c565b600d546001600160a01b031660009081526020818152604090912091909155600c5462000a529188906200284c620010ec821b17901c565b600c8190555062000a7485600b54620010ec60201b6200284c1790919060201c565b600b819055508a6001600160a01b03168c6001600160a01b03166000805160206200630f8339815191528460405162000aae9190620018d0565b60405180910390a360006001600160a01b03168c6001600160a01b03166000805160206200630f8339815191528860405162000aeb9190620018d0565b60405180910390a3600d546040516001600160a01b03918216918e16906000805160206200630f8339815191529062000b26908890620018d0565b60405180910390a350505050505062000bfe565b806003141562000bfe576001600160a01b0386166000908152602081815260409091205462000b749184906200284c620010ec821b17901c565b6001600160a01b03808816600090815260208181526040808320949094559188168152919091205462000bb2918490620027a562000cc6821b17901c565b6001600160a01b0380871660008181526020819052604090819020939093559151908816906000805160206200630f8339815191529062000bf5908890620018d0565b60405180910390a35b505050505050565b600e54600090600160a01b900460ff161562000c425762000c3a600c54600b5462000cf760201b620027ca1790919060201c565b9050620000be565b62000c3a62000c5b620013b860201b620028a61760201c565b600b5462000cf760201b620027ca1790919060201c565b6001600160a01b031660009081526009602052604090205460ff1690565b6001600160a01b031660009081526008602052604090205490565b6001600160a01b031660009081526020819052604090205490565b60008282018381101562000cee5760405162461bcd60e51b81526004016200025a9062001712565b90505b92915050565b600062000cee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620013c260201b60201c565b600f54600160a01b900460ff1690565b60008062000d5e62000c06565b90506200042181620003f48562000cab565b600e54600160a01b900460ff1690565b61070890565b60065490565b60008262000d9d5750600062000cf1565b8282028284828162000dab57fe5b041462000cee5760405162461bcd60e51b81526004016200025a90620017b5565b600f54600160a81b900460ff1690565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b03808216600090815260036020526040812054909182918291829162000e2a91879116620013fd565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b6001600160a01b0380821660009081526003602052604081205490918291829162000e9591869116620013fd565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b6000600262000edd8562000ddc565b1562000efd57821562000ef35750600362000ef7565b5060015b62000f30565b62000f126200158c60201b620028b01760201c565b6001600160a01b0316856001600160a01b0316141562000f30575060035b949350505050565b6001600160a01b0382166000908152600360209081526040822060018101546005820154600483015460029093015485948594859462000faa949093620003f4939192849260649262000f969290916200281262000d8c821b17901c565b62000d8c60201b620028121790919060201c565b9050600062000fd06064620003f4612710620003e0620015a460201b620028c81760201c565b8211156200103b57600062000ff4838462000d8c60201b620028121790919060201c565b905062001032612710620003f46200101d61271085620010ec60201b6200284c1790919060201c565b8a62000d8c60201b620028121790919060201c565b91505062001073565b62001070612710620003f46200105b620015a460201b620028c81760201c565b8962000d8c60201b620028121790919060201c565b90505b620010a8612710620003f462001093620015a960201b620028cd1760201c565b8462000d8c60201b620028121790919060201c565b620010dd612710620003f4620010c8620015a960201b620028cd1760201c565b8562000d8c60201b620028121790919060201c565b90955093509150509250925092565b600062000cee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620015ae60201b60201c565b600e546001600160a01b031690565b73c540da538385ee0aa19dbdff372eddb9bb6f47fa90565b600080806200116b62000c06565b905060006200117a8662000ddc565b15620011dd576001600160a01b0386166000908152600360209081526040909120600481015460028201546005830154600190930154620011d5949293620003f493849260649262000f96926200281262000d8c821b17901c565b905062001238565b600580546001600160a01b03166000908152600360209081526040909120600481015460028201549382015460019092015462001235949193620003f493849260649262000f96929062000d8c811b6200281217901c565b90505b60006200125c6064620003f4612710620003e0620015a460201b620028c81760201c565b821115620012fd57600062001280838462000d8c60201b620028121790919060201c565b9050620012a9612710620003f46200101d61271085620010ec60201b6200284c1790919060201c565b9150620012cb612710620003f46200101d620015dd60201b620028d21760201c565b821115620012f657620012f3612710620003f46200101d620015dd60201b620028d21760201c565b91505b5062001320565b6200131d612710620003f46200105b620015a460201b620028c81760201c565b90505b806200133b848362000d8c60201b620028121790919060201c565b945094505050509250929050565b600080806200135762000c06565b9050600062001390612710620003f46200137b620015e360201b620028d81760201c565b8862000d8c60201b620028121790919060201c565b905080620013ad838362000d8c60201b620028121790919060201c565b935093505050915091565b655af3107a400090565b60008183620013e65760405162461bcd60e51b81526004016200025a919062001622565b506000838581620013f357fe5b0495945050505050565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200143d57600080fd5b505afa15801562001452573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014789190620015f5565b6040516370a0823160e01b815290915060009030906370a0823190620014a3908a906004016200160e565b60206040518083038186803b158015620014bc57600080fd5b505afa158015620014d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014f79190620015f5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016200152991906200160e565b60206040518083038186803b1580156200154257600080fd5b505afa15801562001557573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200157d9190620015f5565b91989197509195509350505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b60008184841115620015d55760405162461bcd60e51b81526004016200025a919062001622565b505050900390565b6103e890565b603290565b605c80620062b383390190565b60006020828403121562001607578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6000602080835283518082850152825b81811015620016505785810183015185820160400152820162001632565b81811115620016625783604083870101525b50601f01601f1916929092016040019392505050565b60208082526016908201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526014908201527f50726573616c652079657420746f20636c6f7365000000000000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b90815260200190565b6149ca80620018e96000396000f3fe60806040526004361061038c5760003560e01c806384955c88116101dc578063bef2112411610102578063d825589b116100a0578063ec2b4e361161006f578063ec2b4e36146109df578063f0e0d14e146109ff578063f2fde38b14610a1f578063f9b7250c14610a3f5761038c565b8063d825589b1461095f578063db7f521a1461097f578063dd62ed3e1461099f578063e272b892146109bf5761038c565b8063c4e41b22116100dc578063c4e41b22146108f5578063cb4d31951461090a578063d5c258901461092a578063d5fcc7b61461093f5761038c565b8063bef2112414610886578063bf9a3a1b146108a6578063c4086893146108d55761038c565b8063a5a302d31161017a578063b21c327811610149578063b21c32781461081c578063b6333d831461083c578063b72455bd1461085c578063b97dd9e2146108715761038c565b8063a5a302d3146107b2578063a9059cbb146107c7578063ae2089ad146107e7578063b187bd26146108075761038c565b8063927ac386116101b6578063927ac386146107535780639358928b1461076857806395d89b411461077d578063a457c2d7146107925761038c565b806384955c88146106ec578063893987831461070c5780638da5cb5b1461073e5761038c565b80634cf73094116102c1578063715018a61161025f57806380af17991161022e57806380af17991461068257806380c2bbd21461069757806380dc74da146106b75780638484ed7e146106cc5761038c565b8063715018a61461060d5780637c2d0774146106225780637dff2680146106425780637e47d625146106625761038c565b8063522361461161029b5780635223614614610598578063524900b5146105b85780635d15d341146105cd57806370a08231146105ed5761038c565b80634cf73094146105435780634f78aa82146105635780635184cc43146105835761038c565b8063395093511161032e5780633f96440e116103085780633f96440e146104ce5780634028358a146104e357806340c10f191461050357806342b5f375146105235761038c565b806339509351146104825780633e6dfa36146104a25780633eedf63c146104c45761038c565b8063220659881161036a578063220659881461040b57806323b872dd1461042b57806323ecdf611461044b578063313ce567146104605761038c565b806306fdde0314610391578063095ea7b3146103bc57806318160ddd146103e9575b600080fd5b34801561039d57600080fd5b506103a6610a6f565b6040516103b39190614178565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004613f26565b610a7f565b6040516103b39190614164565b3480156103f557600080fd5b506103fe610a9d565b6040516103b3919061416f565b34801561041757600080fd5b506103dc610426366004613e76565b610aa7565b34801561043757600080fd5b506103dc610446366004613ee6565b610ac9565b34801561045757600080fd5b506103dc610b21565b34801561046c57600080fd5b50610475610b31565b6040516103b391906148f6565b34801561048e57600080fd5b506103dc61049d366004613f26565b610b3b565b3480156104ae57600080fd5b506104b7610b64565b6040516103b3919061403e565b6104cc610b6e565b005b3480156104da57600080fd5b506104b7610c2e565b3480156104ef57600080fd5b506104cc6104fe366004613eae565b610c3d565b34801561050f57600080fd5b506104cc61051e366004613f26565b610c80565b34801561052f57600080fd5b506103fe61053e366004613e76565b610d2c565b34801561054f57600080fd5b506104cc61055e366004613fed565b610df7565b34801561056f57600080fd5b506103fe61057e366004613e76565b610fd4565b34801561058f57600080fd5b506103fe611063565b3480156105a457600080fd5b506104cc6105b3366004613e76565b6110a2565b3480156105c457600080fd5b506104b76111bf565b3480156105d957600080fd5b506104cc6105e8366004613f26565b6111c9565b3480156105f957600080fd5b506103fe610608366004613e76565b611901565b34801561061957600080fd5b506104cc611949565b34801561062e57600080fd5b506104cc61063d366004613fbd565b6119c8565b34801561064e57600080fd5b506104b761065d366004613fbd565b611c15565b34801561066e57600080fd5b506104cc61067d366004613f85565b611c3f565b34801561068e57600080fd5b506104b7611c84565b3480156106a357600080fd5b506104cc6106b2366004613e76565b611c93565b3480156106c357600080fd5b506104b7611cf8565b3480156106d857600080fd5b506104cc6106e7366004613e76565b611d07565b3480156106f857600080fd5b506103fe610707366004613e76565b611d82565b34801561071857600080fd5b5061072c610727366004613e76565b611d9c565b6040516103b396959493929190614131565b34801561074a57600080fd5b506104b7611e28565b34801561075f57600080fd5b506103dc611e37565b34801561077457600080fd5b506103fe611e47565b34801561078957600080fd5b506103a6611e8b565b34801561079e57600080fd5b506103dc6107ad366004613f26565b611e95565b3480156107be57600080fd5b506104b7611ed1565b3480156107d357600080fd5b506103dc6107e2366004613f26565b611ee0565b3480156107f357600080fd5b506103fe610802366004613e76565b611ef4565b34801561081357600080fd5b506103dc611f0f565b34801561082857600080fd5b506103fe610837366004613eae565b611f1f565b34801561084857600080fd5b506103dc610857366004613e76565b611f4a565b34801561086857600080fd5b506103fe611f68565b34801561087d57600080fd5b506103fe611f6e565b34801561089257600080fd5b506104cc6108a1366004613e76565b611f74565b3480156108b257600080fd5b506108c66108c1366004613eae565b611ff3565b6040516103b3939291906148e0565b3480156108e157600080fd5b506103fe6108f0366004613e76565b612172565b34801561090157600080fd5b506103fe61218d565b34801561091657600080fd5b506104cc610925366004613e76565b612193565b34801561093657600080fd5b506103fe6121d4565b34801561094b57600080fd5b506104cc61095a366004613e76565b6121da565b34801561096b57600080fd5b506104cc61097a366004613f51565b61223d565b34801561098b57600080fd5b506104cc61099a366004613e76565b61244b565b3480156109ab57600080fd5b506103fe6109ba366004613eae565b612588565b3480156109cb57600080fd5b506104cc6109da366004613f85565b612594565b3480156109eb57600080fd5b506103dc6109fa366004613e76565b6125e7565b348015610a0b57600080fd5b506104cc610a1a366004613f26565b612605565b348015610a2b57600080fd5b506104cc610a3a366004613e76565b61265f565b348015610a4b57600080fd5b50610a5f610a5a366004613fbd565b612716565b6040516103b39493929190614109565b6060610a796128dd565b90505b90565b6000610a93610a8c612903565b8484612907565b5060015b92915050565b6000610a7961218d565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610ad68484846129ae565b610b1784610ae2612903565b610b128560405180606001604052806028815260200161492860289139610b0b8a610837612903565b9190612fb1565b612907565b5060019392505050565b600f54600160a81b900460ff1690565b6000610a79612fdd565b6000610a93610b48612903565b84610b1285610b5e610b58612903565b89611f1f565b906127a5565b6000610a79612fe2565b610b76610c2e565b6001600160a01b0316610b87612903565b6001600160a01b031614610bb65760405162461bcd60e51b8152600401610bad9061431d565b60405180910390fd5b610bbe611e37565b15610bdb5760405162461bcd60e51b8152600401610bad90614450565b610be36128a6565b610beb610a9d565b1115610c095760405162461bcd60e51b8152600401610bad90614658565b610c11612ffa565b600e805460ff60a01b1916600160a01b179055610c2c613175565b565b600f546001600160a01b031690565b610c45612903565b6011546001600160a01b03908116911614610c725760405162461bcd60e51b8152600401610bad90614623565b610c7c82826135fd565b5050565b610c88610c2e565b6001600160a01b0316610c99612903565b6001600160a01b031614610cbf5760405162461bcd60e51b8152600401610bad9061431d565b610cc7611e37565b15610ce45760405162461bcd60e51b8152600401610bad90614450565b610cee8282613722565b816001600160a01b031660006001600160a01b031660008051602061495083398151915283604051610d20919061416f565b60405180910390a35050565b6001600160a01b03811660009081526003602052604081206004810154600282015460058301546001909301548493610d819392610d7b9290918391606491610d759190612812565b90612812565b906127ca565b90506000610d986064610d7b612710610b5e6128c8565b821115610de6576000610dab8380612812565b9050610db98161271061284c565b9150610dc36128d2565b821115610ddc57610dd26128d2565b9350505050610ac4565b509150610ac49050565b610dee6128c8565b92505050610ac4565b610dff612903565b6011546001600160a01b03908116911614610e2c5760405162461bcd60e51b8152600401610bad90614623565b600080600080610e3b86612716565b93509350935093508015156001151514610e675760405162461bcd60e51b8152600401610bad906147ca565b428211610e865760405162461bcd60e51b8152600401610bad9061457a565b6001600160a01b038416600090815260086020526040902054610ea9908461284c565b6001600160a01b038086166000908152600860205260408082209390935590871681522054610ed890846127a5565b6001600160a01b038087166000908152600860205260408082209390935590861681522054610f22576001600160a01b0384166000908152600960205260409020805460ff191690555b6001600160a01b0385166000908152600960205260409020805460ff191660011790556007805486919088908110610f5657fe5b6000918252602082206004919091020180546001600160a01b0319166001600160a01b039390931692909217909155610f8d611063565b90506001600160a01b03808716908616600080516020614950833981519152610fb687856127ca565b604051610fc3919061416f565b60405180910390a350505050505050565b6001600160a01b0381166000908152600360205260408120600181015460058201546004830154600290930154849361101d9392610d7b9290918391606491610d759190612812565b90506110326064610d7b612710610b5e6128c8565b8111156110535760006110458280612812565b9050610dee8161271061284c565b61105b6128c8565b915050610ac4565b600e54600090600160a01b900460ff161561108e57600c54600b54611087916127ca565b9050610a7c565b6110876110996128a6565b600b54906127ca565b6110aa612903565b6011546001600160a01b039081169116146110d75760405162461bcd60e51b8152600401610bad90614623565b6110e08161279f565b6110fc5760405162461bcd60e51b8152600401610bad90614847565b600d80546001600160a01b039081166000908152601060205260408120805460ff19169055915461112d9116611901565b9050801561118457600d5461114c906001600160a01b031683836129ae565b600d546040516001600160a01b038085169216906000805160206149508339815191529061117b90859061416f565b60405180910390a35b50600d80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055565b6000610a796128b0565b6111d1612903565b6011546001600160a01b039081169116146111fe5760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b179055600061121b6111bf565b90506000611227610b64565b60405163e6a4390560e01b815290915060009081906001600160a01b0384169063e6a439059061125d9089903090600401614052565b60206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613e92565b6001600160a01b03161415611343576040516364e329cb60e11b81526001600160a01b0383169063c9c65396906112ea9088903090600401614052565b602060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190613e92565b90506113c4565b60405163e6a4390560e01b81526001600160a01b0383169063e6a43905906113719088903090600401614052565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e92565b90505b60006001600160a01b0316826001600160a01b031663e6a4390587866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613e92565b6040518363ffffffff1660e01b815260040161146d929190614052565b60206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190613e92565b6001600160a01b031614156114e45760405162461bcd60e51b8152600401610bad90614810565b836114ee30611901565b101561150c5760405162461bcd60e51b8152600401610bad90614476565b60006115198560026127ca565b90506000611527868361284c565b90506000876001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611557919061403e565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190613fd5565b604080516003808252608082019092529192506060919060208201838036833701905050905030816000815181106115db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190613e92565b8160018151811061167957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088816002815181106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d2308886612907565b604051635c11d79560e01b81526001600160a01b03881690635c11d79590611707908790600090869030904290600401614870565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505060006117c1838b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161176b919061403e565b60206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190613fd5565b9061284c565b90506117ce308986612907565b60405163095ea7b360e01b81526001600160a01b038b169063095ea7b3906117fc908b9085906004016140b5565b602060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190613fa1565b5060405162e8e33760e81b81526001600160a01b0389169063e8e33700906118899030908e908990879060009081908690429060040161406c565b606060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db9190614011565b5050506118e8868b6135fd565b5050600f805460ff60a81b191690555050505050505050565b60008061190c611063565b905061191783610aa7565b156119355761105b81610d7b61192c86612172565b610b5e87611ef4565b61194281610d7b85611ef4565b9392505050565b611951612903565b6011546001600160a01b0390811691161461197e5760405162461bcd60e51b8152600401610bad90614623565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6119d3610426612903565b6119ef5760405162461bcd60e51b8152600401610bad90614342565b6000806000806119fe85612716565b935093509350935042821115611a265760405162461bcd60e51b8152600401610bad906143e5565b611a2e612903565b6001600160a01b0316846001600160a01b031614611a5e5760405162461bcd60e51b8152600401610bad906144d9565b600181151514611a805760405162461bcd60e51b8152600401610bad906147ca565b600a54611a8d908461284c565b600a55611abf83600080611a9f612903565b6001600160a01b03168152602081019190915260400160002054906127a5565b600080611aca612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550611b1e8360086000611afe612903565b6001600160a01b031681526020810191909152604001600020549061284c565b60086000611b2a612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060086000611b5c612903565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611bb957600060096000611b90612903565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b600060078681548110611bc857fe5b906000526020600020906004020160010181905550600060078681548110611bec57fe5b60009182526020909120600490910201600301805460ff19169115159190911790555050505050565b600060028281548110611c2457fe5b6000918252602090912001546001600160a01b031692915050565b611c4a610857612903565b611c665760405162461bcd60e51b8152600401610bad9061451e565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b600e546001600160a01b031690565b6001600160a01b03808216600090815260036020526040812054909182918291611cbf91869116611ff3565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b600d546001600160a01b031690565b611d0f612903565b6011546001600160a01b03908116911614611d3c5760405162461bcd60e51b8152600401610bad90614623565b611d4581611f4a565b611d615760405162461bcd60e51b8152600401610bad906145be565b6001600160a01b03166000908152601060205260409020805460ff19169055565b600080611d8d611063565b905061194281610d7b85611ef4565b600080600080600080611dad613e04565b505050506001600160a01b03938416600090815260036020818152604092839020835160c0810185528154909816808952600182015492890183905260028201549489018590529281015460608901819052600482015460808a0181905260059092015460a090990189905292989197939650919450909250565b6011546001600160a01b031690565b600e54600160a01b900460ff1690565b600080611e52611063565b9050611e85611e62610608611c84565b6117bb611e6e30611901565b6117bb611e7d86610d7b6121d4565b6117bb61218d565b91505090565b6060610a7961378f565b6000610a93611ea2612903565b84610b128560405180606001604052806025815260200161497060259139610b0b611ecb612903565b8a611f1f565b6005546001600160a01b031690565b6000610a93611eed612903565b84846129ae565b6001600160a01b031660009081526020819052604090205490565b600f54600160a01b900460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b031660009081526010602052604090205460ff1690565b600b5490565b60065490565b611f7c612903565b6011546001600160a01b03908116911614611fa95760405162461bcd60e51b8152600401610bad90614623565b611fb281611f4a565b15611fcf5760405162461bcd60e51b8152600401610bad90614428565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206a9190613fd5565b6040516370a0823160e01b815290915060009030906370a0823190612093908a9060040161403e565b60206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e39190613fd5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612113919061403e565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121639190613fd5565b91989197509195509350505050565b6001600160a01b031660009081526008602052604090205490565b600c5490565b61219b612903565b6011546001600160a01b039081169116146121c85760405162461bcd60e51b8152600401610bad90614623565b6121d1816137ad565b50565b600a5490565b6121e2612903565b6011546001600160a01b0390811691161461220f5760405162461bcd60e51b8152600401610bad90614623565b612217611e37565b156122345760405162461bcd60e51b8152600401610bad90614543565b6121d1816138f1565b612245612903565b6011546001600160a01b039081169116146122725760405162461bcd60e51b8152600401610bad90614623565b61227a611e37565b156122975760405162461bcd60e51b8152600401610bad9061425e565b60006122a1611063565b905060006122af8383612812565b604080516080810182526001600160a01b0388811680835260208084018681528486018b8152600160608701818152600780549283018155600090815297517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b031916919098161790965591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a82015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b909301805460ff19169315159390931790925582526008905220549091506123c190826127a5565b6001600160a01b0386166000908152600860209081526040808320939093556009905220805460ff19166001179055600a546123fd90826127a5565b600a55600c5461240d90846127a5565b600c556040516001600160a01b038616906000906000805160206149508339815191529061243c90879061416f565b60405180910390a35050505050565b612453612903565b6011546001600160a01b039081169116146124805760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b17905561249c8161279f565b6124b85760405162461bcd60e51b8152600401610bad90614847565b600e80546001600160a01b039081166000908152601060205260408120805460ff1916905591546124e99116611901565b9050801561254057600e54612508906001600160a01b031683836129ae565b600e546040516001600160a01b038085169216906000805160206149508339815191529061253790859061416f565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b60006119428383611f1f565b61259c612903565b6011546001600160a01b039081169116146125c95760405162461bcd60e51b8152600401610bad90614623565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b61260d612903565b6011546001600160a01b0390811691161461263a5760405162461bcd60e51b8152600401610bad90614623565b612642611e37565b15610ce45760405162461bcd60e51b8152600401610bad9061425e565b612667612903565b6011546001600160a01b039081169116146126945760405162461bcd60e51b8152600401610bad90614623565b6001600160a01b0381166126ba5760405162461bcd60e51b8152600401610bad90614295565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080612724613e43565b6007868154811061273157fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff1615156060909301839052999298509650945092505050565b6507326b47ffff1990565b3b151590565b6000828201838110156119425760405162461bcd60e51b8152600401610bad90614379565b600061194283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613913565b61070890565b60008261282157506000610a97565b8282028284828161282e57fe5b04146119425760405162461bcd60e51b8152600401610bad906145e2565b600061194283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb1565b73c540da538385ee0aa19dbdff372eddb9bb6f47fa90565b655af3107a400090565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b6103e890565b603290565b60408051808201909152600c81526b537065656458537461626c6560a01b602082015290565b3390565b6001600160a01b03831661292d5760405162461bcd60e51b8152600401610bad9061474f565b6001600160a01b0382166129535760405162461bcd60e51b8152600401610bad906142db565b61295e83838361394a565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129a1919061416f565b60405180910390a3505050565b6129b6611f0f565b156129d35760405162461bcd60e51b8152600401610bad9061423e565b6001600160a01b0383166129f95760405162461bcd60e51b8152600401610bad9061470a565b6001600160a01b038216612a1f5760405162461bcd60e51b8152600401610bad906141fb565b60008111612a3f5760405162461bcd60e51b8152600401610bad906143b0565b612a4883611901565b811115612a675760405162461bcd60e51b8152600401610bad906141cb565b612a7083611d82565b811115612a8f5760405162461bcd60e51b8152600401610bad906146d3565b612a97611e37565b612ab35760405162461bcd60e51b8152600401610bad906144ab565b612ac6612abe61280c565b610b5e611f6e565b421115612ad557612ad5613976565b6000612adf611063565b90506000612aed8383612812565b90506000612af9610b21565b15612b0657506003612b66565b6000612b11876125e7565b15612b2657612b1f87613ab0565b9050612b57565b612b2f866125e7565b15612b4257612b3d86611c93565b612b57565b600554612b57906001600160a01b0316611c93565b612b62878783613b1b565b9150505b8060011415612d41576000806000612b7e8988613b71565b6001600160a01b038c166000908152602081905260409020549295509093509150612ba9908661284c565b6001600160a01b03808b1660009081526020819052604080822093909355908a1681522054612bd890866127a5565b6001600160a01b038916600090815260208190526040902055612c09612bfe8488612812565b600080611a9f611c84565b600080612c14611c84565b6001600160a01b03168152602081019190915260400160002055612c46612c3b8388612812565b600080611a9f61288e565b600080612c5161288e565b6001600160a01b03168152602081019190915260400160002055600c54612c7890826127a5565b600c81905550876001600160a01b0316896001600160a01b031660008051602061495083398151915289604051612caf919061416f565b60405180910390a3612cbf611c84565b6001600160a01b031660006001600160a01b031660008051602061495083398151915285604051612cf0919061416f565b60405180910390a3612d0061288e565b6001600160a01b031660006001600160a01b031660008051602061495083398151915284604051612d31919061416f565b60405180910390a3505050612fa9565b8060021415612f0557600080612d578787613c64565b91509150600080612d6788613db7565b90925090506000612d7c836117bb8b8861284c565b90506000612d8a828a612812565b6001600160a01b038d16600090815260208190526040902054909150612db0908961284c565b6001600160a01b03808e1660009081526020819052604080822093909355908d1681522054612ddf90826127a5565b6001600160a01b03808d1660009081526020819052604080822093909355600d5490911681522054612e1190846127a5565b600d546001600160a01b0316600090815260208190526040902055600c54612e39908761284c565b600c55600b54612e49908661284c565b600b819055508a6001600160a01b03168c6001600160a01b031660008051602061495083398151915284604051612e80919061416f565b60405180910390a360006001600160a01b03168c6001600160a01b031660008051602061495083398151915288604051612eba919061416f565b60405180910390a3600d546040516001600160a01b03918216918e169060008051602061495083398151915290612ef290889061416f565b60405180910390a3505050505050612fa9565b8060031415612fa9576001600160a01b038616600090815260208190526040902054612f31908361284c565b6001600160a01b038088166000908152602081905260408082209390935590871681522054612f6090836127a5565b6001600160a01b03808716600081815260208190526040908190209390935591519088169060008051602061495083398151915290612fa090889061416f565b60405180910390a35b505050505050565b60008184841115612fd55760405162461bcd60e51b8152600401610bad9190614178565b505050900390565b600990565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90565b613002611e37565b1561301f5760405162461bcd60e51b8152600401610bad9061425e565b61303661302a61288e565b6509184e72a000613722565b61303e61288e565b6001600160a01b03166108fc6130554760046127ca565b6040518115909202916000818181858888f1935050505015801561307d573d6000803e3d6000fd5b50600061309361308b610a9d565b6117bb6128a6565b905060006130b16130a2613df8565b610d754764174876e8006127ca565b905080821115613101576130cf60006130ca848461284c565b613722565b6000806000805160206149508339815191526130eb858561284c565b6040516130f8919061416f565b60405180910390a35b61310b3082613722565b61311361288e565b6001600160a01b031660006001600160a01b03166000805160206149508339815191526509184e72a00060405161314a919061416f565b60405180910390a3604051309060009060008051602061495083398151915290610d2090859061416f565b600f805460ff60a81b1916600160a81b17905560006131926111bf565b9050600061319e610b64565b90506000806001600160a01b0316826001600160a01b031663e6a43905856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131f457600080fd5b505afa158015613208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322c9190613e92565b306040518363ffffffff1660e01b815260040161324a929190614052565b60206040518083038186803b15801561326257600080fd5b505afa158015613276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329a9190613e92565b6001600160a01b031614156133a057816001600160a01b031663c9c65396846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132f157600080fd5b505afa158015613305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133299190613e92565b306040518363ffffffff1660e01b8152600401613347929190614052565b602060405180830381600087803b15801561336157600080fd5b505af1158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190613e92565b9050613491565b816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e957600080fd5b505afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190613e92565b6040518363ffffffff1660e01b815260040161343e929190614052565b60206040518083038186803b15801561345657600080fd5b505afa15801561346a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348e9190613e92565b90505b600061349c30611901565b90506134bd30737a250d5630b4cf539739df2c5dacb4c659f2488d83612907565b836001600160a01b031663f305d7194730846000806134da61288e565b426040518863ffffffff1660e01b81526004016134fc969594939291906140ce565b6060604051808303818588803b15801561351557600080fd5b505af1158015613529573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061354e9190614011565b5050506135cb82856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561358e57600080fd5b505afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190613e92565b6135fd565b50600580546001600160a01b0319166001600160a01b03929092169190911790555050600f805460ff60a81b19169055565b613606826125e7565b156136235760405162461bcd60e51b8152600401610bad90614793565b6001600160a01b0382166000818152600460205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690921790915580806136948585611ff3565b6040805160c0810182526001600160a01b0398891681526020808201868152828401868152606084019586526080840197885260a084019687529b8b16600090815260039283905293909320915182546001600160a01b0319169a16999099178155905160018201559751600289015551958701959095555160048601555050905160059092019190915550565b600061372c611063565b9050600061373a8383612812565b6001600160a01b03851660009081526020819052604090205490915061376090826127a5565b6001600160a01b038516600090815260208190526040902055600c5461378690846127a5565b600c5550505050565b60408051808201909152600481526314d614d560e21b602082015290565b6137b6816125e7565b6137d25760405162461bcd60e51b8152600401610bad9061468f565b60005b600254811015610c7c57816001600160a01b0316600282815481106137f657fe5b6000918252602090912001546001600160a01b031614156138e95760028054600019810190811061382357fe5b600091825260209091200154600280546001600160a01b03909216918390811061384957fe5b6000918252602080832090910180546001600160a01b039485166001600160a01b031991821617909155928516825260048082526040808420805460ff1916905560039283905283208054909416845560018401839055600280850184905591840183905583018290556005909201558054806138c257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c7c565b6001016137d5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600081836139345760405162461bcd60e51b8152600401610bad9190614178565b50600083858161394057fe5b0495945050505050565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b61397e613dfe565b60005b6002548110156121d157600360006002838154811061399c57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106139ef57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181206004019190915560028054600392919084908110613a2d57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110613a8057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101613981565b6001600160a01b038082166000908152600360205260408120549091829182918291613ade91879116611ff3565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b60006002613b28856125e7565b15613b44578215613b3b57506003613b3f565b5060015b613b69565b613b4c6128b0565b6001600160a01b0316856001600160a01b03161415613b69575060035b949350505050565b6001600160a01b0382166000908152600360205260408120600181015460058201546004830154600290930154849384938493613bbc939192610d7b928391606491610d7591612812565b90506000613bd36064610d7b612710610b5e6128c8565b821115613c0a576000613be68380612812565b9050613c02612710610d7b613bfb848361284c565b8a90612812565b915050613c25565b613c22612710610d7b613c1b6128c8565b8990612812565b90505b613c3d612710610d7b613c366128cd565b8490612812565b613c55612710610d7b613c4e6128cd565b8590612812565b90955093509150509250925092565b6000806000613c71611063565b90506000613c7e866125e7565b15613cce576001600160a01b0386166000908152600360205260409020600481015460028201546005830154600190930154613cc793610d7b92918391606491610d7591612812565b9050613d19565b600580546001600160a01b031660009081526003602052604090206004810154600282015492820154600190920154613d16939192610d7b92918391606491610d7591612812565b90505b6000613d2e6064610d7b612710610b5e6128c8565b821115613d8a576000613d418380612812565b9050613d56612710610d7b613bfb848361284c565b9150613d69612710610d7b613bfb6128d2565b821115613d8457613d81612710610d7b613bfb6128d2565b91505b50613d9e565b613d9b612710610d7b613c1b6128c8565b90505b80613da98185612812565b945094505050509250929050565b6000806000613dc4611063565b90506000613de0612710610d7b613dd96128d8565b8890612812565b905080613ded8184612812565b935093505050915091565b615b2590565b42600655565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b0316815260200160008152602001600081526020016000151581525090565b600060208284031215613e87578081fd5b813561194281614904565b600060208284031215613ea3578081fd5b815161194281614904565b60008060408385031215613ec0578081fd5b8235613ecb81614904565b91506020830135613edb81614904565b809150509250929050565b600080600060608486031215613efa578081fd5b8335613f0581614904565b92506020840135613f1581614904565b929592945050506040919091013590565b60008060408385031215613f38578182fd5b8235613f4381614904565b946020939093013593505050565b600080600060608486031215613f65578283fd5b8335613f7081614904565b95602085013595506040909401359392505050565b600060208284031215613f96578081fd5b813561194281614919565b600060208284031215613fb2578081fd5b815161194281614919565b600060208284031215613fce578081fd5b5035919050565b600060208284031215613fe6578081fd5b5051919050565b60008060408385031215613fff578182fd5b823591506020830135613edb81614904565b600080600060608486031215614025578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156141a457858101830151858201604001528201614188565b818111156141b55783604083870101525b50601f01601f1916929092016040019392505050565b602080825260169082015275416d6f756e7420657863656564732062616c616e636560501b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526018908201527f43616e6e6f74206d696e7420706f73742070726573616c650000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a6e6f742070726573616c6560a81b604082015260600190565b6020808252601c908201527f43616c6c657220686173206e6f206c6f636b65642062616c616e636500000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526023908201527f54686973207472616e6368652063616e6e6f7420626520756e6c6f636b6564206040820152621e595d60ea1b606082015260800190565b6020808252600e908201526d30b63932b0b23c9039b2ba3a32b960911b604082015260600190565b6020808252600c908201526b283932b9b0b6329037bb32b960a11b604082015260600190565b6020808252818101527f416d6f756e7420657863656564732074686520746f6b656e2062616c616e6365604082015260600190565b60208082526014908201527350726573616c652079657420746f20636c6f736560601b604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f662074686973207472604082015264616e63686560d81b606082015260800190565b6020808252600b908201526a6e6f74207461786c65737360a81b604082015260600190565b6020808252601c908201527f50726573616c6520697320616c726561647920636f6d706c6574656400000000604082015260600190565b60208082526024908201527f54686973207472616e6368652068617320616c7265616479206265656e2076656040820152631cdd195960e21b606082015260800190565b6020808252600a90820152693737ba1039b2ba3a32b960b11b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f546f74616c20737570706c7920697320616c7265616479206d696e7465640000604082015260600190565b60208082526024908201527f5468697320706f6f6c2069732063757272656e746c79206e6f7420737570706f6040820152631c9d195960e21b606082015260800190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f5468697320706f6f6c20697320616c726561647920737570706f727465640000604082015260600190565b60208082526026908201527f54686973207472616e6368652068617320616c7265616479206265656e20756e6040820152651b1bd8dad95960d21b606082015260800190565b6020808252601a908201527f4574682070616972696e6720646f6573206e6f74206578697374000000000000604082015260600190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156148bf5784516001600160a01b03168352938301939183019160010161489a565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6001600160a01b03811681146121d157600080fd5b80151581146121d157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205832fec2470cb52a9cd3bb5f3c2df9a59eb4a24b7ead6b2acc0c124f40ed43aa64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220c801075779afd134169e01f47939ba0b0e2651e333b9d042d9e3967b7bd7030b64736f6c634300060c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061038c5760003560e01c806384955c88116101dc578063bef2112411610102578063d825589b116100a0578063ec2b4e361161006f578063ec2b4e36146109df578063f0e0d14e146109ff578063f2fde38b14610a1f578063f9b7250c14610a3f5761038c565b8063d825589b1461095f578063db7f521a1461097f578063dd62ed3e1461099f578063e272b892146109bf5761038c565b8063c4e41b22116100dc578063c4e41b22146108f5578063cb4d31951461090a578063d5c258901461092a578063d5fcc7b61461093f5761038c565b8063bef2112414610886578063bf9a3a1b146108a6578063c4086893146108d55761038c565b8063a5a302d31161017a578063b21c327811610149578063b21c32781461081c578063b6333d831461083c578063b72455bd1461085c578063b97dd9e2146108715761038c565b8063a5a302d3146107b2578063a9059cbb146107c7578063ae2089ad146107e7578063b187bd26146108075761038c565b8063927ac386116101b6578063927ac386146107535780639358928b1461076857806395d89b411461077d578063a457c2d7146107925761038c565b806384955c88146106ec578063893987831461070c5780638da5cb5b1461073e5761038c565b80634cf73094116102c1578063715018a61161025f57806380af17991161022e57806380af17991461068257806380c2bbd21461069757806380dc74da146106b75780638484ed7e146106cc5761038c565b8063715018a61461060d5780637c2d0774146106225780637dff2680146106425780637e47d625146106625761038c565b8063522361461161029b5780635223614614610598578063524900b5146105b85780635d15d341146105cd57806370a08231146105ed5761038c565b80634cf73094146105435780634f78aa82146105635780635184cc43146105835761038c565b8063395093511161032e5780633f96440e116103085780633f96440e146104ce5780634028358a146104e357806340c10f191461050357806342b5f375146105235761038c565b806339509351146104825780633e6dfa36146104a25780633eedf63c146104c45761038c565b8063220659881161036a578063220659881461040b57806323b872dd1461042b57806323ecdf611461044b578063313ce567146104605761038c565b806306fdde0314610391578063095ea7b3146103bc57806318160ddd146103e9575b600080fd5b34801561039d57600080fd5b506103a6610a6f565b6040516103b39190614178565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004613f26565b610a7f565b6040516103b39190614164565b3480156103f557600080fd5b506103fe610a9d565b6040516103b3919061416f565b34801561041757600080fd5b506103dc610426366004613e76565b610aa7565b34801561043757600080fd5b506103dc610446366004613ee6565b610ac9565b34801561045757600080fd5b506103dc610b21565b34801561046c57600080fd5b50610475610b31565b6040516103b391906148f6565b34801561048e57600080fd5b506103dc61049d366004613f26565b610b3b565b3480156104ae57600080fd5b506104b7610b64565b6040516103b3919061403e565b6104cc610b6e565b005b3480156104da57600080fd5b506104b7610c2e565b3480156104ef57600080fd5b506104cc6104fe366004613eae565b610c3d565b34801561050f57600080fd5b506104cc61051e366004613f26565b610c80565b34801561052f57600080fd5b506103fe61053e366004613e76565b610d2c565b34801561054f57600080fd5b506104cc61055e366004613fed565b610df7565b34801561056f57600080fd5b506103fe61057e366004613e76565b610fd4565b34801561058f57600080fd5b506103fe611063565b3480156105a457600080fd5b506104cc6105b3366004613e76565b6110a2565b3480156105c457600080fd5b506104b76111bf565b3480156105d957600080fd5b506104cc6105e8366004613f26565b6111c9565b3480156105f957600080fd5b506103fe610608366004613e76565b611901565b34801561061957600080fd5b506104cc611949565b34801561062e57600080fd5b506104cc61063d366004613fbd565b6119c8565b34801561064e57600080fd5b506104b761065d366004613fbd565b611c15565b34801561066e57600080fd5b506104cc61067d366004613f85565b611c3f565b34801561068e57600080fd5b506104b7611c84565b3480156106a357600080fd5b506104cc6106b2366004613e76565b611c93565b3480156106c357600080fd5b506104b7611cf8565b3480156106d857600080fd5b506104cc6106e7366004613e76565b611d07565b3480156106f857600080fd5b506103fe610707366004613e76565b611d82565b34801561071857600080fd5b5061072c610727366004613e76565b611d9c565b6040516103b396959493929190614131565b34801561074a57600080fd5b506104b7611e28565b34801561075f57600080fd5b506103dc611e37565b34801561077457600080fd5b506103fe611e47565b34801561078957600080fd5b506103a6611e8b565b34801561079e57600080fd5b506103dc6107ad366004613f26565b611e95565b3480156107be57600080fd5b506104b7611ed1565b3480156107d357600080fd5b506103dc6107e2366004613f26565b611ee0565b3480156107f357600080fd5b506103fe610802366004613e76565b611ef4565b34801561081357600080fd5b506103dc611f0f565b34801561082857600080fd5b506103fe610837366004613eae565b611f1f565b34801561084857600080fd5b506103dc610857366004613e76565b611f4a565b34801561086857600080fd5b506103fe611f68565b34801561087d57600080fd5b506103fe611f6e565b34801561089257600080fd5b506104cc6108a1366004613e76565b611f74565b3480156108b257600080fd5b506108c66108c1366004613eae565b611ff3565b6040516103b3939291906148e0565b3480156108e157600080fd5b506103fe6108f0366004613e76565b612172565b34801561090157600080fd5b506103fe61218d565b34801561091657600080fd5b506104cc610925366004613e76565b612193565b34801561093657600080fd5b506103fe6121d4565b34801561094b57600080fd5b506104cc61095a366004613e76565b6121da565b34801561096b57600080fd5b506104cc61097a366004613f51565b61223d565b34801561098b57600080fd5b506104cc61099a366004613e76565b61244b565b3480156109ab57600080fd5b506103fe6109ba366004613eae565b612588565b3480156109cb57600080fd5b506104cc6109da366004613f85565b612594565b3480156109eb57600080fd5b506103dc6109fa366004613e76565b6125e7565b348015610a0b57600080fd5b506104cc610a1a366004613f26565b612605565b348015610a2b57600080fd5b506104cc610a3a366004613e76565b61265f565b348015610a4b57600080fd5b50610a5f610a5a366004613fbd565b612716565b6040516103b39493929190614109565b6060610a796128dd565b90505b90565b6000610a93610a8c612903565b8484612907565b5060015b92915050565b6000610a7961218d565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610ad68484846129ae565b610b1784610ae2612903565b610b128560405180606001604052806028815260200161492860289139610b0b8a610837612903565b9190612fb1565b612907565b5060019392505050565b600f54600160a81b900460ff1690565b6000610a79612fdd565b6000610a93610b48612903565b84610b1285610b5e610b58612903565b89611f1f565b906127a5565b6000610a79612fe2565b610b76610c2e565b6001600160a01b0316610b87612903565b6001600160a01b031614610bb65760405162461bcd60e51b8152600401610bad9061431d565b60405180910390fd5b610bbe611e37565b15610bdb5760405162461bcd60e51b8152600401610bad90614450565b610be36128a6565b610beb610a9d565b1115610c095760405162461bcd60e51b8152600401610bad90614658565b610c11612ffa565b600e805460ff60a01b1916600160a01b179055610c2c613175565b565b600f546001600160a01b031690565b610c45612903565b6011546001600160a01b03908116911614610c725760405162461bcd60e51b8152600401610bad90614623565b610c7c82826135fd565b5050565b610c88610c2e565b6001600160a01b0316610c99612903565b6001600160a01b031614610cbf5760405162461bcd60e51b8152600401610bad9061431d565b610cc7611e37565b15610ce45760405162461bcd60e51b8152600401610bad90614450565b610cee8282613722565b816001600160a01b031660006001600160a01b031660008051602061495083398151915283604051610d20919061416f565b60405180910390a35050565b6001600160a01b03811660009081526003602052604081206004810154600282015460058301546001909301548493610d819392610d7b9290918391606491610d759190612812565b90612812565b906127ca565b90506000610d986064610d7b612710610b5e6128c8565b821115610de6576000610dab8380612812565b9050610db98161271061284c565b9150610dc36128d2565b821115610ddc57610dd26128d2565b9350505050610ac4565b509150610ac49050565b610dee6128c8565b92505050610ac4565b610dff612903565b6011546001600160a01b03908116911614610e2c5760405162461bcd60e51b8152600401610bad90614623565b600080600080610e3b86612716565b93509350935093508015156001151514610e675760405162461bcd60e51b8152600401610bad906147ca565b428211610e865760405162461bcd60e51b8152600401610bad9061457a565b6001600160a01b038416600090815260086020526040902054610ea9908461284c565b6001600160a01b038086166000908152600860205260408082209390935590871681522054610ed890846127a5565b6001600160a01b038087166000908152600860205260408082209390935590861681522054610f22576001600160a01b0384166000908152600960205260409020805460ff191690555b6001600160a01b0385166000908152600960205260409020805460ff191660011790556007805486919088908110610f5657fe5b6000918252602082206004919091020180546001600160a01b0319166001600160a01b039390931692909217909155610f8d611063565b90506001600160a01b03808716908616600080516020614950833981519152610fb687856127ca565b604051610fc3919061416f565b60405180910390a350505050505050565b6001600160a01b0381166000908152600360205260408120600181015460058201546004830154600290930154849361101d9392610d7b9290918391606491610d759190612812565b90506110326064610d7b612710610b5e6128c8565b8111156110535760006110458280612812565b9050610dee8161271061284c565b61105b6128c8565b915050610ac4565b600e54600090600160a01b900460ff161561108e57600c54600b54611087916127ca565b9050610a7c565b6110876110996128a6565b600b54906127ca565b6110aa612903565b6011546001600160a01b039081169116146110d75760405162461bcd60e51b8152600401610bad90614623565b6110e08161279f565b6110fc5760405162461bcd60e51b8152600401610bad90614847565b600d80546001600160a01b039081166000908152601060205260408120805460ff19169055915461112d9116611901565b9050801561118457600d5461114c906001600160a01b031683836129ae565b600d546040516001600160a01b038085169216906000805160206149508339815191529061117b90859061416f565b60405180910390a35b50600d80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055565b6000610a796128b0565b6111d1612903565b6011546001600160a01b039081169116146111fe5760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b179055600061121b6111bf565b90506000611227610b64565b60405163e6a4390560e01b815290915060009081906001600160a01b0384169063e6a439059061125d9089903090600401614052565b60206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613e92565b6001600160a01b03161415611343576040516364e329cb60e11b81526001600160a01b0383169063c9c65396906112ea9088903090600401614052565b602060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190613e92565b90506113c4565b60405163e6a4390560e01b81526001600160a01b0383169063e6a43905906113719088903090600401614052565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e92565b90505b60006001600160a01b0316826001600160a01b031663e6a4390587866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613e92565b6040518363ffffffff1660e01b815260040161146d929190614052565b60206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190613e92565b6001600160a01b031614156114e45760405162461bcd60e51b8152600401610bad90614810565b836114ee30611901565b101561150c5760405162461bcd60e51b8152600401610bad90614476565b60006115198560026127ca565b90506000611527868361284c565b90506000876001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611557919061403e565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190613fd5565b604080516003808252608082019092529192506060919060208201838036833701905050905030816000815181106115db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190613e92565b8160018151811061167957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088816002815181106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d2308886612907565b604051635c11d79560e01b81526001600160a01b03881690635c11d79590611707908790600090869030904290600401614870565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505060006117c1838b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161176b919061403e565b60206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190613fd5565b9061284c565b90506117ce308986612907565b60405163095ea7b360e01b81526001600160a01b038b169063095ea7b3906117fc908b9085906004016140b5565b602060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190613fa1565b5060405162e8e33760e81b81526001600160a01b0389169063e8e33700906118899030908e908990879060009081908690429060040161406c565b606060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db9190614011565b5050506118e8868b6135fd565b5050600f805460ff60a81b191690555050505050505050565b60008061190c611063565b905061191783610aa7565b156119355761105b81610d7b61192c86612172565b610b5e87611ef4565b61194281610d7b85611ef4565b9392505050565b611951612903565b6011546001600160a01b0390811691161461197e5760405162461bcd60e51b8152600401610bad90614623565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6119d3610426612903565b6119ef5760405162461bcd60e51b8152600401610bad90614342565b6000806000806119fe85612716565b935093509350935042821115611a265760405162461bcd60e51b8152600401610bad906143e5565b611a2e612903565b6001600160a01b0316846001600160a01b031614611a5e5760405162461bcd60e51b8152600401610bad906144d9565b600181151514611a805760405162461bcd60e51b8152600401610bad906147ca565b600a54611a8d908461284c565b600a55611abf83600080611a9f612903565b6001600160a01b03168152602081019190915260400160002054906127a5565b600080611aca612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550611b1e8360086000611afe612903565b6001600160a01b031681526020810191909152604001600020549061284c565b60086000611b2a612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060086000611b5c612903565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611bb957600060096000611b90612903565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b600060078681548110611bc857fe5b906000526020600020906004020160010181905550600060078681548110611bec57fe5b60009182526020909120600490910201600301805460ff19169115159190911790555050505050565b600060028281548110611c2457fe5b6000918252602090912001546001600160a01b031692915050565b611c4a610857612903565b611c665760405162461bcd60e51b8152600401610bad9061451e565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b600e546001600160a01b031690565b6001600160a01b03808216600090815260036020526040812054909182918291611cbf91869116611ff3565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b600d546001600160a01b031690565b611d0f612903565b6011546001600160a01b03908116911614611d3c5760405162461bcd60e51b8152600401610bad90614623565b611d4581611f4a565b611d615760405162461bcd60e51b8152600401610bad906145be565b6001600160a01b03166000908152601060205260409020805460ff19169055565b600080611d8d611063565b905061194281610d7b85611ef4565b600080600080600080611dad613e04565b505050506001600160a01b03938416600090815260036020818152604092839020835160c0810185528154909816808952600182015492890183905260028201549489018590529281015460608901819052600482015460808a0181905260059092015460a090990189905292989197939650919450909250565b6011546001600160a01b031690565b600e54600160a01b900460ff1690565b600080611e52611063565b9050611e85611e62610608611c84565b6117bb611e6e30611901565b6117bb611e7d86610d7b6121d4565b6117bb61218d565b91505090565b6060610a7961378f565b6000610a93611ea2612903565b84610b128560405180606001604052806025815260200161497060259139610b0b611ecb612903565b8a611f1f565b6005546001600160a01b031690565b6000610a93611eed612903565b84846129ae565b6001600160a01b031660009081526020819052604090205490565b600f54600160a01b900460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b031660009081526010602052604090205460ff1690565b600b5490565b60065490565b611f7c612903565b6011546001600160a01b03908116911614611fa95760405162461bcd60e51b8152600401610bad90614623565b611fb281611f4a565b15611fcf5760405162461bcd60e51b8152600401610bad90614428565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206a9190613fd5565b6040516370a0823160e01b815290915060009030906370a0823190612093908a9060040161403e565b60206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e39190613fd5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612113919061403e565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121639190613fd5565b91989197509195509350505050565b6001600160a01b031660009081526008602052604090205490565b600c5490565b61219b612903565b6011546001600160a01b039081169116146121c85760405162461bcd60e51b8152600401610bad90614623565b6121d1816137ad565b50565b600a5490565b6121e2612903565b6011546001600160a01b0390811691161461220f5760405162461bcd60e51b8152600401610bad90614623565b612217611e37565b156122345760405162461bcd60e51b8152600401610bad90614543565b6121d1816138f1565b612245612903565b6011546001600160a01b039081169116146122725760405162461bcd60e51b8152600401610bad90614623565b61227a611e37565b156122975760405162461bcd60e51b8152600401610bad9061425e565b60006122a1611063565b905060006122af8383612812565b604080516080810182526001600160a01b0388811680835260208084018681528486018b8152600160608701818152600780549283018155600090815297517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b031916919098161790965591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a82015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b909301805460ff19169315159390931790925582526008905220549091506123c190826127a5565b6001600160a01b0386166000908152600860209081526040808320939093556009905220805460ff19166001179055600a546123fd90826127a5565b600a55600c5461240d90846127a5565b600c556040516001600160a01b038616906000906000805160206149508339815191529061243c90879061416f565b60405180910390a35050505050565b612453612903565b6011546001600160a01b039081169116146124805760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b17905561249c8161279f565b6124b85760405162461bcd60e51b8152600401610bad90614847565b600e80546001600160a01b039081166000908152601060205260408120805460ff1916905591546124e99116611901565b9050801561254057600e54612508906001600160a01b031683836129ae565b600e546040516001600160a01b038085169216906000805160206149508339815191529061253790859061416f565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b60006119428383611f1f565b61259c612903565b6011546001600160a01b039081169116146125c95760405162461bcd60e51b8152600401610bad90614623565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b61260d612903565b6011546001600160a01b0390811691161461263a5760405162461bcd60e51b8152600401610bad90614623565b612642611e37565b15610ce45760405162461bcd60e51b8152600401610bad9061425e565b612667612903565b6011546001600160a01b039081169116146126945760405162461bcd60e51b8152600401610bad90614623565b6001600160a01b0381166126ba5760405162461bcd60e51b8152600401610bad90614295565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080612724613e43565b6007868154811061273157fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff1615156060909301839052999298509650945092505050565b6507326b47ffff1990565b3b151590565b6000828201838110156119425760405162461bcd60e51b8152600401610bad90614379565b600061194283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613913565b61070890565b60008261282157506000610a97565b8282028284828161282e57fe5b04146119425760405162461bcd60e51b8152600401610bad906145e2565b600061194283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb1565b73c540da538385ee0aa19dbdff372eddb9bb6f47fa90565b655af3107a400090565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b6103e890565b603290565b60408051808201909152600c81526b537065656458537461626c6560a01b602082015290565b3390565b6001600160a01b03831661292d5760405162461bcd60e51b8152600401610bad9061474f565b6001600160a01b0382166129535760405162461bcd60e51b8152600401610bad906142db565b61295e83838361394a565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129a1919061416f565b60405180910390a3505050565b6129b6611f0f565b156129d35760405162461bcd60e51b8152600401610bad9061423e565b6001600160a01b0383166129f95760405162461bcd60e51b8152600401610bad9061470a565b6001600160a01b038216612a1f5760405162461bcd60e51b8152600401610bad906141fb565b60008111612a3f5760405162461bcd60e51b8152600401610bad906143b0565b612a4883611901565b811115612a675760405162461bcd60e51b8152600401610bad906141cb565b612a7083611d82565b811115612a8f5760405162461bcd60e51b8152600401610bad906146d3565b612a97611e37565b612ab35760405162461bcd60e51b8152600401610bad906144ab565b612ac6612abe61280c565b610b5e611f6e565b421115612ad557612ad5613976565b6000612adf611063565b90506000612aed8383612812565b90506000612af9610b21565b15612b0657506003612b66565b6000612b11876125e7565b15612b2657612b1f87613ab0565b9050612b57565b612b2f866125e7565b15612b4257612b3d86611c93565b612b57565b600554612b57906001600160a01b0316611c93565b612b62878783613b1b565b9150505b8060011415612d41576000806000612b7e8988613b71565b6001600160a01b038c166000908152602081905260409020549295509093509150612ba9908661284c565b6001600160a01b03808b1660009081526020819052604080822093909355908a1681522054612bd890866127a5565b6001600160a01b038916600090815260208190526040902055612c09612bfe8488612812565b600080611a9f611c84565b600080612c14611c84565b6001600160a01b03168152602081019190915260400160002055612c46612c3b8388612812565b600080611a9f61288e565b600080612c5161288e565b6001600160a01b03168152602081019190915260400160002055600c54612c7890826127a5565b600c81905550876001600160a01b0316896001600160a01b031660008051602061495083398151915289604051612caf919061416f565b60405180910390a3612cbf611c84565b6001600160a01b031660006001600160a01b031660008051602061495083398151915285604051612cf0919061416f565b60405180910390a3612d0061288e565b6001600160a01b031660006001600160a01b031660008051602061495083398151915284604051612d31919061416f565b60405180910390a3505050612fa9565b8060021415612f0557600080612d578787613c64565b91509150600080612d6788613db7565b90925090506000612d7c836117bb8b8861284c565b90506000612d8a828a612812565b6001600160a01b038d16600090815260208190526040902054909150612db0908961284c565b6001600160a01b03808e1660009081526020819052604080822093909355908d1681522054612ddf90826127a5565b6001600160a01b03808d1660009081526020819052604080822093909355600d5490911681522054612e1190846127a5565b600d546001600160a01b0316600090815260208190526040902055600c54612e39908761284c565b600c55600b54612e49908661284c565b600b819055508a6001600160a01b03168c6001600160a01b031660008051602061495083398151915284604051612e80919061416f565b60405180910390a360006001600160a01b03168c6001600160a01b031660008051602061495083398151915288604051612eba919061416f565b60405180910390a3600d546040516001600160a01b03918216918e169060008051602061495083398151915290612ef290889061416f565b60405180910390a3505050505050612fa9565b8060031415612fa9576001600160a01b038616600090815260208190526040902054612f31908361284c565b6001600160a01b038088166000908152602081905260408082209390935590871681522054612f6090836127a5565b6001600160a01b03808716600081815260208190526040908190209390935591519088169060008051602061495083398151915290612fa090889061416f565b60405180910390a35b505050505050565b60008184841115612fd55760405162461bcd60e51b8152600401610bad9190614178565b505050900390565b600990565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90565b613002611e37565b1561301f5760405162461bcd60e51b8152600401610bad9061425e565b61303661302a61288e565b6509184e72a000613722565b61303e61288e565b6001600160a01b03166108fc6130554760046127ca565b6040518115909202916000818181858888f1935050505015801561307d573d6000803e3d6000fd5b50600061309361308b610a9d565b6117bb6128a6565b905060006130b16130a2613df8565b610d754764174876e8006127ca565b905080821115613101576130cf60006130ca848461284c565b613722565b6000806000805160206149508339815191526130eb858561284c565b6040516130f8919061416f565b60405180910390a35b61310b3082613722565b61311361288e565b6001600160a01b031660006001600160a01b03166000805160206149508339815191526509184e72a00060405161314a919061416f565b60405180910390a3604051309060009060008051602061495083398151915290610d2090859061416f565b600f805460ff60a81b1916600160a81b17905560006131926111bf565b9050600061319e610b64565b90506000806001600160a01b0316826001600160a01b031663e6a43905856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131f457600080fd5b505afa158015613208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322c9190613e92565b306040518363ffffffff1660e01b815260040161324a929190614052565b60206040518083038186803b15801561326257600080fd5b505afa158015613276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329a9190613e92565b6001600160a01b031614156133a057816001600160a01b031663c9c65396846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132f157600080fd5b505afa158015613305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133299190613e92565b306040518363ffffffff1660e01b8152600401613347929190614052565b602060405180830381600087803b15801561336157600080fd5b505af1158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190613e92565b9050613491565b816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e957600080fd5b505afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190613e92565b6040518363ffffffff1660e01b815260040161343e929190614052565b60206040518083038186803b15801561345657600080fd5b505afa15801561346a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348e9190613e92565b90505b600061349c30611901565b90506134bd30737a250d5630b4cf539739df2c5dacb4c659f2488d83612907565b836001600160a01b031663f305d7194730846000806134da61288e565b426040518863ffffffff1660e01b81526004016134fc969594939291906140ce565b6060604051808303818588803b15801561351557600080fd5b505af1158015613529573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061354e9190614011565b5050506135cb82856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561358e57600080fd5b505afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190613e92565b6135fd565b50600580546001600160a01b0319166001600160a01b03929092169190911790555050600f805460ff60a81b19169055565b613606826125e7565b156136235760405162461bcd60e51b8152600401610bad90614793565b6001600160a01b0382166000818152600460205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690921790915580806136948585611ff3565b6040805160c0810182526001600160a01b0398891681526020808201868152828401868152606084019586526080840197885260a084019687529b8b16600090815260039283905293909320915182546001600160a01b0319169a16999099178155905160018201559751600289015551958701959095555160048601555050905160059092019190915550565b600061372c611063565b9050600061373a8383612812565b6001600160a01b03851660009081526020819052604090205490915061376090826127a5565b6001600160a01b038516600090815260208190526040902055600c5461378690846127a5565b600c5550505050565b60408051808201909152600481526314d614d560e21b602082015290565b6137b6816125e7565b6137d25760405162461bcd60e51b8152600401610bad9061468f565b60005b600254811015610c7c57816001600160a01b0316600282815481106137f657fe5b6000918252602090912001546001600160a01b031614156138e95760028054600019810190811061382357fe5b600091825260209091200154600280546001600160a01b03909216918390811061384957fe5b6000918252602080832090910180546001600160a01b039485166001600160a01b031991821617909155928516825260048082526040808420805460ff1916905560039283905283208054909416845560018401839055600280850184905591840183905583018290556005909201558054806138c257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c7c565b6001016137d5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600081836139345760405162461bcd60e51b8152600401610bad9190614178565b50600083858161394057fe5b0495945050505050565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b61397e613dfe565b60005b6002548110156121d157600360006002838154811061399c57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106139ef57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181206004019190915560028054600392919084908110613a2d57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110613a8057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101613981565b6001600160a01b038082166000908152600360205260408120549091829182918291613ade91879116611ff3565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b60006002613b28856125e7565b15613b44578215613b3b57506003613b3f565b5060015b613b69565b613b4c6128b0565b6001600160a01b0316856001600160a01b03161415613b69575060035b949350505050565b6001600160a01b0382166000908152600360205260408120600181015460058201546004830154600290930154849384938493613bbc939192610d7b928391606491610d7591612812565b90506000613bd36064610d7b612710610b5e6128c8565b821115613c0a576000613be68380612812565b9050613c02612710610d7b613bfb848361284c565b8a90612812565b915050613c25565b613c22612710610d7b613c1b6128c8565b8990612812565b90505b613c3d612710610d7b613c366128cd565b8490612812565b613c55612710610d7b613c4e6128cd565b8590612812565b90955093509150509250925092565b6000806000613c71611063565b90506000613c7e866125e7565b15613cce576001600160a01b0386166000908152600360205260409020600481015460028201546005830154600190930154613cc793610d7b92918391606491610d7591612812565b9050613d19565b600580546001600160a01b031660009081526003602052604090206004810154600282015492820154600190920154613d16939192610d7b92918391606491610d7591612812565b90505b6000613d2e6064610d7b612710610b5e6128c8565b821115613d8a576000613d418380612812565b9050613d56612710610d7b613bfb848361284c565b9150613d69612710610d7b613bfb6128d2565b821115613d8457613d81612710610d7b613bfb6128d2565b91505b50613d9e565b613d9b612710610d7b613c1b6128c8565b90505b80613da98185612812565b945094505050509250929050565b6000806000613dc4611063565b90506000613de0612710610d7b613dd96128d8565b8890612812565b905080613ded8184612812565b935093505050915091565b615b2590565b42600655565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b0316815260200160008152602001600081526020016000151581525090565b600060208284031215613e87578081fd5b813561194281614904565b600060208284031215613ea3578081fd5b815161194281614904565b60008060408385031215613ec0578081fd5b8235613ecb81614904565b91506020830135613edb81614904565b809150509250929050565b600080600060608486031215613efa578081fd5b8335613f0581614904565b92506020840135613f1581614904565b929592945050506040919091013590565b60008060408385031215613f38578182fd5b8235613f4381614904565b946020939093013593505050565b600080600060608486031215613f65578283fd5b8335613f7081614904565b95602085013595506040909401359392505050565b600060208284031215613f96578081fd5b813561194281614919565b600060208284031215613fb2578081fd5b815161194281614919565b600060208284031215613fce578081fd5b5035919050565b600060208284031215613fe6578081fd5b5051919050565b60008060408385031215613fff578182fd5b823591506020830135613edb81614904565b600080600060608486031215614025578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156141a457858101830151858201604001528201614188565b818111156141b55783604083870101525b50601f01601f1916929092016040019392505050565b602080825260169082015275416d6f756e7420657863656564732062616c616e636560501b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526018908201527f43616e6e6f74206d696e7420706f73742070726573616c650000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a6e6f742070726573616c6560a81b604082015260600190565b6020808252601c908201527f43616c6c657220686173206e6f206c6f636b65642062616c616e636500000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526023908201527f54686973207472616e6368652063616e6e6f7420626520756e6c6f636b6564206040820152621e595d60ea1b606082015260800190565b6020808252600e908201526d30b63932b0b23c9039b2ba3a32b960911b604082015260600190565b6020808252600c908201526b283932b9b0b6329037bb32b960a11b604082015260600190565b6020808252818101527f416d6f756e7420657863656564732074686520746f6b656e2062616c616e6365604082015260600190565b60208082526014908201527350726573616c652079657420746f20636c6f736560601b604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f662074686973207472604082015264616e63686560d81b606082015260800190565b6020808252600b908201526a6e6f74207461786c65737360a81b604082015260600190565b6020808252601c908201527f50726573616c6520697320616c726561647920636f6d706c6574656400000000604082015260600190565b60208082526024908201527f54686973207472616e6368652068617320616c7265616479206265656e2076656040820152631cdd195960e21b606082015260800190565b6020808252600a90820152693737ba1039b2ba3a32b960b11b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f546f74616c20737570706c7920697320616c7265616479206d696e7465640000604082015260600190565b60208082526024908201527f5468697320706f6f6c2069732063757272656e746c79206e6f7420737570706f6040820152631c9d195960e21b606082015260800190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f5468697320706f6f6c20697320616c726561647920737570706f727465640000604082015260600190565b60208082526026908201527f54686973207472616e6368652068617320616c7265616479206265656e20756e6040820152651b1bd8dad95960d21b606082015260800190565b6020808252601a908201527f4574682070616972696e6720646f6573206e6f74206578697374000000000000604082015260600190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156148bf5784516001600160a01b03168352938301939183019160010161489a565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6001600160a01b03811681146121d157600080fd5b80151581146121d157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205832fec2470cb52a9cd3bb5f3c2df9a59eb4a24b7ead6b2acc0c124f40ed43aa64736f6c634300060c0033

Deployed Bytecode Sourcemap

28920:16290:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29659:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31230:161;;;;;;;;;;-1:-1:-1;31230:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29990:104::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19200:122::-;;;;;;;;;;-1:-1:-1;19200:122:0;;;;;:::i;:::-;;:::i;31399:314::-;;;;;;;;;;-1:-1:-1;31399:314:0;;;;;:::i;:::-;;:::i;20132:82::-;;;;;;;;;;;;;:::i;29881:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31721:219::-;;;;;;;;;;-1:-1:-1;31721:219:0;;;;;:::i;:::-;;:::i;20491:139::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36946:243::-;;;:::i;:::-;;19944:96;;;;;;;;;;;;;:::i;43402:135::-;;;;;;;;;;-1:-1:-1;43402:135:0;;;;;:::i;:::-;;:::i;32226:149::-;;;;;;;;;;-1:-1:-1;32226:149:0;;;;;:::i;:::-;;:::i;24262:772::-;;;;;;;;;;-1:-1:-1;24262:772:0;;;;;:::i;:::-;;:::i;39813:843::-;;;;;;;;;;-1:-1:-1;39813:843:0;;;;;:::i;:::-;;:::i;23698:558::-;;;;;;;;;;-1:-1:-1;23698:558:0;;;;;:::i;:::-;;:::i;20636:233::-;;;;;;;;;;;;;:::i;44107:509::-;;;;;;;;;;-1:-1:-1;44107:509:0;;;;;:::i;:::-;;:::i;20346:139::-;;;;;;;;;;;;;:::i;41671:1723::-;;;;;;;;;;-1:-1:-1;41671:1723:0;;;;;:::i;:::-;;:::i;30375:317::-;;;;;;;;;;-1:-1:-1;30375:317:0;;;;;:::i;:::-;;:::i;10756:148::-;;;;;;;;;;;;;:::i;38909:896::-;;;;;;;;;;-1:-1:-1;38909:896:0;;;;;:::i;:::-;;:::i;18092:120::-;;;;;;;;;;-1:-1:-1;18092:120:0;;;;;:::i;:::-;;:::i;43840:84::-;;;;;;;;;;-1:-1:-1;43840:84:0;;;;;:::i;:::-;;:::i;19750:92::-;;;;;;;;;;;;;:::i;26799:369::-;;;;;;;;;;-1:-1:-1;26799:369:0;;;;;:::i;:::-;;:::i;19640:104::-;;;;;;;;;;;;;:::i;43932:167::-;;;;;;;;;;-1:-1:-1;43932:167:0;;;;;:::i;:::-;;:::i;30704:191::-;;;;;;;;;;-1:-1:-1;30704:191:0;;;;;:::i;:::-;;:::i;18218:308::-;;;;;;;;;;-1:-1:-1;18218:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;10546:79::-;;;;;;;;;;;;;:::i;19848:90::-;;;;;;;;;;;;;:::i;30106:257::-;;;;;;;;;;;;;:::i;29768:101::-;;;;;;;;;;;;;:::i;31948:270::-;;;;;;;;;;-1:-1:-1;31948:270:0;;;;;:::i;:::-;;:::i;18652:85::-;;;;;;;;;;;;;:::i;30903:167::-;;;;;;;;;;-1:-1:-1;30903:167:0;;;;;:::i;:::-;;:::i;17815:122::-;;;;;;;;;;-1:-1:-1;17815:122:0;;;;;:::i;:::-;;:::i;20046:80::-;;;;;;;;;;;;;:::i;17943:142::-;;;;;;;;;;-1:-1:-1;17943:142:0;;;;;:::i;:::-;;:::i;20220:120::-;;;;;;;;;;-1:-1:-1;20220:120:0;;;;;:::i;:::-;;:::i;19442:92::-;;;;;;;;;;;;;:::i;18743:96::-;;;;;;;;;;;;;:::i;43664:168::-;;;;;;;;;;-1:-1:-1;43664:168:0;;;;;:::i;:::-;;:::i;20875:390::-;;;;;;;;;;-1:-1:-1;20875:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;19072:122::-;;;;;;;;;;-1:-1:-1;19072:122:0;;;;;:::i;:::-;;:::i;19540:94::-;;;;;;;;;;;;;:::i;43545:111::-;;;;;;;;;;-1:-1:-1;43545:111:0;;;;;:::i;:::-;;:::i;19328:108::-;;;;;;;;;;;;;:::i;36758:180::-;;;;;;;;;;-1:-1:-1;36758:180:0;;;;;:::i;:::-;;:::i;38000:643::-;;;;;;;;;;-1:-1:-1;38000:643:0;;;;;:::i;:::-;;:::i;44624:481::-;;;;;;;;;;-1:-1:-1;44624:481:0;;;;;:::i;:::-;;:::i;31078:144::-;;;;;;;;;;-1:-1:-1;31078:144:0;;;;;:::i;:::-;;:::i;45117:88::-;;;;;;;;;;-1:-1:-1;45117:88:0;;;;;:::i;:::-;;:::i;18532:114::-;;;;;;;;;;-1:-1:-1;18532:114:0;;;;;:::i;:::-;;:::i;38655:246::-;;;;;;;;;;-1:-1:-1;38655:246:0;;;;;:::i;:::-;;:::i;10910:244::-;;;;;;;;;;-1:-1:-1;10910:244:0;;;;;:::i;:::-;;:::i;18845:221::-;;;;;;;;;;-1:-1:-1;18845:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;29659:97::-;29696:13;29729:19;:17;:19::i;:::-;29722:26;;29659:97;;:::o;31230:161::-;31305:4;31322:39;31331:12;:10;:12::i;:::-;31345:7;31354:6;31322:8;:39::i;:::-;-1:-1:-1;31379:4:0;31230:161;;;;;:::o;29990:104::-;30043:7;30070:16;:14;:16::i;19200:122::-;-1:-1:-1;;;;;19288:26:0;;19264:4;19288:26;;;:17;:26;;;;;;;;19200:122;;;;:::o;31399:314::-;31497:4;31514:36;31524:6;31532:9;31543:6;31514:9;:36::i;:::-;31561:122;31570:6;31578:12;:10;:12::i;:::-;31592:90;31631:6;31592:90;;;;;;;;;;;;;;;;;:34;31606:6;31613:12;:10;:12::i;31592:34::-;:38;:90;:38;:90::i;:::-;31561:8;:122::i;:::-;-1:-1:-1;31701:4:0;31399:314;;;;;:::o;20132:82::-;20198:8;;-1:-1:-1;;;20198:8:0;;;;;20132:82::o;29881:97::-;29922:5;29947:23;:21;:23::i;31721:219::-;31809:4;31826:84;31835:12;:10;:12::i;:::-;31849:7;31858:51;31898:10;31858:35;31872:12;:10;:12::i;:::-;31885:7;31858:13;:35::i;:::-;:39;;:51::i;20491:139::-;20541:17;20596:25;:23;:25::i;36946:243::-;29217:19;:17;:19::i;:::-;-1:-1:-1;;;;;29203:33:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29203:33:0;;29195:56;;;;-1:-1:-1;;;29195:56:0;;;;;;;:::i;:::-;;;;;;;;;29271:15;:13;:15::i;:::-;29270:16;29262:41;;;;-1:-1:-1;;;29262:41:0;;;;;;;:::i;:::-;37035:27:::1;:25;:27::i;:::-;37018:13;:11;:13::i;:::-;:44;;37010:87;;;;-1:-1:-1::0;;;37010:87:0::1;;;;;;;:::i;:::-;37108:16;:14;:16::i;:::-;37135:12;:19:::0;;-1:-1:-1;;;;37135:19:0::1;-1:-1:-1::0;;;37135:19:0::1;::::0;;37165:16:::1;:14;:16::i;:::-;36946:243::o:0;19944:96::-;20021:11;;-1:-1:-1;;;;;20021:11:0;19944:96;:::o;43402:135::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43496:33:::1;43513:4;43519:9;43496:16;:33::i;:::-;43402:135:::0;;:::o;32226:149::-;29217:19;:17;:19::i;:::-;-1:-1:-1;;;;;29203:33:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29203:33:0;;29195:56;;;;-1:-1:-1;;;29195:56:0;;;;;;;:::i;:::-;29271:15;:13;:15::i;:::-;29270:16;29262:41;;;;-1:-1:-1;;;29262:41:0;;;;;;;:::i;:::-;32298:23:::1;32311:2;32314:6;32298:12;:23::i;:::-;32357:2;-1:-1:-1::0;;;;;32337:30:0::1;32354:1;-1:-1:-1::0;;;;;32337:30:0::1;-1:-1:-1::0;;;;;;;;;;;32360:6:0::1;32337:30;;;;;;:::i;:::-;;;;;;;;32226:149:::0;;:::o;24262:772::-;-1:-1:-1;;;;;24500:19:0;;24320:7;24500:19;;;:13;:19;;;;;:37;;;;24458:36;;;;24402:41;;;;24364:32;;;;;24320:7;;24363:175;;24500:37;24363:132;;24458:36;;24363:132;;24449:3;;24363:81;;24364:32;24363:38;:81::i;:::-;:85;;:90::i;:::-;:94;;:132::i;:175::-;24340:198;;24549:16;24595:58;24649:3;24596:47;24637:5;24596:36;:34;:36::i;24595:58::-;24580:12;:73;24576:451;;;24670:18;24691:30;24708:12;;24691:16;:30::i;:::-;24670:51;-1:-1:-1;24747:21:0;24670:51;24762:5;24747:14;:21::i;:::-;24736:32;;24798:33;:31;:33::i;:::-;24787:8;:44;24783:125;;;24859:33;:31;:33::i;:::-;24852:40;;;;;;;24783:125;-1:-1:-1;24929:8:0;-1:-1:-1;24922:15:0;;-1:-1:-1;24922:15:0;24576:451;24979:36;:34;:36::i;:::-;24972:43;;;;;;39813:843;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;39909:22:::1;39933:15:::0;39950:18:::1;39970:11:::0;39985:21:::1;39998:7;39985:12;:21::i;:::-;39908:98;;;;;;;;40025:6;:14;;40035:4;40025:14;;;40017:65;;;;-1:-1:-1::0;;;40017:65:0::1;;;;;;;:::i;:::-;40114:3;40101:10;:16;40093:64;;;;-1:-1:-1::0;;;40093:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40201:30:0;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:43:::1;::::0;40236:7;40201:34:::1;:43::i;:::-;-1:-1:-1::0;;;;;40168:30:0;;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:76;;;;40285:27;;::::1;::::0;;;;:40:::1;::::0;40317:7;40285:31:::1;:40::i;:::-;-1:-1:-1::0;;;;;40255:27:0;;::::1;;::::0;;;:14:::1;:27;::::0;;;;;:70;;;;40340:30;;::::1;::::0;;;;40336:82:::1;;-1:-1:-1::0;;;;;40377:33:0;::::1;40413:5;40377:33:::0;;;:17:::1;:33;::::0;;;;:41;;-1:-1:-1;;40377:41:0::1;::::0;;40336:82:::1;-1:-1:-1::0;;;;;40429:30:0;::::1;;::::0;;;:17:::1;:30;::::0;;;;:37;;-1:-1:-1;;40429:37:0::1;40462:4;40429:37;::::0;;40478:10:::1;:19:::0;;40447:11;;40478:10;40489:7;;40478:19;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;;:45:::0;;-1:-1:-1;;;;;;40478:45:0::1;-1:-1:-1::0;;;;;40478:45:0;;;::::1;::::0;;;::::1;::::0;;;40558:11:::1;:9;:11::i;:::-;40534:35:::0;-1:-1:-1;;;;;;40585:63:0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;;;;;;;;40621:26:0::1;:7:::0;40534:35;40621:11:::1;:26::i;:::-;40585:63;;;;;;:::i;:::-;;;;;;;;10741:1;;;;;39813:843:::0;;:::o;23698:558::-;-1:-1:-1;;;;;23939:19:0;;23756:7;23939:19;;;:13;:19;;;;;:32;;;;23892:41;;;;23840:37;;;;23798:36;;;;;23756:7;;23797:175;;23939:32;23797:137;;23892:41;;23797:137;;23883:3;;23797:81;;23798:36;23797:42;:81::i;:175::-;23776:196;;24000:56;24052:3;24000:47;24041:5;24001:34;:32;:34::i;24000:56::-;23987:10;:69;23983:266;;;24073:18;24094:26;24109:10;;24094:14;:26::i;:::-;24073:47;-1:-1:-1;24142:21:0;24073:47;24157:5;24142:14;:21::i;23983:266::-;24203:34;:32;:34::i;:::-;24196:41;;;;;20636:233;20701:12;;20677:7;;-1:-1:-1;;;20701:12:0;;;;20697:165;;;20753:12;;20737:11;;:29;;:15;:29::i;:::-;20730:36;;;;20697:165;20806:44;20822:27;:25;:27::i;:::-;20806:11;;;:15;:44::i;44107:509::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;44193:27:::1;44212:7;44193:18;:27::i;:::-;44185:54;;;;-1:-1:-1::0;;;44185:54:0::1;;;;;;;:::i;:::-;44267:17;::::0;;-1:-1:-1;;;;;44267:17:0;;::::1;44288:5;44250:35:::0;;;:16:::1;:35;::::0;;;;:43;;-1:-1:-1;;44250:43:0::1;::::0;;44335:17;;44325:28:::1;::::0;44335:17:::1;44325:9;:28::i;:::-;44304:49:::0;-1:-1:-1;44368:14:0;;44364:164:::1;;44409:17;::::0;44399:49:::1;::::0;-1:-1:-1;;;;;44409:17:0::1;44428:7:::0;44437:10;44399:9:::1;:49::i;:::-;44477:17;::::0;44468:48:::1;::::0;-1:-1:-1;;;;;44468:48:0;;::::1;::::0;44477:17:::1;::::0;-1:-1:-1;;;;;;;;;;;44468:48:0;::::1;::::0;44505:10;;44468:48:::1;:::i;:::-;;;;;;;;44364:164;-1:-1:-1::0;44538:17:0::1;:27:::0;;-1:-1:-1;;;;;44538:27:0;;::::1;-1:-1:-1::0;;;;;;44538:27:0;;::::1;::::0;::::1;::::0;;:17:::1;44576:25:::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;44576:32:0::1;44538:27:::0;44576:32:::1;::::0;;44107:509::o;20346:139::-;20395:18;20452:24;:22;:24::i;41671:1723::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;29444:8:::1;:15:::0;;-1:-1:-1;;;;29444:15:0::1;-1:-1:-1::0;;;29444:15:0::1;::::0;;;41810:18:::2;:16;:18::i;:::-;41773:55;;41839:32;41874:19;:17;:19::i;:::-;41943:48;::::0;-1:-1:-1;;;41943:48:0;;41839:54;;-1:-1:-1;41904:24:0::2;::::0;;;-1:-1:-1;;;;;41943:22:0;::::2;::::0;::::2;::::0;:48:::2;::::0;41966:9;;41985:4:::2;::::0;41943:48:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41943:62:0::2;;41939:278;;;42041:65;::::0;-1:-1:-1;;;42041:65:0;;-1:-1:-1;;;;;42041:25:0;::::2;::::0;::::2;::::0;:65:::2;::::0;42081:9;;42100:4:::2;::::0;42041:65:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42022:84;;41939:278;;;42158:47;::::0;-1:-1:-1;;;42158:47:0;;-1:-1:-1;;;;;42158:22:0;::::2;::::0;::::2;::::0;:47:::2;::::0;42181:9;;42199:4:::2;::::0;42158:47:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42139:66;;41939:278;42312:1;-1:-1:-1::0;;;;;42235:79:0::2;:14;-1:-1:-1::0;;;;;42235:22:0::2;;42258:9;42276:15;-1:-1:-1::0;;;;;42276:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42235:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42235:79:0::2;;;42227:118;;;;-1:-1:-1::0;;;42227:118:0::2;;;;;;;:::i;:::-;42392:6;42364:24;42382:4;42364:9;:24::i;:::-;:34;;42356:79;;;;-1:-1:-1::0;;;42356:79:0::2;;;;;;;:::i;:::-;42446:17;42466:13;:6:::0;42477:1:::2;42466:10;:13::i;:::-;42446:33:::0;-1:-1:-1;42490:13:0::2;42506:21;:6:::0;42446:33;42506:10:::2;:21::i;:::-;42490:37;;42538:22;42570:9;-1:-1:-1::0;;;;;42563:27:0::2;;42599:4;42563:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42640:16;::::0;;42654:1:::2;42640:16:::0;;;;;::::2;::::0;;;42538:67;;-1:-1:-1;42616:21:0::2;::::0;42640:16;::::2;::::0;::::2;42616:21:::0;;42640:16:::2;::::0;::::2;;::::0;-1:-1:-1;42640:16:0::2;42616:40;;42685:4;42667;42672:1;42667:7;;;;;;;;;;;;;:23;-1:-1:-1::0;;;;;42667:23:0::2;;;-1:-1:-1::0;;;;;42667:23:0::2;;;::::0;::::2;42711:15;-1:-1:-1::0;;;;;42711:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42701:4;42706:1;42701:7;;;;;;;;;;;;;:32;-1:-1:-1::0;;;;;42701:32:0::2;;;-1:-1:-1::0;;;;;42701:32:0::2;;;::::0;::::2;42754:9;42744:4;42749:1;42744:7;;;;;;;;;;;;;:19;-1:-1:-1::0;;;;;42744:19:0::2;;;-1:-1:-1::0;;;;;42744:19:0::2;;;::::0;::::2;42774:60;42791:4;42806:15;42824:9;42774:8;:60::i;:::-;42845:135;::::0;-1:-1:-1;;;42845:135:0;;-1:-1:-1;;;;;42845:69:0;::::2;::::0;::::2;::::0;:135:::2;::::0;42929:9;;42940:1:::2;::::0;42943:4;;42957::::2;::::0;42964:15:::2;::::0;42845:135:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;42991:18;43012:62;43059:14;43019:9;-1:-1:-1::0;;;;;43012:27:0::2;;43048:4;43012:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46:::0;::::2;:62::i;:::-;42991:83;;43085:56;43102:4;43117:15;43135:5;43085:8;:56::i;:::-;43152:63;::::0;-1:-1:-1;;;43152:63:0;;-1:-1:-1;;;;;43152:25:0;::::2;::::0;::::2;::::0;:63:::2;::::0;43186:15;;43204:10;;43152:63:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;43226:104:0::2;::::0;-1:-1:-1;;;43226:104:0;;-1:-1:-1;;;;;43226:28:0;::::2;::::0;::::2;::::0;:104:::2;::::0;43263:4:::2;::::0;43269:9;;43279:5;;43285:10;;43296:1:::2;::::0;;;43263:4;;43314:15:::2;::::0;43226:104:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43341:45;43358:16;43376:9;43341:16;:45::i;:::-;-1:-1:-1::0;;29482:8:0::1;:16:::0;;-1:-1:-1;;;;29482:16:0::1;::::0;;-1:-1:-1;;;;;;;;41671:1723:0:o;30375:317::-;30441:7;30461:21;30485:11;:9;:11::i;:::-;30461:35;;30511:25;30528:7;30511:16;:25::i;:::-;30507:115;;;30546:75;30607:13;30546:56;30576:25;30593:7;30576:16;:25::i;:::-;30546;30563:7;30546:16;:25::i;30507:115::-;30640:44;30670:13;30640:25;30657:7;30640:16;:25::i;:44::-;30633:51;30375:317;-1:-1:-1;;;30375:317:0:o;10756:148::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;10847:6:::1;::::0;10826:40:::1;::::0;10863:1:::1;::::0;-1:-1:-1;;;;;10847:6:0::1;::::0;10826:40:::1;::::0;10863:1;;10826:40:::1;10877:6;:19:::0;;-1:-1:-1;;;;;;10877:19:0::1;::::0;;10756:148::o;38909:896::-;38977:30;38994:12;:10;:12::i;38977:30::-;38969:70;;;;-1:-1:-1;;;38969:70:0;;;;;;;:::i;:::-;39051:19;39072:15;39089:18;39109:11;39124:21;39137:7;39124:12;:21::i;:::-;39050:95;;;;;;;;39178:3;39164:10;:17;;39156:64;;;;-1:-1:-1;;;39156:64:0;;;;;;;:::i;:::-;39254:12;:10;:12::i;:::-;-1:-1:-1;;;;;39239:27:0;:11;-1:-1:-1;;;;;39239:27:0;;39231:76;;;;-1:-1:-1;;;39231:76:0;;;;;;;:::i;:::-;39337:4;39326:15;;;;39318:66;;;;-1:-1:-1;;;39318:66:0;;;;;;;:::i;:::-;39417:19;;:32;;39441:7;39417:23;:32::i;:::-;39395:19;:54;39491:41;39524:7;39491:14;;39506:12;:10;:12::i;:::-;-1:-1:-1;;;;;39491:28:0;;;;;;;;;;;;-1:-1:-1;39491:28:0;;;:32;:41::i;:::-;39460:14;:28;39475:12;:10;:12::i;:::-;-1:-1:-1;;;;;39460:28:0;-1:-1:-1;;;;;39460:28:0;;;;;;;;;;;;:72;;;;39574:41;39607:7;39574:14;:28;39589:12;:10;:12::i;:::-;-1:-1:-1;;;;;39574:28:0;;;;;;;;;;;;-1:-1:-1;39574:28:0;;;:32;:41::i;:::-;39543:14;:28;39558:12;:10;:12::i;:::-;-1:-1:-1;;;;;39543:28:0;-1:-1:-1;;;;;39543:28:0;;;;;;;;;;;;:72;;;;39662:1;39630:14;:28;39645:12;:10;:12::i;:::-;-1:-1:-1;;;;;39630:28:0;-1:-1:-1;;;;;39630:28:0;;;;;;;;;;;;;:33;39626:78;;39699:5;39665:17;:31;39683:12;:10;:12::i;:::-;-1:-1:-1;;;;;39665:31:0;;;;;;;;;;;;-1:-1:-1;39665:31:0;:39;;-1:-1:-1;;39665:39:0;;;;;;;;;;39626:78;39751:1;39715:10;39726:7;39715:19;;;;;;;;;;;;;;;;;;:33;;:37;;;;39792:5;39763:10;39774:7;39763:19;;;;;;;;;;;;;;;;;;;;;:26;;:34;;-1:-1:-1;;39763:34:0;;;;;;;;;;-1:-1:-1;;;;;38909:896:0:o;18092:120::-;18155:7;18182:15;18198:5;18182:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18182:22:0;;18092:120;-1:-1:-1;;18092:120:0:o;43840:84::-;29093:29;29109:12;:10;:12::i;29093:29::-;29085:52;;;;-1:-1:-1;;;29085:52:0;;;;;;;:::i;:::-;43901:8:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;43901:15:0::1;-1:-1:-1::0;;;;43901:15:0;;::::1;::::0;;;::::1;::::0;;43840:84::o;19750:92::-;19823:11;;-1:-1:-1;;;;;19823:11:0;19750:92;:::o;26799:369::-;-1:-1:-1;;;;;26954:19:0;;;26856:20;26954:19;;;:13;:19;;;;;:29;26856:20;;;;;;26925:59;;26948:4;;26954:29;26925:22;:59::i;:::-;-1:-1:-1;;;;;26995:19:0;;;;;;;:13;:19;;;;;;;;:29;;;:41;;;;27047:32;;;:47;;;;-1:-1:-1;27105:36:0;;;:55;;;;-1:-1:-1;;;26799:369:0:o;19640:104::-;19719:17;;-1:-1:-1;;;;;19719:17:0;19640:104;:::o;43932:167::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;44015:21:::1;44031:4;44015:15;:21::i;:::-;44007:43;;;;-1:-1:-1::0;;;44007:43:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44061:22:0::1;44086:5;44061:22:::0;;;:16:::1;:22;::::0;;;;:30;;-1:-1:-1;;44061:30:0::1;::::0;;43932:167::o;30704:191::-;30769:7;30789:21;30813:11;:9;:11::i;:::-;30789:35;;30842:44;30872:13;30842:25;30859:7;30842:16;:25::i;18218:308::-;18278:7;18287;18296;18305;18314;18323;18343:21;;:::i;:::-;-1:-1:-1;;;;;;;;;18367:19:0;;;;;;;:13;:19;;;;;;;;;18343:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18343:43:0;;-1:-1:-1;18343:43:0;;-1:-1:-1;18218:308:0:o;10546:79::-;10611:6;;-1:-1:-1;;;;;10611:6:0;10546:79;:::o;19848:90::-;19918:12;;-1:-1:-1;;;19918:12:0;;;;;19848:90::o;30106:257::-;30156:7;30176:21;30200:11;:9;:11::i;:::-;30176:35;;30229:126;30328:26;30338:15;:13;:15::i;30328:26::-;30229:94;30298:24;30316:4;30298:9;:24::i;:::-;30229:64;30250:42;30278:13;30250:23;:21;:23::i;:42::-;30229:16;:14;:16::i;:126::-;30222:133;;;30106:257;:::o;29768:101::-;29807:13;29840:21;:19;:21::i;31948:270::-;32041:4;32058:130;32067:12;:10;:12::i;:::-;32081:7;32090:97;32130:15;32090:97;;;;;;;;;;;;;;;;;:35;32104:12;:10;:12::i;:::-;32117:7;32090:13;:35::i;18652:85::-;18720:9;;-1:-1:-1;;;;;18720:9:0;18652:85;:::o;30903:167::-;30981:4;30998:42;31008:12;:10;:12::i;:::-;31022:9;31033:6;30998:9;:42::i;17815:122::-;-1:-1:-1;;;;;17906:23:0;17879:7;17906:23;;;;;;;;;;;;17815:122::o;20046:80::-;20111:7;;-1:-1:-1;;;20111:7:0;;;;;20046:80::o;17943:142::-;-1:-1:-1;;;;;18048:20:0;;;18021:7;18048:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;17943:142::o;20220:120::-;-1:-1:-1;;;;;20307:25:0;20283:4;20307:25;;;:16;:25;;;;;;;;;20220:120::o;19442:92::-;19515:11;;19442:92;:::o;18743:96::-;18818:13;;18743:96;:::o;43664:168::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43745:21:::1;43761:4;43745:15;:21::i;:::-;43744:22;43736:48;;;;-1:-1:-1::0;;;43736:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43795:22:0::1;;::::0;;;:16:::1;:22;::::0;;;;:29;;-1:-1:-1;;43795:29:0::1;43820:4;43795:29;::::0;;43664:168::o;20875:390::-;20961:7;20970;20979;20999:17;21026:4;-1:-1:-1;;;;;21019:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21079:37;;-1:-1:-1;;;21079:37:0;;20999:46;;-1:-1:-1;21056:20:0;;21094:4;;21079:31;;:37;;21111:4;;21079:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21056:60;;21127:24;21169:9;-1:-1:-1;;;;;21154:36:0;;21191:4;21154:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21215:12;;;;-1:-1:-1;21247:9:0;;-1:-1:-1;20875:390:0;-1:-1:-1;;;;20875:390:0:o;19072:122::-;-1:-1:-1;;;;;19163:23:0;19136:7;19163:23;;;:14;:23;;;;;;;19072:122::o;19540:94::-;19614:12;;19540:94;:::o;43545:111::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43623:25:::1;43643:4;43623:19;:25::i;:::-;43545:111:::0;:::o;19328:108::-;19409:19;;19328:108;:::o;36758:180::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;36839:15:::1;:13;:15::i;:::-;36838:16;36830:57;;;;-1:-1:-1::0;;;36830:57:0::1;;;;;;;:::i;:::-;36898:32;36919:10;36898:20;:32::i;38000:643::-:0;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;38121:15:::1;:13;:15::i;:::-;38120:16;38112:53;;;;-1:-1:-1::0;;;38112:53:0::1;;;;;;;:::i;:::-;38176:21;38200:11;:9;:11::i;:::-;38176:35:::0;-1:-1:-1;38222:19:0::1;38244:25;:6:::0;38176:35;38244:10:::1;:25::i;:::-;38296:47;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;38296:47:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;38338:4:::1;38296:47:::0;;;;;;38280:10:::1;:64:::0;;;;::::1;::::0;;-1:-1:-1;38280:64:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;38280:64:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38280:64:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;38381:23;;:14:::1;:23:::0;;;;38296:47;;-1:-1:-1;38381:40:0::1;::::0;38296:47;38381:27:::1;:40::i;:::-;-1:-1:-1::0;;;;;38355:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;:66;;;;38432:17:::1;:26:::0;;;:33;;-1:-1:-1;;38432:33:0::1;38461:4;38432:33;::::0;;38498:19:::1;::::0;:36:::1;::::0;38522:11;38498:23:::1;:36::i;:::-;38476:19;:58:::0;38560:12:::1;::::0;:24:::1;::::0;38577:6;38560:16:::1;:24::i;:::-;38545:12;:39:::0;38600:35:::1;::::0;-1:-1:-1;;;;;38600:35:0;::::1;::::0;38617:1:::1;::::0;-1:-1:-1;;;;;;;;;;;38600:35:0;::::1;::::0;38628:6;;38600:35:::1;:::i;:::-;;;;;;;;10741:1;;38000:643:::0;;;:::o;44624:481::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;29444:8:::1;:15:::0;;-1:-1:-1;;;;29444:15:0::1;-1:-1:-1::0;;;29444:15:0::1;::::0;;44712:27:::2;44731:7:::0;44712:18:::2;:27::i;:::-;44704:54;;;;-1:-1:-1::0;;;44704:54:0::2;;;;;;;:::i;:::-;44786:11;::::0;;-1:-1:-1;;;;;44786:11:0;;::::2;44801:5;44769:29:::0;;;:16:::2;:29;::::0;;;;:37;;-1:-1:-1;;44769:37:0::2;::::0;;44848:11;;44838:22:::2;::::0;44848:11:::2;44838:9;:22::i;:::-;44817:43:::0;-1:-1:-1;44875:14:0;;44871:152:::2;;44916:11;::::0;44906:43:::2;::::0;-1:-1:-1;;;;;44916:11:0::2;44929:7:::0;44938:10;44906:9:::2;:43::i;:::-;44978:11;::::0;44969:42:::2;::::0;-1:-1:-1;;;;;44969:42:0;;::::2;::::0;44978:11:::2;::::0;-1:-1:-1;;;;;;;;;;;44969:42:0;::::2;::::0;45000:10;;44969:42:::2;:::i;:::-;;;;;;;;44871:152;-1:-1:-1::0;45033:11:0::2;:21:::0;;-1:-1:-1;;;;;45033:21:0;;::::2;-1:-1:-1::0;;;;;;45033:21:0;;::::2;::::0;::::2;::::0;;:11:::2;45065:25:::0;;;:16:::2;:25;::::0;;;;:32;;-1:-1:-1;;45065:32:0::2;45033:21:::0;45065:32:::2;::::0;;29482:8:::1;:16:::0;;-1:-1:-1;;;;29482:16:0::1;::::0;;44624:481::o;31078:144::-;31159:7;31186:28;31200:5;31206:7;31186:13;:28::i;45117:88::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;45183:7:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;45183:14:0::1;-1:-1:-1::0;;;;45183:14:0;;::::1;::::0;;;::::1;::::0;;45117:88::o;18532:114::-;-1:-1:-1;;;;;18616:22:0;18592:4;18616:22;;;:16;:22;;;;;;;;;18532:114::o;38655:246::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;38758:15:::1;:13;:15::i;:::-;38757:16;38749:53;;;;-1:-1:-1::0;;;38749:53:0::1;;;;;;;:::i;10910:244::-:0;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10999:22:0;::::1;10991:73;;;;-1:-1:-1::0;;;10991:73:0::1;;;;;;;:::i;:::-;11101:6;::::0;11080:38:::1;::::0;-1:-1:-1;;;;;11080:38:0;;::::1;::::0;11101:6:::1;::::0;11080:38:::1;::::0;11101:6:::1;::::0;11080:38:::1;11129:6;:17:::0;;-1:-1:-1;;;;;;11129:17:0::1;-1:-1:-1::0;;;;;11129:17:0;;;::::1;::::0;;;::::1;::::0;;10910:244::o;18845:221::-;18901:7;18910;18919;18928:4;18945:17;;:::i;:::-;18965:10;18976:3;18965:15;;;;;;;;;;;;;;;;;18945:35;;;;;;;;18965:15;;;;;;;;18945:35;;-1:-1:-1;;;;;18945:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18945:35:0;-1:-1:-1;18945:35:0;-1:-1:-1;18845:221:0;-1:-1:-1;;;18845:221:0:o;13480:94::-;-1:-1:-1;;11335:27:0;13480:94::o;7067:174::-;7186:20;7225:8;;;7067:174::o;5629:179::-;5687:7;5719:5;;;5743:6;;;;5735:46;;;;-1:-1:-1;;;5735:46:0;;;;;;;:::i;6404:132::-;6462:7;6489:39;6493:1;6496;6489:39;;;;;;;;;;;;;;;;;:3;:39::i;15326:96::-;12302:10;15326:96;:::o;6152:246::-;6210:7;6234:6;6230:47;;-1:-1:-1;6264:1:0;6257:8;;6230:47;6299:5;;;6303:1;6299;:5;:1;6323:5;;;;;:10;6315:56;;;;-1:-1:-1;;;6315:56:0;;;;;;;:::i;5814:136::-;5872:7;5899:43;5903:1;5906;5899:43;;;;;;;;;;;;;;;;;:3;:43::i;16090:100::-;12839:42;16090:100;:::o;13376:98::-;11274:14;13376:98;:::o;15770:96::-;12553:42;15770:96;:::o;14038:112::-;11420:3;14038:112;:::o;14502:100::-;11644:3;14502:100;:::o;14278:110::-;11589:4;14278:110;:::o;14394:102::-;11533:2;14394:102;:::o;16196:89::-;16272:5;;;;;;;;;;;;-1:-1:-1;;;16272:5:0;;;;16196:89;:::o;9862:106::-;9950:10;9862:106;:::o;32383:336::-;-1:-1:-1;;;;;32476:19:0;;32468:68;;;;-1:-1:-1;;;32468:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32555:21:0;;32547:68;;;;-1:-1:-1;;;32547:68:0;;;;;;;:::i;:::-;32626:37;32640:5;32647:7;32656:6;32626:13;:37::i;:::-;32695:7;-1:-1:-1;;;;;32679:32:0;32688:5;-1:-1:-1;;;;;32679:32:0;;32704:6;32679:32;;;;;;:::i;:::-;;;;;;;;32383:336;;;:::o;32727:3605::-;29367:10;:8;:10::i;:::-;29366:11;29358:30;;;;-1:-1:-1;;;29358:30:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32833:20:0;::::1;32825:70;;;;-1:-1:-1::0;;;32825:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32914:23:0;::::1;32906:71;;;;-1:-1:-1::0;;;32906:71:0::1;;;;;;;:::i;:::-;33005:1;32996:6;:10;32988:55;;;;-1:-1:-1::0;;;32988:55:0::1;;;;;;;:::i;:::-;33072:17;33082:6;33072:9;:17::i;:::-;33062:6;:27;;33054:61;;;;-1:-1:-1::0;;;33054:61:0::1;;;;;;;:::i;:::-;33144:25;33162:6;33144:17;:25::i;:::-;33134:6;:35;;33126:78;;;;-1:-1:-1::0;;;33126:78:0::1;;;;;;;:::i;:::-;33223:15;:13;:15::i;:::-;33215:47;;;;-1:-1:-1::0;;;33215:47:0::1;;;;;;;:::i;:::-;33283:49;33305:26;:24;:26::i;:::-;33283:17;:15;:17::i;:49::-;33277:3;:55;33273:74;;;33334:13;:11;:13::i;:::-;33358:21;33382:11;:9;:11::i;:::-;33358:35:::0;-1:-1:-1;33404:19:0::1;33426:25;:6:::0;33358:35;33426:10:::1;:25::i;:::-;33404:47;;33462:14;33491:11;:9;:11::i;:::-;33487:425;;;-1:-1:-1::0;33528:1:0::1;33487:425;;;33562:11;33592:23;33608:6;33592:15;:23::i;:::-;33588:252;;;33645:16;33654:6;33645:8;:16::i;:::-;33636:25;;33588:252;;;33687:26;33703:9;33687:15;:26::i;:::-;33683:157;;;33733:25;33748:9;33733:14;:25::i;:::-;33683:157;;;33814:9;::::0;33799:25:::1;::::0;-1:-1:-1;;;;;33814:9:0::1;33799:14;:25::i;:::-;33863:37;33874:6;33882:9;33893:6;33863:10;:37::i;:::-;33854:46;;33487:425;;34007:6;34017:1;34007:11;34003:2322;;;34036:22;34060:20:::0;34082:17:::1;34103:28;34116:6;34124;34103:12;:28::i;:::-;-1:-1:-1::0;;;;;34223:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;34035:96;;-1:-1:-1;34035:96:0;;-1:-1:-1;34035:96:0;-1:-1:-1;34223:39:0::1;::::0;34250:11;34223:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;34198:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;34305:25;;::::1;::::0;;;;:42:::1;::::0;34335:11;34305:29:::1;:42::i;:::-;-1:-1:-1::0;;;;;34277:25:0;::::1;:14;:25:::0;;;::::1;::::0;;;;;;:70;34396::::1;34432:33;:14:::0;34451:13;34432:18:::1;:33::i;:::-;34396:14;:31:::0;34411:15:::1;:13;:15::i;34396:70::-;34362:14;:31:::0;34377:15:::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;34362:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34362:31:0;:104;34526:79:::1;34573:31;:12:::0;34590:13;34573:16:::1;:31::i;:::-;34526:14;:42:::0;34541:26:::1;:24;:26::i;34526:79::-;34481:14;:42:::0;34496:26:::1;:24;:26::i;:::-;-1:-1:-1::0;;;;;34481:42:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34481:42:0;:124;34635:12:::1;::::0;:27:::1;::::0;34652:9;34635:16:::1;:27::i;:::-;34620:12;:42;;;;34699:9;-1:-1:-1::0;;;;;34682:35:0::1;34691:6;-1:-1:-1::0;;;;;34682:35:0::1;-1:-1:-1::0;;;;;;;;;;;34710:6:0::1;34682:35;;;;;;:::i;:::-;;;;;;;;34757:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;34737:51:0::1;34754:1;-1:-1:-1::0;;;;;34737:51:0::1;-1:-1:-1::0;;;;;;;;;;;34773:14:0::1;34737:51;;;;;;:::i;:::-;;;;;;;;34828:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;34808:60:0::1;34825:1;-1:-1:-1::0;;;;;34808:60:0::1;-1:-1:-1::0;;;;;;;;;;;34855:12:0::1;34808:60;;;;;;:::i;:::-;;;;;;;;34003:2322;;;;;;34997:6;35007:1;34997:11;34993:1332;;;35026:16;35044:21:::0;35069:32:::1;35083:9;35094:6;35069:13;:32::i;:::-;35025:76;;;;35117:18;35137:23:::0;35164:21:::1;35178:6;35164:13;:21::i;:::-;35116:69:::0;;-1:-1:-1;35116:69:0;-1:-1:-1;35200:28:0::1;35231:36;35116:69:::0;35231:20:::1;:6:::0;35242:8;35231:10:::1;:20::i;:36::-;35200:67:::0;-1:-1:-1;35282:27:0::1;35312:39;35200:67:::0;35337:13;35312:24:::1;:39::i;:::-;-1:-1:-1::0;;;;;35391:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;35282:69;;-1:-1:-1;35391:39:0::1;::::0;35418:11;35391:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;35366:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;35473:25;;::::1;::::0;;;;:50:::1;::::0;35503:19;35473:29:::1;:50::i;:::-;-1:-1:-1::0;;;;;35445:25:0;;::::1;:14;:25:::0;;;::::1;::::0;;;;;;;:78;;;;35589:17:::1;::::0;;;::::1;35574:33:::0;;;;:54:::1;::::0;35612:15;35574:37:::1;:54::i;:::-;35553:17;::::0;-1:-1:-1;;;;;35553:17:0::1;35538:14;:33:::0;;;::::1;::::0;;;;;;:90;35658:12:::1;::::0;:26:::1;::::0;35675:8;35658:16:::1;:26::i;:::-;35643:12;:41:::0;35713:11:::1;::::0;:30:::1;::::0;35729:13;35713:15:::1;:30::i;:::-;35699:11;:44;;;;35780:9;-1:-1:-1::0;;;;;35763:49:0::1;35772:6;-1:-1:-1::0;;;;;35763:49:0::1;-1:-1:-1::0;;;;;;;;;;;35791:20:0::1;35763:49;;;;;;:::i;:::-;;;;;;;;35857:1;-1:-1:-1::0;;;;;35832:38:0::1;35841:6;-1:-1:-1::0;;;;;35832:38:0::1;-1:-1:-1::0;;;;;;;;;;;35861:8:0::1;35832:38;;;;;;:::i;:::-;;;;;;;;35907:17;::::0;35890:47:::1;::::0;-1:-1:-1;;;;;35907:17:0;;::::1;::::0;35890:47;::::1;::::0;-1:-1:-1;;;;;;;;;;;35890:47:0;::::1;::::0;35926:10;;35890:47:::1;:::i;:::-;;;;;;;;34993:1332;;;;;;;;;36081:6;36091:1;36081:11;36077:248;;;-1:-1:-1::0;;;;;36134:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:39:::1;::::0;36161:11;36134:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;36109:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;36216:25;;::::1;::::0;;;;:42:::1;::::0;36246:11;36216:29:::1;:42::i;:::-;-1:-1:-1::0;;;;;36188:25:0;;::::1;:14;:25:::0;;;::::1;::::0;;;;;;;;:70;;;;36278:35;;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;36278:35:0;::::1;::::0;36306:6;;36278:35:::1;:::i;:::-;;;;;;;;36077:248;29399:1;;;32727:3605:::0;;;:::o;5956:190::-;6042:7;6078:12;6070:6;;;;6062:29;;;;-1:-1:-1;;;6062:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6114:5:0;;;5956:190::o;16389:88::-;13131:1;16389:88;:::o;15872:98::-;12645:42;15872:98;:::o;37197:795::-;37251:15;:13;:15::i;:::-;37250:16;37242:53;;;;-1:-1:-1;;;37242:53:0;;;;;;;:::i;:::-;37306:55;37319:26;:24;:26::i;:::-;37347:13;37306:12;:55::i;:::-;37372:26;:24;:26::i;:::-;-1:-1:-1;;;;;37372:35:0;:65;37408:28;:21;37434:1;37408:25;:28::i;:::-;37372:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37448:14;37465:46;37497:13;:11;:13::i;:::-;37465:27;:25;:27::i;:46::-;37448:63;;37522:19;37544:65;37582:26;:24;:26::i;:::-;37544:33;:21;37570:6;37544:25;:33::i;:65::-;37522:87;;37632:11;37623:6;:20;37620:175;;;37660:48;37681:1;37684:23;:6;37695:11;37684:10;:23::i;:::-;37660:12;:48::i;:::-;37756:1;;-1:-1:-1;;;;;;;;;;;37759:23:0;:6;37770:11;37759:10;:23::i;:::-;37728:55;;;;;;:::i;:::-;;;;;;;;37620:175;37805:40;37826:4;37833:11;37805:12;:40::i;:::-;37881:26;:24;:26::i;:::-;-1:-1:-1;;;;;37861:61:0;37878:1;-1:-1:-1;;;;;37861:61:0;-1:-1:-1;;;;;;;;;;;37908:13:0;37861:61;;;;;;:::i;:::-;;;;;;;;37938:46;;37966:4;;37955:1;;-1:-1:-1;;;;;;;;;;;37938:46:0;;;37972:11;;37938:46;:::i;40664:999::-;29444:8;:15;;-1:-1:-1;;;;29444:15:0;-1:-1:-1;;;29444:15:0;;;;40756:18:::1;:16;:18::i;:::-;40719:55;;40785:32;40820:19;:17;:19::i;:::-;40785:54;;40850:24;40971:1:::0;-1:-1:-1;;;;;40889:84:0::1;:14;-1:-1:-1::0;;;;;40889:22:0::1;;40920:15;-1:-1:-1::0;;;;;40920:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40953:4;40889:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40889:84:0::1;;40885:335;;;41009:14;-1:-1:-1::0;;;;;41009:25:0::1;;41057:15;-1:-1:-1::0;;;;;41057:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41090:4;41009:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40990:106;;40885:335;;;41148:14;-1:-1:-1::0;;;;;41148:22:0::1;;41179:4;41185:15;-1:-1:-1::0;;;;;41185:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41148:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41129:79;;40885:335;41230:19;41252:24;41270:4;41252:9;:24::i;:::-;41230:46;;41295:80;41312:4;41319:42;41363:11;41295:8;:80::i;:::-;41386:15;-1:-1:-1::0;;;;;41386:31:0::1;;41425:21;41456:4;41475:11;41488:1;41491::::0;41494:26:::1;:24;:26::i;:::-;41522:15;41386:152;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41549:67;41566:16;41592:15;-1:-1:-1::0;;;;;41592:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41549:16;:67::i;:::-;-1:-1:-1::0;41627:9:0::1;:28:::0;;-1:-1:-1;;;;;;41627:28:0::1;-1:-1:-1::0;;;;;41627:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29482:8:0;:16;;-1:-1:-1;;;;29482:16:0;;;40664:999::o;27174:478::-;27262:21;27278:4;27262:15;:21::i;:::-;27261:22;27253:64;;;;-1:-1:-1;;;27253:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27328:22:0;;;;;;:16;:22;;;;;:29;;-1:-1:-1;;27328:29:0;27353:4;27328:29;;;;;;27368:15;:26;;;;;;;;;;;;;-1:-1:-1;;;;;;27368:26:0;;;;;;;27328:22;;27475:39;27345:4;27504:9;27475:22;:39::i;:::-;27547:97;;;;;;;;-1:-1:-1;;;;;27547:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27525:19;;;-1:-1:-1;27525:19:0;;;:13;:19;;;;;;;;:119;;;;-1:-1:-1;;;;;;27525:119:0;;;;;;;;;;;-1:-1:-1;27525:119:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27525:119:0;;;;;;;;;;-1:-1:-1;27174:478:0:o;25338:303::-;25413:21;25437:11;:9;:11::i;:::-;25413:35;-1:-1:-1;25459:19:0;25481:25;:6;25413:35;25481:10;:25::i;:::-;-1:-1:-1;;;;;25543:23:0;;:14;:23;;;;;;;;;;;25459:47;;-1:-1:-1;25543:40:0;;25459:47;25543:27;:40::i;:::-;-1:-1:-1;;;;;25517:23:0;;:14;:23;;;;;;;;;;:66;25609:12;;:24;;25626:6;25609:16;:24::i;:::-;25594:12;:39;-1:-1:-1;;;;25338:303:0:o;16291:92::-;16368:7;;;;;;;;;;;;-1:-1:-1;;;16368:7:0;;;;16291:92;:::o;27658:519::-;27729:21;27745:4;27729:15;:21::i;:::-;27721:70;;;;-1:-1:-1;;;27721:70:0;;;;;;;:::i;:::-;27807:9;27802:368;27826:15;:22;27822:26;;27802:368;;;27896:4;-1:-1:-1;;;;;27874:26:0;:15;27890:1;27874:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27874:18:0;:26;27870:289;;;27942:15;27958:22;;-1:-1:-1;;27958:26:0;;;27942:43;;;;;;;;;;;;;;;;27921:15;:18;;-1:-1:-1;;;;;27942:43:0;;;;27937:1;;27921:18;;;;;;;;;;;;;;;;;:64;;-1:-1:-1;;;;;27921:64:0;;;-1:-1:-1;;;;;;27921:64:0;;;;;;;28004:22;;;;;:16;:22;;;;;;;:30;;-1:-1:-1;;28004:30:0;;;28060:13;:19;;;;;;28053:26;;;;;;;27921:64;28053:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;28098:21;;;;;;;;;;;;;;;;-1:-1:-1;;28098:21:0;;;;;-1:-1:-1;;;;;;28098:21:0;;;;;;28138:5;;27870:289;27850:3;;27802:368;;25081:110;25155:11;:28;;-1:-1:-1;;;;;;25155:28:0;-1:-1:-1;;;;;25155:28:0;;;;;;;;;;25081:110::o;6542:189::-;6628:7;6663:12;6656:5;6648:28;;;;-1:-1:-1;;;6648:28:0;;;;;;;;:::i;:::-;;6687:9;6703:1;6699;:5;;;;;;;6542:189;-1:-1:-1;;;;;6542:189:0:o;25197:135::-;-1:-1:-1;;;;;25288:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;25197:135::o;25834:377::-;25877:17;:15;:17::i;:::-;25910:9;25905:299;25925:15;:22;25923:24;;25905:299;;;26023:13;:33;26037:15;26053:1;26037:18;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26037:18:0;-1:-1:-1;;;;;26023:33:0;-1:-1:-1;;;;;26023:33:0;;;;;;;;;;;;:46;;;25969:13;:33;25983:15;25999:1;25983:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25983:18:0;25969:33;;;;;;;;;;;;:51;;:100;;;;26156:15;:18;;26142:13;;25983:18;26156:15;26172:1;;26156:18;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26156:18:0;-1:-1:-1;;;;;26142:33:0;-1:-1:-1;;;;;26142:33:0;;;;;;;;;;;;:50;;;26084:13;:33;26098:15;26114:1;26098:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26098:18:0;26084:33;;;;;;;;;;;;:55;;:108;26098:18;25949:3;25905:299;;26322:471;-1:-1:-1;;;;;26487:19:0;;;26371:4;26487:19;;;:13;:19;;;;;:29;26371:4;;;;;;;;26458:59;;26481:4;;26487:29;26458:22;:59::i;:::-;-1:-1:-1;;;;;26554:19:0;;;;26528:11;26554:19;;;:13;:19;;;;;;;;:29;;;;;26594:41;;;;-1:-1:-1;26646:32:0;;:47;;;;-1:-1:-1;26704:36:0;:55;26542:41;;;;26322:471;-1:-1:-1;;;;26322:471:0:o;36340:410::-;36424:7;36461:1;36477:23;36493:6;36477:15;:23::i;:::-;36473:246;;;36521:6;36517:108;;;-1:-1:-1;36557:1:0;36517:108;;;-1:-1:-1;36608:1:0;36517:108;36473:246;;;36656:24;:22;:24::i;:::-;-1:-1:-1;;;;;36646:34:0;:6;-1:-1:-1;;;;;36646:34:0;;36642:77;;;-1:-1:-1;36706:1:0;36642:77;36736:6;36340:410;-1:-1:-1;;;;36340:410:0:o;21271:829::-;-1:-1:-1;;;;;21554:21:0;;21347:7;21554:21;;;:13;:21;;;;;:34;;;;21505:43;;;;21451:39;;;;21407:38;;;;;21347:7;;;;;;21406:183;;21554:34;;21406:143;;;;21496:3;;21406:85;;:44;:85::i;:183::-;21385:204;;21600:18;21646:56;21698:3;21646:47;21687:5;21647:34;:32;:34::i;21646:56::-;21633:10;:69;21629:324;;;21719:18;21740:26;21755:10;;21740:14;:26::i;:::-;21719:47;-1:-1:-1;21794:44:0;21832:5;21794:33;21805:21;21719:47;21832:5;21805:14;:21::i;:::-;21794:6;;:10;:33::i;:44::-;21781:57;;21629:324;;;;21884:57;21935:5;21884:46;21895:34;:32;:34::i;:::-;21884:6;;:10;:46::i;:57::-;21871:70;;21629:324;21971:55;22020:5;21971:44;21986:28;:26;:28::i;:::-;21971:10;;:14;:44::i;:55::-;22027:53;22074:5;22027:42;22042:26;:24;:26::i;:::-;22027:10;;:14;:42::i;:53::-;21963:129;;-1:-1:-1;21963:129:0;-1:-1:-1;22081:10:0;-1:-1:-1;;21271:829:0;;;;;:::o;22108:1298::-;22188:7;22197;22217:21;22241:11;:9;:11::i;:::-;22217:35;;22263:20;22298:26;22314:9;22298:15;:26::i;:::-;22294:512;;;-1:-1:-1;;;;;22508:24:0;;;;;;:13;:24;;;;;:42;;;;22461:41;;;;22400:46;;;;22357:37;;;;;22356:195;;:147;;22461:41;22356:147;;22452:3;;22356:91;;:43;:91::i;:195::-;22341:210;;22294:512;;;22765:9;;;-1:-1:-1;;;;;22765:9:0;22751:24;;;;:13;:24;;;;;:42;;;;22704:41;;;;22643:46;;;;22765:9;22600:37;;;;22599:195;;22751:42;;22599:147;;22704:41;22599:147;;22695:3;;22599:91;;:43;:91::i;:195::-;22584:210;;22294:512;22816:18;22864:58;22918:3;22865:47;22906:5;22865:36;:34;:36::i;22864:58::-;22849:12;:73;22845:493;;;22939:18;22960:30;22977:12;;22960:16;:30::i;:::-;22939:51;-1:-1:-1;23018:44:0;23056:5;23018:33;23029:21;22939:51;23056:5;23029:14;:21::i;23018:44::-;23005:57;;23094:56;23144:5;23094:45;23105:33;:31;:33::i;23094:56::-;23081:10;:69;23077:144;;;23165:56;23215:5;23165:45;23176:33;:31;:33::i;23165:56::-;23152:69;;23077:144;22845:493;;;;23267:59;23320:5;23267:48;23278:36;:34;:36::i;23267:59::-;23254:72;;22845:493;23356:10;23368:29;23356:10;23383:13;23368:14;:29::i;:::-;23348:50;;;;;;;22108:1298;;;;;:::o;23414:278::-;23475:7;23484;23504:21;23528:11;:9;:11::i;:::-;23504:35;;23550:18;23571:52;23617:5;23571:41;23582:29;:27;:29::i;:::-;23571:6;;:10;:41::i;:52::-;23550:73;-1:-1:-1;23550:73:0;23654:29;23550:73;23669:13;23654:14;:29::i;:::-;23634:50;;;;;;23414:278;;;:::o;13274:96::-;12982:5;13274:96;:::o;25754:74::-;25817:3;25801:13;:19;25754:74::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;827:241::-;;931:2;919:9;910:7;906:23;902:32;899:2;;;-1:-1;;937:12;899:2;85:6;72:20;97:33;124:5;97:33;:::i;1075:263::-;;1190:2;1178:9;1169:7;1165:23;1161:32;1158:2;;;-1:-1;;1196:12;1158:2;226:6;220:13;238:33;265:5;238:33;:::i;1345:366::-;;;1466:2;1454:9;1445:7;1441:23;1437:32;1434:2;;;-1:-1;;1472:12;1434:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1524:63;-1:-1;1624:2;1663:22;;72:20;97:33;72:20;97:33;:::i;:::-;1632:63;;;;1428:283;;;;;:::o;1718:491::-;;;;1856:2;1844:9;1835:7;1831:23;1827:32;1824:2;;;-1:-1;;1862:12;1824:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1914:63;-1:-1;2014:2;2053:22;;72:20;97:33;72:20;97:33;:::i;:::-;1818:391;;2022:63;;-1:-1;;;2122:2;2161:22;;;;616:20;;1818:391::o;2216:366::-;;;2337:2;2325:9;2316:7;2312:23;2308:32;2305:2;;;-1:-1;;2343:12;2305:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2395:63;2495:2;2534:22;;;;616:20;;-1:-1;;;2299:283::o;2589:491::-;;;;2727:2;2715:9;2706:7;2702:23;2698:32;2695:2;;;-1:-1;;2733:12;2695:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2785:63;2885:2;2924:22;;616:20;;-1:-1;2993:2;3032:22;;;616:20;;2689:391;-1:-1;;;2689:391::o;3087:235::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;-1:-1;;3194:12;3156:2;360:6;347:20;372:30;396:5;372:30;:::i;3329:257::-;;3441:2;3429:9;3420:7;3416:23;3412:32;3409:2;;;-1:-1;;3447:12;3409:2;495:6;489:13;507:30;531:5;507:30;:::i;3593:241::-;;3697:2;3685:9;3676:7;3672:23;3668:32;3665:2;;;-1:-1;;3703:12;3665:2;-1:-1;616:20;;3659:175;-1:-1;3659:175::o;3841:263::-;;3956:2;3944:9;3935:7;3931:23;3927:32;3924:2;;;-1:-1;;3962:12;3924:2;-1:-1;764:13;;3918:186;-1:-1;3918:186::o;4111:366::-;;;4232:2;4220:9;4211:7;4207:23;4203:32;4200:2;;;-1:-1;;4238:12;4200:2;629:6;616:20;4290:63;;4390:2;4433:9;4429:22;72:20;97:33;124:5;97:33;:::i;4484:535::-;;;;4633:2;4621:9;4612:7;4608:23;4604:32;4601:2;;;-1:-1;;4639:12;4601:2;770:6;764:13;4691:74;;4802:2;4856:9;4852:22;764:13;4810:74;;4921:2;4975:9;4971:22;764:13;4929:74;;4595:424;;;;;:::o;18526:222::-;-1:-1;;;;;40024:54;;;;5418:37;;18653:2;18638:18;;18624:124::o;18755:333::-;-1:-1;;;;;40024:54;;;5418:37;;40024:54;;19074:2;19059:18;;5418:37;18910:2;18895:18;;18881:207::o;19095:1036::-;-1:-1;;;;;40024:54;;;5418:37;;40024:54;;;19599:2;19584:18;;5418:37;19682:2;19667:18;;18363:37;;;;19765:2;19750:18;;18363:37;;;;19856:3;19841:19;;6872:58;;;;40035:42;19933:19;;6872:58;40024:54;;;20032:3;20017:19;;5418:37;20116:3;20101:19;;18363:37;;;;19434:3;19419:19;;19405:726::o;20138:333::-;-1:-1;;;;;40024:54;;;;5418:37;;20457:2;20442:18;;18363:37;20293:2;20278:18;;20264:207::o;20478:828::-;-1:-1;;;;;40024:54;;;5418:37;;20934:2;20919:18;;18363:37;;;;21025:2;21010:18;;6872:58;;;;21116:2;21101:18;;6872:58;;;;40024:54;;;21207:3;21192:19;;5287:58;40035:42;21276:19;;18363:37;;;;20769:3;20754:19;;20740:566::o;21313:544::-;-1:-1;;;;;40024:54;;;;5418:37;;21683:2;21668:18;;18363:37;;;;21766:2;21751:18;;18363:37;39936:13;39929:21;21843:2;21828:18;;6381:34;21518:3;21503:19;;21489:368::o;21864:780::-;-1:-1;;;;;40024:54;;;;5418:37;;22296:2;22281:18;;18363:37;;;;22379:2;22364:18;;18363:37;;;;22462:2;22447:18;;18363:37;22545:3;22530:19;;18363:37;40035:42;22614:19;;18363:37;22131:3;22116:19;;22102:542::o;22651:210::-;39936:13;;39929:21;6381:34;;22772:2;22757:18;;22743:118::o;23426:264::-;6872:58;;;23574:2;23559:18;;23545:145::o;23697:310::-;;23844:2;;23865:17;23858:47;7262:5;39128:12;39544:6;23844:2;23833:9;23829:18;39532:19;-1:-1;41604:101;41618:6;41615:1;41612:13;41604:101;;;41685:11;;;;;41679:18;41666:11;;;39572:14;41666:11;41659:39;41633:10;;41604:101;;;41720:6;41717:1;41714:13;41711:2;;;-1:-1;39572:14;41776:6;23833:9;41767:16;;41760:27;41711:2;-1:-1;41892:7;41876:14;-1:-1;;41872:28;7420:39;;;;39572:14;7420:39;;23815:192;-1:-1;;;23815:192::o;24014:416::-;24214:2;24228:47;;;7696:2;24199:18;;;39532:19;-1:-1;;;39572:14;;;7712:45;7776:12;;;24185:245::o;24437:416::-;24637:2;24651:47;;;8027:2;24622:18;;;39532:19;8063:34;39572:14;;;8043:55;-1:-1;;;8118:12;;;8111:27;8157:12;;;24608:245::o;24860:416::-;25060:2;25074:47;;;8408:1;25045:18;;;39532:19;-1:-1;;;39572:14;;;8423:29;8471:12;;;25031:245::o;25283:416::-;25483:2;25497:47;;;8722:2;25468:18;;;39532:19;8758:26;39572:14;;;8738:47;8804:12;;;25454:245::o;25706:416::-;25906:2;25920:47;;;9055:2;25891:18;;;39532:19;9091:34;39572:14;;;9071:55;-1:-1;;;9146:12;;;9139:30;9188:12;;;25877:245::o;26129:416::-;26329:2;26343:47;;;9439:2;26314:18;;;39532:19;9475:34;39572:14;;;9455:55;-1:-1;;;9530:12;;;9523:26;9568:12;;;26300:245::o;26552:416::-;26752:2;26766:47;;;9819:2;26737:18;;;39532:19;-1:-1;;;39572:14;;;9835:34;9888:12;;;26723:245::o;26975:416::-;27175:2;27189:47;;;10139:2;27160:18;;;39532:19;10175:30;39572:14;;;10155:51;10225:12;;;27146:245::o;27398:416::-;27598:2;27612:47;;;10476:2;27583:18;;;39532:19;10512:29;39572:14;;;10492:50;10561:12;;;27569:245::o;27821:416::-;28021:2;28035:47;;;28006:18;;;39532:19;10848:34;39572:14;;;10828:55;10902:12;;;27992:245::o;28244:416::-;28444:2;28458:47;;;11153:2;28429:18;;;39532:19;11189:34;39572:14;;;11169:55;-1:-1;;;11244:12;;;11237:27;11283:12;;;28415:245::o;28667:416::-;28867:2;28881:47;;;11534:2;28852:18;;;39532:19;-1:-1;;;39572:14;;;11550:37;11606:12;;;28838:245::o;29090:416::-;29290:2;29304:47;;;11857:2;29275:18;;;39532:19;-1:-1;;;39572:14;;;11873:35;11927:12;;;29261:245::o;29513:416::-;29713:2;29727:47;;;29698:18;;;39532:19;12214:34;39572:14;;;12194:55;12268:12;;;29684:245::o;29936:416::-;30136:2;30150:47;;;12519:2;30121:18;;;39532:19;-1:-1;;;39572:14;;;12535:43;12597:12;;;30107:245::o;30359:416::-;30559:2;30573:47;;;12848:2;30544:18;;;39532:19;12884:34;39572:14;;;12864:55;-1:-1;;;12939:12;;;12932:29;12980:12;;;30530:245::o;30782:416::-;30982:2;30996:47;;;13231:2;30967:18;;;39532:19;-1:-1;;;39572:14;;;13247:34;13300:12;;;30953:245::o;31205:416::-;31405:2;31419:47;;;13551:2;31390:18;;;39532:19;13587:30;39572:14;;;13567:51;13637:12;;;31376:245::o;31628:416::-;31828:2;31842:47;;;13888:2;31813:18;;;39532:19;13924:34;39572:14;;;13904:55;-1:-1;;;13979:12;;;13972:28;14019:12;;;31799:245::o;32051:416::-;32251:2;32265:47;;;14270:2;32236:18;;;39532:19;-1:-1;;;39572:14;;;14286:33;14338:12;;;32222:245::o;32474:416::-;32674:2;32688:47;;;14589:2;32659:18;;;39532:19;14625:34;39572:14;;;14605:55;-1:-1;;;14680:12;;;14673:25;14717:12;;;32645:245::o;32897:416::-;33097:2;33111:47;;;33082:18;;;39532:19;15004:34;39572:14;;;14984:55;15058:12;;;33068:245::o;33320:416::-;33520:2;33534:47;;;15309:2;33505:18;;;39532:19;15345:32;39572:14;;;15325:53;15397:12;;;33491:245::o;33743:416::-;33943:2;33957:47;;;15648:2;33928:18;;;39532:19;15684:34;39572:14;;;15664:55;-1:-1;;;15739:12;;;15732:28;15779:12;;;33914:245::o;34166:416::-;34366:2;34380:47;;;16030:2;34351:18;;;39532:19;16066:33;39572:14;;;16046:54;16119:12;;;34337:245::o;34589:416::-;34789:2;34803:47;;;16370:2;34774:18;;;39532:19;16406:34;39572:14;;;16386:55;-1:-1;;;16461:12;;;16454:29;16502:12;;;34760:245::o;35012:416::-;35212:2;35226:47;;;16753:2;35197:18;;;39532:19;16789:34;39572:14;;;16769:55;-1:-1;;;16844:12;;;16837:28;16884:12;;;35183:245::o;35435:416::-;35635:2;35649:47;;;17135:2;35620:18;;;39532:19;17171:32;39572:14;;;17151:53;17223:12;;;35606:245::o;35858:416::-;36058:2;36072:47;;;17474:2;36043:18;;;39532:19;17510:34;39572:14;;;17490:55;-1:-1;;;17565:12;;;17558:30;17607:12;;;36029:245::o;36281:416::-;36481:2;36495:47;;;17858:2;36466:18;;;39532:19;17894:28;39572:14;;;17874:49;17942:12;;;36452:245::o;36704:416::-;36904:2;36918:47;;;18193:2;36889:18;;;39532:19;-1:-1;;;39572:14;;;18209:38;18266:12;;;36875:245::o;37356:832::-;;37653:3;37642:9;37638:19;18393:5;18370:3;18363:37;37826:2;41116:24;37826:2;37815:9;37811:18;6872:58;37653:3;37863:2;37852:9;37848:18;37841:48;37903:108;5811:5;39128:12;39544:6;39539:3;39532:19;39572:14;37642:9;39572:14;5823:93;;37826:2;5987:5;38982:14;5999:21;;-1:-1;6026:260;6051:6;6048:1;6045:13;6026:260;;;6112:13;;-1:-1;;;;;40024:54;5418:37;;39387:14;;;;5180;;;;40035:42;6066:9;6026:260;;;-1:-1;;;;;;;40024:54;;;;38090:2;38075:18;;5418:37;-1:-1;;;38173:3;38158:19;18363:37;37895:116;37624:564;-1:-1;;;37624:564::o;38195:444::-;18363:37;;;38542:2;38527:18;;18363:37;;;;38625:2;38610:18;;18363:37;38378:2;38363:18;;38349:290::o;38646:214::-;40240:4;40229:16;;;;18479:35;;38769:2;38754:18;;38740:120::o;41913:117::-;-1:-1;;;;;40024:54;;41972:35;;41962:2;;42021:1;;42011:12;42037:111;42118:5;39936:13;39929:21;42096:5;42093:32;42083:2;;42139:1;;42129:12

Swarm Source

ipfs://c801075779afd134169e01f47939ba0b0e2651e333b9d042d9e3967b7bd7030b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.