ETH Price: $2,815.64 (+7.27%)
 

Overview

Max Total Supply

1,000,000,000,000 TFI

Holders

122

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,909,902,223.410477853 TFI

Value
$0.00
0xedc349ffd9d8f752fe9ad1bd3bf3fc47046f52d4
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:
TuffyInu

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-28
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 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 IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

contract TuffyInu is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => uint256) private firstBuy;
   
    uint256 constant private startingSupply = 1_000_000_000_000;
    string constant private _name = "Tuffy Inu";
    string constant private _symbol = "TFI";
    uint8 constant private _decimals = 9;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
        uint16 antiDump;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 1750,
        sellFee: 2400,
        transferFee: 0,
        antiDump: 3000
        });

    Ratios public _ratios = Ratios({
        liquidity: 35,
        marketing: 380,
        total: 35+380
        });

    uint256 constant public maxBuyTaxes = 2500;
    uint256 constant public maxSellTaxes = 2500;
    uint256 constant public maxTransferTaxes = 2500;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address liquidity;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xeA283E387E2C67c67608b04f6BF7C7Ad318D5186),
        liquidity: 0x1cd7e2284F111876759690823a8cf50a3910b9d6
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 10 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold = (_tTotal * 5) / 10000;
    uint256 public swapAmount = (_tTotal * 20) / 10000;

    uint256 private _maxTxAmount = (_tTotal * 5) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 8) / 1000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    bool public antiDumpEnabled = true;
    uint256 antiDumpTime = 10 minutes;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[msg.sender] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
            contractSwapTimer = 3 seconds;
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
            contractSwapTimer = 3 seconds;
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            contractSwapTimer = 10 seconds;
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(msg.sender, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }


    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock, _algo);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor, uint256 time) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        contractSwapTimer = time;
    }

    function setWallets(address payable marketing) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
    }

    function setLiquidityReceiver(address account) external onlyOwner {
        if (_taxWallets.liquidity == address(0) || _taxWallets.liquidity == DEAD) {
            revert("Auto Liq renounced.");
        }
        _taxWallets.liquidity = account;
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function checkFirstBuy(address account) external view returns (uint256) {
        return firstBuy[account];
    }

    function setAntiDumpEnabled(bool enabled) external onlyOwner {
        antiDumpEnabled = enabled;
    }

    function setAntiDumpSettings(uint256 time, uint16 tax) external onlyOwner {
        require(time <= 20 minutes, "Can't set above 20min.");
        require(tax <= 3000, "Can't set above 30%.");
        antiDumpTime = time;
        _taxRates.antiDump = tax;
    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && tx.origin != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (firstBuy[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.total) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                _taxWallets.liquidity,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 marketingBalance = amtBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(owner()).transfer(address(this).balance);
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            if (firstBuy[from] == 0) {
                firstBuy[from] = block.timestamp;
            }
            if (firstBuy[from] + antiDumpTime > block.timestamp && antiDumpEnabled) {
                currentFee = _taxRates.antiDump;
            } else {
                currentFee = _taxRates.sellFee;
            }
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"},{"internalType":"uint16","name":"antiDump","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address","name":"liquidity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDumpEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"approveContractContingency","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":[{"internalType":"address","name":"account","type":"address"}],"name":"checkFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAntiDumpEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint16","name":"tax","type":"uint16"}],"name":"setAntiDumpSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setLiquidityReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060038190556106d660805261096060a05260c052610bb860e052600980546001600160401b031916670bb80000096006d617815560236101005261017c6101205261019f61014052600a805465ffffffffffff191665019f017c00231781556101a060405273ea283e387e2c67c67608b04f6bf7c7ad318d5186610160819052731cd7e2284f111876759690823a8cf50a3910b9d6610180819052600d80546001600160a01b03199081169093179055600e8054909216179055600f805461ff0019169055601081905561271091620000da9162000807565b620000eb9064e8d4a510006200081f565b620000f89060056200081f565b62000104919062000841565b601255612710620001186009600a62000807565b620001299064e8d4a510006200081f565b620001369060146200081f565b62000142919062000841565b6013556103e8620001566009600a62000807565b620001679064e8d4a510006200081f565b620001749060056200081f565b62000180919062000841565b6014556103e8620001946009600a62000807565b620001a59064e8d4a510006200081f565b620001b29060086200081f565b620001be919062000841565b6015556016805461ffff60ff60b01b011916600160b01b179055610258601755620001ec6009600a62000807565b620001fd9064e8d4a510006200081f565b3360008181526001602052604081209290925581546001600160a01b03191617905560384614156200025a57600b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556003601055620002e1565b46606114156200029557600b80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556003601055620002e1565b4660011480620002a55750466004145b15620002dc57600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600a601055620002e1565b600080fd5b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000864565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e3919062000864565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000430573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000456919062000864565b600c80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055600b54620004a291339116600019620005f1565b600b54620004be9030906001600160a01b0316600019620005f1565b600160056000620004d76000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805490931681179092556007906200055f6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200058f3390565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620005c96009600a62000807565b620005da9064e8d4a510006200081f565b60405190815260200160405180910390a36200088f565b6001600160a01b038316620006435760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006915760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200063a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007495781600019048211156200072d576200072d620006f2565b808516156200073b57918102915b93841c93908002906200070d565b509250929050565b600082620007625750600162000801565b81620007715750600062000801565b81600181146200078a57600281146200079557620007b5565b600191505062000801565b60ff841115620007a957620007a9620006f2565b50506001821b62000801565b5060208310610133831016604e8410600b8410161715620007da575081810a62000801565b620007e6838362000708565b8060001904821115620007fd57620007fd620006f2565b0290505b92915050565b60006200081860ff84168362000751565b9392505050565b60008160001904831182151516156200083c576200083c620006f2565b500290565b6000826200085f57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200087757600080fd5b81516001600160a01b03811681146200081857600080fd5b614572806200089f6000396000f3fe6080604052600436106103bc5760003560e01c80636ebd0078116101f2578063b3d514fb1161010d578063e8a0e3f9116100a0578063eec2744e1161006f578063eec2744e14610bd1578063f94aa1b414610bf1578063fdb78c0e14610c38578063fe575a8714610c5757600080fd5b8063e8a0e3f914610b5c578063eafb5a3c14610b7c578063eb50e70e14610b9c578063ee5d9c2d14610bbc57600080fd5b8063cab5ebea116100dc578063cab5ebea14610a8a578063cf84770614610aaa578063dd62ed3e14610b00578063e4fcfd1814610b4657600080fd5b8063b3d514fb146105d5578063b57e368214610a2a578063b6f8f8dc14610a4a578063bcd96a2514610a6a57600080fd5b80638a63bd9b1161018557806399e9e1341161015457806399e9e134146109b4578063a457c2d7146109ea578063a9059cbb14610a0a578063b1b08f71146105d557600080fd5b80638a63bd9b146109445780638a8c523c146109595780638da5cb5b1461092657806395d89b411461096e57600080fd5b806378b9c09f116101c157806378b9c09f146108b25780637cbadcd2146108d257806380c581d114610906578063893d20e81461092657600080fd5b80636ebd00781461083d57806370a0823114610852578063715018a614610888578063751039fc1461089d57600080fd5b806332cde664116102e25780634fb2e45d11610275578063590ffdce11610244578063590ffdce146107a45780635be4f615146107c45780635c24b074146107e45780635cce86cd1461080457600080fd5b80634fb2e45d146107175780634fbee1931461073757806350a8e0161461077057806355dbc3691461078f57600080fd5b806339509351116102b1578063395093511461069d5780633f3cf56c146106bd578063452ed4f1146106dd5780634ada218b146106fd57600080fd5b806332cde6641461061d57806333251a0b1461063d57806334cd82601461065d57806336fddb041461067d57600080fd5b80630fa604e41161035a5780632610eaca116103295780632610eaca146105b55780632b28fc7a146105d55780632e8fa821146105eb578063313ce5671461060157600080fd5b80630fa604e41461054b57806318160ddd1461056057806323b872dd14610575578063260039571461059557600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104ac5780630758d924146104fb578063095ea7b31461051b57600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004613d8b565b610c77565b005b34801561044d57600080fd5b5060095461047e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b3480156104b857600080fd5b5060408051808201909152600981527f547566667920496e75000000000000000000000000000000000000000000000060208201525b6040516103f29190613ddd565b34801561050757600080fd5b50600b546103de906001600160a01b031681565b34801561052757600080fd5b5061053b610536366004613e32565b610d50565b60405190151581526020016103f2565b34801561055757600080fd5b50610411610d67565b34801561056c57600080fd5b50610411610d87565b34801561058157600080fd5b5061053b610590366004613e5e565b610dc8565b3480156105a157600080fd5b5061043f6105b0366004613e9f565b610e40565b3480156105c157600080fd5b5061043f6105d0366004613f1c565b610f93565b3480156105e157600080fd5b506104116109c481565b3480156105f757600080fd5b5061041160135481565b34801561060d57600080fd5b50604051600981526020016103f2565b34801561062957600080fd5b5061043f610638366004613f97565b6110ad565b34801561064957600080fd5b5061043f610658366004613fda565b6111e8565b34801561066957600080fd5b5061043f610678366004613ff7565b6112b8565b34801561068957600080fd5b5061043f610698366004614032565b611377565b3480156106a957600080fd5b5061053b6106b8366004613e32565b6113f0565b3480156106c957600080fd5b5061043f6106d8366004613e9f565b61142c565b3480156106e957600080fd5b50600c546103de906001600160a01b031681565b34801561070957600080fd5b5060165461053b9060ff1681565b34801561072357600080fd5b5061043f610732366004613fda565b61157f565b34801561074357600080fd5b5061053b610752366004613fda565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077c57600080fd5b5060165461053b90610100900460ff1681565b34801561079b57600080fd5b5061041161178d565b3480156107b057600080fd5b5061043f6107bf366004614032565b611806565b3480156107d057600080fd5b5061043f6107df366004614060565b61187f565b3480156107f057600080fd5b5061043f6107ff366004613fda565b6119ba565b34801561081057600080fd5b5061053b61081f366004613fda565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561084957600080fd5b50610411611af9565b34801561085e57600080fd5b5061041161086d366004613fda565b6001600160a01b031660009081526001602052604090205490565b34801561089457600080fd5b5061043f611b14565b3480156108a957600080fd5b5061043f611bc4565b3480156108be57600080fd5b5061043f6108cd36600461408c565b611c50565b3480156108de57600080fd5b5060165461053b90760100000000000000000000000000000000000000000000900460ff1681565b34801561091257600080fd5b5061043f610921366004614032565b611cea565b34801561093257600080fd5b506000546001600160a01b03166103de565b34801561095057600080fd5b5061053b611e94565b34801561096557600080fd5b5061043f611f03565b34801561097a57600080fd5b5060408051808201909152600381527f544649000000000000000000000000000000000000000000000000000000000060208201526104ee565b3480156109c057600080fd5b506104116109cf366004613fda565b6001600160a01b031660009081526008602052604090205490565b3480156109f657600080fd5b5061053b610a05366004613e32565b6120ed565b348015610a1657600080fd5b5061053b610a25366004613e32565b612124565b348015610a3657600080fd5b5061043f610a45366004613fda565b61213b565b348015610a5657600080fd5b5061043f610a653660046140a9565b612229565b348015610a7657600080fd5b5061043f610a853660046140f4565b612309565b348015610a9657600080fd5b5061043f610aa536600461408c565b6123db565b348015610ab657600080fd5b50600a54610adb9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b348015610b0c57600080fd5b50610411610b1b36600461411e565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b5257600080fd5b5061041160105481565b348015610b6857600080fd5b5061043f610b7736600461414c565b61247d565b348015610b8857600080fd5b5061043f610b97366004613fda565b612615565b348015610ba857600080fd5b5061043f610bb7366004613fda565b6129c4565b348015610bc857600080fd5b5061043f612a41565b348015610bdd57600080fd5b5061043f610bec366004614032565b612b24565b348015610bfd57600080fd5b50600d54600e54610c18916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103f2565b348015610c4457600080fd5b50600f5461053b90610100900460ff1681565b348015610c6357600080fd5b5061053b610c72366004613fda565b612bcc565b6000546001600160a01b03163314610cca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6016546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d1a9085908590600401614218565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050505050565b6000610d5d338484612c5a565b5060015b92915050565b6000610d756009600a61434f565b601554610d82919061435e565b905090565b6000610d956009600a61434f565b610da49064e8d4a51000614399565b610dad57600080fd5b610db96009600a61434f565b610d829064e8d4a51000614399565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e2d576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e279084906143b8565b90915550505b610e38848484612d67565b949350505050565b6000546001600160a01b03163314610e8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6103e8610e9d6009600a61434f565b610eac9064e8d4a51000614399565b610eb6919061435e565b8183610ec46009600a61434f565b610ed39064e8d4a51000614399565b610edd9190614399565b610ee7919061435e565b1015610f5b5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cc1565b8082610f696009600a61434f565b610f789064e8d4a51000614399565b610f829190614399565b610f8c919061435e565b6015555050565b8051825114610fe45760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc1565b60005b82518160ff1610156110a857818160ff1681518110611008576110086143cf565b602002602001015161102f336001600160a01b031660009081526001602052604090205490565b101561103a57600080fd5b61109533848360ff1681518110611053576110536143cf565b60200260200101516009600a611069919061434f565b858560ff168151811061107e5761107e6143cf565b60200260200101516110909190614399565b612d67565b50806110a0816143fe565b915050610fe7565b505050565b6000546001600160a01b031633146110fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6109c48361ffff161115801561111757506109c48261ffff1611155b801561112957506109c48161ffff1611155b6111755760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cc1565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146112365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6016546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561129d57600080fd5b505af11580156112b1573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146113065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b83856113146009600a61434f565b6113239064e8d4a51000614399565b61132d9190614399565b611337919061435e565b60125581836113486009600a61434f565b6113579064e8d4a51000614399565b6113619190614399565b61136b919061435e565b60135560105550505050565b6000546001600160a01b031633146113c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d5d91859061142790869061441e565b612c5a565b6000546001600160a01b0316331461147a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6103e86114896009600a61434f565b6114989064e8d4a51000614399565b6114a2919061435e565b81836114b06009600a61434f565b6114bf9064e8d4a51000614399565b6114c99190614399565b6114d3919061435e565b10156115475760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cc1565b80826115556009600a61434f565b6115649064e8d4a51000614399565b61156e9190614399565b611578919061435e565b6014555050565b6000546001600160a01b031633146115cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6001600160a01b0381166116495760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc1565b6001600160a01b03811661dead14156116ca5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc1565b600080546116e3916001600160a01b0390911690611806565b6116ee816001611806565b600080546001600160a01b03168152600160205260409020541561173557600080546001600160a01b0316808252600160205260409091205461173391908390612d67565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601660029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d829190614436565b6000546001600160a01b031633146118545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6104b082111561191f5760405162461bcd60e51b815260206004820152601660248201527f43616e2774207365742061626f76652032306d696e2e000000000000000000006044820152606401610cc1565b610bb88161ffff1611156119755760405162461bcd60e51b815260206004820152601460248201527f43616e2774207365742061626f7665203330252e0000000000000000000000006044820152606401610cc1565b6017919091556009805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b6000546001600160a01b03163314611a085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b601654610100900460ff1615611a605760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610cc1565b6001600160a01b038116301415611ab95760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cc1565b601680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611b076009600a61434f565b601454610d82919061435e565b6000546001600160a01b03163314611b625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60008054611b7b916001600160a01b0390911690611806565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611c125760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b611c1e6009600a61434f565b611c2d9064e8d4a51000614399565b601455611c3c6009600a61434f565b611c4b9064e8d4a51000614399565b601555565b6000546001600160a01b03163314611c9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60168054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611d385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b80611daf576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610d1a565b60035415611e16576203f48060035442611dc991906143b8565b11611e165760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cc1565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610d1a565b5050565b600080546001600160a01b03163314611ee35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600b54611efd9030906001600160a01b0316600019612c5a565b50600190565b6000546001600160a01b03163314611f515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60165460ff1615611fa45760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cc1565b601654610100900460ff16611ffb5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cc1565b6016546201000090046001600160a01b031661204157601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601654600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156120cc57600080fd5b505af19250505080156120dd575060015b506016805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d5d9185906114279086906143b8565b6000612131338484612d67565b5060019392505050565b6000546001600160a01b031633146121895760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600e546001600160a01b031615806121ad5750600e546001600160a01b031661dead145b156121fa5760405162461bcd60e51b815260206004820152601360248201527f4175746f204c69712072656e6f756e6365642e000000000000000000000000006044820152606401610cc1565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6016546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146123575760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600a805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009092169085161717905561239b818361444f565b600a805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146124295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600f80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061247290831515815260200190565b60405180910390a150565b8151835114801561248f575080518251145b6124db5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc1565b60005b83518160ff16101561260f57818160ff16815181106124ff576124ff6143cf565b6020026020010151838260ff168151811061251c5761251c6143cf565b60200260200101516009600a612532919061434f565b6125419064e8d4a51000614399565b61254b9190614399565b612555919061435e565b33600090815260016020526040902054101561257057600080fd5b6125fc33858360ff1681518110612589576125896143cf565b6020026020010151848460ff16815181106125a6576125a66143cf565b6020026020010151868560ff16815181106125c3576125c36143cf565b60200260200101516009600a6125d9919061434f565b6125e89064e8d4a51000614399565b6125f29190614399565b611090919061435e565b5080612607816143fe565b9150506124de565b50505050565b6000546001600160a01b031633146126635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cc9190614475565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273d9190614475565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156127a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c49190614475565b90506001600160a01b03811661296257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128369190614475565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a79190614475565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561290c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129309190614475565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905561298b565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556110a8903090600019612c5a565b6000546001600160a01b03163314612a125760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612a8f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b601654610100900460ff1615612ae75760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cc1565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612b21573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612b725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6016546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d1a565b6016546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190614492565b6001600160a01b038316612cb05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc1565b6001600160a01b038216612d065760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612de55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cc1565b6001600160a01b038316612e615760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cc1565b60008211612ed75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cc1565b612ee1848461325f565b156131385760165460ff16612f385760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cc1565b6001600160a01b03841660009081526002602052604090205460ff1680612f7757506001600160a01b03831660009081526002602052604090205460ff165b1561303b576001600160a01b03841660009081526006602052604090205460ff16158015612fbe57506001600160a01b03831660009081526006602052604090205460ff16155b1561303b5760145482111561303b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cc1565b600b546001600160a01b0384811691161480159061307257506001600160a01b03831660009081526002602052604090205460ff16155b15613138576001600160a01b03831660009081526006602052604090205460ff1661313857601554826130ba856001600160a01b031660009081526001602052604090205490565b6130c4919061441e565b11156131385760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cc1565b6001600160a01b038316600090815260086020526040902054613171576001600160a01b03831660009081526008602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff16806131b357506001600160a01b03841660009081526005602052604090205460ff165b156131bc575060005b6001600160a01b03841660009081526002602052604090205460ff161561324a57600f5460ff161580156131f75750600f54610100900460ff165b1561324a574260105460115461320d919061441e565b101561324a5730600090815260016020526040902054601254811061324857601354811061323a57506013545b61324381613334565b426011555b505b61325685858584613726565b95945050505050565b600080546001600160a01b0384811691161480159061328c57506000546001600160a01b03838116911614155b80156132a357506000546001600160a01b03163214155b80156132c857506001600160a01b03821660009081526007602052604090205460ff16155b80156132ed57506001600160a01b03831660009081526007602052604090205460ff16155b801561330457506001600160a01b03821661dead14155b801561331857506001600160a01b03821615155b801561332d57506001600160a01b0383163014155b9392505050565b600f805460ff1916600117905560408051606081018252600a5461ffff808216835262010000820481166020840152640100000000909104169181018290529061337e5750613719565b306000908152600460209081526040808320600b546001600160a01b03168452909152902054600019146133d757306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856133f89190614399565b613402919061435e565b61340c919061435e565b9050600061341a82856143b8565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613454576134546143cf565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156134c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ea9190614475565b816001815181106134fd576134fd6143cf565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061355c9085906000908690309042906004016144af565b600060405180830381600087803b15801561357657600080fd5b505af115801561358a573d6000803e3d6000fd5b504792506000915084905061359f8684614399565b6135a9919061435e565b9050841561369c57600b54600e546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561363a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061365f91906144eb565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6136a681836143b8565b91508560000151866040018181516136be9190614519565b61ffff9081169091526020880151849250161561371157600d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561370f573d6000803e3d6000fd5b505b505050505050505b50600f805460ff19169055565b601654600090610100900460ff166137d2576137428585613962565b601654610100900460ff1615801561375f575061375f858561325f565b156137d25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cc1565b6137dc858561325f565b1561388f576016546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613878575060408051601f3d908101601f1916820190925261387591810190614492565b60015b61388157600080fd5b90508061388d57600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906138b79084906143b8565b9091555060009050826138ca57836138d5565b6138d5868686613ac0565b6001600160a01b03861660009081526001602052604081208054929350839290919061390290849061441e565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161394e91815260200190565b60405180910390a350600195945050505050565b601654610100900460ff16156139e05760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cc1565b6139ea828261325f565b158015613a045750600c546001600160a01b038281169116145b15611e90576001600160a01b038083166000908152600760205260409020805460ff191660011790556016805461ff001916610100179081905562010000900416613a7957601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff1615613af0575060095461ffff16613bda565b6001600160a01b03841660009081526002602052604090205460ff1615613bc9576001600160a01b038516600090815260086020526040902054613b4a576001600160a01b03851660009081526008602052604090204290555b6017546001600160a01b0386166000908152600860205260409020544291613b719161441e565b118015613b9a5750601654760100000000000000000000000000000000000000000000900460ff165b15613bb657506009546601000000000000900461ffff16613bda565b5060095462010000900461ffff16613bda565b50600954640100000000900461ffff165b6000612710613be98386614399565b613bf3919061435e565b30600090815260016020526040812080549293508392909190613c1790849061441e565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613c6681856143b8565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cc857613cc8613c70565b604052919050565b600067ffffffffffffffff821115613cea57613cea613c70565b5060051b60200190565b6001600160a01b0381168114612b2157600080fd5b600082601f830112613d1a57600080fd5b81356020613d2f613d2a83613cd0565b613c9f565b82815260059290921b84018101918181019086841115613d4e57600080fd5b8286015b84811015613d72578035613d6581613cf4565b8352918301918301613d52565b509695505050505050565b8015158114612b2157600080fd5b60008060408385031215613d9e57600080fd5b823567ffffffffffffffff811115613db557600080fd5b613dc185828601613d09565b9250506020830135613dd281613d7d565b809150509250929050565b600060208083528351808285015260005b81811015613e0a57858101830151858201604001528201613dee565b81811115613e1c576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215613e4557600080fd5b8235613e5081613cf4565b946020939093013593505050565b600080600060608486031215613e7357600080fd5b8335613e7e81613cf4565b92506020840135613e8e81613cf4565b929592945050506040919091013590565b60008060408385031215613eb257600080fd5b50508035926020909101359150565b600082601f830112613ed257600080fd5b81356020613ee2613d2a83613cd0565b82815260059290921b84018101918181019086841115613f0157600080fd5b8286015b84811015613d725780358352918301918301613f05565b60008060408385031215613f2f57600080fd5b823567ffffffffffffffff80821115613f4757600080fd5b613f5386838701613d09565b93506020850135915080821115613f6957600080fd5b50613f7685828601613ec1565b9150509250929050565b803561ffff81168114613f9257600080fd5b919050565b600080600060608486031215613fac57600080fd5b613fb584613f80565b9250613fc360208501613f80565b9150613fd160408501613f80565b90509250925092565b600060208284031215613fec57600080fd5b813561332d81613cf4565b600080600080600060a0868803121561400f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561404557600080fd5b823561405081613cf4565b91506020830135613dd281613d7d565b6000806040838503121561407357600080fd5b8235915061408360208401613f80565b90509250929050565b60006020828403121561409e57600080fd5b813561332d81613d7d565b6000806000606084860312156140be57600080fd5b83356140c981613d7d565b925060208401356140d981613d7d565b915060408401356140e981613d7d565b809150509250925092565b6000806040838503121561410757600080fd5b61411083613f80565b915061408360208401613f80565b6000806040838503121561413157600080fd5b823561413c81613cf4565b91506020830135613dd281613cf4565b60008060006060848603121561416157600080fd5b833567ffffffffffffffff8082111561417957600080fd5b61418587838801613d09565b9450602086013591508082111561419b57600080fd5b6141a787838801613ec1565b935060408601359150808211156141bd57600080fd5b506141ca86828701613ec1565b9150509250925092565b600081518084526020808501945080840160005b8381101561420d5781516001600160a01b0316875295820195908201906001016141e8565b509495945050505050565b60408152600061422b60408301856141d4565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156142a657816000190482111561428c5761428c61423c565b8085161561429957918102915b93841c9390800290614270565b509250929050565b6000826142bd57506001610d61565b816142ca57506000610d61565b81600181146142e057600281146142ea57614306565b6001915050610d61565b60ff8411156142fb576142fb61423c565b50506001821b610d61565b5060208310610133831016604e8410600b8410161715614329575081810a610d61565b614333838361426b565b80600019048211156143475761434761423c565b029392505050565b600061332d60ff8416836142ae565b600082614394577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156143b3576143b361423c565b500290565b6000828210156143ca576143ca61423c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8114156144155761441561423c565b60010192915050565b600082198211156144315761443161423c565b500190565b60006020828403121561444857600080fd5b5051919050565b600061ffff80831681851680830382111561446c5761446c61423c565b01949350505050565b60006020828403121561448757600080fd5b815161332d81613cf4565b6000602082840312156144a457600080fd5b815161332d81613d7d565b85815284602082015260a0604082015260006144ce60a08301866141d4565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561450057600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156145345761453461423c565b03939250505056fea264697066735822122076d8b652679ff388179784d2e586fac21eda2bd340223e1a016eb4204ef4626364736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80636ebd0078116101f2578063b3d514fb1161010d578063e8a0e3f9116100a0578063eec2744e1161006f578063eec2744e14610bd1578063f94aa1b414610bf1578063fdb78c0e14610c38578063fe575a8714610c5757600080fd5b8063e8a0e3f914610b5c578063eafb5a3c14610b7c578063eb50e70e14610b9c578063ee5d9c2d14610bbc57600080fd5b8063cab5ebea116100dc578063cab5ebea14610a8a578063cf84770614610aaa578063dd62ed3e14610b00578063e4fcfd1814610b4657600080fd5b8063b3d514fb146105d5578063b57e368214610a2a578063b6f8f8dc14610a4a578063bcd96a2514610a6a57600080fd5b80638a63bd9b1161018557806399e9e1341161015457806399e9e134146109b4578063a457c2d7146109ea578063a9059cbb14610a0a578063b1b08f71146105d557600080fd5b80638a63bd9b146109445780638a8c523c146109595780638da5cb5b1461092657806395d89b411461096e57600080fd5b806378b9c09f116101c157806378b9c09f146108b25780637cbadcd2146108d257806380c581d114610906578063893d20e81461092657600080fd5b80636ebd00781461083d57806370a0823114610852578063715018a614610888578063751039fc1461089d57600080fd5b806332cde664116102e25780634fb2e45d11610275578063590ffdce11610244578063590ffdce146107a45780635be4f615146107c45780635c24b074146107e45780635cce86cd1461080457600080fd5b80634fb2e45d146107175780634fbee1931461073757806350a8e0161461077057806355dbc3691461078f57600080fd5b806339509351116102b1578063395093511461069d5780633f3cf56c146106bd578063452ed4f1146106dd5780634ada218b146106fd57600080fd5b806332cde6641461061d57806333251a0b1461063d57806334cd82601461065d57806336fddb041461067d57600080fd5b80630fa604e41161035a5780632610eaca116103295780632610eaca146105b55780632b28fc7a146105d55780632e8fa821146105eb578063313ce5671461060157600080fd5b80630fa604e41461054b57806318160ddd1461056057806323b872dd14610575578063260039571461059557600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104ac5780630758d924146104fb578063095ea7b31461051b57600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004613d8b565b610c77565b005b34801561044d57600080fd5b5060095461047e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b3480156104b857600080fd5b5060408051808201909152600981527f547566667920496e75000000000000000000000000000000000000000000000060208201525b6040516103f29190613ddd565b34801561050757600080fd5b50600b546103de906001600160a01b031681565b34801561052757600080fd5b5061053b610536366004613e32565b610d50565b60405190151581526020016103f2565b34801561055757600080fd5b50610411610d67565b34801561056c57600080fd5b50610411610d87565b34801561058157600080fd5b5061053b610590366004613e5e565b610dc8565b3480156105a157600080fd5b5061043f6105b0366004613e9f565b610e40565b3480156105c157600080fd5b5061043f6105d0366004613f1c565b610f93565b3480156105e157600080fd5b506104116109c481565b3480156105f757600080fd5b5061041160135481565b34801561060d57600080fd5b50604051600981526020016103f2565b34801561062957600080fd5b5061043f610638366004613f97565b6110ad565b34801561064957600080fd5b5061043f610658366004613fda565b6111e8565b34801561066957600080fd5b5061043f610678366004613ff7565b6112b8565b34801561068957600080fd5b5061043f610698366004614032565b611377565b3480156106a957600080fd5b5061053b6106b8366004613e32565b6113f0565b3480156106c957600080fd5b5061043f6106d8366004613e9f565b61142c565b3480156106e957600080fd5b50600c546103de906001600160a01b031681565b34801561070957600080fd5b5060165461053b9060ff1681565b34801561072357600080fd5b5061043f610732366004613fda565b61157f565b34801561074357600080fd5b5061053b610752366004613fda565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077c57600080fd5b5060165461053b90610100900460ff1681565b34801561079b57600080fd5b5061041161178d565b3480156107b057600080fd5b5061043f6107bf366004614032565b611806565b3480156107d057600080fd5b5061043f6107df366004614060565b61187f565b3480156107f057600080fd5b5061043f6107ff366004613fda565b6119ba565b34801561081057600080fd5b5061053b61081f366004613fda565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561084957600080fd5b50610411611af9565b34801561085e57600080fd5b5061041161086d366004613fda565b6001600160a01b031660009081526001602052604090205490565b34801561089457600080fd5b5061043f611b14565b3480156108a957600080fd5b5061043f611bc4565b3480156108be57600080fd5b5061043f6108cd36600461408c565b611c50565b3480156108de57600080fd5b5060165461053b90760100000000000000000000000000000000000000000000900460ff1681565b34801561091257600080fd5b5061043f610921366004614032565b611cea565b34801561093257600080fd5b506000546001600160a01b03166103de565b34801561095057600080fd5b5061053b611e94565b34801561096557600080fd5b5061043f611f03565b34801561097a57600080fd5b5060408051808201909152600381527f544649000000000000000000000000000000000000000000000000000000000060208201526104ee565b3480156109c057600080fd5b506104116109cf366004613fda565b6001600160a01b031660009081526008602052604090205490565b3480156109f657600080fd5b5061053b610a05366004613e32565b6120ed565b348015610a1657600080fd5b5061053b610a25366004613e32565b612124565b348015610a3657600080fd5b5061043f610a45366004613fda565b61213b565b348015610a5657600080fd5b5061043f610a653660046140a9565b612229565b348015610a7657600080fd5b5061043f610a853660046140f4565b612309565b348015610a9657600080fd5b5061043f610aa536600461408c565b6123db565b348015610ab657600080fd5b50600a54610adb9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b348015610b0c57600080fd5b50610411610b1b36600461411e565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b5257600080fd5b5061041160105481565b348015610b6857600080fd5b5061043f610b7736600461414c565b61247d565b348015610b8857600080fd5b5061043f610b97366004613fda565b612615565b348015610ba857600080fd5b5061043f610bb7366004613fda565b6129c4565b348015610bc857600080fd5b5061043f612a41565b348015610bdd57600080fd5b5061043f610bec366004614032565b612b24565b348015610bfd57600080fd5b50600d54600e54610c18916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103f2565b348015610c4457600080fd5b50600f5461053b90610100900460ff1681565b348015610c6357600080fd5b5061053b610c72366004613fda565b612bcc565b6000546001600160a01b03163314610cca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6016546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d1a9085908590600401614218565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050505050565b6000610d5d338484612c5a565b5060015b92915050565b6000610d756009600a61434f565b601554610d82919061435e565b905090565b6000610d956009600a61434f565b610da49064e8d4a51000614399565b610dad57600080fd5b610db96009600a61434f565b610d829064e8d4a51000614399565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e2d576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e279084906143b8565b90915550505b610e38848484612d67565b949350505050565b6000546001600160a01b03163314610e8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6103e8610e9d6009600a61434f565b610eac9064e8d4a51000614399565b610eb6919061435e565b8183610ec46009600a61434f565b610ed39064e8d4a51000614399565b610edd9190614399565b610ee7919061435e565b1015610f5b5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cc1565b8082610f696009600a61434f565b610f789064e8d4a51000614399565b610f829190614399565b610f8c919061435e565b6015555050565b8051825114610fe45760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc1565b60005b82518160ff1610156110a857818160ff1681518110611008576110086143cf565b602002602001015161102f336001600160a01b031660009081526001602052604090205490565b101561103a57600080fd5b61109533848360ff1681518110611053576110536143cf565b60200260200101516009600a611069919061434f565b858560ff168151811061107e5761107e6143cf565b60200260200101516110909190614399565b612d67565b50806110a0816143fe565b915050610fe7565b505050565b6000546001600160a01b031633146110fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6109c48361ffff161115801561111757506109c48261ffff1611155b801561112957506109c48161ffff1611155b6111755760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cc1565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146112365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6016546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561129d57600080fd5b505af11580156112b1573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146113065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b83856113146009600a61434f565b6113239064e8d4a51000614399565b61132d9190614399565b611337919061435e565b60125581836113486009600a61434f565b6113579064e8d4a51000614399565b6113619190614399565b61136b919061435e565b60135560105550505050565b6000546001600160a01b031633146113c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d5d91859061142790869061441e565b612c5a565b6000546001600160a01b0316331461147a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6103e86114896009600a61434f565b6114989064e8d4a51000614399565b6114a2919061435e565b81836114b06009600a61434f565b6114bf9064e8d4a51000614399565b6114c99190614399565b6114d3919061435e565b10156115475760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cc1565b80826115556009600a61434f565b6115649064e8d4a51000614399565b61156e9190614399565b611578919061435e565b6014555050565b6000546001600160a01b031633146115cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6001600160a01b0381166116495760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc1565b6001600160a01b03811661dead14156116ca5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc1565b600080546116e3916001600160a01b0390911690611806565b6116ee816001611806565b600080546001600160a01b03168152600160205260409020541561173557600080546001600160a01b0316808252600160205260409091205461173391908390612d67565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601660029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d829190614436565b6000546001600160a01b031633146118545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6104b082111561191f5760405162461bcd60e51b815260206004820152601660248201527f43616e2774207365742061626f76652032306d696e2e000000000000000000006044820152606401610cc1565b610bb88161ffff1611156119755760405162461bcd60e51b815260206004820152601460248201527f43616e2774207365742061626f7665203330252e0000000000000000000000006044820152606401610cc1565b6017919091556009805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b6000546001600160a01b03163314611a085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b601654610100900460ff1615611a605760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610cc1565b6001600160a01b038116301415611ab95760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cc1565b601680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611b076009600a61434f565b601454610d82919061435e565b6000546001600160a01b03163314611b625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60008054611b7b916001600160a01b0390911690611806565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611c125760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b611c1e6009600a61434f565b611c2d9064e8d4a51000614399565b601455611c3c6009600a61434f565b611c4b9064e8d4a51000614399565b601555565b6000546001600160a01b03163314611c9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60168054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611d385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b80611daf576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610d1a565b60035415611e16576203f48060035442611dc991906143b8565b11611e165760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cc1565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610d1a565b5050565b600080546001600160a01b03163314611ee35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600b54611efd9030906001600160a01b0316600019612c5a565b50600190565b6000546001600160a01b03163314611f515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60165460ff1615611fa45760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cc1565b601654610100900460ff16611ffb5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cc1565b6016546201000090046001600160a01b031661204157601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601654600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156120cc57600080fd5b505af19250505080156120dd575060015b506016805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d5d9185906114279086906143b8565b6000612131338484612d67565b5060019392505050565b6000546001600160a01b031633146121895760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600e546001600160a01b031615806121ad5750600e546001600160a01b031661dead145b156121fa5760405162461bcd60e51b815260206004820152601360248201527f4175746f204c69712072656e6f756e6365642e000000000000000000000000006044820152606401610cc1565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6016546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146123575760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600a805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009092169085161717905561239b818361444f565b600a805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146124295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600f80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061247290831515815260200190565b60405180910390a150565b8151835114801561248f575080518251145b6124db5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc1565b60005b83518160ff16101561260f57818160ff16815181106124ff576124ff6143cf565b6020026020010151838260ff168151811061251c5761251c6143cf565b60200260200101516009600a612532919061434f565b6125419064e8d4a51000614399565b61254b9190614399565b612555919061435e565b33600090815260016020526040902054101561257057600080fd5b6125fc33858360ff1681518110612589576125896143cf565b6020026020010151848460ff16815181106125a6576125a66143cf565b6020026020010151868560ff16815181106125c3576125c36143cf565b60200260200101516009600a6125d9919061434f565b6125e89064e8d4a51000614399565b6125f29190614399565b611090919061435e565b5080612607816143fe565b9150506124de565b50505050565b6000546001600160a01b031633146126635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cc9190614475565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273d9190614475565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156127a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c49190614475565b90506001600160a01b03811661296257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128369190614475565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a79190614475565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561290c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129309190614475565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905561298b565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556110a8903090600019612c5a565b6000546001600160a01b03163314612a125760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612a8f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b601654610100900460ff1615612ae75760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cc1565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612b21573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612b725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc1565b6016546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d1a565b6016546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190614492565b6001600160a01b038316612cb05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc1565b6001600160a01b038216612d065760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612de55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cc1565b6001600160a01b038316612e615760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cc1565b60008211612ed75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cc1565b612ee1848461325f565b156131385760165460ff16612f385760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cc1565b6001600160a01b03841660009081526002602052604090205460ff1680612f7757506001600160a01b03831660009081526002602052604090205460ff165b1561303b576001600160a01b03841660009081526006602052604090205460ff16158015612fbe57506001600160a01b03831660009081526006602052604090205460ff16155b1561303b5760145482111561303b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cc1565b600b546001600160a01b0384811691161480159061307257506001600160a01b03831660009081526002602052604090205460ff16155b15613138576001600160a01b03831660009081526006602052604090205460ff1661313857601554826130ba856001600160a01b031660009081526001602052604090205490565b6130c4919061441e565b11156131385760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cc1565b6001600160a01b038316600090815260086020526040902054613171576001600160a01b03831660009081526008602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff16806131b357506001600160a01b03841660009081526005602052604090205460ff165b156131bc575060005b6001600160a01b03841660009081526002602052604090205460ff161561324a57600f5460ff161580156131f75750600f54610100900460ff165b1561324a574260105460115461320d919061441e565b101561324a5730600090815260016020526040902054601254811061324857601354811061323a57506013545b61324381613334565b426011555b505b61325685858584613726565b95945050505050565b600080546001600160a01b0384811691161480159061328c57506000546001600160a01b03838116911614155b80156132a357506000546001600160a01b03163214155b80156132c857506001600160a01b03821660009081526007602052604090205460ff16155b80156132ed57506001600160a01b03831660009081526007602052604090205460ff16155b801561330457506001600160a01b03821661dead14155b801561331857506001600160a01b03821615155b801561332d57506001600160a01b0383163014155b9392505050565b600f805460ff1916600117905560408051606081018252600a5461ffff808216835262010000820481166020840152640100000000909104169181018290529061337e5750613719565b306000908152600460209081526040808320600b546001600160a01b03168452909152902054600019146133d757306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856133f89190614399565b613402919061435e565b61340c919061435e565b9050600061341a82856143b8565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613454576134546143cf565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156134c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ea9190614475565b816001815181106134fd576134fd6143cf565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061355c9085906000908690309042906004016144af565b600060405180830381600087803b15801561357657600080fd5b505af115801561358a573d6000803e3d6000fd5b504792506000915084905061359f8684614399565b6135a9919061435e565b9050841561369c57600b54600e546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561363a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061365f91906144eb565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6136a681836143b8565b91508560000151866040018181516136be9190614519565b61ffff9081169091526020880151849250161561371157600d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561370f573d6000803e3d6000fd5b505b505050505050505b50600f805460ff19169055565b601654600090610100900460ff166137d2576137428585613962565b601654610100900460ff1615801561375f575061375f858561325f565b156137d25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cc1565b6137dc858561325f565b1561388f576016546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613878575060408051601f3d908101601f1916820190925261387591810190614492565b60015b61388157600080fd5b90508061388d57600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906138b79084906143b8565b9091555060009050826138ca57836138d5565b6138d5868686613ac0565b6001600160a01b03861660009081526001602052604081208054929350839290919061390290849061441e565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161394e91815260200190565b60405180910390a350600195945050505050565b601654610100900460ff16156139e05760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cc1565b6139ea828261325f565b158015613a045750600c546001600160a01b038281169116145b15611e90576001600160a01b038083166000908152600760205260409020805460ff191660011790556016805461ff001916610100179081905562010000900416613a7957601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff1615613af0575060095461ffff16613bda565b6001600160a01b03841660009081526002602052604090205460ff1615613bc9576001600160a01b038516600090815260086020526040902054613b4a576001600160a01b03851660009081526008602052604090204290555b6017546001600160a01b0386166000908152600860205260409020544291613b719161441e565b118015613b9a5750601654760100000000000000000000000000000000000000000000900460ff165b15613bb657506009546601000000000000900461ffff16613bda565b5060095462010000900461ffff16613bda565b50600954640100000000900461ffff165b6000612710613be98386614399565b613bf3919061435e565b30600090815260016020526040812080549293508392909190613c1790849061441e565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613c6681856143b8565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cc857613cc8613c70565b604052919050565b600067ffffffffffffffff821115613cea57613cea613c70565b5060051b60200190565b6001600160a01b0381168114612b2157600080fd5b600082601f830112613d1a57600080fd5b81356020613d2f613d2a83613cd0565b613c9f565b82815260059290921b84018101918181019086841115613d4e57600080fd5b8286015b84811015613d72578035613d6581613cf4565b8352918301918301613d52565b509695505050505050565b8015158114612b2157600080fd5b60008060408385031215613d9e57600080fd5b823567ffffffffffffffff811115613db557600080fd5b613dc185828601613d09565b9250506020830135613dd281613d7d565b809150509250929050565b600060208083528351808285015260005b81811015613e0a57858101830151858201604001528201613dee565b81811115613e1c576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215613e4557600080fd5b8235613e5081613cf4565b946020939093013593505050565b600080600060608486031215613e7357600080fd5b8335613e7e81613cf4565b92506020840135613e8e81613cf4565b929592945050506040919091013590565b60008060408385031215613eb257600080fd5b50508035926020909101359150565b600082601f830112613ed257600080fd5b81356020613ee2613d2a83613cd0565b82815260059290921b84018101918181019086841115613f0157600080fd5b8286015b84811015613d725780358352918301918301613f05565b60008060408385031215613f2f57600080fd5b823567ffffffffffffffff80821115613f4757600080fd5b613f5386838701613d09565b93506020850135915080821115613f6957600080fd5b50613f7685828601613ec1565b9150509250929050565b803561ffff81168114613f9257600080fd5b919050565b600080600060608486031215613fac57600080fd5b613fb584613f80565b9250613fc360208501613f80565b9150613fd160408501613f80565b90509250925092565b600060208284031215613fec57600080fd5b813561332d81613cf4565b600080600080600060a0868803121561400f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561404557600080fd5b823561405081613cf4565b91506020830135613dd281613d7d565b6000806040838503121561407357600080fd5b8235915061408360208401613f80565b90509250929050565b60006020828403121561409e57600080fd5b813561332d81613d7d565b6000806000606084860312156140be57600080fd5b83356140c981613d7d565b925060208401356140d981613d7d565b915060408401356140e981613d7d565b809150509250925092565b6000806040838503121561410757600080fd5b61411083613f80565b915061408360208401613f80565b6000806040838503121561413157600080fd5b823561413c81613cf4565b91506020830135613dd281613cf4565b60008060006060848603121561416157600080fd5b833567ffffffffffffffff8082111561417957600080fd5b61418587838801613d09565b9450602086013591508082111561419b57600080fd5b6141a787838801613ec1565b935060408601359150808211156141bd57600080fd5b506141ca86828701613ec1565b9150509250925092565b600081518084526020808501945080840160005b8381101561420d5781516001600160a01b0316875295820195908201906001016141e8565b509495945050505050565b60408152600061422b60408301856141d4565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156142a657816000190482111561428c5761428c61423c565b8085161561429957918102915b93841c9390800290614270565b509250929050565b6000826142bd57506001610d61565b816142ca57506000610d61565b81600181146142e057600281146142ea57614306565b6001915050610d61565b60ff8411156142fb576142fb61423c565b50506001821b610d61565b5060208310610133831016604e8410600b8410161715614329575081810a610d61565b614333838361426b565b80600019048211156143475761434761423c565b029392505050565b600061332d60ff8416836142ae565b600082614394577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156143b3576143b361423c565b500290565b6000828210156143ca576143ca61423c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8114156144155761441561423c565b60010192915050565b600082198211156144315761443161423c565b500190565b60006020828403121561444857600080fd5b5051919050565b600061ffff80831681851680830382111561446c5761446c61423c565b01949350505050565b60006020828403121561448757600080fd5b815161332d81613cf4565b6000602082840312156144a457600080fd5b815161332d81613d7d565b85815284602082015260a0604082015260006144ce60a08301866141d4565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561450057600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156145345761453461423c565b03939250505056fea264697066735822122076d8b652679ff388179784d2e586fac21eda2bd340223e1a016eb4204ef4626364736f6c634300080b0033

Deployed Bytecode Sourcemap

6629:21800:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8268:73;;;;;;;;;;;;8299:42;8268:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8268:73:0;;;;;;;;8800:52;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8800:52:0;245:177:1;16527:172:0;;;;;;;;;;-1:-1:-1;16527:172:0;;;;;:::i;:::-;;:::i;:::-;;7732:138;;;;;;;;;;-1:-1:-1;7732:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:6:1;2915:15;;;2897:34;;2967:15;;;2962:2;2947:18;;2940:43;3019:15;;;2999:18;;;2992:43;;;;3071:15;;;3066:2;3051:18;;3044:43;2859:3;2844:19;7732:138:0;2649:444:1;13008:80:0;;;;;;;;;;-1:-1:-1;13080:5:0;;;;;;;;;;;;;;;;;13008:80;;;;;;;:::i;8207:26::-;;;;;;;;;;-1:-1:-1;8207:26:0;;;;-1:-1:-1;;;;;8207:26:0;;;13621:161;;;;;;;;;;-1:-1:-1;13621:161:0;;;;;:::i;:::-;;:::i;:::-;;;4492:14:1;;4485:22;4467:41;;4455:2;4440:18;13621:161:0;4327:187:1;19096:112:0;;;;;;;;;;;;;:::i;12711:115::-;;;;;;;;;;;;;:::i;14288:306::-;;;;;;;;;;-1:-1:-1;14288:306:0;;;;;:::i;:::-;;:::i;18146:267::-;;;;;;;;;;-1:-1:-1;18146:267:0;;;;;:::i;:::-;;:::i;25788:373::-;;;;;;;;;;-1:-1:-1;25788:373:0;;;;;:::i;:::-;;:::i;8004:42::-;;;;;;;;;;;;8042:4;8004:42;;8859:50;;;;;;;;;;;;;;;;12832:80;;;;;;;;;;-1:-1:-1;12832:80:0;;7411:1;6642:36:1;;6630:2;6615:18;12832:80:0;6500:184:1;17246:397:0;;;;;;;;;;-1:-1:-1;17246:397:0;;;;;:::i;:::-;;:::i;16952:108::-;;;;;;;;;;-1:-1:-1;16952:108:0;;;;;:::i;:::-;;:::i;19216:338::-;;;;;;;;;;-1:-1:-1;19216:338:0;;;;;:::i;:::-;;:::i;18421:140::-;;;;;;;;;;-1:-1:-1;18421:140:0;;;;;:::i;:::-;;:::i;14602:215::-;;;;;;;;;;-1:-1:-1;14602:215:0;;;;;:::i;:::-;;:::i;17869:269::-;;;;;;;;;;-1:-1:-1;17869:269:0;;;;;:::i;:::-;;:::i;8240:21::-;;;;;;;;;;-1:-1:-1;8240:21:0;;;;-1:-1:-1;;;;;8240:21:0;;;9038:34;;;;;;;;;;-1:-1:-1;9038:34:0;;;;;;;;11565:590;;;;;;;;;;-1:-1:-1;11565:590:0;;;;;:::i;:::-;;:::i;18707:125::-;;;;;;;;;;-1:-1:-1;18707:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18796:28:0;18772:4;18796:28;;;:19;:28;;;;;;;;;18707:125;9079:36;;;;;;;;;;-1:-1:-1;9079:36:0;;;;;;;;;;;16840:104;;;;;;;;;;;;;:::i;18840:134::-;;;;;;;;;;-1:-1:-1;18840:134:0;;;;;:::i;:::-;;:::i;20369:266::-;;;;;;;;;;-1:-1:-1;20369:266:0;;;;;:::i;:::-;;:::i;16116:248::-;;;;;;;;;;-1:-1:-1;16116:248:0;;;;;:::i;:::-;;:::i;18569:130::-;;;;;;;;;;-1:-1:-1;18569:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;18661:30:0;18637:4;18661:30;;;:21;:30;;;;;;;;;18569:130;18982:106;;;;;;;;;;;;;:::i;13321:117::-;;;;;;;;;;-1:-1:-1;13321:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;13414:16:0;13387:7;13414:16;;;:7;:16;;;;;;;13321:117;12163:195;;;;;;;;;;;;;:::i;20643:119::-;;;;;;;;;;;;;:::i;20256:105::-;;;;;;;;;;-1:-1:-1;20256:105:0;;;;;:::i;:::-;;:::i;9150:34::-;;;;;;;;;;-1:-1:-1;9150:34:0;;;;;;;;;;;15608:500;;;;;;;;;;-1:-1:-1;15608:500:0;;;;;:::i;:::-;;:::i;13094:80::-;;;;;;;;;;-1:-1:-1;13146:7:0;11543:6;-1:-1:-1;;;;;11543:6:0;13094:80;19096:112;14107:173;;;;;;;;;;;;;:::i;25160:429::-;;;;;;;;;;;;;:::i;12918:84::-;;;;;;;;;;-1:-1:-1;12992:7:0;;;;;;;;;;;;;;;;;12918:84;;20133:115;;;;;;;;;;-1:-1:-1;20133:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;20223:17:0;20196:7;20223:17;;;:8;:17;;;;;;;20133:115;14825:225;;;;;;;;;;-1:-1:-1;14825:225:0;;;;;:::i;:::-;;:::i;13446:167::-;;;;;;;;;;-1:-1:-1;13446:167:0;;;;;:::i;:::-;;:::i;19697:256::-;;;;;;;;;;-1:-1:-1;19697:256:0;;;;;:::i;:::-;;:::i;17068:170::-;;;;;;;;;;-1:-1:-1;17068:170:0;;;;;:::i;:::-;;:::i;17651:210::-;;;;;;;;;;-1:-1:-1;17651:210:0;;;;;:::i;:::-;;:::i;19961:164::-;;;;;;;;;;-1:-1:-1;19961:164:0;;;;;:::i;:::-;;:::i;7879:116::-;;;;;;;;;;-1:-1:-1;7879:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;9770:6:1;9803:15;;;9785:34;;9855:15;;;9850:2;9835:18;;9828:43;9907:15;;9887:18;;;9880:43;;;;9748:2;9733:18;7879:116:0;9564:365:1;13180:133:0;;;;;;;;;;-1:-1:-1;13180:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13282:19:0;;;13264:7;13282:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13180:133;8717:45;;;;;;;;;;;;;;;;26169:482;;;;;;;;;;-1:-1:-1;26169:482:0;;;;;:::i;:::-;;:::i;15058:542::-;;;;;;;;;;-1:-1:-1;15058:542:0;;;;;:::i;:::-;;:::i;19562:127::-;;;;;;;;;;-1:-1:-1;19562:127:0;;;;;:::i;:::-;;:::i;25597:183::-;;;;;;;;;;;;;:::i;16374:145::-;;;;;;;;;;-1:-1:-1;16374:145:0;;;;;:::i;:::-;;:::i;8448:192::-;;;;;;;;;;-1:-1:-1;8448:192:0;;;;;;-1:-1:-1;;;;;8448:192:0;;;;;;;;;;;-1:-1:-1;;;;;11682:15:1;;;11664:34;;11734:15;;;;11729:2;11714:18;;11707:43;11576:18;8448:192:0;11413:343:1;8671:39:0;;;;;;;;;;-1:-1:-1;8671:39:0;;;;;;;;;;;16707:125;;;;;;;;;;-1:-1:-1;16707:125:0;;;;;:::i;:::-;;:::i;16527:172::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;;;;;;;;;16635:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16635:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16673:8;;16683:7;;16635:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16527:172:::0;;:::o;13621:161::-;13696:4;13713:39;189:10;13736:7;13745:6;13713:8;:39::i;:::-;-1:-1:-1;13770:4:0;13621:161;;;;;:::o;19096:112::-;19141:7;19186:13;7411:1;19186:2;:13;:::i;:::-;19168:14;;:32;;;;:::i;:::-;19161:39;;19096:112;:::o;12711:115::-;12766:7;7471:13;7411:1;7471:2;:13;:::i;:::-;7454:30;;7256:17;7454:30;:::i;:::-;12777:31;;12797:8;;;12777:31;7471:13;7411:1;7471:2;:13;:::i;:::-;7454:30;;7256:17;7454:30;:::i;14288:306::-;-1:-1:-1;;;;;14409:19:0;;14388:4;14409:19;;;:11;:19;;;;;;;;14429:10;14409:31;;;;;;;;-1:-1:-1;;14409:52:0;14405:126;;-1:-1:-1;;;;;14478:19:0;;;;;;:11;:19;;;;;;;;14498:10;14478:31;;;;;;;:41;;14513:6;;14478:19;:41;;14513:6;;14478:41;:::i;:::-;;;;-1:-1:-1;;14405:126:0;14550:36;14560:6;14568:9;14579:6;14550:9;:36::i;:::-;14543:43;14288:306;-1:-1:-1;;;;14288:306:0:o;18146:267::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;18288:4:::1;7471:13;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;18278:14;;;;:::i;:::-;18266:7:::0;18255;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;18245:17;;;;:::i;:::-;18244:29;;;;:::i;:::-;:49;;18236:112;;;::::0;-1:-1:-1;;;18236:112:0;;15479:2:1;18236:112:0::1;::::0;::::1;15461:21:1::0;15518:2;15498:18;;;15491:30;15557:34;15537:18;;;15530:62;15628:20;15608:18;;;15601:48;15666:19;;18236:112:0::1;15277:414:1::0;18236:112:0::1;18398:7:::0;18387;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;18377:17;;;;:::i;:::-;18376:29;;;;:::i;:::-;18359:14;:46:::0;-1:-1:-1;;18146:267:0:o;25788:373::-;25913:7;:14;25894:8;:15;:33;25886:67;;;;-1:-1:-1;;;25886:67:0;;15898:2:1;25886:67:0;;;15880:21:1;15937:2;15917:18;;;15910:30;15976:23;15956:18;;;15949:51;16017:18;;25886:67:0;15696:345:1;25886:67:0;25969:7;25964:190;25986:8;:15;25982:1;:19;;;25964:190;;;26056:7;26064:1;26056:10;;;;;;;;;;:::i;:::-;;;;;;;26031:21;26041:10;-1:-1:-1;;;;;13414:16:0;13387:7;13414:16;;;:7;:16;;;;;;;13321:117;26031:21;:35;;26023:44;;;;;;26082:60;26092:10;26104:8;26113:1;26104:11;;;;;;;;;;:::i;:::-;;;;;;;7411:1;26128:2;:13;;;;:::i;:::-;26117:7;26125:1;26117:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26082:9;:60::i;:::-;-1:-1:-1;26003:3:0;;;;:::i;:::-;;;;25964:190;;;;25788:373;;:::o;17246:397::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;8042:4:::1;17353:6;:21;;;;:65;;;;;8092:4;17395:7;:23;;;;17353:65;:117;;;;;8146:4;17439:11;:31;;;;17353:117;17345:170;;;::::0;-1:-1:-1;;;17345:170:0;;16617:2:1;17345:170:0::1;::::0;::::1;16599:21:1::0;16656:2;16636:18;;;16629:30;16695:25;16675:18;;;16668:53;16738:18;;17345:170:0::1;16415:347:1::0;17345:170:0::1;17526:9;:25:::0;;::::1;::::0;;::::1;17562:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;17600:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17246:397::o;16952:108::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;17021:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17021:31:0::1;::::0;::::1;160:74:1::0;17021:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17021:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16952:108:::0;:::o;19216:338::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;19430:16;19410;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;19400:26;;;;:::i;:::-;19399:47;;;;:::i;:::-;19383:13;:63:::0;19498:13;19481;7471::::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;19471:23;;;;:::i;:::-;19470:41;;;;:::i;:::-;19457:10;:54:::0;19522:17:::1;:24:::0;-1:-1:-1;;;;19216:338:0:o;18421:140::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;-1:-1:-1;;;;;18513:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;18513:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18421:140::o;14602:215::-;189:10;14690:4;14739:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14739:34:0;;;;;;;;;;14690:4;;14707:80;;14730:7;;14739:47;;14776:10;;14739:47;:::i;:::-;14707:8;:80::i;17869:269::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;18010:4:::1;7471:13;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;18000:14;;;;:::i;:::-;17988:7:::0;17977;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;17967:17;;;;:::i;:::-;17966:29;;;;:::i;:::-;:49;;17958:117;;;::::0;-1:-1:-1;;;17958:117:0;;17102:2:1;17958:117:0::1;::::0;::::1;17084:21:1::0;17141:2;17121:18;;;17114:30;17180:34;17160:18;;;17153:62;17251:25;17231:18;;;17224:53;17294:19;;17958:117:0::1;16900:419:1::0;17958:117:0::1;18123:7:::0;18112;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;18102:17;;;;:::i;:::-;18101:29;;;;:::i;:::-;18086:12;:44:::0;-1:-1:-1;;17869:269:0:o;11565:590::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;-1:-1:-1;;;;;11646:22:0;::::1;11638:96;;;::::0;-1:-1:-1;;;11638:96:0;;17526:2:1;11638:96:0::1;::::0;::::1;17508:21:1::0;17565:2;17545:18;;;17538:30;17604:34;17584:18;;;17577:62;17675:31;17655:18;;;17648:59;17724:19;;11638:96:0::1;17324:425:1::0;11638:96:0::1;-1:-1:-1::0;;;;;11753:16:0;::::1;8299:42;11753:16;;11745:90;;;::::0;-1:-1:-1;;;11745:90:0;;17526:2:1;11745:90:0::1;::::0;::::1;17508:21:1::0;17565:2;17545:18;;;17538:30;17604:34;17584:18;;;17577:62;17675:31;17655:18;;;17648:59;17724:19;;11745:90:0::1;17324:425:1::0;11745:90:0::1;11866:6;::::0;;11846:34:::1;::::0;-1:-1:-1;;;;;11866:6:0;;::::1;::::0;11846:19:::1;:34::i;:::-;11891:35;11911:8;11921:4;11891:19;:35::i;:::-;11970:1;11960:6:::0;;-1:-1:-1;;;;;11960:6:0::1;13414:16:::0;;:7;:16;;;;;;11950:21;11947:99:::1;;11998:6;::::0;;-1:-1:-1;;;;;11998:6:0::1;13414:16:::0;;;:7;:16;;;;;;;11988:46:::1;::::0;11998:6;12006:8;;26082:9;:60::i;11988:46::-:1;;11947:99;12066:6;:17:::0;;-1:-1:-1;;12066:17:0::1;-1:-1:-1::0;;;;;12066:17:0;::::1;::::0;;::::1;::::0;;12099:38:::1;::::0;12066:17;;;;12099:38:::1;::::0;12066:6;12099:38:::1;11565:590:::0;:::o;16840:104::-;16885:7;16912:9;;;;;;;;;-1:-1:-1;;;;;16912:9:0;-1:-1:-1;;;;;16912:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18840:134::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;-1:-1:-1;;;;;18928:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18928:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18840:134::o;20369:266::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;20470:10:::1;20462:4;:18;;20454:53;;;::::0;-1:-1:-1;;;20454:53:0;;18145:2:1;20454:53:0::1;::::0;::::1;18127:21:1::0;18184:2;18164:18;;;18157:30;18223:24;18203:18;;;18196:52;18265:18;;20454:53:0::1;17943:346:1::0;20454:53:0::1;20533:4;20526:3;:11;;;;20518:44;;;::::0;-1:-1:-1;;;20518:44:0;;18496:2:1;20518:44:0::1;::::0;::::1;18478:21:1::0;18535:2;18515:18;;;18508:30;18574:22;18554:18;;;18547:50;18614:18;;20518:44:0::1;18294:344:1::0;20518:44:0::1;20573:12;:19:::0;;;;20603:9:::1;:24:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20369:266::o;16116:248::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;16200:16:::1;::::0;::::1;::::0;::::1;;;16199:17;16191:54;;;::::0;-1:-1:-1;;;16191:54:0;;18845:2:1;16191:54:0::1;::::0;::::1;18827:21:1::0;18884:2;18864:18;;;18857:30;18923:26;18903:18;;;18896:54;18967:18;;16191:54:0::1;18643:348:1::0;16191:54:0::1;-1:-1:-1::0;;;;;16264:28:0;::::1;16287:4;16264:28;;16256:55;;;::::0;-1:-1:-1;;;16256:55:0;;19198:2:1;16256:55:0::1;::::0;::::1;19180:21:1::0;19237:2;19217:18;;;19210:30;19276:16;19256:18;;;19249:44;19310:18;;16256:55:0::1;18996:338:1::0;16256:55:0::1;16322:9;:34:::0;;-1:-1:-1;;;;;16322:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;16116:248::o;18982:106::-;19023:7;19066:13;7411:1;19066:2;:13;:::i;:::-;19050:12;;:30;;;;:::i;12163:195::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;12250:6:::1;::::0;;12230:34:::1;::::0;-1:-1:-1;;;;;12250:6:0;;::::1;::::0;12230:19:::1;:34::i;:::-;12292:1;12275:19:::0;;-1:-1:-1;;12275:19:0::1;::::0;;12310:40:::1;::::0;12292:1;;12310:40:::1;::::0;12292:1;;12310:40:::1;12163:195::o:0;20643:119::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;20697:12;:22:::0;7471:13:::1;7411:1;7471:2;:13;:::i;:::-;7454:30;::::0;7256:17:::1;7454:30;:::i;:::-;20730:14;:24:::0;20643:119::o;20256:105::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;20328:15:::1;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20256:105::o;15608:500::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;15689:16;15685:416:::1;;-1:-1:-1::0;;;;;15722:13:0;;::::1;15738:5;15722:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15722:21:0::1;::::0;;15758:9:::1;::::0;:32;;;;;::::1;::::0;::::1;19507:74:1::0;;;;19597:18;;;19590:50;;;;15758:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19480:18:1;;15758:32:0::1;19339:307:1::0;15685:416:0::1;15827:17;::::0;:22;15823:136:::1;;15916:6;15896:17;;15878:15;:35;;;;:::i;:::-;:44;15870:73;;;::::0;-1:-1:-1;;;15870:73:0;;19853:2:1;15870:73:0::1;::::0;::::1;19835:21:1::0;19892:2;19872:18;;;19865:30;19931:18;19911;;;19904:46;19967:18;;15870:73:0::1;19651:340:1::0;15870:73:0::1;-1:-1:-1::0;;;;;15973:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;15973:20:0::1;15989:4;15973:20:::0;;::::1;::::0;;;16028:15:::1;16008:17;:35:::0;16058:9:::1;::::0;:31;;;;;::::1;::::0;::::1;19507:74:1::0;;;;19597:18;;;19590:50;16058:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19480:18:1;;16058:31:0::1;19339:307:1::0;15685:416:0::1;15608:500:::0;;:::o;14107:173::-;14171:4;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;14220:9:::1;::::0;14188:62:::1;::::0;14205:4:::1;::::0;-1:-1:-1;;;;;14220:9:0::1;-1:-1:-1::0;;14188:8:0::1;:62::i;:::-;-1:-1:-1::0;14268:4:0::1;14107:173:::0;:::o;25160:429::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;25222:14:::1;::::0;::::1;;25221:15;25213:52;;;::::0;-1:-1:-1;;;25213:52:0;;20198:2:1;25213:52:0::1;::::0;::::1;20180:21:1::0;20237:2;20217:18;;;20210:30;20276:26;20256:18;;;20249:54;20320:18;;25213:52:0::1;19996:348:1::0;25213:52:0::1;25284:16;::::0;::::1;::::0;::::1;;;25276:53;;;::::0;-1:-1:-1;;;25276:53:0;;20551:2:1;25276:53:0::1;::::0;::::1;20533:21:1::0;20590:2;20570:18;;;20563:30;20629:26;20609:18;;;20602:54;20673:18;;25276:53:0::1;20349:348:1::0;25276:53:0::1;25351:9;::::0;;;::::1;-1:-1:-1::0;;;;;25351:9:0::1;25340:99;;25391:9;:36:::0;;;::::1;25421:4;25391:36:::0;::::1;;::::0;;25340:99:::1;25453:9;::::0;25473:6:::1;::::0;25453:85:::1;::::0;;;;-1:-1:-1;;;;;25473:6:0;;::::1;25453:85;::::0;::::1;20925:74:1::0;21047:10;25488:12:0::1;21035:23:1::0;21015:18;;;21008:51;21107:18;25510:15:0::1;21095:31:1::0;21075:18;;;21068:59;7411:1:0::1;21143:18:1::0;;;21136:45;25453:9:0;;;::::1;;::::0;:19:::1;::::0;20897::1;;25453:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25449:101:::0;25560:14:::1;:21:::0;;-1:-1:-1;;25560:21:0::1;25577:4;25560:21;::::0;;25160:429::o;14825:225::-;189:10;14918:4;14967:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14967:34:0;;;;;;;;;;14918:4;;14935:85;;14958:7;;14967:52;;15004:15;;14967:52;:::i;13446:167::-;13524:4;13541:42;189:10;13565:9;13576:6;13541:9;:42::i;:::-;-1:-1:-1;13601:4:0;;13446:167;-1:-1:-1;;;13446:167:0:o;19697:256::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;19778:21;;-1:-1:-1;;;;;19778:21:0::1;:35:::0;;:68:::1;;-1:-1:-1::0;19817:21:0;;-1:-1:-1;;;;;19817:21:0::1;8299:42;19817:29;19778:68;19774:130;;;19863:29;::::0;-1:-1:-1;;;19863:29:0;;21394:2:1;19863:29:0::1;::::0;::::1;21376:21:1::0;21433:2;21413:18;;;21406:30;21472:21;21452:18;;;21445:49;21511:18;;19863:29:0::1;21192:343:1::0;19774:130:0::1;19914:21:::0;:31;;-1:-1:-1;;19914:31:0::1;-1:-1:-1::0;;;;;19914:31:0;;;::::1;::::0;;;::::1;::::0;;19697:256::o;17068:170::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;17175:9:::1;::::0;:55:::1;::::0;;;;21749:14:1;;21742:22;17175:55:0::1;::::0;::::1;21724:41:1::0;21808:14;;21801:22;21781:18;;;21774:50;21867:14;;21860:22;21840:18;;;21833:50;17175:9:0;;;::::1;-1:-1:-1::0;;;;;17175:9:0::1;::::0;:24:::1;::::0;21697:18:1;;17175:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17068:170:::0;;;:::o;17651:210::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;17736:7:::1;:29:::0;;::::1;17776::::0;;::::1;::::0;::::1;::::0;;;;17736;;::::1;17776::::0;::::1;::::0;;17832:21:::1;17796:9:::0;17756;17832:21:::1;:::i;:::-;17816:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;17651:210:0:o;19961:164::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;20037:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;20037:29:0;;::::1;;::::0;;20082:35:::1;::::0;::::1;::::0;::::1;::::0;20059:7;4492:14:1;4485:22;4467:41;;4455:2;4440:18;;4327:187;20082:35:0::1;;;;;;;;19961:164:::0;:::o;26169:482::-;26324:8;:15;26305:8;:15;:34;:72;;;;;26362:8;:15;26343:8;:15;:34;26305:72;26297:106;;;;-1:-1:-1;;;26297:106:0;;15898:2:1;26297:106:0;;;15880:21:1;15937:2;15917:18;;;15910:30;15976:23;15956:18;;;15949:51;16017:18;;26297:106:0;15696:345:1;26297:106:0;26419:7;26414:230;26436:8;:15;26432:1;:19;;;26414:230;;;26532:8;26541:1;26532:11;;;;;;;;;;:::i;:::-;;;;;;;26517:8;26526:1;26517:11;;;;;;;;;;:::i;:::-;;;;;;;7411:1;7471:2;:13;;;;:::i;:::-;7454:30;;7256:17;7454:30;:::i;:::-;26507:21;;;;:::i;:::-;26506:37;;;;:::i;:::-;26491:10;13387:7;13414:16;;;:7;:16;;;;;;26481:62;;26473:71;;;;;;26559:73;26569:10;26581:8;26590:1;26581:11;;;;;;;;;;:::i;:::-;;;;;;;26620:8;26629:1;26620:11;;;;;;;;;;:::i;:::-;;;;;;;26605:8;26614:1;26605:11;;;;;;;;;;:::i;:::-;;;;;;;7411:1;7471:2;:13;;;;:::i;:::-;7454:30;;7256:17;7454:30;:::i;:::-;26595:21;;;;:::i;:::-;26594:37;;;;:::i;26559:73::-;-1:-1:-1;26453:3:0;;;;:::i;:::-;;;;26414:230;;;;26169:482;;;:::o;15058:542::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;15129:20:::1;15162:9;15129:43;;15183:16;15213:10;-1:-1:-1::0;;;;;15213:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15202:40:0::1;;15251:4;15258:10;-1:-1:-1::0;;;;;15258:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15202:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11682:15:1;;;15202:74:0::1;::::0;::::1;11664:34:1::0;11734:15;;11714:18;;;11707:43;11576:18;;15202:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15183:93:::0;-1:-1:-1;;;;;;15291:22:0;::::1;15287:200;;15350:10;-1:-1:-1::0;;;;;15350:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15339:43:0::1;;15391:4;15398:10;-1:-1:-1::0;;;;;15398:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15339:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11682:15:1;;;15339:77:0::1;::::0;::::1;11664:34:1::0;11734:15;;11714:18;;;11707:43;11576:18;;15339:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15330:6;:86:::0;;-1:-1:-1;;15330:86:0::1;-1:-1:-1::0;;;;;15330:86:0;;;::::1;::::0;;;::::1;::::0;;15287:200:::1;;;15458:6;:17:::0;;-1:-1:-1;;15458:17:0::1;-1:-1:-1::0;;;;;15458:17:0;::::1;;::::0;;15287:200:::1;15497:9;:22:::0;;-1:-1:-1;;15497:22:0::1;-1:-1:-1::0;;;;;15497:22:0;::::1;::::0;;::::1;::::0;;;15530:62:::1;::::0;15547:4:::1;::::0;-1:-1:-1;;15530:8:0::1;:62::i;19562:127::-:0;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;19639:11:::1;:42:::0;;-1:-1:-1;;19639:42:0::1;-1:-1:-1::0;;;;;19639:42:0;;;::::1;::::0;;;::::1;::::0;;19562:127::o;25597:183::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;25664:16:::1;::::0;::::1;::::0;::::1;;;25663:17;25655:58;;;::::0;-1:-1:-1;;;25655:58:0;;22913:2:1;25655:58:0::1;::::0;::::1;22895:21:1::0;22952:2;22932:18;;;22925:30;22991;22971:18;;;22964:58;23039:18;;25655:58:0::1;22711:352:1::0;25655:58:0::1;11516:7:::0;11543:6;;25724:48:::1;::::0;-1:-1:-1;;;;;11543:6:0;;;;25750:21:::1;25724:48:::0;::::1;;;::::0;25750:21;;25724:48;11516:7;25724:48;25750:21;11543:6;25724:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25597:183::o:0;16374:145::-;9590:6;;-1:-1:-1;;;;;9590:6:0;189:10;9590:22;9582:52;;;;-1:-1:-1;;;9582:52:0;;11963:2:1;9582:52:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:47;12078:18;;9582:52:0;11761:341:1;9582:52:0;16464:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;19525:55:1;;;16464:47:0::1;::::0;::::1;19507:74:1::0;19624:14;;19617:22;19597:18;;;19590:50;16464:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19480:18:1;;16464:47:0::1;19339:307:1::0;16707:125:0;16792:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;16792:32:0;;;160:74:1;16768:4:0;;16792:9;;;;;:23;;133:18:1;;16792:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13790:309::-;-1:-1:-1;;;;;13884:20:0;;13876:52;;;;-1:-1:-1;;;13876:52:0;;23520:2:1;13876:52:0;;;23502:21:1;23559:2;23539:18;;;23532:30;23598:21;23578:18;;;23571:49;23637:18;;13876:52:0;23318:343:1;13876:52:0;-1:-1:-1;;;;;13947:21:0;;13939:53;;;;-1:-1:-1;;;13939:53:0;;23520:2:1;13939:53:0;;;23502:21:1;23559:2;23539:18;;;23532:30;23598:21;23578:18;;;23571:49;23637:18;;13939:53:0;23318:343:1;13939:53:0;-1:-1:-1;;;;;14005:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14058:33;;391:25:1;;;14058:33:0;;364:18:1;14058:33:0;;;;;;;13790:309;;;:::o;21138:1910::-;21217:4;-1:-1:-1;;;;;21242:18:0;;21234:68;;;;-1:-1:-1;;;21234:68:0;;23868:2:1;21234:68:0;;;23850:21:1;23907:2;23887:18;;;23880:30;23946:34;23926:18;;;23919:62;24017:7;23997:18;;;23990:35;24042:19;;21234:68:0;23666:401:1;21234:68:0;-1:-1:-1;;;;;21321:16:0;;21313:64;;;;-1:-1:-1;;;21313:64:0;;24274:2:1;21313:64:0;;;24256:21:1;24313:2;24293:18;;;24286:30;24352:34;24332:18;;;24325:62;24423:5;24403:18;;;24396:33;24446:19;;21313:64:0;24072:399:1;21313:64:0;21405:1;21396:6;:10;21388:64;;;;-1:-1:-1;;;21388:64:0;;24678:2:1;21388:64:0;;;24660:21:1;24717:2;24697:18;;;24690:30;24756:34;24736:18;;;24729:62;24827:11;24807:18;;;24800:39;24856:19;;21388:64:0;24476:405:1;21388:64:0;21466:20;21477:4;21483:2;21466:10;:20::i;:::-;21463:665;;;21507:14;;;;21503:89;;21542:34;;-1:-1:-1;;;21542:34:0;;25088:2:1;21542:34:0;;;25070:21:1;25127:2;25107:18;;;25100:30;25166:26;25146:18;;;25139:54;25210:18;;21542:34:0;24886:348:1;21503:89:0;-1:-1:-1;;;;;21609:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;21626:11:0;;;;;;:7;:11;;;;;;;;21609:28;21606:248;;;-1:-1:-1;;;;;21662:27:0;;;;;;:21;:27;;;;;;;;21661:28;:58;;;;-1:-1:-1;;;;;;21694:25:0;;;;;;:21;:25;;;;;;;;21693:26;21661:58;21657:182;;;21762:12;;21752:6;:22;;21744:75;;;;-1:-1:-1;;;21744:75:0;;25441:2:1;21744:75:0;;;25423:21:1;25480:2;25460:18;;;25453:30;25519:34;25499:18;;;25492:62;25590:10;25570:18;;;25563:38;25618:19;;21744:75:0;25239:404:1;21744:75:0;21885:9;;-1:-1:-1;;;;;21871:24:0;;;21885:9;;21871:24;;;;:40;;-1:-1:-1;;;;;;21900:11:0;;;;;;:7;:11;;;;;;;;21899:12;21871:40;21868:249;;;-1:-1:-1;;;;;21937:25:0;;;;;;:21;:25;;;;;;;;21932:170;;22021:14;;22011:6;21995:13;22005:2;-1:-1:-1;;;;;13414:16:0;13387:7;13414:16;;;:7;:16;;;;;;;13321:117;21995:13;:22;;;;:::i;:::-;:40;;21987:95;;;;-1:-1:-1;;;21987:95:0;;25850:2:1;21987:95:0;;;25832:21:1;25889:2;25869:18;;;25862:30;25928:34;25908:18;;;25901:62;25999:12;25979:18;;;25972:40;26029:19;;21987:95:0;25648:406:1;21987:95:0;-1:-1:-1;;;;;22144:12:0;;;;;;:8;:12;;;;;;22140:80;;-1:-1:-1;;;;;22178:12:0;;;;;;:8;:12;;;;;22193:15;22178:30;;22140:80;-1:-1:-1;;;;;22265:25:0;;22232:12;22265:25;;;:19;:25;;;;;;22247:4;;22265:25;;;:52;;-1:-1:-1;;;;;;22294:23:0;;;;;;:19;:23;;;;;;;;22265:52;22262:98;;;-1:-1:-1;22343:5:0;22262:98;-1:-1:-1;;;;;22376:11:0;;;;;;:7;:11;;;;;;;;22372:606;;;22409:6;;;;22408:7;:47;;;;-1:-1:-1;22436:19:0;;;;;;;22408:47;22404:557;;;22525:15;22505:17;;22494:8;;:28;;;;:::i;:::-;:46;22490:456;;;22614:4;22565:28;13414:16;;;:7;:16;;;;;;22671:13;;22647:37;;22643:284;;22740:10;;22716:20;:34;22713:77;;-1:-1:-1;22777:10:0;;22713:77;22816:34;22829:20;22816:12;:34::i;:::-;22888:15;22877:8;:26;22643:284;22542:404;22490:456;22996:44;23014:4;23020:2;23024:6;23032:7;22996:17;:44::i;:::-;22989:51;21138:1910;-1:-1:-1;;;;;21138:1910:0:o;20770:360::-;20838:4;11543:6;;-1:-1:-1;;;;;20862:15:0;;;11543:6;;20862:15;;;;:45;;-1:-1:-1;11516:7:0;11543:6;-1:-1:-1;;;;;20894:13:0;;;11543:6;;20894:13;;20862:45;:82;;;;-1:-1:-1;11516:7:0;11543:6;-1:-1:-1;;;;;11543:6:0;20924:9;:20;;20862:82;:121;;;;-1:-1:-1;;;;;;20962:21:0;;;;;;:17;:21;;;;;;;;20961:22;20862:121;:162;;;;-1:-1:-1;;;;;;21001:23:0;;;;;;:17;:23;;;;;;;;21000:24;20862:162;:189;;;;-1:-1:-1;;;;;;21041:10:0;;8299:42;21041:10;;20862:189;:222;;;;-1:-1:-1;;;;;;21068:16:0;;;;20862:222;:260;;;;-1:-1:-1;;;;;;21101:21:0;;21117:4;21101:21;;20862:260;20855:267;20770:360;-1:-1:-1;;;20770:360:0:o;23056:1580::-;9484:6;:13;;-1:-1:-1;;9484:13:0;9493:4;9484:13;;;23139:30:::1;::::0;;::::1;::::0;::::1;::::0;;23162:7:::1;23139:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;23180:56:::1;;23218:7;;;23180:56;23271:4;23251:26;::::0;;;:11:::1;:26;::::0;;;;;;;23286:9:::1;::::0;-1:-1:-1;;;;;23286:9:0::1;23251:46:::0;;;;;;;;-1:-1:-1;;23251:67:0::1;23248:165;;23355:4;23335:26;::::0;;;:11:::1;:26;::::0;;;;;;;23370:9:::1;::::0;-1:-1:-1;;;;;23370:9:0::1;23335:46:::0;;;;;;;-1:-1:-1;;23335:66:0;;23248:165:::1;23425:17;23506:1;23490:6;:12;;;23446:56;;23470:6;:16;;;23447:39;;:20;:39;;;;:::i;:::-;23446:56;;;;:::i;:::-;23445:62;;;;:::i;:::-;23425:82:::0;-1:-1:-1;23518:15:0::1;23536:32;23425:82:::0;23536:20;:32:::1;:::i;:::-;23613:16;::::0;;23627:1:::1;23613:16:::0;;;;;::::1;::::0;;23518:50;;-1:-1:-1;23589:21:0::1;::::0;23613:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23613:16:0::1;23589:40;;23658:4;23640;23645:1;23640:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23640:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23684:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23640:7;;23684:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23674:4;23679:1;23674:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23674:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23713:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23788:7;;23713:9:::1;::::0;23826:4;;23853::::1;::::0;23873:15:::1;::::0;23713:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23933:21:0::1;::::0;-1:-1:-1;23912:18:0::1;::::0;-1:-1:-1;24019:7:0;;-1:-1:-1;23993:22:0::1;24006:9:::0;23933:21;23993:22:::1;:::i;:::-;23992:34;;;;:::i;:::-;23965:61:::0;-1:-1:-1;24043:13:0;;24039:345:::1;;24073:9;::::0;24242:21;;24073:239:::1;::::0;;;;24150:4:::1;24073:239;::::0;::::1;27033:34:1::0;27083:18;;;27076:34;;;24073:9:0::1;27126:18:1::0;;;27119:34;;;27169:18;;;27162:34;-1:-1:-1;;;;;24242:21:0;;::::1;27212:19:1::0;;;27205:44;24282:15:0::1;27265:19:1::0;;;27258:35;24073:9:0;::::1;::::0;:25:::1;::::0;24106:16;;26944:19:1;;24073:239:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24332:40:0::1;::::0;;27789:25:1;;;27845:2;27830:18;;27823:34;;;24332:40:0::1;::::0;-1:-1:-1;27762:18:1;24332:40:0::1;;;;;;;24039:345;24396:30;24410:16:::0;24396:30;::::1;:::i;:::-;;;24453:6;:16;;;24437:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24532:16:::1;::::0;::::1;::::0;24507:10;;-1:-1:-1;24532:20:0::1;::::0;24528:101:::1;;24569:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;24569:21:0;;::::1;::::0;:48;::::1;;;::::0;24600:16;;24569:21:::1;:48:::0;:21;:48;24600:16;24569:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24528:101;23128:1508;;;;;;;9508:1;-1:-1:-1::0;9520:6:0;:14;;-1:-1:-1;;9520:14:0;;;23056:1580::o;26659:905::-;26781:16;;26759:4;;26781:16;;;;;26776:221;;26814:28;26833:4;26839:2;26814:18;:28::i;:::-;26862:16;;;;;;;26861:17;:41;;;;;26882:20;26893:4;26899:2;26882:10;:20::i;:::-;26857:129;;;26923:47;;-1:-1:-1;;;26923:47:0;;28292:2:1;26923:47:0;;;28274:21:1;28331:2;28311:18;;;28304:30;28370:34;28350:18;;;28343:62;28441:7;28421:18;;;28414:35;28466:19;;26923:47:0;28090:401:1;26857:129:0;27013:20;27024:4;27030:2;27013:10;:20::i;:::-;27009:314;;;27081:9;;:37;;;;;-1:-1:-1;;;;;28777:15:1;;;27081:37:0;;;28759:34:1;28829:15;;;28809:18;;;28802:43;28861:18;;;28854:34;;;27050:12:0;;27081:9;;;;;:19;;28671:18:1;;27081:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27081:37:0;;;;;;;;-1:-1:-1;;27081:37:0;;;;;;;;;;;;:::i;:::-;;;27077:163;;27216:8;;;27077:163;27169:5;-1:-1:-1;27260:7:0;27256:56;;27288:8;;;27256:56;27035:288;27009:314;-1:-1:-1;;;;;27335:13:0;;;;;;:7;:13;;;;;:23;;27352:6;;27335:13;:23;;27352:6;;27335:23;:::i;:::-;;;;-1:-1:-1;27369:22:0;;-1:-1:-1;27395:7:0;27394:48;;27436:6;27394:48;;;27406:27;27416:4;27422:2;27426:6;27406:9;:27::i;:::-;-1:-1:-1;;;;;27453:11:0;;;;;;:7;:11;;;;;:29;;27369:73;;-1:-1:-1;27369:73:0;;27453:11;;;:29;;27369:73;;27453:29;:::i;:::-;;;;;;;;27515:2;-1:-1:-1;;;;;27500:34:0;27509:4;-1:-1:-1;;;;;27500:34:0;;27519:14;27500:34;;;;391:25:1;;379:2;364:18;;245:177;27500:34:0;;;;;;;;-1:-1:-1;27552:4:0;;26659:905;-1:-1:-1;;;;;26659:905:0:o;24644:508::-;24726:16;;;;;;;24725:17;24717:65;;;;-1:-1:-1;;;24717:65:0;;29101:2:1;24717:65:0;;;29083:21:1;29140:2;29120:18;;;29113:30;29179:34;29159:18;;;29152:62;29250:5;29230:18;;;29223:33;29273:19;;24717:65:0;28899:399:1;24717:65:0;24798:20;24809:4;24815:2;24798:10;:20::i;:::-;24797:21;:37;;;;-1:-1:-1;24828:6:0;;-1:-1:-1;;;;;24822:12:0;;;24828:6;;24822:12;24797:37;24793:352;;;-1:-1:-1;;;;;24851:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;24851:30:0;24877:4;24851:30;;;24896:16;:23;;-1:-1:-1;;24896:23:0;24851:30;24896:23;;;;;24945:9;;;;24934:107;;24989:9;:36;;;;25019:4;24989:36;;;;;24934:107;25055:19;:26;;-1:-1:-1;;25055:26:0;;;;;25101:32;;-1:-1:-1;4467:41:1;;25101:32:0;;4455:2:1;4440:18;25101:32:0;;;;;;;24644:508;;:::o;27572:854::-;-1:-1:-1;;;;;27704:13:0;;27651:7;27704:13;;;:7;:13;;;;;;27651:7;;27704:13;;27700:506;;;-1:-1:-1;27747:9:0;:16;;;27700:506;;;-1:-1:-1;;;;;27785:11:0;;;;;;:7;:11;;;;;;;;27781:425;;;-1:-1:-1;;;;;27817:14:0;;;;;;:8;:14;;;;;;27813:92;;-1:-1:-1;;;;;27857:14:0;;;;;;:8;:14;;;;;27874:15;27857:32;;27813:92;27940:12;;-1:-1:-1;;;;;27923:14:0;;;;;;:8;:14;;;;;;27955:15;;27923:29;;;:::i;:::-;:47;:66;;;;-1:-1:-1;27974:15:0;;;;;;;27923:66;27919:209;;;-1:-1:-1;28023:9:0;:18;;;;;;27781:425;;27919:209;-1:-1:-1;28095:9:0;:17;;;;;;27781:425;;;-1:-1:-1;28173:9:0;:21;;;;;;27781:425;28218:17;8193:5;28238:19;28247:10;28238:6;:19;:::i;:::-;:38;;;;:::i;:::-;28305:4;28289:22;;;;:7;:22;;;;;:35;;28218:58;;-1:-1:-1;28218:58:0;;28289:22;;;:35;;28218:58;;28289:35;:::i;:::-;;;;-1:-1:-1;;28340:40:0;;391:25:1;;;28363:4:0;;-1:-1:-1;;;;;28340:40:0;;;;;379:2:1;364:18;28340:40:0;;;;;;;28400:18;28409:9;28400:6;:18;:::i;:::-;28393:25;27572:854;-1:-1:-1;;;;;;27572:854:0:o;427:184:1:-;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;3098:656::-;3210:4;3239:2;3268;3257:9;3250:21;3300:6;3294:13;3343:6;3338:2;3327:9;3323:18;3316:34;3368:1;3378:140;3392:6;3389:1;3386:13;3378:140;;;3487:14;;;3483:23;;3477:30;3453:17;;;3472:2;3449:26;3442:66;3407:10;;3378:140;;;3536:6;3533:1;3530:13;3527:91;;;3606:1;3601:2;3592:6;3581:9;3577:22;3573:31;3566:42;3527:91;-1:-1:-1;3670:2:1;3658:15;-1:-1:-1;;3654:88:1;3639:104;;;;3745:2;3635:113;;3098:656;-1:-1:-1;;;3098:656:1:o;4007:315::-;4075:6;4083;4136:2;4124:9;4115:7;4111:23;4107:32;4104:52;;;4152:1;4149;4142:12;4104:52;4191:9;4178:23;4210:31;4235:5;4210:31;:::i;:::-;4260:5;4312:2;4297:18;;;;4284:32;;-1:-1:-1;;;4007:315:1:o;4519:456::-;4596:6;4604;4612;4665:2;4653:9;4644:7;4640:23;4636:32;4633:52;;;4681:1;4678;4671:12;4633:52;4720:9;4707:23;4739:31;4764:5;4739:31;:::i;:::-;4789:5;-1:-1:-1;4846:2:1;4831:18;;4818:32;4859:33;4818:32;4859:33;:::i;:::-;4519:456;;4911:7;;-1:-1:-1;;;4965:2:1;4950:18;;;;4937:32;;4519:456::o;4980:248::-;5048:6;5056;5109:2;5097:9;5088:7;5084:23;5080:32;5077:52;;;5125:1;5122;5115:12;5077:52;-1:-1:-1;;5148:23:1;;;5218:2;5203:18;;;5190:32;;-1:-1:-1;4980:248:1:o;5233:662::-;5287:5;5340:3;5333:4;5325:6;5321:17;5317:27;5307:55;;5358:1;5355;5348:12;5307:55;5394:6;5381:20;5420:4;5444:60;5460:43;5500:2;5460:43;:::i;5444:60::-;5538:15;;;5624:1;5620:10;;;;5608:23;;5604:32;;;5569:12;;;;5648:15;;;5645:35;;;5676:1;5673;5666:12;5645:35;5712:2;5704:6;5700:15;5724:142;5740:6;5735:3;5732:15;5724:142;;;5806:17;;5794:30;;5844:12;;;;5757;;5724:142;;5900:595;6018:6;6026;6079:2;6067:9;6058:7;6054:23;6050:32;6047:52;;;6095:1;6092;6085:12;6047:52;6135:9;6122:23;6164:18;6205:2;6197:6;6194:14;6191:34;;;6221:1;6218;6211:12;6191:34;6244:61;6297:7;6288:6;6277:9;6273:22;6244:61;:::i;:::-;6234:71;;6358:2;6347:9;6343:18;6330:32;6314:48;;6387:2;6377:8;6374:16;6371:36;;;6403:1;6400;6393:12;6371:36;;6426:63;6481:7;6470:8;6459:9;6455:24;6426:63;:::i;:::-;6416:73;;;5900:595;;;;;:::o;6689:159::-;6756:20;;6816:6;6805:18;;6795:29;;6785:57;;6838:1;6835;6828:12;6785:57;6689:159;;;:::o;6853:328::-;6927:6;6935;6943;6996:2;6984:9;6975:7;6971:23;6967:32;6964:52;;;7012:1;7009;7002:12;6964:52;7035:28;7053:9;7035:28;:::i;:::-;7025:38;;7082:37;7115:2;7104:9;7100:18;7082:37;:::i;:::-;7072:47;;7138:37;7171:2;7160:9;7156:18;7138:37;:::i;:::-;7128:47;;6853:328;;;;;:::o;7186:247::-;7245:6;7298:2;7286:9;7277:7;7273:23;7269:32;7266:52;;;7314:1;7311;7304:12;7266:52;7353:9;7340:23;7372:31;7397:5;7372:31;:::i;7438:454::-;7533:6;7541;7549;7557;7565;7618:3;7606:9;7597:7;7593:23;7589:33;7586:53;;;7635:1;7632;7625:12;7586:53;-1:-1:-1;;7658:23:1;;;7728:2;7713:18;;7700:32;;-1:-1:-1;7779:2:1;7764:18;;7751:32;;7830:2;7815:18;;7802:32;;-1:-1:-1;7881:3:1;7866:19;7853:33;;-1:-1:-1;7438:454:1;-1:-1:-1;7438:454:1:o;7897:382::-;7962:6;7970;8023:2;8011:9;8002:7;7998:23;7994:32;7991:52;;;8039:1;8036;8029:12;7991:52;8078:9;8065:23;8097:31;8122:5;8097:31;:::i;:::-;8147:5;-1:-1:-1;8204:2:1;8189:18;;8176:32;8217:30;8176:32;8217:30;:::i;8284:252::-;8351:6;8359;8412:2;8400:9;8391:7;8387:23;8383:32;8380:52;;;8428:1;8425;8418:12;8380:52;8464:9;8451:23;8441:33;;8493:37;8526:2;8515:9;8511:18;8493:37;:::i;:::-;8483:47;;8284:252;;;;;:::o;8541:241::-;8597:6;8650:2;8638:9;8629:7;8625:23;8621:32;8618:52;;;8666:1;8663;8656:12;8618:52;8705:9;8692:23;8724:28;8746:5;8724:28;:::i;8787:511::-;8855:6;8863;8871;8924:2;8912:9;8903:7;8899:23;8895:32;8892:52;;;8940:1;8937;8930:12;8892:52;8979:9;8966:23;8998:28;9020:5;8998:28;:::i;:::-;9045:5;-1:-1:-1;9102:2:1;9087:18;;9074:32;9115:30;9074:32;9115:30;:::i;:::-;9164:7;-1:-1:-1;9223:2:1;9208:18;;9195:32;9236:30;9195:32;9236:30;:::i;:::-;9285:7;9275:17;;;8787:511;;;;;:::o;9303:256::-;9369:6;9377;9430:2;9418:9;9409:7;9405:23;9401:32;9398:52;;;9446:1;9443;9436:12;9398:52;9469:28;9487:9;9469:28;:::i;:::-;9459:38;;9516:37;9549:2;9538:9;9534:18;9516:37;:::i;9934:388::-;10002:6;10010;10063:2;10051:9;10042:7;10038:23;10034:32;10031:52;;;10079:1;10076;10069:12;10031:52;10118:9;10105:23;10137:31;10162:5;10137:31;:::i;:::-;10187:5;-1:-1:-1;10244:2:1;10229:18;;10216:32;10257:33;10216:32;10257:33;:::i;10327:821::-;10479:6;10487;10495;10548:2;10536:9;10527:7;10523:23;10519:32;10516:52;;;10564:1;10561;10554:12;10516:52;10604:9;10591:23;10633:18;10674:2;10666:6;10663:14;10660:34;;;10690:1;10687;10680:12;10660:34;10713:61;10766:7;10757:6;10746:9;10742:22;10713:61;:::i;:::-;10703:71;;10827:2;10816:9;10812:18;10799:32;10783:48;;10856:2;10846:8;10843:16;10840:36;;;10872:1;10869;10862:12;10840:36;10895:63;10950:7;10939:8;10928:9;10924:24;10895:63;:::i;:::-;10885:73;;11011:2;11000:9;10996:18;10983:32;10967:48;;11040:2;11030:8;11027:16;11024:36;;;11056:1;11053;11046:12;11024:36;;11079:63;11134:7;11123:8;11112:9;11108:24;11079:63;:::i;:::-;11069:73;;;10327:821;;;;;:::o;12107:484::-;12160:3;12198:5;12192:12;12225:6;12220:3;12213:19;12251:4;12280:2;12275:3;12271:12;12264:19;;12317:2;12310:5;12306:14;12338:1;12348:218;12362:6;12359:1;12356:13;12348:218;;;12427:13;;-1:-1:-1;;;;;12423:62:1;12411:75;;12506:12;;;;12541:15;;;;12384:1;12377:9;12348:218;;;-1:-1:-1;12582:3:1;;12107:484;-1:-1:-1;;;;;12107:484:1:o;12596:342::-;12797:2;12786:9;12779:21;12760:4;12817:56;12869:2;12858:9;12854:18;12846:6;12817:56;:::i;:::-;12809:64;;12923:6;12916:14;12909:22;12904:2;12893:9;12889:18;12882:50;12596:342;;;;;:::o;12943:184::-;12995:77;12992:1;12985:88;13092:4;13089:1;13082:15;13116:4;13113:1;13106:15;13132:482;13221:1;13264:5;13221:1;13278:330;13299:7;13289:8;13286:21;13278:330;;;13418:4;-1:-1:-1;;13346:77:1;13340:4;13337:87;13334:113;;;13427:18;;:::i;:::-;13477:7;13467:8;13463:22;13460:55;;;13497:16;;;;13460:55;13576:22;;;;13536:15;;;;13278:330;;;13282:3;13132:482;;;;;:::o;13619:866::-;13668:5;13698:8;13688:80;;-1:-1:-1;13739:1:1;13753:5;;13688:80;13787:4;13777:76;;-1:-1:-1;13824:1:1;13838:5;;13777:76;13869:4;13887:1;13882:59;;;;13955:1;13950:130;;;;13862:218;;13882:59;13912:1;13903:10;;13926:5;;;13950:130;13987:3;13977:8;13974:17;13971:43;;;13994:18;;:::i;:::-;-1:-1:-1;;14050:1:1;14036:16;;14065:5;;13862:218;;14164:2;14154:8;14151:16;14145:3;14139:4;14136:13;14132:36;14126:2;14116:8;14113:16;14108:2;14102:4;14099:12;14095:35;14092:77;14089:159;;;-1:-1:-1;14201:19:1;;;14233:5;;14089:159;14280:34;14305:8;14299:4;14280:34;:::i;:::-;14410:6;-1:-1:-1;;14338:79:1;14329:7;14326:92;14323:118;;;14421:18;;:::i;:::-;14459:20;;13619:866;-1:-1:-1;;;13619:866:1:o;14490:140::-;14548:5;14577:47;14618:4;14608:8;14604:19;14598:4;14577:47;:::i;14635:274::-;14675:1;14701;14691:189;;14736:77;14733:1;14726:88;14837:4;14834:1;14827:15;14865:4;14862:1;14855:15;14691:189;-1:-1:-1;14894:9:1;;14635:274::o;14914:228::-;14954:7;15080:1;-1:-1:-1;;15008:74:1;15005:1;15002:81;14997:1;14990:9;14983:17;14979:105;14976:131;;;15087:18;;:::i;:::-;-1:-1:-1;15127:9:1;;14914:228::o;15147:125::-;15187:4;15215:1;15212;15209:8;15206:34;;;15220:18;;:::i;:::-;-1:-1:-1;15257:9:1;;15147:125::o;16046:184::-;16098:77;16095:1;16088:88;16195:4;16192:1;16185:15;16219:4;16216:1;16209:15;16235:175;16272:3;16316:4;16309:5;16305:16;16345:4;16336:7;16333:17;16330:43;;;16353:18;;:::i;:::-;16402:1;16389:15;;16235:175;-1:-1:-1;;16235:175:1:o;16767:128::-;16807:3;16838:1;16834:6;16831:1;16828:13;16825:39;;;16844:18;;:::i;:::-;-1:-1:-1;16880:9:1;;16767:128::o;17754:184::-;17824:6;17877:2;17865:9;17856:7;17852:23;17848:32;17845:52;;;17893:1;17890;17883:12;17845:52;-1:-1:-1;17916:16:1;;17754:184;-1:-1:-1;17754:184:1:o;21894:224::-;21933:3;21961:6;21994:2;21991:1;21987:10;22024:2;22021:1;22017:10;22055:3;22051:2;22047:12;22042:3;22039:21;22036:47;;;22063:18;;:::i;:::-;22099:13;;21894:224;-1:-1:-1;;;;21894:224:1:o;22123:251::-;22193:6;22246:2;22234:9;22225:7;22221:23;22217:32;22214:52;;;22262:1;22259;22252:12;22214:52;22294:9;22288:16;22313:31;22338:5;22313:31;:::i;23068:245::-;23135:6;23188:2;23176:9;23167:7;23163:23;23159:32;23156:52;;;23204:1;23201;23194:12;23156:52;23236:9;23230:16;23255:28;23277:5;23255:28;:::i;26059:605::-;26358:6;26347:9;26340:25;26401:6;26396:2;26385:9;26381:18;26374:34;26444:3;26439:2;26428:9;26424:18;26417:31;26321:4;26465:57;26517:3;26506:9;26502:19;26494:6;26465:57;:::i;:::-;-1:-1:-1;;;;;26558:55:1;;;;26553:2;26538:18;;26531:83;-1:-1:-1;26645:3:1;26630:19;26623:35;26457:65;26059:605;-1:-1:-1;;;26059:605:1:o;27304:306::-;27392:6;27400;27408;27461:2;27449:9;27440:7;27436:23;27432:32;27429:52;;;27477:1;27474;27467:12;27429:52;27506:9;27500:16;27490:26;;27556:2;27545:9;27541:18;27535:25;27525:35;;27600:2;27589:9;27585:18;27579:25;27569:35;;27304:306;;;;;:::o;27868:217::-;27907:4;27936:6;27992:10;;;;27962;;28014:12;;;28011:38;;;28029:18;;:::i;:::-;28066:13;;27868:217;-1:-1:-1;;;27868:217:1:o

Swarm Source

ipfs://76d8b652679ff388179784d2e586fac21eda2bd340223e1a016eb4204ef46263
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.