ETH Price: $3,317.37 (+2.08%)
Gas: 3 Gwei

Token

QT Pie (QTP)
 

Overview

Max Total Supply

100,000,000,000 QTP

Holders

51

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
QTPie

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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 _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    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;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
}

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

    mapping (address => uint256) private _rOwned;
    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 => bool) private _isPrivateSaler;
    mapping (address => uint256) private privateSalerSold;
    mapping (address => uint256) private privateSalerSellTime;
   
    uint256 constant private startingSupply = 100_000_000_000;

    string constant private _name = "QT Pie";
    string constant private _symbol = "QTP";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

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

    Fees public _taxRates = Fees({
        buyFee: 1100,
        sellFee: 1100,
        transferFee: 1100
        });

    Ratios public _ratios = Ratios({
        liquidity: 5,
        marketing: 6,
        total: 11
        });

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

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

    struct TaxWallets {
        address payable marketing;
    }

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

    uint256 private _maxTxAmount = (_tTotal * 15) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 25) / 1000;

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

    bool public privateSaleLimitsEnabled = true;
    uint256 public privateSaleDelay = 24 hours;
    uint256 public privateSaleMaxSell = 25 * 10**16;

    bool lpInitialized = false;

    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 == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        _finalizeTransfer(_owner, DEAD, (_tTotal*2) / 10, false, false, false, true);
    }

    function initializeLP() public onlyOwner {
        require(!lpInitialized, "Already initialized");

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

        _approve(_owner, 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;

        lpInitialized = true;
    }

    function preInitializeTransfer(address to, uint256 amount) public onlyOwner {
        require(!lpInitialized);
        amount = amount*10**_decimals;
        _finalizeTransfer(msg.sender, to, amount, false, false, false, true);
    }

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

    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 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(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, 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 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);
        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 removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 300, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    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 setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function isPrivateSaler(address account) external view returns (bool) {
        return _isPrivateSaler[account];
    }

    function getPrivateAmtSold(address account) external view returns(uint256) {
        // Return value is in tenths, so 100 returned is 1 ETH.
        return (privateSalerSold[account] / (10 ** 16));
    }

    function setPrivateSaleVestingSettings(uint256 time, uint256 value, uint256 multiplier) external onlyOwner {
        require(time <= 48 hours && value * 10**multiplier >= 25 * 10**16);
        privateSaleDelay = time;
        privateSaleMaxSell = value * 10**multiplier;
    }

    function setPrivateSalers(address[] memory accounts, bool enabled) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isPrivateSaler[accounts[i]] = enabled;
        }
    }

    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");
        require(lpInitialized, "LP not initialized!");
        bool buy = false;
        bool sell = false;
        bool otherTransfer = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            otherTransfer = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
            if(privateSaleLimitsEnabled) {
                bool saler = _isPrivateSaler[from];
                if(saler) {
                    require(sell || buy);
                }
                if(sell && saler && !inSwap) {
                    address[] memory path = new address[](2);
                    path[0] = address(this);
                    path[1] = dexRouter.WETH();
                    uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
                    if(privateSalerSellTime[from] + privateSaleDelay < block.timestamp) {
                        require(ethBalance <= privateSaleMaxSell);
                        privateSalerSellTime[from] = block.timestamp;
                        privateSalerSold[from] = ethBalance;
                    } else if (privateSalerSellTime[from] + privateSaleDelay > block.timestamp) {
                        require(privateSalerSold[from] + ethBalance <= privateSaleMaxSell);
                        privateSalerSold[from] += ethBalance;
                    }
                }
            }
        }

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

        if (sell) {
            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, buy, sell, otherTransfer);
    }

    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,
                DEAD,
                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;
        swapThreshold = balanceOf(lpPair) / 10000;
        swapAmount = (balanceOf(lpPair) * 25) / 10000;
    }

    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 _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, bool buy, bool sell, bool otherTransfer) 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, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;

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

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            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"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","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":[{"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":[],"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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"getPrivateAmtSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeLP","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isPrivateSaler","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":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preInitializeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"preInitializeTransferMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"privateSaleDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","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":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setPrivateSaleVestingSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPrivateSalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","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"}]

6000600481905561044c608081905260a081905260c052600c805465ffffffffffff1990811665044c044c044c17909155600560e052600661010052600b61012052600d8054909116640b0006000517905561016060405273a81fdffd0c03bf2f9773e0bbb3134f316af250cd610140819052601080546001600160a01b03191690911790556011805461ff0019169055601290815561271090620000a690600a620009da565b620000b79064174876e800620009eb565b620000c4906005620009eb565b620000d0919062000a0d565b601455612710620000e46012600a620009da565b620000f59064174876e800620009eb565b6200010290600a620009eb565b6200010e919062000a0d565b6015556103e8620001226012600a620009da565b620001339064174876e800620009eb565b6200014090600f620009eb565b6200014c919062000a0d565b6016556103e8620001606012600a620009da565b620001719064174876e800620009eb565b6200017e906019620009eb565b6200018a919062000a0d565b6017556018805461ffff60ff60b01b011916600160b01b179055620151806019556703782dace9d90000601a55601b805460ff19169055620001cf6012600a620009da565b620001e09064174876e800620009eb565b33600081815260026020526040812092909255906000805160206200543a833981519152620002126012600a620009da565b620002239064174876e800620009eb565b60405190815260200160405180910390a3600080546001600160a01b0319163317905560384614156200027c57600e80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000366565b4660611415620002b257600e80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000366565b4660011480620002c25750466004145b15620002f457600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000366565b4661a86a14156200032b57600e80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000366565b4660fa14156200036157600e80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000366565b600080fd5b600054620003bf906001600160a01b031661dead600a62000389601282620009da565b6200039a9064174876e800620009eb565b620003a7906002620009eb565b620003b3919062000a0d565b600080806001620003c6565b5062000a90565b601854600090610100900460ff166200046657620003e58888620005e1565b601854610100900460ff1615801562000405575062000405888862000717565b15620004665760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b60648201526084015b60405180910390fd5b62000472888862000717565b15620005125760185460405163ecd07a5360e01b81526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015620004f9575060408051601f3d908101601f19168201909252620004f69181019062000a30565b60015b6200050357600080fd5b9050806200051057600080fd5b505b6001600160a01b038816600090815260026020526040812080548892906200053c90849062000a5b565b9091555060009050856200055157866200055f565b6200055f8986868a620007f5565b6001600160a01b0389166000908152600260205260408120805492935083929091906200058e90849062000a75565b92505081905550876001600160a01b0316896001600160a01b03166000805160206200543a83398151915283604051620005ca91815260200190565b60405180910390a350600198975050505050505050565b601854610100900460ff1615620006475760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b60648201526084016200045d565b62000653828262000717565b1580156200066e5750600f546001600160a01b038281169116145b1562000713576001600160a01b038083166000908152600860205260409020805460ff191660011790556018805461ff001916610100179081905562010000900416620006cf576018805462010000600160b01b0319163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15b5050565b600080546001600160a01b038481169116148015906200074557506000546001600160a01b03838116911614155b80156200075d57506000546001600160a01b03163214155b80156200078357506001600160a01b03821660009081526008602052604090205460ff16155b8015620007a957506001600160a01b03831660009081526008602052604090205460ff16155b8015620007c157506001600160a01b03821661dead14155b8015620007d657506001600160a01b03821615155b8015620007ec57506001600160a01b0383163014155b90505b92915050565b60008084156200080d5750600c5461ffff1662000839565b8315620008285750600c5462010000900461ffff1662000839565b50600c54640100000000900461ffff165b60006127106200084a8386620009eb565b62000856919062000a0d565b306000908152600260205260408120805492935083929091906200087c90849062000a75565b909155505060405181815230906001600160a01b038916906000805160206200543a8339815191529060200160405180910390a3620008bc818562000a5b565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200091e578160001904821115620009025762000902620008c7565b808516156200091057918102915b93841c9390800290620008e2565b509250929050565b6000826200093757506001620007ef565b816200094657506000620007ef565b81600181146200095f57600281146200096a576200098a565b6001915050620007ef565b60ff8411156200097e576200097e620008c7565b50506001821b620007ef565b5060208310610133831016604e8410600b8410161715620009af575081810a620007ef565b620009bb8383620008dd565b8060001904821115620009d257620009d2620008c7565b029392505050565b6000620007ec60ff84168362000926565b600081600019048311821515161562000a085762000a08620008c7565b500290565b60008262000a2b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000a4357600080fd5b8151801515811462000a5457600080fd5b9392505050565b60008282101562000a705762000a70620008c7565b500390565b6000821982111562000a8b5762000a8b620008c7565b500190565b61499a8062000aa06000396000f3fe6080604052600436106103bc5760003560e01c8063514a6812116101f2578063a9059cbb1161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610bb1578063f94aa1b414610bd1578063fdb78c0e14610bf1578063fe575a8714610c1057600080fd5b8063e4fcfd1814610b46578063eafb5a3c14610b5c578063eb50e70e14610b7c578063ee5d9c2d14610b9c57600080fd5b8063cab5ebea116100dc578063cab5ebea14610a99578063cf84770614610ab9578063d528f32614610aea578063dd62ed3e14610b0057600080fd5b8063a9059cbb14610a59578063b1b08f7114610640578063b3d514fb14610640578063bcd96a2514610a7957600080fd5b8063773d4ffd116101855780638a8c523c116101545780638a8c523c146109b55780639242b759146109ca57806395d89b41146109fe578063a6690cf914610a4457600080fd5b8063773d4ffd1461094257806380c581d114610962578063893d20e8146109825780638a63bd9b146109a057600080fd5b80636ebd0078116101c15780636ebd0078146108cc57806370a08231146108e1578063715018a614610917578063749f2ef21461092c57600080fd5b8063514a68121461081a578063590ffdce146108535780635c24b074146108735780635cce86cd1461089357600080fd5b806329dd8798116102e257806336fddb04116102755780634ada218b116102445780634ada218b146107885780634fb2e45d146107a25780634fbee193146107c257806350a8e016146107fb57600080fd5b806336fddb04146107085780633f3cf56c14610728578063452ed4f11461074857806347aee6d81461076857600080fd5b8063313ce567116102b1578063313ce5671461068c57806332cde664146106a857806333251a0b146106c857806334cd8260146106e857600080fd5b806329dd8798146106205780632b28fc7a146106405780632cee7602146106565780632e8fa8211461067657600080fd5b8063095ea7b31161035a5780631cc43f07116103295780631cc43f07146105a057806323b872dd146105c057806326003957146105e05780632610eaca1461060057600080fd5b8063095ea7b3146105265780630962cb3f146105565780630fa604e41461057657806318160ddd1461058b57600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104975780630758d924146104e6578063092316021461050657600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160145481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a36600461415f565b610c30565b005b34801561044d57600080fd5b50600c546104729061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104a357600080fd5b5060408051808201909152600681527f515420506965000000000000000000000000000000000000000000000000000060208201525b6040516103f291906141b1565b3480156104f257600080fd5b50600e546103de906001600160a01b031681565b34801561051257600080fd5b5061043f610521366004614206565b610d09565b34801561053257600080fd5b5061054661054136600461421f565b610e29565b60405190151581526020016103f2565b34801561056257600080fd5b5061041161057136600461424b565b610e40565b34801561058257600080fd5b50610411610e6b565b34801561059757600080fd5b50610411610e8b565b3480156105ac57600080fd5b5061043f6105bb366004614268565b610ecc565b3480156105cc57600080fd5b506105466105db366004614323565b611021565b3480156105ec57600080fd5b5061043f6105fb366004614364565b611099565b34801561060c57600080fd5b5061043f61061b366004614268565b6111ec565b34801561062c57600080fd5b5061043f61063b366004614386565b611301565b34801561064c57600080fd5b506104116107d081565b34801561066257600080fd5b5061043f61067136600461421f565b6113ea565b34801561068257600080fd5b5061041160155481565b34801561069857600080fd5b50604051601281526020016103f2565b3480156106b457600080fd5b5061043f6106c33660046143f9565b611472565b3480156106d457600080fd5b5061043f6106e336600461424b565b6115ad565b3480156106f457600080fd5b5061043f61070336600461443c565b61164d565b34801561071457600080fd5b5061043f610723366004614477565b61170c565b34801561073457600080fd5b5061043f610743366004614364565b611785565b34801561075457600080fd5b50600f546103de906001600160a01b031681565b34801561077457600080fd5b5061043f6107833660046144a5565b6118d8565b34801561079457600080fd5b506018546105469060ff1681565b3480156107ae57600080fd5b5061043f6107bd36600461424b565b611980565b3480156107ce57600080fd5b506105466107dd36600461424b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080757600080fd5b5060185461054690610100900460ff1681565b34801561082657600080fd5b5061054661083536600461424b565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561085f57600080fd5b5061043f61086e366004614477565b611b8e565b34801561087f57600080fd5b5061043f61088e36600461424b565b611c07565b34801561089f57600080fd5b506105466108ae36600461424b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108d857600080fd5b50610411611d03565b3480156108ed57600080fd5b506104116108fc36600461424b565b6001600160a01b031660009081526002602052604090205490565b34801561092357600080fd5b5061043f611d1e565b34801561093857600080fd5b5061041160195481565b34801561094e57600080fd5b5061043f61095d36600461415f565b611dce565b34801561096e57600080fd5b5061043f61097d366004614477565b611e83565b34801561098e57600080fd5b506000546001600160a01b03166103de565b3480156109ac57600080fd5b5061054661202e565b3480156109c157600080fd5b5061043f61209d565b3480156109d657600080fd5b5060185461054690760100000000000000000000000000000000000000000000900460ff1681565b348015610a0a57600080fd5b5060408051808201909152600381527f515450000000000000000000000000000000000000000000000000000000000060208201526104d9565b348015610a5057600080fd5b5061043f6122ea565b348015610a6557600080fd5b50610546610a7436600461421f565b61260b565b348015610a8557600080fd5b5061043f610a943660046144d1565b612622565b348015610aa557600080fd5b5061043f610ab4366004614504565b6126f4565b348015610ac557600080fd5b50600d546104729061ffff808216916201000081048216916401000000009091041683565b348015610af657600080fd5b50610411601a5481565b348015610b0c57600080fd5b50610411610b1b366004614521565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b5257600080fd5b5061041160125481565b348015610b6857600080fd5b5061043f610b7736600461424b565b612796565b348015610b8857600080fd5b5061043f610b9736600461424b565b612b45565b348015610ba857600080fd5b5061043f612bc2565b348015610bbd57600080fd5b5061043f610bcc366004614477565b612ca5565b348015610bdd57600080fd5b506010546103de906001600160a01b031681565b348015610bfd57600080fd5b5060115461054690610100900460ff1681565b348015610c1c57600080fd5b50610546610c2b36600461424b565b612d4d565b6000546001600160a01b03163314610c835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6018546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610cd39085908590600401614593565b600060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610d575760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b61012c811015610da95760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c7a565b6018546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e0e57600080fd5b505af1158015610e22573d6000803e3d6000fd5b5050505050565b6000610e36338484612ddb565b5060015b92915050565b6001600160a01b0381166000908152600a6020526040812054610e3a90662386f26fc10000906145e6565b6000610e796012600a614705565b601754610e8691906145e6565b905090565b6000610e996012600a614705565b610ea89064174876e800614714565b610eb157600080fd5b610ebd6012600a614705565b610e869064174876e800614714565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b8051825114610f6b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c7a565b60005b82518160ff16101561101c57610f866012600a614705565b828260ff1681518110610f9b57610f9b614733565b6020026020010151610fad9190614714565b336000908152600260205260409020541015610fc857600080fd5b61100a838260ff1681518110610fe057610fe0614733565b6020026020010151838360ff1681518110610ffd57610ffd614733565b60200260200101516113ea565b8061101481614762565b915050610f6e565b505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611086576001600160a01b038416600090815260056020908152604080832033845290915281208054849290611080908490614782565b90915550505b611091848484612ee8565b949350505050565b6000546001600160a01b031633146110e75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6103e86110f66012600a614705565b6111059064174876e800614714565b61110f91906145e6565b818361111d6012600a614705565b61112c9064174876e800614714565b6111369190614714565b61114091906145e6565b10156111b45760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c7a565b80826111c26012600a614705565b6111d19064174876e800614714565b6111db9190614714565b6111e591906145e6565b6017555050565b805182511461123d5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c7a565b60005b82518160ff16101561101c57818160ff168151811061126157611261614733565b6020026020010151611288336001600160a01b031660009081526002602052604090205490565b101561129357600080fd5b6112ee33848360ff16815181106112ac576112ac614733565b60200260200101516012600a6112c29190614705565b858560ff16815181106112d7576112d7614733565b60200260200101516112e99190614714565b612ee8565b50806112f981614762565b915050611240565b6000546001600160a01b0316331461134f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6018546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146114385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601b5460ff161561144857600080fd5b6114546012600a614705565b61145e9082614714565b905061101c3383836000806000600161370a565b6000546001600160a01b031633146114c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6107d08361ffff16111580156114dc57506107d08261ffff1611155b80156114ee57506107d08161ffff1611155b61153a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c7a565b600c805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6018546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610df4565b6000546001600160a01b0316331461169b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b83856116a96012600a614705565b6116b89064174876e800614714565b6116c29190614714565b6116cc91906145e6565b60145581836116dd6012600a614705565b6116ec9064174876e800614714565b6116f69190614714565b61170091906145e6565b60155560125550505050565b6000546001600160a01b0316331461175a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117d35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6103e86117e26012600a614705565b6117f19064174876e800614714565b6117fb91906145e6565b81836118096012600a614705565b6118189064174876e800614714565b6118229190614714565b61182c91906145e6565b10156118a05760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c7a565b80826118ae6012600a614705565b6118bd9064174876e800614714565b6118c79190614714565b6118d191906145e6565b6016555050565b6000546001600160a01b031633146119265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6202a300831115801561195557506703782dace9d9000061194882600a614799565b6119529084614714565b10155b61195e57600080fd5b601983905561196e81600a614799565b6119789083614714565b601a55505050565b6000546001600160a01b031633146119ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6001600160a01b038116611a4a5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c7a565b6001600160a01b03811661dead1415611acb5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c7a565b60008054611ae4916001600160a01b0390911690611b8e565b611aef816001611b8e565b600080546001600160a01b031681526002602052604090205415611b3657600080546001600160a01b03168082526002602052604090912054611b3491908390612ee8565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611bdc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611c555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601854610100900460ff1615611c6a57600080fd5b6001600160a01b038116301415611cc35760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c7a565b601880546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611d116012600a614705565b601654610e8691906145e6565b6000546001600160a01b03163314611d6c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60008054611d85916001600160a01b0390911690611b8e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611e1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60005b825181101561101c578160096000858481518110611e3f57611e3f614733565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e7b816147a5565b915050611e1f565b6000546001600160a01b03163314611ed15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b80611f48576001600160a01b03828116600081815260036020526040808220805460ff1916905560185490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610cd3565b60045415611faf576203f48060045442611f629190614782565b11611faf5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c7a565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560185492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610cd3565b5050565b600080546001600160a01b0316331461207d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b600e546120979030906001600160a01b0316600019612ddb565b50600190565b6000546001600160a01b031633146120eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60185460ff161561213e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c7a565b601854610100900460ff166121955760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c7a565b6018546201000090046001600160a01b03166121db57601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601854600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561226657600080fd5b505af1925050508015612277575060015b506018805460ff19166001179055600f546001600160a01b0316600090815260026020526040902054612710906122ae91906145e6565b601455600f546001600160a01b0316600090815260026020526040902054612710906122db906019614714565b6122e591906145e6565b601555565b6000546001600160a01b031633146123385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601b5460ff161561238b5760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610c7a565b600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240291906147c0565b6001600160a01b031663c9c65396600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248791906147c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156124eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250f91906147c0565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554600e54612569929182169116600019612ddb565b600e546125839030906001600160a01b0316600019612ddb565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790558554909416855260089092529092208054821683179055601b80549091169091179055565b6000612618338484612ee8565b5060019392505050565b6000546001600160a01b031633146126705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b600d805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216908516171790556126b481836147dd565b600d805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146127425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601180548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061278b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146127e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284d91906147c0565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128be91906147c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906147c0565b90506001600160a01b038116612ae357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b791906147c0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2891906147c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab191906147c0565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612b0c565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561101c903090600019612ddb565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612c105760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601854610100900460ff1615612c685760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c7a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612ca2573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612cf35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6018546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610cd3565b6018546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190614803565b6001600160a01b038316612e315760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c7a565b6001600160a01b038216612e875760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c7a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612f665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c7a565b6001600160a01b038316612fe25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c7a565b600082116130585760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c7a565b601b5460ff166130aa5760405162461bcd60e51b815260206004820152601360248201527f4c50206e6f7420696e697469616c697a656421000000000000000000000000006044820152606401610c7a565b6001600160a01b0384166000908152600360205260408120548190819060ff16156130d85760019250613106565b6001600160a01b03861660009081526003602052604090205460ff16156131025760019150613106565b5060015b613110878761394a565b156136315760185460ff166131675760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c7a565b82806131705750815b15613234576001600160a01b03871660009081526007602052604090205460ff161580156131b757506001600160a01b03861660009081526007602052604090205460ff16155b15613234576016548511156132345760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c7a565b600e546001600160a01b03878116911614801590613250575081155b15613316576001600160a01b03861660009081526007602052604090205460ff166133165760175485613298886001600160a01b031660009081526002602052604090205490565b6132a29190614820565b11156133165760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c7a565b601854760100000000000000000000000000000000000000000000900460ff1615613631576001600160a01b03871660009081526009602052604090205460ff16801561336f5782806133665750835b61336f57600080fd5b8280156133795750805b8015613388575060115460ff16155b1561362f5760408051600280825260608201835260009260208301908036833701905050905030816000815181106133c2576133c2614733565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613434573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345891906147c0565b8160018151811061346b5761346b614733565b6001600160a01b039283166020918202929092010152600e546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f906134c8908b908690600401614838565b600060405180830381865afa1580156134e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350d9190810190614851565b60018151811061351f5761351f614733565b6020026020010151905042601954600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461355d9190614820565b101561359f57601a5481111561357257600080fd5b6001600160a01b038a166000908152600b60209081526040808320429055600a909152902081905561362c565b6019546001600160a01b038b166000908152600b602052604090205442916135c691614820565b111561362c57601a546001600160a01b038b166000908152600a60205260409020546135f3908390614820565b11156135fe57600080fd5b6001600160a01b038a166000908152600a602052604081208054839290613626908490614820565b90915550505b50505b505b6001600160a01b03871660009081526006602052604090205460019060ff168061367357506001600160a01b03871660009081526006602052604090205460ff165b1561367c575060005b82156136ef5760115460ff1615801561369c5750601154610100900460ff165b156136ef57426012546013546136b29190614820565b10156136ef573060009081526002602052604090205460145481106136ed5760155481106136df57506015545b6136e881613a1f565b426013555b505b6136fe8888888488888861370a565b98975050505050505050565b601854600090610100900460ff166137b6576137268888613e0f565b601854610100900460ff161580156137435750613743888861394a565b156137b65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c7a565b6137c0888861394a565b15613873576018546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561385c575060408051601f3d908101601f1916820190925261385991810190614803565b60015b61386557600080fd5b90508061387157600080fd5b505b6001600160a01b0388166000908152600260205260408120805488929061389b908490614782565b9091555060009050856138ae57866138ba565b6138ba8986868a613f6d565b6001600160a01b0389166000908152600260205260408120805492935083929091906138e7908490614820565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161393391815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b0384811691161480159061397757506000546001600160a01b03838116911614155b801561398e57506000546001600160a01b03163214155b80156139b357506001600160a01b03821660009081526008602052604090205460ff16155b80156139d857506001600160a01b03831660009081526008602052604090205460ff16155b80156139ef57506001600160a01b03821661dead14155b8015613a0357506001600160a01b03821615155b8015613a1857506001600160a01b0383163014155b9392505050565b6011805460ff1916600117905560408051606081018252600d5461ffff8082168352620100008204811660208401526401000000009091041691810182905290613a695750613e02565b306000908152600560209081526040808320600e546001600160a01b0316845290915290205460001914613ac257306000908152600560209081526040808320600e546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685613ae39190614714565b613aed91906145e6565b613af791906145e6565b90506000613b058285614782565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613b3f57613b3f614733565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd591906147c0565b81600181518110613be857613be8614733565b6001600160a01b039283166020918202929092010152600e546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613c479085906000908690309042906004016148d7565b600060405180830381600087803b158015613c6157600080fd5b505af1158015613c75573d6000803e3d6000fd5b5047925060009150849050613c8a8684614714565b613c9491906145e6565b90508415613d8557600e546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613d23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d489190614913565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613d8f8183614782565b9150856000015186604001818151613da79190614941565b61ffff90811690915260208801518492501615613dfa576010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613df8573d6000803e3d6000fd5b505b505050505050505b506011805460ff19169055565b601854610100900460ff1615613e8d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c7a565b613e97828261394a565b158015613eb15750600f546001600160a01b038281169116145b1561202a576001600160a01b038083166000908152600860205260409020805460ff191660011790556018805461ff001916610100179081905562010000900416613f2657601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415613f835750600c5461ffff16613fad565b8315613f9c5750600c5462010000900461ffff16613fad565b50600c54640100000000900461ffff165b6000612710613fbc8386614714565b613fc691906145e6565b30600090815260026020526040812080549293508392909190613fea908490614820565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36140398185614782565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561409c5761409c614044565b604052919050565b600067ffffffffffffffff8211156140be576140be614044565b5060051b60200190565b6001600160a01b0381168114612ca257600080fd5b600082601f8301126140ee57600080fd5b813560206141036140fe836140a4565b614073565b82815260059290921b8401810191818101908684111561412257600080fd5b8286015b84811015614146578035614139816140c8565b8352918301918301614126565b509695505050505050565b8015158114612ca257600080fd5b6000806040838503121561417257600080fd5b823567ffffffffffffffff81111561418957600080fd5b614195858286016140dd565b92505060208301356141a681614151565b809150509250929050565b600060208083528351808285015260005b818110156141de578581018301518582016040015282016141c2565b818111156141f0576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561421857600080fd5b5035919050565b6000806040838503121561423257600080fd5b823561423d816140c8565b946020939093013593505050565b60006020828403121561425d57600080fd5b8135613a18816140c8565b6000806040838503121561427b57600080fd5b823567ffffffffffffffff8082111561429357600080fd5b61429f868387016140dd565b93506020915081850135818111156142b657600080fd5b85019050601f810186136142c957600080fd5b80356142d76140fe826140a4565b81815260059190911b820183019083810190888311156142f657600080fd5b928401925b82841015614314578335825292840192908401906142fb565b80955050505050509250929050565b60008060006060848603121561433857600080fd5b8335614343816140c8565b92506020840135614353816140c8565b929592945050506040919091013590565b6000806040838503121561437757600080fd5b50508035926020909101359150565b6000806000806080858703121561439c57600080fd5b84356143a781614151565b935060208501356143b781614151565b925060408501356143c781614151565b915060608501356143d781614151565b939692955090935050565b803561ffff811681146143f457600080fd5b919050565b60008060006060848603121561440e57600080fd5b614417846143e2565b9250614425602085016143e2565b9150614433604085016143e2565b90509250925092565b600080600080600060a0868803121561445457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561448a57600080fd5b8235614495816140c8565b915060208301356141a681614151565b6000806000606084860312156144ba57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156144e457600080fd5b6144ed836143e2565b91506144fb602084016143e2565b90509250929050565b60006020828403121561451657600080fd5b8135613a1881614151565b6000806040838503121561453457600080fd5b823561453f816140c8565b915060208301356141a6816140c8565b600081518084526020808501945080840160005b838110156145885781516001600160a01b031687529582019590820190600101614563565b509495945050505050565b6040815260006145a6604083018561454f565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261461c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181815b8085111561465c578160001904821115614642576146426145b7565b8085161561464f57918102915b93841c9390800290614626565b509250929050565b60008261467357506001610e3a565b8161468057506000610e3a565b816001811461469657600281146146a0576146bc565b6001915050610e3a565b60ff8411156146b1576146b16145b7565b50506001821b610e3a565b5060208310610133831016604e8410600b84101617156146df575081810a610e3a565b6146e98383614621565b80600019048211156146fd576146fd6145b7565b029392505050565b6000613a1860ff841683614664565b600081600019048311821515161561472e5761472e6145b7565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614779576147796145b7565b60010192915050565b600082821015614794576147946145b7565b500390565b6000613a188383614664565b60006000198214156147b9576147b96145b7565b5060010190565b6000602082840312156147d257600080fd5b8151613a18816140c8565b600061ffff8083168185168083038211156147fa576147fa6145b7565b01949350505050565b60006020828403121561481557600080fd5b8151613a1881614151565b60008219821115614833576148336145b7565b500190565b828152604060208201526000611091604083018461454f565b6000602080838503121561486457600080fd5b825167ffffffffffffffff81111561487b57600080fd5b8301601f8101851361488c57600080fd5b805161489a6140fe826140a4565b81815260059190911b820183019083810190878311156148b957600080fd5b928401925b82841015614039578351825292840192908401906148be565b85815284602082015260a0604082015260006148f660a083018661454f565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561492857600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8381169083168181101561495c5761495c6145b7565b03939250505056fea26469706673582212206610d3dcd7ca9d1666975f85253f02febb1d94acca385016d092f400868d263264736f6c634300080c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c8063514a6812116101f2578063a9059cbb1161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610bb1578063f94aa1b414610bd1578063fdb78c0e14610bf1578063fe575a8714610c1057600080fd5b8063e4fcfd1814610b46578063eafb5a3c14610b5c578063eb50e70e14610b7c578063ee5d9c2d14610b9c57600080fd5b8063cab5ebea116100dc578063cab5ebea14610a99578063cf84770614610ab9578063d528f32614610aea578063dd62ed3e14610b0057600080fd5b8063a9059cbb14610a59578063b1b08f7114610640578063b3d514fb14610640578063bcd96a2514610a7957600080fd5b8063773d4ffd116101855780638a8c523c116101545780638a8c523c146109b55780639242b759146109ca57806395d89b41146109fe578063a6690cf914610a4457600080fd5b8063773d4ffd1461094257806380c581d114610962578063893d20e8146109825780638a63bd9b146109a057600080fd5b80636ebd0078116101c15780636ebd0078146108cc57806370a08231146108e1578063715018a614610917578063749f2ef21461092c57600080fd5b8063514a68121461081a578063590ffdce146108535780635c24b074146108735780635cce86cd1461089357600080fd5b806329dd8798116102e257806336fddb04116102755780634ada218b116102445780634ada218b146107885780634fb2e45d146107a25780634fbee193146107c257806350a8e016146107fb57600080fd5b806336fddb04146107085780633f3cf56c14610728578063452ed4f11461074857806347aee6d81461076857600080fd5b8063313ce567116102b1578063313ce5671461068c57806332cde664146106a857806333251a0b146106c857806334cd8260146106e857600080fd5b806329dd8798146106205780632b28fc7a146106405780632cee7602146106565780632e8fa8211461067657600080fd5b8063095ea7b31161035a5780631cc43f07116103295780631cc43f07146105a057806323b872dd146105c057806326003957146105e05780632610eaca1461060057600080fd5b8063095ea7b3146105265780630962cb3f146105565780630fa604e41461057657806318160ddd1461058b57600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104975780630758d924146104e6578063092316021461050657600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160145481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a36600461415f565b610c30565b005b34801561044d57600080fd5b50600c546104729061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104a357600080fd5b5060408051808201909152600681527f515420506965000000000000000000000000000000000000000000000000000060208201525b6040516103f291906141b1565b3480156104f257600080fd5b50600e546103de906001600160a01b031681565b34801561051257600080fd5b5061043f610521366004614206565b610d09565b34801561053257600080fd5b5061054661054136600461421f565b610e29565b60405190151581526020016103f2565b34801561056257600080fd5b5061041161057136600461424b565b610e40565b34801561058257600080fd5b50610411610e6b565b34801561059757600080fd5b50610411610e8b565b3480156105ac57600080fd5b5061043f6105bb366004614268565b610ecc565b3480156105cc57600080fd5b506105466105db366004614323565b611021565b3480156105ec57600080fd5b5061043f6105fb366004614364565b611099565b34801561060c57600080fd5b5061043f61061b366004614268565b6111ec565b34801561062c57600080fd5b5061043f61063b366004614386565b611301565b34801561064c57600080fd5b506104116107d081565b34801561066257600080fd5b5061043f61067136600461421f565b6113ea565b34801561068257600080fd5b5061041160155481565b34801561069857600080fd5b50604051601281526020016103f2565b3480156106b457600080fd5b5061043f6106c33660046143f9565b611472565b3480156106d457600080fd5b5061043f6106e336600461424b565b6115ad565b3480156106f457600080fd5b5061043f61070336600461443c565b61164d565b34801561071457600080fd5b5061043f610723366004614477565b61170c565b34801561073457600080fd5b5061043f610743366004614364565b611785565b34801561075457600080fd5b50600f546103de906001600160a01b031681565b34801561077457600080fd5b5061043f6107833660046144a5565b6118d8565b34801561079457600080fd5b506018546105469060ff1681565b3480156107ae57600080fd5b5061043f6107bd36600461424b565b611980565b3480156107ce57600080fd5b506105466107dd36600461424b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080757600080fd5b5060185461054690610100900460ff1681565b34801561082657600080fd5b5061054661083536600461424b565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561085f57600080fd5b5061043f61086e366004614477565b611b8e565b34801561087f57600080fd5b5061043f61088e36600461424b565b611c07565b34801561089f57600080fd5b506105466108ae36600461424b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108d857600080fd5b50610411611d03565b3480156108ed57600080fd5b506104116108fc36600461424b565b6001600160a01b031660009081526002602052604090205490565b34801561092357600080fd5b5061043f611d1e565b34801561093857600080fd5b5061041160195481565b34801561094e57600080fd5b5061043f61095d36600461415f565b611dce565b34801561096e57600080fd5b5061043f61097d366004614477565b611e83565b34801561098e57600080fd5b506000546001600160a01b03166103de565b3480156109ac57600080fd5b5061054661202e565b3480156109c157600080fd5b5061043f61209d565b3480156109d657600080fd5b5060185461054690760100000000000000000000000000000000000000000000900460ff1681565b348015610a0a57600080fd5b5060408051808201909152600381527f515450000000000000000000000000000000000000000000000000000000000060208201526104d9565b348015610a5057600080fd5b5061043f6122ea565b348015610a6557600080fd5b50610546610a7436600461421f565b61260b565b348015610a8557600080fd5b5061043f610a943660046144d1565b612622565b348015610aa557600080fd5b5061043f610ab4366004614504565b6126f4565b348015610ac557600080fd5b50600d546104729061ffff808216916201000081048216916401000000009091041683565b348015610af657600080fd5b50610411601a5481565b348015610b0c57600080fd5b50610411610b1b366004614521565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b5257600080fd5b5061041160125481565b348015610b6857600080fd5b5061043f610b7736600461424b565b612796565b348015610b8857600080fd5b5061043f610b9736600461424b565b612b45565b348015610ba857600080fd5b5061043f612bc2565b348015610bbd57600080fd5b5061043f610bcc366004614477565b612ca5565b348015610bdd57600080fd5b506010546103de906001600160a01b031681565b348015610bfd57600080fd5b5060115461054690610100900460ff1681565b348015610c1c57600080fd5b50610546610c2b36600461424b565b612d4d565b6000546001600160a01b03163314610c835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6018546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610cd39085908590600401614593565b600060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610d575760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b61012c811015610da95760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c7a565b6018546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e0e57600080fd5b505af1158015610e22573d6000803e3d6000fd5b5050505050565b6000610e36338484612ddb565b5060015b92915050565b6001600160a01b0381166000908152600a6020526040812054610e3a90662386f26fc10000906145e6565b6000610e796012600a614705565b601754610e8691906145e6565b905090565b6000610e996012600a614705565b610ea89064174876e800614714565b610eb157600080fd5b610ebd6012600a614705565b610e869064174876e800614714565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b8051825114610f6b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c7a565b60005b82518160ff16101561101c57610f866012600a614705565b828260ff1681518110610f9b57610f9b614733565b6020026020010151610fad9190614714565b336000908152600260205260409020541015610fc857600080fd5b61100a838260ff1681518110610fe057610fe0614733565b6020026020010151838360ff1681518110610ffd57610ffd614733565b60200260200101516113ea565b8061101481614762565b915050610f6e565b505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611086576001600160a01b038416600090815260056020908152604080832033845290915281208054849290611080908490614782565b90915550505b611091848484612ee8565b949350505050565b6000546001600160a01b031633146110e75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6103e86110f66012600a614705565b6111059064174876e800614714565b61110f91906145e6565b818361111d6012600a614705565b61112c9064174876e800614714565b6111369190614714565b61114091906145e6565b10156111b45760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c7a565b80826111c26012600a614705565b6111d19064174876e800614714565b6111db9190614714565b6111e591906145e6565b6017555050565b805182511461123d5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c7a565b60005b82518160ff16101561101c57818160ff168151811061126157611261614733565b6020026020010151611288336001600160a01b031660009081526002602052604090205490565b101561129357600080fd5b6112ee33848360ff16815181106112ac576112ac614733565b60200260200101516012600a6112c29190614705565b858560ff16815181106112d7576112d7614733565b60200260200101516112e99190614714565b612ee8565b50806112f981614762565b915050611240565b6000546001600160a01b0316331461134f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6018546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146114385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601b5460ff161561144857600080fd5b6114546012600a614705565b61145e9082614714565b905061101c3383836000806000600161370a565b6000546001600160a01b031633146114c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6107d08361ffff16111580156114dc57506107d08261ffff1611155b80156114ee57506107d08161ffff1611155b61153a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c7a565b600c805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6018546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610df4565b6000546001600160a01b0316331461169b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b83856116a96012600a614705565b6116b89064174876e800614714565b6116c29190614714565b6116cc91906145e6565b60145581836116dd6012600a614705565b6116ec9064174876e800614714565b6116f69190614714565b61170091906145e6565b60155560125550505050565b6000546001600160a01b0316331461175a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117d35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6103e86117e26012600a614705565b6117f19064174876e800614714565b6117fb91906145e6565b81836118096012600a614705565b6118189064174876e800614714565b6118229190614714565b61182c91906145e6565b10156118a05760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c7a565b80826118ae6012600a614705565b6118bd9064174876e800614714565b6118c79190614714565b6118d191906145e6565b6016555050565b6000546001600160a01b031633146119265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6202a300831115801561195557506703782dace9d9000061194882600a614799565b6119529084614714565b10155b61195e57600080fd5b601983905561196e81600a614799565b6119789083614714565b601a55505050565b6000546001600160a01b031633146119ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6001600160a01b038116611a4a5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c7a565b6001600160a01b03811661dead1415611acb5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c7a565b60008054611ae4916001600160a01b0390911690611b8e565b611aef816001611b8e565b600080546001600160a01b031681526002602052604090205415611b3657600080546001600160a01b03168082526002602052604090912054611b3491908390612ee8565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611bdc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611c555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601854610100900460ff1615611c6a57600080fd5b6001600160a01b038116301415611cc35760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c7a565b601880546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611d116012600a614705565b601654610e8691906145e6565b6000546001600160a01b03163314611d6c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60008054611d85916001600160a01b0390911690611b8e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611e1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60005b825181101561101c578160096000858481518110611e3f57611e3f614733565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e7b816147a5565b915050611e1f565b6000546001600160a01b03163314611ed15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b80611f48576001600160a01b03828116600081815260036020526040808220805460ff1916905560185490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610cd3565b60045415611faf576203f48060045442611f629190614782565b11611faf5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c7a565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560185492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610cd3565b5050565b600080546001600160a01b0316331461207d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b600e546120979030906001600160a01b0316600019612ddb565b50600190565b6000546001600160a01b031633146120eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60185460ff161561213e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c7a565b601854610100900460ff166121955760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c7a565b6018546201000090046001600160a01b03166121db57601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601854600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561226657600080fd5b505af1925050508015612277575060015b506018805460ff19166001179055600f546001600160a01b0316600090815260026020526040902054612710906122ae91906145e6565b601455600f546001600160a01b0316600090815260026020526040902054612710906122db906019614714565b6122e591906145e6565b601555565b6000546001600160a01b031633146123385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601b5460ff161561238b5760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610c7a565b600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240291906147c0565b6001600160a01b031663c9c65396600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248791906147c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156124eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250f91906147c0565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554600e54612569929182169116600019612ddb565b600e546125839030906001600160a01b0316600019612ddb565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790558554909416855260089092529092208054821683179055601b80549091169091179055565b6000612618338484612ee8565b5060019392505050565b6000546001600160a01b031633146126705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b600d805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216908516171790556126b481836147dd565b600d805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146127425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601180548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061278b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146127e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284d91906147c0565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128be91906147c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906147c0565b90506001600160a01b038116612ae357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b791906147c0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2891906147c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab191906147c0565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612b0c565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561101c903090600019612ddb565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612c105760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b601854610100900460ff1615612c685760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c7a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612ca2573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612cf35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c7a565b6018546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610cd3565b6018546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190614803565b6001600160a01b038316612e315760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c7a565b6001600160a01b038216612e875760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c7a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612f665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c7a565b6001600160a01b038316612fe25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c7a565b600082116130585760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c7a565b601b5460ff166130aa5760405162461bcd60e51b815260206004820152601360248201527f4c50206e6f7420696e697469616c697a656421000000000000000000000000006044820152606401610c7a565b6001600160a01b0384166000908152600360205260408120548190819060ff16156130d85760019250613106565b6001600160a01b03861660009081526003602052604090205460ff16156131025760019150613106565b5060015b613110878761394a565b156136315760185460ff166131675760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c7a565b82806131705750815b15613234576001600160a01b03871660009081526007602052604090205460ff161580156131b757506001600160a01b03861660009081526007602052604090205460ff16155b15613234576016548511156132345760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c7a565b600e546001600160a01b03878116911614801590613250575081155b15613316576001600160a01b03861660009081526007602052604090205460ff166133165760175485613298886001600160a01b031660009081526002602052604090205490565b6132a29190614820565b11156133165760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c7a565b601854760100000000000000000000000000000000000000000000900460ff1615613631576001600160a01b03871660009081526009602052604090205460ff16801561336f5782806133665750835b61336f57600080fd5b8280156133795750805b8015613388575060115460ff16155b1561362f5760408051600280825260608201835260009260208301908036833701905050905030816000815181106133c2576133c2614733565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613434573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345891906147c0565b8160018151811061346b5761346b614733565b6001600160a01b039283166020918202929092010152600e546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f906134c8908b908690600401614838565b600060405180830381865afa1580156134e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350d9190810190614851565b60018151811061351f5761351f614733565b6020026020010151905042601954600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461355d9190614820565b101561359f57601a5481111561357257600080fd5b6001600160a01b038a166000908152600b60209081526040808320429055600a909152902081905561362c565b6019546001600160a01b038b166000908152600b602052604090205442916135c691614820565b111561362c57601a546001600160a01b038b166000908152600a60205260409020546135f3908390614820565b11156135fe57600080fd5b6001600160a01b038a166000908152600a602052604081208054839290613626908490614820565b90915550505b50505b505b6001600160a01b03871660009081526006602052604090205460019060ff168061367357506001600160a01b03871660009081526006602052604090205460ff165b1561367c575060005b82156136ef5760115460ff1615801561369c5750601154610100900460ff165b156136ef57426012546013546136b29190614820565b10156136ef573060009081526002602052604090205460145481106136ed5760155481106136df57506015545b6136e881613a1f565b426013555b505b6136fe8888888488888861370a565b98975050505050505050565b601854600090610100900460ff166137b6576137268888613e0f565b601854610100900460ff161580156137435750613743888861394a565b156137b65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c7a565b6137c0888861394a565b15613873576018546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561385c575060408051601f3d908101601f1916820190925261385991810190614803565b60015b61386557600080fd5b90508061387157600080fd5b505b6001600160a01b0388166000908152600260205260408120805488929061389b908490614782565b9091555060009050856138ae57866138ba565b6138ba8986868a613f6d565b6001600160a01b0389166000908152600260205260408120805492935083929091906138e7908490614820565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161393391815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b0384811691161480159061397757506000546001600160a01b03838116911614155b801561398e57506000546001600160a01b03163214155b80156139b357506001600160a01b03821660009081526008602052604090205460ff16155b80156139d857506001600160a01b03831660009081526008602052604090205460ff16155b80156139ef57506001600160a01b03821661dead14155b8015613a0357506001600160a01b03821615155b8015613a1857506001600160a01b0383163014155b9392505050565b6011805460ff1916600117905560408051606081018252600d5461ffff8082168352620100008204811660208401526401000000009091041691810182905290613a695750613e02565b306000908152600560209081526040808320600e546001600160a01b0316845290915290205460001914613ac257306000908152600560209081526040808320600e546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685613ae39190614714565b613aed91906145e6565b613af791906145e6565b90506000613b058285614782565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613b3f57613b3f614733565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd591906147c0565b81600181518110613be857613be8614733565b6001600160a01b039283166020918202929092010152600e546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613c479085906000908690309042906004016148d7565b600060405180830381600087803b158015613c6157600080fd5b505af1158015613c75573d6000803e3d6000fd5b5047925060009150849050613c8a8684614714565b613c9491906145e6565b90508415613d8557600e546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613d23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d489190614913565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613d8f8183614782565b9150856000015186604001818151613da79190614941565b61ffff90811690915260208801518492501615613dfa576010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613df8573d6000803e3d6000fd5b505b505050505050505b506011805460ff19169055565b601854610100900460ff1615613e8d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c7a565b613e97828261394a565b158015613eb15750600f546001600160a01b038281169116145b1561202a576001600160a01b038083166000908152600860205260409020805460ff191660011790556018805461ff001916610100179081905562010000900416613f2657601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415613f835750600c5461ffff16613fad565b8315613f9c5750600c5462010000900461ffff16613fad565b50600c54640100000000900461ffff165b6000612710613fbc8386614714565b613fc691906145e6565b30600090815260026020526040812080549293508392909190613fea908490614820565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36140398185614782565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561409c5761409c614044565b604052919050565b600067ffffffffffffffff8211156140be576140be614044565b5060051b60200190565b6001600160a01b0381168114612ca257600080fd5b600082601f8301126140ee57600080fd5b813560206141036140fe836140a4565b614073565b82815260059290921b8401810191818101908684111561412257600080fd5b8286015b84811015614146578035614139816140c8565b8352918301918301614126565b509695505050505050565b8015158114612ca257600080fd5b6000806040838503121561417257600080fd5b823567ffffffffffffffff81111561418957600080fd5b614195858286016140dd565b92505060208301356141a681614151565b809150509250929050565b600060208083528351808285015260005b818110156141de578581018301518582016040015282016141c2565b818111156141f0576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561421857600080fd5b5035919050565b6000806040838503121561423257600080fd5b823561423d816140c8565b946020939093013593505050565b60006020828403121561425d57600080fd5b8135613a18816140c8565b6000806040838503121561427b57600080fd5b823567ffffffffffffffff8082111561429357600080fd5b61429f868387016140dd565b93506020915081850135818111156142b657600080fd5b85019050601f810186136142c957600080fd5b80356142d76140fe826140a4565b81815260059190911b820183019083810190888311156142f657600080fd5b928401925b82841015614314578335825292840192908401906142fb565b80955050505050509250929050565b60008060006060848603121561433857600080fd5b8335614343816140c8565b92506020840135614353816140c8565b929592945050506040919091013590565b6000806040838503121561437757600080fd5b50508035926020909101359150565b6000806000806080858703121561439c57600080fd5b84356143a781614151565b935060208501356143b781614151565b925060408501356143c781614151565b915060608501356143d781614151565b939692955090935050565b803561ffff811681146143f457600080fd5b919050565b60008060006060848603121561440e57600080fd5b614417846143e2565b9250614425602085016143e2565b9150614433604085016143e2565b90509250925092565b600080600080600060a0868803121561445457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561448a57600080fd5b8235614495816140c8565b915060208301356141a681614151565b6000806000606084860312156144ba57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156144e457600080fd5b6144ed836143e2565b91506144fb602084016143e2565b90509250929050565b60006020828403121561451657600080fd5b8135613a1881614151565b6000806040838503121561453457600080fd5b823561453f816140c8565b915060208301356141a6816140c8565b600081518084526020808501945080840160005b838110156145885781516001600160a01b031687529582019590820190600101614563565b509495945050505050565b6040815260006145a6604083018561454f565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261461c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181815b8085111561465c578160001904821115614642576146426145b7565b8085161561464f57918102915b93841c9390800290614626565b509250929050565b60008261467357506001610e3a565b8161468057506000610e3a565b816001811461469657600281146146a0576146bc565b6001915050610e3a565b60ff8411156146b1576146b16145b7565b50506001821b610e3a565b5060208310610133831016604e8410600b84101617156146df575081810a610e3a565b6146e98383614621565b80600019048211156146fd576146fd6145b7565b029392505050565b6000613a1860ff841683614664565b600081600019048311821515161561472e5761472e6145b7565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614779576147796145b7565b60010192915050565b600082821015614794576147946145b7565b500390565b6000613a188383614664565b60006000198214156147b9576147b96145b7565b5060010190565b6000602082840312156147d257600080fd5b8151613a18816140c8565b600061ffff8083168185168083038211156147fa576147fa6145b7565b01949350505050565b60006020828403121561481557600080fd5b8151613a1881614151565b60008219821115614833576148336145b7565b500190565b828152604060208201526000611091604083018461454f565b6000602080838503121561486457600080fd5b825167ffffffffffffffff81111561487b57600080fd5b8301601f8101851361488c57600080fd5b805161489a6140fe826140a4565b81815260059190911b820183019083810190878311156148b957600080fd5b928401925b82841015614039578351825292840192908401906148be565b85815284602082015260a0604082015260006148f660a083018661454f565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561492857600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8381169083168181101561495c5761495c6145b7565b03939250505056fea26469706673582212206610d3dcd7ca9d1666975f85253f02febb1d94acca385016d092f400868d263264736f6c634300080c0033

Deployed Bytecode Sourcemap

6299:23023:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8048:73;;;;;;;;;;;;8079:42;8048:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8048:73:0;;;;;;;;8487:52;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8487:52:0;245:177:1;16732:172:0;;;;;;;;;;-1:-1:-1;16732:172:0;;;;;:::i;:::-;;:::i;:::-;;7541:116;;;;;;;;;;-1:-1:-1;7541:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;2855:6:1;2888:15;;;2870:34;;2940:15;;;2935:2;2920:18;;2913:43;2992:15;;2972:18;;;2965:43;;;;2833:2;2818:18;7541:116:0;2649:365:1;13704:80:0;;;;;;;;;;-1:-1:-1;13776:5:0;;;;;;;;;;;;;;;;;13704:80;;;;;;;:::i;7987:26::-;;;;;;;;;;-1:-1:-1;7987:26:0;;;;-1:-1:-1;;;;;7987:26:0;;;17364:150;;;;;;;;;;-1:-1:-1;17364:150:0;;;;;:::i;:::-;;:::i;14314:159::-;;;;;;;;;;-1:-1:-1;14314:159:0;;;;;:::i;:::-;;:::i;:::-;;;4598:14:1;;4591:22;4573:41;;4561:2;4546:18;14314:159:0;4433:187:1;20273:206:0;;;;;;;;;;-1:-1:-1;20273:206:0;;;;;:::i;:::-;;:::i;19372:112::-;;;;;;;;;;;;;:::i;13407:115::-;;;;;;;;;;;;;:::i;11279:397::-;;;;;;;;;;-1:-1:-1;11279:397:0;;;;;:::i;:::-;;:::i;14979:306::-;;;;;;;;;;-1:-1:-1;14979:306:0;;;;;:::i;:::-;;:::i;18422:267::-;;;;;;;;;;-1:-1:-1;18422:267:0;;;;;:::i;:::-;;:::i;27415:373::-;;;;;;;;;;-1:-1:-1;27415:373:0;;;;;:::i;:::-;;:::i;17161:195::-;;;;;;;;;;-1:-1:-1;17161:195:0;;;;;:::i;:::-;;:::i;7784:42::-;;;;;;;;;;;;7822:4;7784:42;;11034:237;;;;;;;;;;-1:-1:-1;11034:237:0;;;;;:::i;:::-;;:::i;8546:50::-;;;;;;;;;;;;;;;;13528:80;;;;;;;;;;-1:-1:-1;13528:80:0;;7245:2;7528:36:1;;7516:2;7501:18;13528:80:0;7386:184:1;17522:397:0;;;;;;;;;;-1:-1:-1;17522:397:0;;;;;:::i;:::-;;:::i;17045:108::-;;;;;;;;;;-1:-1:-1;17045:108:0;;;;;:::i;:::-;;:::i;19492:338::-;;;;;;;;;;-1:-1:-1;19492:338:0;;;;;:::i;:::-;;:::i;18697:140::-;;;;;;;;;;-1:-1:-1;18697:140:0;;;;;:::i;:::-;;:::i;18145:269::-;;;;;;;;;;-1:-1:-1;18145:269:0;;;;;:::i;:::-;;:::i;8020:21::-;;;;;;;;;;-1:-1:-1;8020:21:0;;;;-1:-1:-1;;;;;8020:21:0;;;20487:280;;;;;;;;;;-1:-1:-1;20487:280:0;;;;;:::i;:::-;;:::i;8727:34::-;;;;;;;;;;-1:-1:-1;8727:34:0;;;;;;;;12265:588;;;;;;;;;;-1:-1:-1;12265:588:0;;;;;:::i;:::-;;:::i;18983:125::-;;;;;;;;;;-1:-1:-1;18983:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19072:28:0;19048:4;19072:28;;;:19;:28;;;;;;;;;18983:125;8768:36;;;;;;;;;;-1:-1:-1;8768:36:0;;;;;;;;;;;20145:120;;;;;;;;;;-1:-1:-1;20145:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20233:24:0;20209:4;20233:24;;;:15;:24;;;;;;;;;20145:120;19116:134;;;;;;;;;;-1:-1:-1;19116:134:0;;;;;:::i;:::-;;:::i;16349:220::-;;;;;;;;;;-1:-1:-1;16349:220:0;;;;;:::i;:::-;;:::i;18845:130::-;;;;;;;;;;-1:-1:-1;18845:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;18937:30:0;18913:4;18937:30;;;:21;:30;;;;;;;;;18845:130;19258:106;;;;;;;;;;;;;:::i;14016:117::-;;;;;;;;;;-1:-1:-1;14016:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;14109:16:0;14082:7;14109:16;;;:7;:16;;;;;;;14016:117;12861:193;;;;;;;;;;;;;:::i;8889:42::-;;;;;;;;;;;;;;;;20775:214;;;;;;;;;;-1:-1:-1;20775:214:0;;;;;:::i;:::-;;:::i;15841:500::-;;;;;;;;;;-1:-1:-1;15841:500:0;;;;;:::i;:::-;;:::i;13790:79::-;;;;;;;;;;-1:-1:-1;13842:7:0;13860:6;-1:-1:-1;;;;;13860:6:0;13790:79;;14798:173;;;;;;;;;;;;;:::i;26680:537::-;;;;;;;;;;;;;:::i;8839:43::-;;;;;;;;;;-1:-1:-1;8839:43:0;;;;;;;;;;;13614:84;;;;;;;;;;-1:-1:-1;13688:7:0;;;;;;;;;;;;;;;;;13614:84;;10431:595;;;;;;;;;;;;;:::i;14141:165::-;;;;;;;;;;-1:-1:-1;14141:165:0;;;;;:::i;:::-;;:::i;17927:210::-;;;;;;;;;;-1:-1:-1;17927:210:0;;;;;:::i;:::-;;:::i;19973:164::-;;;;;;;;;;-1:-1:-1;19973:164:0;;;;;:::i;:::-;;:::i;7666:109::-;;;;;;;;;;-1:-1:-1;7666:109:0;;;;;;;;;;;;;;;;;;;;;;8938:47;;;;;;;;;;;;;;;;13875:133;;;;;;;;;;-1:-1:-1;13875:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13977:19:0;;;13959:7;13977:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13875:133;8405:44;;;;;;;;;;;;;;;;15293:540;;;;;;;;;;-1:-1:-1;15293:540:0;;;;;:::i;:::-;;:::i;19838:127::-;;;;;;;;;;-1:-1:-1;19838:127:0;;;;;:::i;:::-;;:::i;27225:182::-;;;;;;;;;;;;;:::i;16579:145::-;;;;;;;;;;-1:-1:-1;16579:145:0;;;;;:::i;:::-;;:::i;8200:128::-;;;;;;;;;;-1:-1:-1;8200:128:0;;;;-1:-1:-1;;;;;8200:128:0;;;8359:39;;;;;;;;;;-1:-1:-1;8359:39:0;;;;;;;;;;;16912:125;;;;;;;;;;-1:-1:-1;16912:125:0;;;;;:::i;:::-;;:::i;16732:172::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;;;;;;;;;16840:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16840:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16878:8;;16888:7;;16840:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16732:172:::0;;:::o;17364:150::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;17448:3:::1;17441;:10;;17433:31;;;::::0;-1:-1:-1;;;17433:31:0;;12030:2:1;17433:31:0::1;::::0;::::1;12012:21:1::0;12069:1;12049:18;;;12042:29;12107:10;12087:18;;;12080:38;12135:18;;17433:31:0::1;11828:331:1::0;17433:31:0::1;17475:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;17475:9:0;;;::::1;-1:-1:-1::0;;;;;17475:9:0::1;::::0;:26:::1;::::0;364:18:1;;17475:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17364:150:::0;:::o;14314:159::-;14389:4;14406:37;14415:10;14427:7;14436:6;14406:8;:37::i;:::-;-1:-1:-1;14461:4:0;14314:159;;;;;:::o;20273:206::-;-1:-1:-1;;;;;20432:25:0;;20339:7;20432:25;;;:16;:25;;;;;;:38;;20461:8;;20432:38;:::i;19372:112::-;19417:7;19462:13;7245:2;19462;:13;:::i;:::-;19444:14;;:32;;;;:::i;:::-;19437:39;;19372:112;:::o;13407:115::-;13462:7;7306:13;7245:2;7306;:13;:::i;:::-;7289:30;;7093:15;7289:30;:::i;:::-;13473:31;;13493:8;;;13473:31;7306:13;7245:2;7306;:13;:::i;:::-;7289:30;;7093:15;7289:30;:::i;11279:397::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;11428:7:::1;:14;11409:8;:15;:33;11401:67;;;::::0;-1:-1:-1;;;11401:67:0;;14570:2:1;11401:67:0::1;::::0;::::1;14552:21:1::0;14609:2;14589:18;;;14582:30;14648:23;14628:18;;;14621:51;14689:18;;11401:67:0::1;14368:345:1::0;11401:67:0::1;11484:7;11479:190;11501:8;:15;11497:1;:19;;;11479:190;;;11582:13;7245:2;11582;:13;:::i;:::-;11571:7;11579:1;11571:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;11556:10;14082:7:::0;14109:16;;;:7;:16;;;;;;11546:49:::1;;11538:58;;;::::0;::::1;;11611:46;11633:8;11642:1;11633:11;;;;;;;;;;:::i;:::-;;;;;;;11646:7;11654:1;11646:10;;;;;;;;;;:::i;:::-;;;;;;;11611:21;:46::i;:::-;11518:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11479:190;;;;11279:397:::0;;:::o;14979:306::-;-1:-1:-1;;;;;15100:19:0;;15079:4;15100:19;;;:11;:19;;;;;;;;15120:10;15100:31;;;;;;;;-1:-1:-1;;15100:52:0;15096:126;;-1:-1:-1;;;;;15169:19:0;;;;;;:11;:19;;;;;;;;15189:10;15169:31;;;;;;;:41;;15204:6;;15169:19;:41;;15204:6;;15169:41;:::i;:::-;;;;-1:-1:-1;;15096:126:0;15241:36;15251:6;15259:9;15270:6;15241:9;:36::i;:::-;15234:43;14979:306;-1:-1:-1;;;;14979:306:0:o;18422:267::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;18564:4:::1;7306:13;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;18554:14;;;;:::i;:::-;18542:7:::0;18531;7306:13:::1;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;18521:17;;;;:::i;:::-;18520:29;;;;:::i;:::-;:49;;18512:112;;;::::0;-1:-1:-1;;;18512:112:0;;15419:2:1;18512:112:0::1;::::0;::::1;15401:21:1::0;15458:2;15438:18;;;15431:30;15497:34;15477:18;;;15470:62;15568:20;15548:18;;;15541:48;15606:19;;18512:112:0::1;15217:414:1::0;18512:112:0::1;18674:7:::0;18663;7306:13:::1;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;18653:17;;;;:::i;:::-;18652:29;;;;:::i;:::-;18635:14;:46:::0;-1:-1:-1;;18422:267:0:o;27415:373::-;27540:7;:14;27521:8;:15;:33;27513:67;;;;-1:-1:-1;;;27513:67:0;;14570:2:1;27513:67:0;;;14552:21:1;14609:2;14589:18;;;14582:30;14648:23;14628:18;;;14621:51;14689:18;;27513:67:0;14368:345:1;27513:67:0;27596:7;27591:190;27613:8;:15;27609:1;:19;;;27591:190;;;27683:7;27691:1;27683:10;;;;;;;;;;:::i;:::-;;;;;;;27658:21;27668:10;-1:-1:-1;;;;;14109:16:0;14082:7;14109:16;;;:7;:16;;;;;;;14016:117;27658:21;:35;;27650:44;;;;;;27709:60;27719:10;27731:8;27740:1;27731:11;;;;;;;;;;:::i;:::-;;;;;;;7245:2;27755;:13;;;;:::i;:::-;27744:7;27752:1;27744:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27709:9;:60::i;:::-;-1:-1:-1;27630:3:0;;;;:::i;:::-;;;;27591:190;;17161:195;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;17283:9:::1;::::0;:65:::1;::::0;;;;15868:14:1;;15861:22;17283:65:0::1;::::0;::::1;15843:41:1::0;15927:14;;15920:22;15900:18;;;15893:50;15986:14;;15979:22;15959:18;;;15952:50;16045:14;;16038:22;16018:18;;;16011:50;17283:9:0;;;::::1;-1:-1:-1::0;;;;;17283:9:0::1;::::0;:24:::1;::::0;15815:19:1;;17283:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17161:195:::0;;;;:::o;11034:237::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;11130:13:::1;::::0;::::1;;11129:14;11121:23;;;::::0;::::1;;11171:13;7245:2;11171;:13;:::i;:::-;11164:20;::::0;:6;:20:::1;:::i;:::-;11155:29;;11195:68;11213:10;11225:2;11229:6;11237:5;11244::::0;11251::::1;11258:4;11195:17;:68::i;17522:397::-:0;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;7822:4:::1;17629:6;:21;;;;:65;;;;;7872:4;17671:7;:23;;;;17629:65;:117;;;;;7926:4;17715:11;:31;;;;17629:117;17621:170;;;::::0;-1:-1:-1;;;17621:170:0;;16274:2:1;17621:170:0::1;::::0;::::1;16256:21:1::0;16313:2;16293:18;;;16286:30;16352:25;16332:18;;;16325:53;16395:18;;17621:170:0::1;16072:347:1::0;17621:170:0::1;17802:9;:25:::0;;::::1;::::0;;::::1;17838:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;17876:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17522:397::o;17045:108::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;17114:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17114:31:0::1;::::0;::::1;160:74:1::0;17114:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17114:31:0::1;14:226:1::0;19492:338:0;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;19706:16;19686;7306:13:::1;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;19676:26;;;;:::i;:::-;19675:47;;;;:::i;:::-;19659:13;:63:::0;19774:13;19757;7306::::1;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;19747:23;;;;:::i;:::-;19746:41;;;;:::i;:::-;19733:10;:54:::0;19798:17:::1;:24:::0;-1:-1:-1;;;;19492:338:0:o;18697:140::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;-1:-1:-1;;;;;18789:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;18789:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18697:140::o;18145:269::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;18286:4:::1;7306:13;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;18276:14;;;;:::i;:::-;18264:7:::0;18253;7306:13:::1;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;18243:17;;;;:::i;:::-;18242:29;;;;:::i;:::-;:49;;18234:117;;;::::0;-1:-1:-1;;;18234:117:0;;16626:2:1;18234:117:0::1;::::0;::::1;16608:21:1::0;16665:2;16645:18;;;16638:30;16704:34;16684:18;;;16677:62;16775:25;16755:18;;;16748:53;16818:19;;18234:117:0::1;16424:419:1::0;18234:117:0::1;18399:7:::0;18388;7306:13:::1;7245:2;7306;:13;:::i;:::-;7289:30;::::0;7093:15:::1;7289:30;:::i;:::-;18378:17;;;;:::i;:::-;18377:29;;;;:::i;:::-;18362:12;:44:::0;-1:-1:-1;;18145:269:0:o;20487:280::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;20621:8:::1;20613:4;:16;;:57;;;;-1:-1:-1::0;20659:11:0::1;20641:14;20645:10:::0;20641:2:::1;:14;:::i;:::-;20633:22;::::0;:5;:22:::1;:::i;:::-;:37;;20613:57;20605:66;;;::::0;::::1;;20682:16;:23:::0;;;20745:14:::1;20749:10:::0;20745:2:::1;:14;:::i;:::-;20737:22;::::0;:5;:22:::1;:::i;:::-;20716:18;:43:::0;-1:-1:-1;;;20487:280:0:o;12265:588::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;-1:-1:-1;;;;;12344:22:0;::::1;12336:96;;;::::0;-1:-1:-1;;;12336:96:0;;17186:2:1;12336:96:0::1;::::0;::::1;17168:21:1::0;17225:2;17205:18;;;17198:30;17264:34;17244:18;;;17237:62;17335:31;17315:18;;;17308:59;17384:19;;12336:96:0::1;16984:425:1::0;12336:96:0::1;-1:-1:-1::0;;;;;12451:16:0;::::1;8079:42;12451:16;;12443:90;;;::::0;-1:-1:-1;;;12443:90:0;;17186:2:1;12443:90:0::1;::::0;::::1;17168:21:1::0;17225:2;17205:18;;;17198:30;17264:34;17244:18;;;17237:62;17335:31;17315:18;;;17308:59;17384:19;;12443:90:0::1;16984:425:1::0;12443:90:0::1;12564:6;::::0;;12544:34:::1;::::0;-1:-1:-1;;;;;12564:6:0;;::::1;::::0;12544:19:::1;:34::i;:::-;12589:35;12609:8;12619:4;12589:19;:35::i;:::-;12668:1;12658:6:::0;;-1:-1:-1;;;;;12658:6:0::1;14109:16:::0;;:7;:16;;;;;;12648:21;12645:99:::1;;12696:6;::::0;;-1:-1:-1;;;;;12696:6:0::1;14109:16:::0;;;:7;:16;;;;;;;12686:46:::1;::::0;12696:6;12704:8;;27709:9;:60::i;12686:46::-:1;;12645:99;12764:6;:17:::0;;-1:-1:-1;;12764:17:0::1;-1:-1:-1::0;;;;;12764:17:0;::::1;::::0;;::::1;::::0;;12797:38:::1;::::0;12764:17;;;;12797:38:::1;::::0;12764:6;12797:38:::1;12265:588:::0;:::o;19116:134::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;-1:-1:-1;;;;;19204:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19204:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19116:134::o;16349:220::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;16433:16:::1;::::0;::::1;::::0;::::1;;;16432:17;16424:26;;;::::0;::::1;;-1:-1:-1::0;;;;;16469:28:0;::::1;16492:4;16469:28;;16461:55;;;::::0;-1:-1:-1;;;16461:55:0;;17616:2:1;16461:55:0::1;::::0;::::1;17598:21:1::0;17655:2;17635:18;;;17628:30;17694:16;17674:18;;;17667:44;17728:18;;16461:55:0::1;17414:338:1::0;16461:55:0::1;16527:9;:34:::0;;-1:-1:-1;;;;;16527:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;16349:220::o;19258:106::-;19299:7;19342:13;7245:2;19342;:13;:::i;:::-;19326:12;;:30;;;;:::i;12861:193::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;12946:6:::1;::::0;;12926:34:::1;::::0;-1:-1:-1;;;;;12946:6:0;;::::1;::::0;12926:19:::1;:34::i;:::-;12988:1;12971:19:::0;;-1:-1:-1;;12971:19:0::1;::::0;;13006:40:::1;::::0;12988:1;;13006:40:::1;::::0;12988:1;;13006:40:::1;12861:193::o:0;20775:214::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;20876:9:::1;20872:110;20895:8;:15;20891:1;:19;20872:110;;;20963:7;20932:15;:28;20948:8;20957:1;20948:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20932:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20932:28:0;:38;;-1:-1:-1;;20932:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20912:3;::::1;::::0;::::1;:::i;:::-;;;;20872:110;;15841:500:::0;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;15922:16;15918:416:::1;;-1:-1:-1::0;;;;;15955:13:0;;::::1;15971:5;15955:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15955:21:0::1;::::0;;15991:9:::1;::::0;:32;;;;;::::1;::::0;::::1;18125:74:1::0;;;;18215:18;;;18208:50;;;;15991:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;18098:18:1;;15991:32:0::1;17957:307:1::0;15918:416:0::1;16060:17;::::0;:22;16056:136:::1;;16149:6;16129:17;;16111:15;:35;;;;:::i;:::-;:44;16103:73;;;::::0;-1:-1:-1;;;16103:73:0;;18471:2:1;16103:73:0::1;::::0;::::1;18453:21:1::0;18510:2;18490:18;;;18483:30;18549:18;18529;;;18522:46;18585:18;;16103:73:0::1;18269:340:1::0;16103:73:0::1;-1:-1:-1::0;;;;;16206:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16206:20:0::1;16222:4;16206:20:::0;;::::1;::::0;;;16261:15:::1;16241:17;:35:::0;;;16291:9:::1;::::0;:31;;;;;;;::::1;18125:74:1::0;;;;18215:18;;;18208:50;16291:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;18098:18:1;;16291:31:0::1;17957:307:1::0;15918:416:0::1;15841:500:::0;;:::o;14798:173::-;14862:4;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;14911:9:::1;::::0;14879:62:::1;::::0;14896:4:::1;::::0;-1:-1:-1;;;;;14911:9:0::1;-1:-1:-1::0;;14879:8:0::1;:62::i;:::-;-1:-1:-1::0;14959:4:0::1;14798:173:::0;:::o;26680:537::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;26742:14:::1;::::0;::::1;;26741:15;26733:52;;;::::0;-1:-1:-1;;;26733:52:0;;18816:2:1;26733:52:0::1;::::0;::::1;18798:21:1::0;18855:2;18835:18;;;18828:30;18894:26;18874:18;;;18867:54;18938:18;;26733:52:0::1;18614:348:1::0;26733:52:0::1;26804:16;::::0;::::1;::::0;::::1;;;26796:53;;;::::0;-1:-1:-1;;;26796:53:0;;19169:2:1;26796:53:0::1;::::0;::::1;19151:21:1::0;19208:2;19188:18;;;19181:30;19247:26;19227:18;;;19220:54;19291:18;;26796:53:0::1;18967:348:1::0;26796:53:0::1;26871:9;::::0;;;::::1;-1:-1:-1::0;;;;;26871:9:0::1;26860:99;;26911:9;:36:::0;;;::::1;26941:4;26911:36:::0;::::1;;::::0;;26860:99:::1;26973:9;::::0;26993:6:::1;::::0;26973:85:::1;::::0;;;;-1:-1:-1;;;;;26993:6:0;;::::1;26973:85;::::0;::::1;19543:74:1::0;19665:10;27008:12:0::1;19653:23:1::0;19633:18;;;19626:51;19725:18;27030:15:0::1;19713:31:1::0;19693:18;;;19686:59;7245:2:0::1;19761:18:1::0;;;19754:45;26973:9:0;;;::::1;;::::0;:19:::1;::::0;19515::1;;26973:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;27080:14:0::1;:21:::0;;-1:-1:-1;;27080:21:0::1;27097:4;27080:21;::::0;;27138:6:::1;::::0;-1:-1:-1;;;;;27138:6:0::1;-1:-1:-1::0;14109:16:0;;;:7;:16;;;;;;27148:5:::1;::::0;27128:25:::1;;;;:::i;:::-;27112:13;:41:::0;27188:6:::1;::::0;-1:-1:-1;;;;;27188:6:0::1;14082:7:::0;14109:16;;;:7;:16;;;;;;27204:5:::1;::::0;27178:22:::1;::::0;27198:2:::1;27178:22;:::i;:::-;27177:32;;;;:::i;:::-;27164:10;:45:::0;26680:537::o;10431:595::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;10492:13:::1;::::0;::::1;;10491:14;10483:46;;;::::0;-1:-1:-1;;;10483:46:0;;20012:2:1;10483:46:0::1;::::0;::::1;19994:21:1::0;20051:2;20031:18;;;20024:30;20090:21;20070:18;;;20063:49;20129:18;;10483:46:0::1;19810:343:1::0;10483:46:0::1;10562:9;;;;;;;;;-1:-1:-1::0;;;;;10562:9:0::1;-1:-1:-1::0;;;;;10562:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10551:42:0::1;;10594:9;;;;;;;;;-1:-1:-1::0;;;;;10594:9:0::1;-1:-1:-1::0;;;;;10594:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10551:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20667:15:1;;;10551:75:0::1;::::0;::::1;20649:34:1::0;10620:4:0::1;20699:18:1::0;;;20692:43;20561:18;;10551:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10542:6;:84:::0;;-1:-1:-1;;10542:84:0::1;-1:-1:-1::0;;;;;10542:84:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;10637:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;10637:22:0::1;-1:-1:-1::0;10637:22:0::1;::::0;;10681:6;10697:9:::1;::::0;10672:55:::1;::::0;10681:6;;::::1;::::0;10697:9:::1;-1:-1:-1::0;;10672:8:0::1;:55::i;:::-;10770:9;::::0;10738:62:::1;::::0;10755:4:::1;::::0;-1:-1:-1;;;;;10770:9:0::1;-1:-1:-1::0;;10738:8:0::1;:62::i;:::-;10813:27;10833:6:::0;;-1:-1:-1;;;;;10833:6:0;;::::1;10813:27:::0;;:19:::1;:27;::::0;;;;;;;:34;;10843:4:::1;-1:-1:-1::0;;10813:34:0;;::::1;::::0;::::1;::::0;;;10886:4:::1;10858:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;10910:25;:32;;;::::1;::::0;::::1;::::0;;10971:6;;;;::::1;10953:25:::0;;:17:::1;:25:::0;;;;;;:32;;;::::1;::::0;::::1;::::0;;10998:13:::1;:20:::0;;;;::::1;::::0;;::::1;::::0;;10431:595::o;14141:165::-;14219:4;14236:40;14246:10;14258:9;14269:6;14236:9;:40::i;:::-;-1:-1:-1;14294:4:0;;14141:165;-1:-1:-1;;;14141:165:0:o;17927:210::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;18012:7:::1;:29:::0;;::::1;18052::::0;;::::1;::::0;::::1;::::0;;;;18012;;::::1;18052::::0;::::1;::::0;;18108:21:::1;18072:9:::0;18032;18108:21:::1;:::i;:::-;18092:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;17927:210:0:o;19973:164::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;20049:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;20049:29:0;;::::1;;::::0;;20094:35:::1;::::0;::::1;::::0;::::1;::::0;20071:7;4598:14:1;4591:22;4573:41;;4561:2;4546:18;;4433:187;20094:35:0::1;;;;;;;;19973:164:::0;:::o;15293:540::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;15362:20:::1;15395:9;15362:43;;15416:16;15446:10;-1:-1:-1::0;;;;;15446:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15435:40:0::1;;15484:4;15491:10;-1:-1:-1::0;;;;;15491:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15435:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20667:15:1;;;15435:74:0::1;::::0;::::1;20649:34:1::0;20719:15;;20699:18;;;20692:43;20561:18;;15435:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15416:93:::0;-1:-1:-1;;;;;;15524:22:0;::::1;15520:200;;15583:10;-1:-1:-1::0;;;;;15583:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15572:43:0::1;;15624:4;15631:10;-1:-1:-1::0;;;;;15631:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15572:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20667:15:1;;;15572:77:0::1;::::0;::::1;20649:34:1::0;20719:15;;20699:18;;;20692:43;20561:18;;15572:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15563:6;:86:::0;;-1:-1:-1;;15563:86:0::1;-1:-1:-1::0;;;;;15563:86:0;;;::::1;::::0;;;::::1;::::0;;15520:200:::1;;;15691:6;:17:::0;;-1:-1:-1;;15691:17:0::1;-1:-1:-1::0;;;;;15691:17:0;::::1;;::::0;;15520:200:::1;15730:9;:22:::0;;-1:-1:-1;;15730:22:0::1;-1:-1:-1::0;;;;;15730:22:0;::::1;::::0;;::::1;::::0;;;15763:62:::1;::::0;15780:4:::1;::::0;-1:-1:-1;;15763:8:0::1;:62::i;19838:127::-:0;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;19915:11:::1;:42:::0;;-1:-1:-1;;19915:42:0::1;-1:-1:-1::0;;;;;19915:42:0;;;::::1;::::0;;;::::1;::::0;;19838:127::o;27225:182::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;27292:16:::1;::::0;::::1;::::0;::::1;;;27291:17;27283:58;;;::::0;-1:-1:-1;;;27283:58:0;;21177:2:1;27283:58:0::1;::::0;::::1;21159:21:1::0;21216:2;21196:18;;;21189:30;21255;21235:18;;;21228:58;21303:18;;27283:58:0::1;20975:352:1::0;27283:58:0::1;27360:6;::::0;;27352:47:::1;::::0;-1:-1:-1;;;;;27360:6:0;;::::1;::::0;27377:21:::1;27352:47:::0;::::1;;;::::0;27377:21;;27352:47;27360:6;27352:47;27377:21;27360:6;27352:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27225:182::o:0;16579:145::-;9386:6;;-1:-1:-1;;;;;9386:6:0;9396:10;9386:20;9378:50;;;;-1:-1:-1;;;9378:50:0;;10848:2:1;9378:50:0;;;10830:21:1;10887:2;10867:18;;;10860:30;-1:-1:-1;;;10906:18:1;;;10899:47;10963:18;;9378:50:0;10646:341:1;9378:50:0;16669:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;18143:55:1;;;16669:47:0::1;::::0;::::1;18125:74:1::0;18242:14;;18235:22;18215:18;;;18208:50;16669:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;18098:18:1;;16669:47:0::1;17957:307:1::0;16912:125:0;16997:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;16997:32:0;;;160:74:1;16973:4:0;;16997:9;;;;;:23;;133:18:1;;16997:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14481:309::-;-1:-1:-1;;;;;14575:20:0;;14567:52;;;;-1:-1:-1;;;14567:52:0;;21784:2:1;14567:52:0;;;21766:21:1;21823:2;21803:18;;;21796:30;21862:21;21842:18;;;21835:49;21901:18;;14567:52:0;21582:343:1;14567:52:0;-1:-1:-1;;;;;14638:21:0;;14630:53;;;;-1:-1:-1;;;14630:53:0;;21784:2:1;14630:53:0;;;21766:21:1;21823:2;21803:18;;;21796:30;21862:21;21842:18;;;21835:49;21901:18;;14630:53:0;21582:343:1;14630:53:0;-1:-1:-1;;;;;14696:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14749:33;;391:25:1;;;14749:33:0;;364:18:1;14749:33:0;;;;;;;14481:309;;;:::o;21362:3223::-;21441:4;-1:-1:-1;;;;;21466:18:0;;21458:68;;;;-1:-1:-1;;;21458:68:0;;22132:2:1;21458:68:0;;;22114:21:1;22171:2;22151:18;;;22144:30;22210:34;22190:18;;;22183:62;22281:7;22261:18;;;22254:35;22306:19;;21458:68:0;21930:401:1;21458:68:0;-1:-1:-1;;;;;21545:16:0;;21537:64;;;;-1:-1:-1;;;21537:64:0;;22538:2:1;21537:64:0;;;22520:21:1;22577:2;22557:18;;;22550:30;22616:34;22596:18;;;22589:62;22687:5;22667:18;;;22660:33;22710:19;;21537:64:0;22336:399:1;21537:64:0;21629:1;21620:6;:10;21612:64;;;;-1:-1:-1;;;21612:64:0;;22942:2:1;21612:64:0;;;22924:21:1;22981:2;22961:18;;;22954:30;23020:34;23000:18;;;22993:62;23091:11;23071:18;;;23064:39;23120:19;;21612:64:0;22740:405:1;21612:64:0;21695:13;;;;21687:45;;;;-1:-1:-1;;;21687:45:0;;23352:2:1;21687:45:0;;;23334:21:1;23391:2;23371:18;;;23364:30;23430:21;23410:18;;;23403:49;23469:18;;21687:45:0;23150:343:1;21687:45:0;-1:-1:-1;;;;;21839:13:0;;21743:8;21839:13;;;:7;:13;;;;;;21743:8;;;;21839:13;;21835:170;;;21875:4;21869:10;;21835:170;;;-1:-1:-1;;;;;21901:11:0;;;;;;:7;:11;;;;;;;;21897:108;;;21936:4;21929:11;;21897:108;;;-1:-1:-1;21989:4:0;21897:108;22018:20;22029:4;22035:2;22018:10;:20::i;:::-;22015:1723;;;22059:14;;;;22055:89;;22094:34;;-1:-1:-1;;;22094:34:0;;23700:2:1;22094:34:0;;;23682:21:1;23739:2;23719:18;;;23712:30;23778:26;23758:18;;;23751:54;23822:18;;22094:34:0;23498:348:1;22055:89:0;22161:3;:11;;;;22168:4;22161:11;22158:231;;;-1:-1:-1;;;;;22197:27:0;;;;;;:21;:27;;;;;;;;22196:28;:58;;;;-1:-1:-1;;;;;;22229:25:0;;;;;;:21;:25;;;;;;;;22228:26;22196:58;22192:182;;;22297:12;;22287:6;:22;;22279:75;;;;-1:-1:-1;;;22279:75:0;;24053:2:1;22279:75:0;;;24035:21:1;24092:2;24072:18;;;24065:30;24131:34;24111:18;;;24104:62;24202:10;24182:18;;;24175:38;24230:19;;22279:75:0;23851:404:1;22279:75:0;22420:9;;-1:-1:-1;;;;;22406:24:0;;;22420:9;;22406:24;;;;:33;;;22435:4;22434:5;22406:33;22403:242;;;-1:-1:-1;;;;;22465:25:0;;;;;;:21;:25;;;;;;;;22460:170;;22549:14;;22539:6;22523:13;22533:2;-1:-1:-1;;;;;14109:16:0;14082:7;14109:16;;;:7;:16;;;;;;;14016:117;22523:13;:22;;;;:::i;:::-;:40;;22515:95;;;;-1:-1:-1;;;22515:95:0;;24595:2:1;22515:95:0;;;24577:21:1;24634:2;24614:18;;;24607:30;24673:34;24653:18;;;24646:62;24744:12;24724:18;;;24717:40;24774:19;;22515:95:0;24393:406:1;22515:95:0;22662:24;;;;;;;22659:1068;;;-1:-1:-1;;;;;22720:21:0;;22707:10;22720:21;;;:15;:21;;;;;;;;22760:73;;;;22801:4;:11;;;;22809:3;22801:11;22793:20;;;;;;22854:4;:13;;;;;22862:5;22854:13;:24;;;;-1:-1:-1;22872:6:0;;;;22871:7;22854:24;22851:861;;;22927:16;;;22941:1;22927:16;;;;;;;;22903:21;;22927:16;;;;;;;;;;-1:-1:-1;22927:16:0;22903:40;;22984:4;22966;22971:1;22966:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22966:23:0;;;:7;;;;;;;;;;:23;;;;23022:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;22966:7;;23022:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23012:4;23017:1;23012:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23012:26:0;;;:7;;;;;;;;;:26;23082:9;;:37;;;;;23061:18;;23082:9;;;;;:23;;:37;;23106:6;;23114:4;;23082:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23082:37:0;;;;;;;;;;;;:::i;:::-;23120:1;23082:40;;;;;;;;:::i;:::-;;;;;;;23061:61;;23196:15;23177:16;;23148:20;:26;23169:4;-1:-1:-1;;;;;23148:26:0;-1:-1:-1;;;;;23148:26:0;;;;;;;;;;;;;:45;;;;:::i;:::-;:63;23145:548;;;23262:18;;23248:10;:32;;23240:41;;;;;;-1:-1:-1;;;;;23308:26:0;;;;;;:20;:26;;;;;;;;23337:15;23308:44;;23379:16;:22;;;;;:35;;;23145:548;;;23477:16;;-1:-1:-1;;;;;23448:26:0;;;;;;:20;:26;;;;;;23496:15;;23448:45;;;:::i;:::-;:63;23444:249;;;23587:18;;-1:-1:-1;;;;;23548:22:0;;;;;;:16;:22;;;;;;:35;;23573:10;;23548:35;:::i;:::-;:57;;23540:66;;;;;;-1:-1:-1;;;;;23633:22:0;;;;;;:16;:22;;;;;:36;;23659:10;;23633:22;:36;;23659:10;;23633:36;:::i;:::-;;;;-1:-1:-1;;23444:249:0;22880:832;;22851:861;22688:1039;22659:1068;-1:-1:-1;;;;;23783:25:0;;23750:12;23783:25;;;:19;:25;;;;;;23765:4;;23783:25;;;:52;;-1:-1:-1;;;;;;23812:23:0;;;;;;:19;:23;;;;;;;;23783:52;23780:98;;;-1:-1:-1;23861:5:0;23780:98;23894:4;23890:599;;;23920:6;;;;23919:7;:47;;;;-1:-1:-1;23947:19:0;;;;;;;23919:47;23915:557;;;24036:15;24016:17;;24005:8;;:28;;;;:::i;:::-;:46;24001:456;;;24125:4;24076:28;14109:16;;;:7;:16;;;;;;24182:13;;24158:37;;24154:284;;24251:10;;24227:20;:34;24224:77;;-1:-1:-1;24288:10:0;;24224:77;24327:34;24340:20;24327:12;:34::i;:::-;24399:15;24388:8;:26;24154:284;24053:404;24001:456;24507:70;24525:4;24531:2;24535:6;24543:7;24552:3;24557:4;24563:13;24507:17;:70::i;:::-;24500:77;21362:3223;-1:-1:-1;;;;;;;;21362:3223:0:o;27796:953::-;27959:16;;27937:4;;27959:16;;;;;27954:221;;27992:28;28011:4;28017:2;27992:18;:28::i;:::-;28040:16;;;;;;;28039:17;:41;;;;;28060:20;28071:4;28077:2;28060:10;:20::i;:::-;28035:129;;;28101:47;;-1:-1:-1;;;28101:47:0;;26229:2:1;28101:47:0;;;26211:21:1;26268:2;26248:18;;;26241:30;26307:34;26287:18;;;26280:62;26378:7;26358:18;;;26351:35;26403:19;;28101:47:0;26027:401:1;28035:129:0;28191:20;28202:4;28208:2;28191:10;:20::i;:::-;28187:314;;;28259:9;;:37;;;;;-1:-1:-1;;;;;26714:15:1;;;28259:37:0;;;26696:34:1;26766:15;;;26746:18;;;26739:43;26798:18;;;26791:34;;;28228:12:0;;28259:9;;;;;:19;;26608:18:1;;28259:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28259:37:0;;;;;;;;-1:-1:-1;;28259:37:0;;;;;;;;;;;;:::i;:::-;;;28255:163;;28394:8;;;28255:163;28347:5;-1:-1:-1;28438:7:0;28434:56;;28466:8;;;28434:56;28213:288;28187:314;-1:-1:-1;;;;;28513:13:0;;;;;;:7;:13;;;;;:23;;28530:6;;28513:13;:23;;28530:6;;28513:23;:::i;:::-;;;;-1:-1:-1;28547:22:0;;-1:-1:-1;28573:7:0;28572:55;;28621:6;28572:55;;;28584:34;28594:4;28600:3;28605:4;28611:6;28584:9;:34::i;:::-;-1:-1:-1;;;;;28638:11:0;;;;;;:7;:11;;;;;:29;;28547:80;;-1:-1:-1;28547:80:0;;28638:11;;;:29;;28547:80;;28638:29;:::i;:::-;;;;;;;;28700:2;-1:-1:-1;;;;;28685:34:0;28694:4;-1:-1:-1;;;;;28685:34:0;;28704:14;28685:34;;;;391:25:1;;379:2;364:18;;245:177;28685:34:0;;;;;;;;-1:-1:-1;28737:4:0;;27796:953;-1:-1:-1;;;;;;;;27796:953:0:o;20997:357::-;21065:4;21097:6;;-1:-1:-1;;;;;21089:14:0;;;21097:6;;21089:14;;;;:43;;-1:-1:-1;21126:6:0;;-1:-1:-1;;;;;21120:12:0;;;21126:6;;21120:12;;21089:43;:79;;;;-1:-1:-1;21162:6:0;;-1:-1:-1;;;;;21162:6:0;21149:9;:19;;21089:79;:118;;;;-1:-1:-1;;;;;;21186:21:0;;;;;;:17;:21;;;;;;;;21185:22;21089:118;:159;;;;-1:-1:-1;;;;;;21225:23:0;;;;;;:17;:23;;;;;;;;21224:24;21089:159;:186;;;;-1:-1:-1;;;;;;21265:10:0;;8079:42;21265:10;;21089:186;:219;;;;-1:-1:-1;;;;;;21292:16:0;;;;21089:219;:257;;;;-1:-1:-1;;;;;;21325:21:0;;21341:4;21325:21;;21089:257;21082:264;20997:357;-1:-1:-1;;;20997:357:0:o;24593:1563::-;9280:6;:13;;-1:-1:-1;;9280:13:0;9289:4;9280:13;;;24676:30:::1;::::0;;::::1;::::0;::::1;::::0;;24699:7:::1;24676:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;24717:56:::1;;24755:7;;;24717:56;24808:4;24788:26;::::0;;;:11:::1;:26;::::0;;;;;;;24823:9:::1;::::0;-1:-1:-1;;;;;24823:9:0::1;24788:46:::0;;;;;;;;-1:-1:-1;;24788:67:0::1;24785:165;;24892:4;24872:26;::::0;;;:11:::1;:26;::::0;;;;;;;24907:9:::1;::::0;-1:-1:-1;;;;;24907:9:0::1;24872:46:::0;;;;;;;-1:-1:-1;;24872:66:0;;24785:165:::1;24962:17;25043:1;25027:6;:12;;;24983:56;;25007:6;:16;;;24984:39;;:20;:39;;;;:::i;:::-;24983:56;;;;:::i;:::-;24982:62;;;;:::i;:::-;24962:82:::0;-1:-1:-1;25055:15:0::1;25073:32;24962:82:::0;25073:20;:32:::1;:::i;:::-;25150:16;::::0;;25164:1:::1;25150:16:::0;;;;;::::1;::::0;;25055:50;;-1:-1:-1;25126:21:0::1;::::0;25150:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25150:16:0::1;25126:40;;25195:4;25177;25182:1;25177:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25177:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25221:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;25177:7;;25221:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25211:4;25216:1;25211:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25211:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;25250:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;25325:7;;25250:9:::1;::::0;25363:4;;25390::::1;::::0;25410:15:::1;::::0;25250:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25470:21:0::1;::::0;-1:-1:-1;25449:18:0::1;::::0;-1:-1:-1;25556:7:0;;-1:-1:-1;25530:22:0::1;25543:9:::0;25470:21;25530:22:::1;:::i;:::-;25529:34;;;;:::i;:::-;25502:61:::0;-1:-1:-1;25580:13:0;;25576:328:::1;;25610:9;::::0;:222:::1;::::0;;;;25687:4:::1;25610:222;::::0;::::1;27810:34:1::0;27860:18;;;27853:34;;;25610:9:0::1;27903:18:1::0;;;27896:34;;;27946:18;;;27939:34;8079:42:0::1;27989:19:1::0;;;27982:44;25802:15:0::1;28042:19:1::0;;;28035:35;-1:-1:-1;;;;;25610:9:0;;::::1;::::0;:25:::1;::::0;25643:16;;27721:19:1;;25610:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25852:40:0::1;::::0;;28566:25:1;;;28622:2;28607:18;;28600:34;;;25852:40:0::1;::::0;-1:-1:-1;28539:18:1;25852:40:0::1;;;;;;;25576:328;25916:30;25930:16:::0;25916:30;::::1;:::i;:::-;;;25973:6;:16;;;25957:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;26052:16:::1;::::0;::::1;::::0;26027:10;;-1:-1:-1;26052:20:0::1;::::0;26048:101:::1;;26089:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;26089:21:0;;::::1;::::0;:48;::::1;;;::::0;26120:16;;26089:21:::1;:48:::0;:21;:48;26120:16;26089:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26048:101;24665:1491;;;;;;;9304:1;-1:-1:-1::0;9316:6:0;:14;;-1:-1:-1;;9316:14:0;;;24593:1563::o;26164:508::-;26246:16;;;;;;;26245:17;26237:65;;;;-1:-1:-1;;;26237:65:0;;29069:2:1;26237:65:0;;;29051:21:1;29108:2;29088:18;;;29081:30;29147:34;29127:18;;;29120:62;29218:5;29198:18;;;29191:33;29241:19;;26237:65:0;28867:399:1;26237:65:0;26318:20;26329:4;26335:2;26318:10;:20::i;:::-;26317:21;:37;;;;-1:-1:-1;26348:6:0;;-1:-1:-1;;;;;26342:12:0;;;26348:6;;26342:12;26317:37;26313:352;;;-1:-1:-1;;;;;26371:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;26371:30:0;26397:4;26371:30;;;26416:16;:23;;-1:-1:-1;;26416:23:0;26371:30;26416:23;;;;;26465:9;;;;26454:107;;26509:9;:36;;;;26539:4;26509:36;;;;;26454:107;26575:19;:26;;-1:-1:-1;;26575:26:0;;;;;26621:32;;-1:-1:-1;4573:41:1;;26621:32:0;;4561:2:1;4546:18;26621:32:0;;;;;;;26164:508;;:::o;28757:562::-;28845:7;28865:18;28898:3;28894:205;;;-1:-1:-1;28931:9:0;:16;;;28894:205;;;28969:4;28965:134;;;-1:-1:-1;29003:9:0;:17;;;;;;28965:134;;;-1:-1:-1;29066:9:0;:21;;;;;;28965:134;29111:17;7973:5;29131:19;29140:10;29131:6;:19;:::i;:::-;:38;;;;:::i;:::-;29198:4;29182:22;;;;:7;:22;;;;;:35;;29111:58;;-1:-1:-1;29111:58:0;;29182:22;;;:35;;29111:58;;29182:35;:::i;:::-;;;;-1:-1:-1;;29233:40:0;;391:25:1;;;29256:4:0;;-1:-1:-1;;;;;29233:40:0;;;;;379:2:1;364:18;29233:40:0;;;;;;;29293:18;29302:9;29293:6;:18;:::i;:::-;29286:25;28757:562;-1:-1:-1;;;;;;;28757:562: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;3019:656::-;3131:4;3160:2;3189;3178:9;3171:21;3221:6;3215:13;3264:6;3259:2;3248:9;3244:18;3237:34;3289:1;3299:140;3313:6;3310:1;3307:13;3299:140;;;3408:14;;;3404:23;;3398:30;3374:17;;;3393:2;3370:26;3363:66;3328:10;;3299:140;;;3457:6;3454:1;3451:13;3448:91;;;3527:1;3522:2;3513:6;3502:9;3498:22;3494:31;3487:42;3448:91;-1:-1:-1;3591:2:1;3579:15;-1:-1:-1;;3575:88:1;3560:104;;;;3666:2;3556:113;;3019:656;-1:-1:-1;;;3019:656:1:o;3928:180::-;3987:6;4040:2;4028:9;4019:7;4015:23;4011:32;4008:52;;;4056:1;4053;4046:12;4008:52;-1:-1:-1;4079:23:1;;3928:180;-1:-1:-1;3928:180:1:o;4113:315::-;4181:6;4189;4242:2;4230:9;4221:7;4217:23;4213:32;4210:52;;;4258:1;4255;4248:12;4210:52;4297:9;4284:23;4316:31;4341:5;4316:31;:::i;:::-;4366:5;4418:2;4403:18;;;;4390:32;;-1:-1:-1;;;4113:315:1:o;4625:247::-;4684:6;4737:2;4725:9;4716:7;4712:23;4708:32;4705:52;;;4753:1;4750;4743:12;4705:52;4792:9;4779:23;4811:31;4836:5;4811:31;:::i;4877:1138::-;4995:6;5003;5056:2;5044:9;5035:7;5031:23;5027:32;5024:52;;;5072:1;5069;5062:12;5024:52;5112:9;5099:23;5141:18;5182:2;5174:6;5171:14;5168:34;;;5198:1;5195;5188:12;5168:34;5221:61;5274:7;5265:6;5254:9;5250:22;5221:61;:::i;:::-;5211:71;;5301:2;5291:12;;5356:2;5345:9;5341:18;5328:32;5385:2;5375:8;5372:16;5369:36;;;5401:1;5398;5391:12;5369:36;5424:24;;;-1:-1:-1;5479:4:1;5471:13;;5467:27;-1:-1:-1;5457:55:1;;5508:1;5505;5498:12;5457:55;5544:2;5531:16;5567:60;5583:43;5623:2;5583:43;:::i;5567:60::-;5661:15;;;5743:1;5739:10;;;;5731:19;;5727:28;;;5692:12;;;;5767:19;;;5764:39;;;5799:1;5796;5789:12;5764:39;5823:11;;;;5843:142;5859:6;5854:3;5851:15;5843:142;;;5925:17;;5913:30;;5876:12;;;;5963;;;;5843:142;;;6004:5;5994:15;;;;;;;4877:1138;;;;;:::o;6020:456::-;6097:6;6105;6113;6166:2;6154:9;6145:7;6141:23;6137:32;6134:52;;;6182:1;6179;6172:12;6134:52;6221:9;6208:23;6240:31;6265:5;6240:31;:::i;:::-;6290:5;-1:-1:-1;6347:2:1;6332:18;;6319:32;6360:33;6319:32;6360:33;:::i;:::-;6020:456;;6412:7;;-1:-1:-1;;;6466:2:1;6451:18;;;;6438:32;;6020:456::o;6481:248::-;6549:6;6557;6610:2;6598:9;6589:7;6585:23;6581:32;6578:52;;;6626:1;6623;6616:12;6578:52;-1:-1:-1;;6649:23:1;;;6719:2;6704:18;;;6691:32;;-1:-1:-1;6481:248:1:o;6734:647::-;6808:6;6816;6824;6832;6885:3;6873:9;6864:7;6860:23;6856:33;6853:53;;;6902:1;6899;6892:12;6853:53;6941:9;6928:23;6960:28;6982:5;6960:28;:::i;:::-;7007:5;-1:-1:-1;7064:2:1;7049:18;;7036:32;7077:30;7036:32;7077:30;:::i;:::-;7126:7;-1:-1:-1;7185:2:1;7170:18;;7157:32;7198:30;7157:32;7198:30;:::i;:::-;7247:7;-1:-1:-1;7306:2:1;7291:18;;7278:32;7319:30;7278:32;7319:30;:::i;:::-;6734:647;;;;-1:-1:-1;6734:647:1;;-1:-1:-1;;6734:647:1:o;7575:159::-;7642:20;;7702:6;7691:18;;7681:29;;7671:57;;7724:1;7721;7714:12;7671:57;7575:159;;;:::o;7739:328::-;7813:6;7821;7829;7882:2;7870:9;7861:7;7857:23;7853:32;7850:52;;;7898:1;7895;7888:12;7850:52;7921:28;7939:9;7921:28;:::i;:::-;7911:38;;7968:37;8001:2;7990:9;7986:18;7968:37;:::i;:::-;7958:47;;8024:37;8057:2;8046:9;8042:18;8024:37;:::i;:::-;8014:47;;7739:328;;;;;:::o;8072:454::-;8167:6;8175;8183;8191;8199;8252:3;8240:9;8231:7;8227:23;8223:33;8220:53;;;8269:1;8266;8259:12;8220:53;-1:-1:-1;;8292:23:1;;;8362:2;8347:18;;8334:32;;-1:-1:-1;8413:2:1;8398:18;;8385:32;;8464:2;8449:18;;8436:32;;-1:-1:-1;8515:3:1;8500:19;8487:33;;-1:-1:-1;8072:454:1;-1:-1:-1;8072:454:1:o;8531:382::-;8596:6;8604;8657:2;8645:9;8636:7;8632:23;8628:32;8625:52;;;8673:1;8670;8663:12;8625:52;8712:9;8699:23;8731:31;8756:5;8731:31;:::i;:::-;8781:5;-1:-1:-1;8838:2:1;8823:18;;8810:32;8851:30;8810:32;8851:30;:::i;8918:316::-;8995:6;9003;9011;9064:2;9052:9;9043:7;9039:23;9035:32;9032:52;;;9080:1;9077;9070:12;9032:52;-1:-1:-1;;9103:23:1;;;9173:2;9158:18;;9145:32;;-1:-1:-1;9224:2:1;9209:18;;;9196:32;;8918:316;-1:-1:-1;8918:316:1:o;9239:256::-;9305:6;9313;9366:2;9354:9;9345:7;9341:23;9337:32;9334:52;;;9382:1;9379;9372:12;9334:52;9405:28;9423:9;9405:28;:::i;:::-;9395:38;;9452:37;9485:2;9474:9;9470:18;9452:37;:::i;:::-;9442:47;;9239:256;;;;;:::o;9500:241::-;9556:6;9609:2;9597:9;9588:7;9584:23;9580:32;9577:52;;;9625:1;9622;9615:12;9577:52;9664:9;9651:23;9683:28;9705:5;9683:28;:::i;9746:388::-;9814:6;9822;9875:2;9863:9;9854:7;9850:23;9846:32;9843:52;;;9891:1;9888;9881:12;9843:52;9930:9;9917:23;9949:31;9974:5;9949:31;:::i;:::-;9999:5;-1:-1:-1;10056:2:1;10041:18;;10028:32;10069:33;10028:32;10069:33;:::i;10992:484::-;11045:3;11083:5;11077:12;11110:6;11105:3;11098:19;11136:4;11165:2;11160:3;11156:12;11149:19;;11202:2;11195:5;11191:14;11223:1;11233:218;11247:6;11244:1;11241:13;11233:218;;;11312:13;;-1:-1:-1;;;;;11308:62:1;11296:75;;11391:12;;;;11426:15;;;;11269:1;11262:9;11233:218;;;-1:-1:-1;11467:3:1;;10992:484;-1:-1:-1;;;;;10992:484:1:o;11481:342::-;11682:2;11671:9;11664:21;11645:4;11702:56;11754:2;11743:9;11739:18;11731:6;11702:56;:::i;:::-;11694:64;;11808:6;11801:14;11794:22;11789:2;11778:9;11774:18;11767:50;11481:342;;;;;:::o;12164:184::-;12216:77;12213:1;12206:88;12313:4;12310:1;12303:15;12337:4;12334:1;12327:15;12353:274;12393:1;12419;12409:189;;12454:77;12451:1;12444:88;12555:4;12552:1;12545:15;12583:4;12580:1;12573:15;12409:189;-1:-1:-1;12612:9:1;;12353:274::o;12632:482::-;12721:1;12764:5;12721:1;12778:330;12799:7;12789:8;12786:21;12778:330;;;12918:4;-1:-1:-1;;12846:77:1;12840:4;12837:87;12834:113;;;12927:18;;:::i;:::-;12977:7;12967:8;12963:22;12960:55;;;12997:16;;;;12960:55;13076:22;;;;13036:15;;;;12778:330;;;12782:3;12632:482;;;;;:::o;13119:866::-;13168:5;13198:8;13188:80;;-1:-1:-1;13239:1:1;13253:5;;13188:80;13287:4;13277:76;;-1:-1:-1;13324:1:1;13338:5;;13277:76;13369:4;13387:1;13382:59;;;;13455:1;13450:130;;;;13362:218;;13382:59;13412:1;13403:10;;13426:5;;;13450:130;13487:3;13477:8;13474:17;13471:43;;;13494:18;;:::i;:::-;-1:-1:-1;;13550:1:1;13536:16;;13565:5;;13362:218;;13664:2;13654:8;13651:16;13645:3;13639:4;13636:13;13632:36;13626:2;13616:8;13613:16;13608:2;13602:4;13599:12;13595:35;13592:77;13589:159;;;-1:-1:-1;13701:19:1;;;13733:5;;13589:159;13780:34;13805:8;13799:4;13780:34;:::i;:::-;13910:6;-1:-1:-1;;13838:79:1;13829:7;13826:92;13823:118;;;13921:18;;:::i;:::-;13959:20;;13119:866;-1:-1:-1;;;13119:866:1:o;13990:140::-;14048:5;14077:47;14118:4;14108:8;14104:19;14098:4;14077:47;:::i;14135:228::-;14175:7;14301:1;-1:-1:-1;;14229:74:1;14226:1;14223:81;14218:1;14211:9;14204:17;14200:105;14197:131;;;14308:18;;:::i;:::-;-1:-1:-1;14348:9:1;;14135:228::o;14718:184::-;14770:77;14767:1;14760:88;14867:4;14864:1;14857:15;14891:4;14888:1;14881:15;14907:175;14944:3;14988:4;14981:5;14977:16;15017:4;15008:7;15005:17;15002:43;;;15025:18;;:::i;:::-;15074:1;15061:15;;14907:175;-1:-1:-1;;14907:175:1:o;15087:125::-;15127:4;15155:1;15152;15149:8;15146:34;;;15160:18;;:::i;:::-;-1:-1:-1;15197:9:1;;15087:125::o;16848:131::-;16908:5;16937:36;16964:8;16958:4;16937:36;:::i;17757:195::-;17796:3;-1:-1:-1;;17820:5:1;17817:77;17814:103;;;17897:18;;:::i;:::-;-1:-1:-1;17944:1:1;17933:13;;17757:195::o;20158:251::-;20228:6;20281:2;20269:9;20260:7;20256:23;20252:32;20249:52;;;20297:1;20294;20287:12;20249:52;20329:9;20323:16;20348:31;20373:5;20348:31;:::i;20746:224::-;20785:3;20813:6;20846:2;20843:1;20839:10;20876:2;20873:1;20869:10;20907:3;20903:2;20899:12;20894:3;20891:21;20888:47;;;20915:18;;:::i;:::-;20951:13;;20746:224;-1:-1:-1;;;;20746:224:1:o;21332:245::-;21399:6;21452:2;21440:9;21431:7;21427:23;21423:32;21420:52;;;21468:1;21465;21458:12;21420:52;21500:9;21494:16;21519:28;21541:5;21519:28;:::i;24260:128::-;24300:3;24331:1;24327:6;24324:1;24321:13;24318:39;;;24337:18;;:::i;:::-;-1:-1:-1;24373:9:1;;24260:128::o;24804:332::-;25011:6;25000:9;24993:25;25054:2;25049;25038:9;25034:18;25027:30;24974:4;25074:56;25126:2;25115:9;25111:18;25103:6;25074:56;:::i;25141:881::-;25236:6;25267:2;25310;25298:9;25289:7;25285:23;25281:32;25278:52;;;25326:1;25323;25316:12;25278:52;25359:9;25353:16;25392:18;25384:6;25381:30;25378:50;;;25424:1;25421;25414:12;25378:50;25447:22;;25500:4;25492:13;;25488:27;-1:-1:-1;25478:55:1;;25529:1;25526;25519:12;25478:55;25558:2;25552:9;25581:60;25597:43;25637:2;25597:43;:::i;25581:60::-;25675:15;;;25757:1;25753:10;;;;25745:19;;25741:28;;;25706:12;;;;25781:19;;;25778:39;;;25813:1;25810;25803:12;25778:39;25837:11;;;;25857:135;25873:6;25868:3;25865:15;25857:135;;;25939:10;;25927:23;;25890:12;;;;25970;;;;25857:135;;26836:605;27135:6;27124:9;27117:25;27178:6;27173:2;27162:9;27158:18;27151:34;27221:3;27216:2;27205:9;27201:18;27194:31;27098:4;27242:57;27294:3;27283:9;27279:19;27271:6;27242:57;:::i;:::-;-1:-1:-1;;;;;27335:55:1;;;;27330:2;27315:18;;27308:83;-1:-1:-1;27422:3:1;27407:19;27400:35;27234:65;26836:605;-1:-1:-1;;;26836:605:1:o;28081:306::-;28169:6;28177;28185;28238:2;28226:9;28217:7;28213:23;28209:32;28206:52;;;28254:1;28251;28244:12;28206:52;28283:9;28277:16;28267:26;;28333:2;28322:9;28318:18;28312:25;28302:35;;28377:2;28366:9;28362:18;28356:25;28346:35;;28081:306;;;;;:::o;28645:217::-;28684:4;28713:6;28769:10;;;;28739;;28791:12;;;28788:38;;;28806:18;;:::i;:::-;28843:13;;28645:217;-1:-1:-1;;;28645:217:1:o

Swarm Source

ipfs://6610d3dcd7ca9d1666975f85253f02febb1d94acca385016d092f400868d2632
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.