ETH Price: $3,503.64 (+2.27%)
Gas: 3 Gwei

Token

Bored Apes Cousin Coin & NFTs ($BAPEC)
 

Overview

Max Total Supply

100,000,000,000,000 $BAPEC

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
75,157,446,623.290187655 $BAPEC

Value
$0.00
0xda43faa4e11e99b30bcd64a80c69b9809f03ce1f
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:
BoredApesCousinAndNFTs

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-11
*/

// 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, address);
}

contract BoredApesCousinAndNFTs is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;

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

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

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

    Ratios public _ratios = Ratios({
        liquidity: 0,
        marketing: 25,
        total: 25
        });

    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(0x717dEf8083ec2A97f69Ea3a24F9704Ebd18b61aE)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmountBuy;
    uint256 private _maxTxAmountSell;
    uint256 private _maxWalletSize;

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

    bool contractInitialized = 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 {
        // 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 {
            revert();
        }

        _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;
    }

    function intializeContract(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == percents.length && percents.length == divisors.length, "2");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        address newOwner;
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals, address initOwner) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
            newOwner = initOwner;
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 10) / 10000;
        _maxTxAmountBuy = (_tTotal * 5) / 1000;
        _maxTxAmountSell = (_tTotal * 5) / 1000;
        _maxWalletSize = (_tTotal * 2) / 100;
        contractInitialized = true;     
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = (_tTotal * percents[i]) / divisors[i];
            _transfer(_owner, accounts[i], amount);
        }

        _transfer(_owner, address(this), balanceOf(_owner));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            newOwner,
            block.timestamp
        );
        transferOwner(newOwner);
        enableTrading();
    }

    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) public 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 view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view 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 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 percentBuy, uint256 divisorBuy, uint256 percentSell, uint256 divisorSell) external onlyOwner {
        require((_tTotal * percentBuy) / divisorBuy >= ((_tTotal * 5) / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        require((_tTotal * percentSell) / divisorSell >= ((_tTotal * 5) / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        _maxTxAmountBuy = (_tTotal * percentBuy) / divisorBuy;
        _maxTxAmountSell = (_tTotal * percentSell) / divisorSell;
    }

    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 getMaxTXs() public view returns (uint256, uint256) {
        return (_maxTxAmountBuy / (10**_decimals), _maxTxAmountSell / (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 _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");
        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){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmountBuy, "Transfer amount exceeds the maxTxAmount.");
                }
            } else if (sell) {
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmountSell, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        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;
    }

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

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

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

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, 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":"view","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":"getMaxTXs","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"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":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","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":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentBuy","type":"uint256"},{"internalType":"uint256","name":"divisorBuy","type":"uint256"},{"internalType":"uint256","name":"percentSell","type":"uint256"},{"internalType":"uint256","name":"divisorSell","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_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":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"}]

600060038190556104b060808190526109c460a05260c052600d805465ffffffffffff199081166504b009c404b01790915560e0829052601961010081905261012052600e805490911664190019000017905561016060405273717def8083ec2a97f69ea3a24f9704ebd18b61ae610140819052601180546001600160a01b031990811690921790556012805461ff00191690556013829055601a805461ffff60ff60b01b011916905581543391161790554660381415620000e757600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200019b565b46606114156200011d57600f80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200019b565b46600114806200012d5750466004145b156200015f57600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200019b565b4661a86a14156200019657600f80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200019b565b600080fd5b600054600f54620001bc916001600160a01b0390811691166000196200025a565b600f54620001d89030906001600160a01b03166000196200025a565b600080546001600160a01b0390811682526005602090815260408084208054600160ff19918216811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054821683179055855490941685526007909252909220805490911690911790556200035b565b6001600160a01b038316620002ac5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620002fa5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620002a3565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6149a0806200036b6000396000f3fe6080604052600436106103595760003560e01c8063590ffdce116101bb578063b3d514fb116100f7578063eafb5a3c11610095578063eec2744e1161006f578063eec2744e146109dd578063f94aa1b4146109fd578063fdb78c0e14610a1d578063fe575a8714610a3c57600080fd5b8063eafb5a3c14610988578063eb50e70e146109a8578063ee5d9c2d146109c857600080fd5b8063cf847706116100d1578063cf847706146108db578063dd62ed3e1461090c578063e4fcfd1814610952578063e8a0e3f91461096857600080fd5b8063b3d514fb14610570578063bcd96a251461089b578063cab5ebea146108bb57600080fd5b80638a63bd9b11610164578063a9059cbb1161013e578063a9059cbb14610831578063adba5bca14610851578063b1b08f7114610570578063b2189fdc1461087b57600080fd5b80638a63bd9b146107f25780638a8c523c1461080757806395d89b411461081c57600080fd5b8063715018a611610195578063715018a61461079f57806380c581d1146107b4578063893d20e8146107d457600080fd5b8063590ffdce146107105780635cce86cd1461073057806370a082311461076957600080fd5b806329dd87981161029557806336fddb04116102335780634ada218b1161020d5780634ada218b1461067e5780634fb2e45d146106985780634fbee193146106b857806350a8e016146106f157600080fd5b806336fddb041461061e57806343b5beec1461063e578063452ed4f11461065e57600080fd5b8063313ce5671161026f578063313ce5671461059c57806332cde664146105be57806333251a0b146105de57806334cd8260146105fe57600080fd5b806329dd8798146105505780632b28fc7a146105705780632e8fa8211461058657600080fd5b8063092316021161030257806318160ddd116102dc57806318160ddd146104db57806323b872dd146104f057806326003957146105105780632610eaca1461053057600080fd5b80630923160214610476578063095ea7b3146104965780630fa604e4146104c657600080fd5b8063069d955f11610333578063069d955f146103de57806306fdde03146104345780630758d9241461045657600080fd5b806303fd2a45146103655780630445b6671461039857806305bbedb6146103bc57600080fd5b3661036057005b600080fd5b34801561037157600080fd5b5061037b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a457600080fd5b506103ae60155481565b60405190815260200161038f565b3480156103c857600080fd5b506103dc6103d7366004613f90565b610a5c565b005b3480156103ea57600080fd5b50600d5461040f9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038f565b34801561044057600080fd5b50610449610b35565b60405161038f919061400e565b34801561046257600080fd5b50600f5461037b906001600160a01b031681565b34801561048257600080fd5b506103dc610491366004614041565b610bc7565b3480156104a257600080fd5b506104b66104b136600461405a565b610ce7565b604051901515815260200161038f565b3480156104d257600080fd5b506103ae610cfe565b3480156104e757600080fd5b506103ae610d24565b3480156104fc57600080fd5b506104b661050b366004614086565b610d3d565b34801561051c57600080fd5b506103dc61052b3660046140c7565b610db5565b34801561053c57600080fd5b506103dc61054b366004614144565b610ec0565b34801561055c57600080fd5b506103dc61056b3660046141a8565b610fe0565b34801561057c57600080fd5b506103ae6107d081565b34801561059257600080fd5b506103ae60165481565b3480156105a857600080fd5b50600b5460405160ff909116815260200161038f565b3480156105ca57600080fd5b506103dc6105d936600461421b565b6110c9565b3480156105ea57600080fd5b506103dc6105f936600461425e565b611204565b34801561060a57600080fd5b506103dc61061936600461427b565b6112a4565b34801561062a57600080fd5b506103dc6106393660046142b6565b611334565b34801561064a57600080fd5b506103dc6106593660046142e4565b6113ad565b34801561066a57600080fd5b5060105461037b906001600160a01b031681565b34801561068a57600080fd5b50601a546104b69060ff1681565b3480156106a457600080fd5b506103dc6106b336600461425e565b611b73565b3480156106c457600080fd5b506104b66106d336600461425e565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106fd57600080fd5b50601a546104b690610100900460ff1681565b34801561071c57600080fd5b506103dc61072b3660046142b6565b611d81565b34801561073c57600080fd5b506104b661074b36600461425e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077557600080fd5b506103ae61078436600461425e565b6001600160a01b031660009081526001602052604090205490565b3480156107ab57600080fd5b506103dc611dfa565b3480156107c057600080fd5b506103dc6107cf3660046142b6565b611eaa565b3480156107e057600080fd5b506000546001600160a01b031661037b565b3480156107fe57600080fd5b506104b6612054565b34801561081357600080fd5b506103dc6120c3565b34801561082857600080fd5b506104496122b3565b34801561083d57600080fd5b506104b661084c36600461405a565b6122c2565b34801561085d57600080fd5b506108666122d9565b6040805192835260208301919091520161038f565b34801561088757600080fd5b506103dc610896366004614374565b612322565b3480156108a757600080fd5b506103dc6108b63660046143a6565b612501565b3480156108c757600080fd5b506103dc6108d63660046143d9565b6125d3565b3480156108e757600080fd5b50600e5461040f9061ffff808216916201000081048216916401000000009091041683565b34801561091857600080fd5b506103ae6109273660046143f6565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561095e57600080fd5b506103ae60135481565b34801561097457600080fd5b506103dc610983366004614424565b612675565b34801561099457600080fd5b506103dc6109a336600461425e565b6127d9565b3480156109b457600080fd5b506103dc6109c336600461425e565b612b88565b3480156109d457600080fd5b506103dc612c05565b3480156109e957600080fd5b506103dc6109f83660046142b6565b612ce8565b348015610a0957600080fd5b5060115461037b906001600160a01b031681565b348015610a2957600080fd5b506012546104b690610100900460ff1681565b348015610a4857600080fd5b506104b6610a5736600461425e565b612d90565b6000546001600160a01b03163314610aaf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610aff90859085906004016144f0565b600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b505050505050565b606060098054610b4490614514565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090614514565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c155760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b61012c811015610c675760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610aa6565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610ccc57600080fd5b505af1158015610ce0573d6000803e3d6000fd5b5050505050565b6000610cf4338484612e1e565b5060015b92915050565b600b54600090610d129060ff16600a61467b565b601954610d1f919061468a565b905090565b6000600c5460001415610d3657600080fd5b50600c5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610da2576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610d9c9084906146c5565b90915550505b610dad848484612f2b565b949350505050565b6000546001600160a01b03163314610e035760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6103e8600c54610e13919061468a565b8183600c54610e2291906146dc565b610e2c919061468a565b1015610ea05760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610aa6565b8082600c54610eaf91906146dc565b610eb9919061468a565b6019555050565b8051825114610f115760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610aa6565b60005b82518160ff161015610fdb57818160ff1681518110610f3557610f356146fb565b6020026020010151610f5c336001600160a01b031660009081526001602052604090205490565b1015610f6757600080fd5b610fc833848360ff1681518110610f8057610f806146fb565b6020908102919091010151600b54610f9c9060ff16600a61467b565b858560ff1681518110610fb157610fb16146fb565b6020026020010151610fc391906146dc565b612f2b565b5080610fd38161472a565b915050610f14565b505050565b6000546001600160a01b0316331461102e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146111175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6107d08361ffff161115801561113357506107d08261ffff1611155b801561114557506107d08161ffff1611155b6111915760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610aa6565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146112525760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610cb2565b6000546001600160a01b031633146112f25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b8385600c5461130191906146dc565b61130b919061468a565b601555600c54829061131e9085906146dc565b611328919061468a565b60165560135550505050565b6000546001600160a01b031633146113825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a54760100000000000000000000000000000000000000000000900460ff16156114685760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610aa6565b8251845114801561147a575081518351145b6114c65760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610aa6565b601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b15801561155857600080fd5b505af1925050508015611569575060015b506000601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156115e057506040513d6000823e601f3d908101601f191682016040526115dd91908101906147ae565b60015b61162c5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610aa6565b845161163f906009906020880190613ddc565b50835161165390600a906020870190613ddc565b506008839055600b805460ff191660ff841690811790915561167690600a61467b565b60085461168391906146dc565b600c55600f54604080517fc45a015500000000000000000000000000000000000000000000000000000000815290519297506001600160a01b03909116955063c45a015594506004808201945060209350908290030181865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611712919061484a565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611773573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611797919061484a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f919061484a565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c54612710906118769060056146dc565b611880919061468a565b601555600c546127109061189590600a6146dc565b61189f919061468a565b601655600c546103e8906118b49060056146dc565b6118be919061468a565b601755600c546103e8906118d39060056146dc565b6118dd919061468a565b601855600c546064906118f19060026146dc565b6118fb919061468a565b601955601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600c54600080546001600160a01b03908116825260016020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161199591815260200190565b60405180910390a3600f546119b79030906001600160a01b0316600019612e1e565b60005b8551811015611a5e5760008482815181106119d7576119d76146fb565b60200260200101518683815181106119f1576119f16146fb565b6020026020010151600c54611a0691906146dc565b611a10919061468a565b9050611a4960008054906101000a90046001600160a01b0316888481518110611a3b57611a3b6146fb565b602002602001015183612f2b565b50508080611a5690614867565b9150506119ba565b50600080546001600160a01b03168082526001602052604090912054611a8691903090612f2b565b50600f546001600160a01b031663f305d7194730611ab9816001600160a01b031660009081526001602052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0392831660048201526024810191909152600060448201819052606482015290851660848201524260a482015260c40160606040518083038185885af1158015611b3a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b5f9190614882565b505050611b6b81611b73565b610ce06120c3565b6000546001600160a01b03163314611bc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6001600160a01b038116611c3d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa6565b6001600160a01b03811661dead1415611cbe5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa6565b60008054611cd7916001600160a01b0390911690611d81565b611ce2816001611d81565b600080546001600160a01b031681526001602052604090205415611d2957600080546001600160a01b03168082526001602052604090912054611d2791908390612f2b565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611dcf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611e485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b60008054611e61916001600160a01b0390911690611d81565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611ef85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b80611f6f576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610aff565b60035415611fd6576203f48060035442611f8991906146c5565b11611fd65760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610aa6565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610aff565b5050565b600080546001600160a01b031633146120a35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b600f546120bd9030906001600160a01b0316600019612e1e565b50600190565b6000546001600160a01b031633146121115760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a5460ff16156121645760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610aa6565b601a54610100900460ff166121bb5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610aa6565b601a546201000090046001600160a01b031661220157601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a54601054600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561229257600080fd5b505af19250505080156122a3575060015b50601a805460ff19166001179055565b6060600a8054610b4490614514565b60006122cf338484612f2b565b5060019392505050565b600b5460009081906122ef9060ff16600a61467b565b6017546122fc919061468a565b600b5461230d9060ff16600a61467b565b60185461231a919061468a565b915091509091565b6000546001600160a01b031633146123705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6103e8600c54600561238291906146dc565b61238c919061468a565b8385600c5461239b91906146dc565b6123a5919061468a565b10156124195760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610aa6565b6103e8600c54600561242b91906146dc565b612435919061468a565b8183600c5461244491906146dc565b61244e919061468a565b10156124c25760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610aa6565b8284600c546124d191906146dc565b6124db919061468a565b601755600c5481906124ee9084906146dc565b6124f8919061468a565b60185550505050565b6000546001600160a01b0316331461254f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b600e805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009092169085161717905561259381836148b0565b600e805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146126215760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601280548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061266a90831515815260200190565b60405180910390a150565b81518351148015612687575080518251145b6126d35760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610aa6565b60005b83518160ff1610156127d357818160ff16815181106126f7576126f76146fb565b6020026020010151838260ff1681518110612714576127146146fb565b6020026020010151600c5461272991906146dc565b612733919061468a565b33600090815260016020526040902054101561274e57600080fd5b6127c033858360ff1681518110612767576127676146fb565b6020026020010151848460ff1681518110612784576127846146fb565b6020026020010151868560ff16815181106127a1576127a16146fb565b6020026020010151600c546127b691906146dc565b610fc3919061468a565b50806127cb8161472a565b9150506126d6565b50505050565b6000546001600160a01b031633146128275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612890919061484a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612901919061484a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612988919061484a565b90506001600160a01b038116612b2657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fa919061484a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6b919061484a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af4919061484a565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612b4f565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610fdb903090600019612e1e565b6000546001600160a01b03163314612bd65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612c535760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a54610100900460ff1615612cab5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610aa6565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612ce5573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612d365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610aff565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906148d6565b6001600160a01b038316612e745760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610aa6565b6001600160a01b038216612eca5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610aa6565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612fa95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610aa6565b6001600160a01b0383166130255760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610aa6565b6000821161309b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610aa6565b6001600160a01b0384166000908152600260205260408120548190819060ff16156130c957600192506130f7565b6001600160a01b03861660009081526002602052604090205460ff16156130f357600191506130f7565b5060015b61310187876134a2565b156133c957601a5460ff166131585760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610aa6565b8215613222576001600160a01b03871660009081526006602052604090205460ff161580156131a057506001600160a01b03861660009081526006602052604090205460ff16155b1561321d5760175485111561321d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610aa6565b6132e7565b81156132e7576001600160a01b03871660009081526006602052604090205460ff1615801561326a57506001600160a01b03861660009081526006602052604090205460ff16155b156132e7576018548511156132e75760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610aa6565b600f546001600160a01b03878116911614801590613303575081155b156133c9576001600160a01b03861660009081526006602052604090205460ff166133c9576019548561334b886001600160a01b031660009081526001602052604090205490565b61335591906148f3565b11156133c95760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610aa6565b6001600160a01b03871660009081526005602052604090205460019060ff168061340b57506001600160a01b03871660009081526005602052604090205460ff165b15613414575060005b82156134875760125460ff161580156134345750601254610100900460ff165b15613487574260135460145461344a91906148f3565b10156134875730600090815260016020526040902054601554811061348557601654811061347757506016545b61348081613577565b426014555b505b61349688888884888888613967565b98975050505050505050565b600080546001600160a01b038481169116148015906134cf57506000546001600160a01b03838116911614155b80156134e657506000546001600160a01b03163214155b801561350b57506001600160a01b03821660009081526007602052604090205460ff16155b801561353057506001600160a01b03831660009081526007602052604090205460ff16155b801561354757506001600160a01b03821661dead14155b801561355b57506001600160a01b03821615155b801561357057506001600160a01b0383163014155b9392505050565b6012805460ff1916600117905560408051606081018252600e5461ffff80821683526201000082048116602084015264010000000090910416918101829052906135c1575061395a565b306000908152600460209081526040808320600f546001600160a01b031684529091529020546000191461361a57306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff168561363b91906146dc565b613645919061468a565b61364f919061468a565b9050600061365d82856146c5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613697576136976146fb565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372d919061484a565b81600181518110613740576137406146fb565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061379f90859060009086903090429060040161490b565b600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b50479250600091508490506137e286846146dc565b6137ec919061468a565b905084156138dd57600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561387b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138a09190614882565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6138e781836146c5565b91508560000151866040018181516138ff9190614947565b61ffff90811690915260208801518492501615613952576011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613950573d6000803e3d6000fd5b505b505050505050505b506012805460ff19169055565b601a54600090610100900460ff16613a13576139838888613ba7565b601a54610100900460ff161580156139a057506139a088886134a2565b15613a135760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610aa6565b613a1d88886134a2565b15613ad057601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ab9575060408051601f3d908101601f19168201909252613ab6918101906148d6565b60015b613ac257600080fd5b905080613ace57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290613af89084906146c5565b909155506000905085613b0b5786613b17565b613b178986868a613d05565b6001600160a01b038916600090815260016020526040812080549293508392909190613b449084906148f3565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b9091815260200190565b60405180910390a350600198975050505050505050565b601a54610100900460ff1615613c255760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610aa6565b613c2f82826134a2565b158015613c4957506010546001600160a01b038281169116145b15612050576001600160a01b038083166000908152600760205260409020805460ff19166001179055601a805461ff001916610100179081905562010000900416613cbe57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6012805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415613d1b5750600d5461ffff16613d45565b8315613d345750600d5462010000900461ffff16613d45565b50600d54640100000000900461ffff165b6000612710613d5483866146dc565b613d5e919061468a565b30600090815260016020526040812080549293508392909190613d829084906148f3565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613dd181856146c5565b979650505050505050565b828054613de890614514565b90600052602060002090601f016020900481019282613e0a5760008555613e50565b82601f10613e2357805160ff1916838001178555613e50565b82800160010185558215613e50579182015b82811115613e50578251825591602001919060010190613e35565b50613e5c929150613e60565b5090565b5b80821115613e5c5760008155600101613e61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ecd57613ecd613e75565b604052919050565b600067ffffffffffffffff821115613eef57613eef613e75565b5060051b60200190565b6001600160a01b0381168114612ce557600080fd5b600082601f830112613f1f57600080fd5b81356020613f34613f2f83613ed5565b613ea4565b82815260059290921b84018101918181019086841115613f5357600080fd5b8286015b84811015613f77578035613f6a81613ef9565b8352918301918301613f57565b509695505050505050565b8015158114612ce557600080fd5b60008060408385031215613fa357600080fd5b823567ffffffffffffffff811115613fba57600080fd5b613fc685828601613f0e565b9250506020830135613fd781613f82565b809150509250929050565b60005b83811015613ffd578181015183820152602001613fe5565b838111156127d35750506000910152565b602081526000825180602084015261402d816040850160208701613fe2565b601f01601f19169190910160400192915050565b60006020828403121561405357600080fd5b5035919050565b6000806040838503121561406d57600080fd5b823561407881613ef9565b946020939093013593505050565b60008060006060848603121561409b57600080fd5b83356140a681613ef9565b925060208401356140b681613ef9565b929592945050506040919091013590565b600080604083850312156140da57600080fd5b50508035926020909101359150565b600082601f8301126140fa57600080fd5b8135602061410a613f2f83613ed5565b82815260059290921b8401810191818101908684111561412957600080fd5b8286015b84811015613f77578035835291830191830161412d565b6000806040838503121561415757600080fd5b823567ffffffffffffffff8082111561416f57600080fd5b61417b86838701613f0e565b9350602085013591508082111561419157600080fd5b5061419e858286016140e9565b9150509250929050565b600080600080608085870312156141be57600080fd5b84356141c981613f82565b935060208501356141d981613f82565b925060408501356141e981613f82565b915060608501356141f981613f82565b939692955090935050565b803561ffff8116811461421657600080fd5b919050565b60008060006060848603121561423057600080fd5b61423984614204565b925061424760208501614204565b915061425560408501614204565b90509250925092565b60006020828403121561427057600080fd5b813561357081613ef9565b600080600080600060a0868803121561429357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156142c957600080fd5b82356142d481613ef9565b91506020830135613fd781613f82565b600080600080608085870312156142fa57600080fd5b843567ffffffffffffffff8082111561431257600080fd5b61431e88838901613f0e565b9550602087013591508082111561433457600080fd5b614340888389016140e9565b9450604087013591508082111561435657600080fd5b50614363878288016140e9565b92505060608501356141f981613ef9565b6000806000806080858703121561438a57600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156143b957600080fd5b6143c283614204565b91506143d060208401614204565b90509250929050565b6000602082840312156143eb57600080fd5b813561357081613f82565b6000806040838503121561440957600080fd5b823561441481613ef9565b91506020830135613fd781613ef9565b60008060006060848603121561443957600080fd5b833567ffffffffffffffff8082111561445157600080fd5b61445d87838801613f0e565b9450602086013591508082111561447357600080fd5b61447f878388016140e9565b9350604086013591508082111561449557600080fd5b506144a2868287016140e9565b9150509250925092565b600081518084526020808501945080840160005b838110156144e55781516001600160a01b0316875295820195908201906001016144c0565b509495945050505050565b60408152600061450360408301856144ac565b905082151560208301529392505050565b600181811c9082168061452857607f821691505b60208210811415614562577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156145d25781600019048211156145b8576145b8614568565b808516156145c557918102915b93841c939080029061459c565b509250929050565b6000826145e957506001610cf8565b816145f657506000610cf8565b816001811461460c576002811461461657614632565b6001915050610cf8565b60ff84111561462757614627614568565b50506001821b610cf8565b5060208310610133831016604e8410600b8410161715614655575081810a610cf8565b61465f8383614597565b806000190482111561467357614673614568565b029392505050565b600061357060ff8416836145da565b6000826146c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156146d7576146d7614568565b500390565b60008160001904831182151516156146f6576146f6614568565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141561474157614741614568565b60010192915050565b600082601f83011261475b57600080fd5b815167ffffffffffffffff81111561477557614775613e75565b6147886020601f19601f84011601613ea4565b81815284602083860101111561479d57600080fd5b610dad826020830160208701613fe2565b600080600080600060a086880312156147c657600080fd5b855167ffffffffffffffff808211156147de57600080fd5b6147ea89838a0161474a565b9650602088015191508082111561480057600080fd5b5061480d8882890161474a565b94505060408601519250606086015160ff8116811461482b57600080fd5b608087015190925061483c81613ef9565b809150509295509295909350565b60006020828403121561485c57600080fd5b815161357081613ef9565b600060001982141561487b5761487b614568565b5060010190565b60008060006060848603121561489757600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8083168185168083038211156148cd576148cd614568565b01949350505050565b6000602082840312156148e857600080fd5b815161357081613f82565b6000821982111561490657614906614568565b500190565b85815284602082015260a06040820152600061492a60a08301866144ac565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff8381169083168181101561496257614962614568565b03939250505056fea264697066735822122009b3cf612bbb8dfa75af10a570803b4abdb096ae398d5f28798b29d8c053ea3164736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103595760003560e01c8063590ffdce116101bb578063b3d514fb116100f7578063eafb5a3c11610095578063eec2744e1161006f578063eec2744e146109dd578063f94aa1b4146109fd578063fdb78c0e14610a1d578063fe575a8714610a3c57600080fd5b8063eafb5a3c14610988578063eb50e70e146109a8578063ee5d9c2d146109c857600080fd5b8063cf847706116100d1578063cf847706146108db578063dd62ed3e1461090c578063e4fcfd1814610952578063e8a0e3f91461096857600080fd5b8063b3d514fb14610570578063bcd96a251461089b578063cab5ebea146108bb57600080fd5b80638a63bd9b11610164578063a9059cbb1161013e578063a9059cbb14610831578063adba5bca14610851578063b1b08f7114610570578063b2189fdc1461087b57600080fd5b80638a63bd9b146107f25780638a8c523c1461080757806395d89b411461081c57600080fd5b8063715018a611610195578063715018a61461079f57806380c581d1146107b4578063893d20e8146107d457600080fd5b8063590ffdce146107105780635cce86cd1461073057806370a082311461076957600080fd5b806329dd87981161029557806336fddb04116102335780634ada218b1161020d5780634ada218b1461067e5780634fb2e45d146106985780634fbee193146106b857806350a8e016146106f157600080fd5b806336fddb041461061e57806343b5beec1461063e578063452ed4f11461065e57600080fd5b8063313ce5671161026f578063313ce5671461059c57806332cde664146105be57806333251a0b146105de57806334cd8260146105fe57600080fd5b806329dd8798146105505780632b28fc7a146105705780632e8fa8211461058657600080fd5b8063092316021161030257806318160ddd116102dc57806318160ddd146104db57806323b872dd146104f057806326003957146105105780632610eaca1461053057600080fd5b80630923160214610476578063095ea7b3146104965780630fa604e4146104c657600080fd5b8063069d955f11610333578063069d955f146103de57806306fdde03146104345780630758d9241461045657600080fd5b806303fd2a45146103655780630445b6671461039857806305bbedb6146103bc57600080fd5b3661036057005b600080fd5b34801561037157600080fd5b5061037b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a457600080fd5b506103ae60155481565b60405190815260200161038f565b3480156103c857600080fd5b506103dc6103d7366004613f90565b610a5c565b005b3480156103ea57600080fd5b50600d5461040f9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038f565b34801561044057600080fd5b50610449610b35565b60405161038f919061400e565b34801561046257600080fd5b50600f5461037b906001600160a01b031681565b34801561048257600080fd5b506103dc610491366004614041565b610bc7565b3480156104a257600080fd5b506104b66104b136600461405a565b610ce7565b604051901515815260200161038f565b3480156104d257600080fd5b506103ae610cfe565b3480156104e757600080fd5b506103ae610d24565b3480156104fc57600080fd5b506104b661050b366004614086565b610d3d565b34801561051c57600080fd5b506103dc61052b3660046140c7565b610db5565b34801561053c57600080fd5b506103dc61054b366004614144565b610ec0565b34801561055c57600080fd5b506103dc61056b3660046141a8565b610fe0565b34801561057c57600080fd5b506103ae6107d081565b34801561059257600080fd5b506103ae60165481565b3480156105a857600080fd5b50600b5460405160ff909116815260200161038f565b3480156105ca57600080fd5b506103dc6105d936600461421b565b6110c9565b3480156105ea57600080fd5b506103dc6105f936600461425e565b611204565b34801561060a57600080fd5b506103dc61061936600461427b565b6112a4565b34801561062a57600080fd5b506103dc6106393660046142b6565b611334565b34801561064a57600080fd5b506103dc6106593660046142e4565b6113ad565b34801561066a57600080fd5b5060105461037b906001600160a01b031681565b34801561068a57600080fd5b50601a546104b69060ff1681565b3480156106a457600080fd5b506103dc6106b336600461425e565b611b73565b3480156106c457600080fd5b506104b66106d336600461425e565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106fd57600080fd5b50601a546104b690610100900460ff1681565b34801561071c57600080fd5b506103dc61072b3660046142b6565b611d81565b34801561073c57600080fd5b506104b661074b36600461425e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077557600080fd5b506103ae61078436600461425e565b6001600160a01b031660009081526001602052604090205490565b3480156107ab57600080fd5b506103dc611dfa565b3480156107c057600080fd5b506103dc6107cf3660046142b6565b611eaa565b3480156107e057600080fd5b506000546001600160a01b031661037b565b3480156107fe57600080fd5b506104b6612054565b34801561081357600080fd5b506103dc6120c3565b34801561082857600080fd5b506104496122b3565b34801561083d57600080fd5b506104b661084c36600461405a565b6122c2565b34801561085d57600080fd5b506108666122d9565b6040805192835260208301919091520161038f565b34801561088757600080fd5b506103dc610896366004614374565b612322565b3480156108a757600080fd5b506103dc6108b63660046143a6565b612501565b3480156108c757600080fd5b506103dc6108d63660046143d9565b6125d3565b3480156108e757600080fd5b50600e5461040f9061ffff808216916201000081048216916401000000009091041683565b34801561091857600080fd5b506103ae6109273660046143f6565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561095e57600080fd5b506103ae60135481565b34801561097457600080fd5b506103dc610983366004614424565b612675565b34801561099457600080fd5b506103dc6109a336600461425e565b6127d9565b3480156109b457600080fd5b506103dc6109c336600461425e565b612b88565b3480156109d457600080fd5b506103dc612c05565b3480156109e957600080fd5b506103dc6109f83660046142b6565b612ce8565b348015610a0957600080fd5b5060115461037b906001600160a01b031681565b348015610a2957600080fd5b506012546104b690610100900460ff1681565b348015610a4857600080fd5b506104b6610a5736600461425e565b612d90565b6000546001600160a01b03163314610aaf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610aff90859085906004016144f0565b600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b505050505050565b606060098054610b4490614514565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090614514565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c155760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b61012c811015610c675760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610aa6565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610ccc57600080fd5b505af1158015610ce0573d6000803e3d6000fd5b5050505050565b6000610cf4338484612e1e565b5060015b92915050565b600b54600090610d129060ff16600a61467b565b601954610d1f919061468a565b905090565b6000600c5460001415610d3657600080fd5b50600c5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610da2576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610d9c9084906146c5565b90915550505b610dad848484612f2b565b949350505050565b6000546001600160a01b03163314610e035760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6103e8600c54610e13919061468a565b8183600c54610e2291906146dc565b610e2c919061468a565b1015610ea05760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610aa6565b8082600c54610eaf91906146dc565b610eb9919061468a565b6019555050565b8051825114610f115760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610aa6565b60005b82518160ff161015610fdb57818160ff1681518110610f3557610f356146fb565b6020026020010151610f5c336001600160a01b031660009081526001602052604090205490565b1015610f6757600080fd5b610fc833848360ff1681518110610f8057610f806146fb565b6020908102919091010151600b54610f9c9060ff16600a61467b565b858560ff1681518110610fb157610fb16146fb565b6020026020010151610fc391906146dc565b612f2b565b5080610fd38161472a565b915050610f14565b505050565b6000546001600160a01b0316331461102e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146111175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6107d08361ffff161115801561113357506107d08261ffff1611155b801561114557506107d08161ffff1611155b6111915760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610aa6565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146112525760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610cb2565b6000546001600160a01b031633146112f25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b8385600c5461130191906146dc565b61130b919061468a565b601555600c54829061131e9085906146dc565b611328919061468a565b60165560135550505050565b6000546001600160a01b031633146113825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a54760100000000000000000000000000000000000000000000900460ff16156114685760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610aa6565b8251845114801561147a575081518351145b6114c65760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610aa6565b601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b15801561155857600080fd5b505af1925050508015611569575060015b506000601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156115e057506040513d6000823e601f3d908101601f191682016040526115dd91908101906147ae565b60015b61162c5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610aa6565b845161163f906009906020880190613ddc565b50835161165390600a906020870190613ddc565b506008839055600b805460ff191660ff841690811790915561167690600a61467b565b60085461168391906146dc565b600c55600f54604080517fc45a015500000000000000000000000000000000000000000000000000000000815290519297506001600160a01b03909116955063c45a015594506004808201945060209350908290030181865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611712919061484a565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611773573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611797919061484a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f919061484a565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c54612710906118769060056146dc565b611880919061468a565b601555600c546127109061189590600a6146dc565b61189f919061468a565b601655600c546103e8906118b49060056146dc565b6118be919061468a565b601755600c546103e8906118d39060056146dc565b6118dd919061468a565b601855600c546064906118f19060026146dc565b6118fb919061468a565b601955601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600c54600080546001600160a01b03908116825260016020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161199591815260200190565b60405180910390a3600f546119b79030906001600160a01b0316600019612e1e565b60005b8551811015611a5e5760008482815181106119d7576119d76146fb565b60200260200101518683815181106119f1576119f16146fb565b6020026020010151600c54611a0691906146dc565b611a10919061468a565b9050611a4960008054906101000a90046001600160a01b0316888481518110611a3b57611a3b6146fb565b602002602001015183612f2b565b50508080611a5690614867565b9150506119ba565b50600080546001600160a01b03168082526001602052604090912054611a8691903090612f2b565b50600f546001600160a01b031663f305d7194730611ab9816001600160a01b031660009081526001602052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0392831660048201526024810191909152600060448201819052606482015290851660848201524260a482015260c40160606040518083038185885af1158015611b3a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b5f9190614882565b505050611b6b81611b73565b610ce06120c3565b6000546001600160a01b03163314611bc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6001600160a01b038116611c3d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa6565b6001600160a01b03811661dead1415611cbe5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa6565b60008054611cd7916001600160a01b0390911690611d81565b611ce2816001611d81565b600080546001600160a01b031681526001602052604090205415611d2957600080546001600160a01b03168082526001602052604090912054611d2791908390612f2b565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611dcf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611e485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b60008054611e61916001600160a01b0390911690611d81565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611ef85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b80611f6f576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610aff565b60035415611fd6576203f48060035442611f8991906146c5565b11611fd65760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610aa6565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610aff565b5050565b600080546001600160a01b031633146120a35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b600f546120bd9030906001600160a01b0316600019612e1e565b50600190565b6000546001600160a01b031633146121115760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a5460ff16156121645760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610aa6565b601a54610100900460ff166121bb5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610aa6565b601a546201000090046001600160a01b031661220157601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a54601054600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561229257600080fd5b505af19250505080156122a3575060015b50601a805460ff19166001179055565b6060600a8054610b4490614514565b60006122cf338484612f2b565b5060019392505050565b600b5460009081906122ef9060ff16600a61467b565b6017546122fc919061468a565b600b5461230d9060ff16600a61467b565b60185461231a919061468a565b915091509091565b6000546001600160a01b031633146123705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6103e8600c54600561238291906146dc565b61238c919061468a565b8385600c5461239b91906146dc565b6123a5919061468a565b10156124195760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610aa6565b6103e8600c54600561242b91906146dc565b612435919061468a565b8183600c5461244491906146dc565b61244e919061468a565b10156124c25760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610aa6565b8284600c546124d191906146dc565b6124db919061468a565b601755600c5481906124ee9084906146dc565b6124f8919061468a565b60185550505050565b6000546001600160a01b0316331461254f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b600e805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009092169085161717905561259381836148b0565b600e805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146126215760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601280548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061266a90831515815260200190565b60405180910390a150565b81518351148015612687575080518251145b6126d35760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610aa6565b60005b83518160ff1610156127d357818160ff16815181106126f7576126f76146fb565b6020026020010151838260ff1681518110612714576127146146fb565b6020026020010151600c5461272991906146dc565b612733919061468a565b33600090815260016020526040902054101561274e57600080fd5b6127c033858360ff1681518110612767576127676146fb565b6020026020010151848460ff1681518110612784576127846146fb565b6020026020010151868560ff16815181106127a1576127a16146fb565b6020026020010151600c546127b691906146dc565b610fc3919061468a565b50806127cb8161472a565b9150506126d6565b50505050565b6000546001600160a01b031633146128275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612890919061484a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612901919061484a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612988919061484a565b90506001600160a01b038116612b2657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fa919061484a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6b919061484a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af4919061484a565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612b4f565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610fdb903090600019612e1e565b6000546001600160a01b03163314612bd65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612c535760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a54610100900460ff1615612cab5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610aa6565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612ce5573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612d365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610aa6565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610aff565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906148d6565b6001600160a01b038316612e745760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610aa6565b6001600160a01b038216612eca5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610aa6565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612fa95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610aa6565b6001600160a01b0383166130255760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610aa6565b6000821161309b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610aa6565b6001600160a01b0384166000908152600260205260408120548190819060ff16156130c957600192506130f7565b6001600160a01b03861660009081526002602052604090205460ff16156130f357600191506130f7565b5060015b61310187876134a2565b156133c957601a5460ff166131585760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610aa6565b8215613222576001600160a01b03871660009081526006602052604090205460ff161580156131a057506001600160a01b03861660009081526006602052604090205460ff16155b1561321d5760175485111561321d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610aa6565b6132e7565b81156132e7576001600160a01b03871660009081526006602052604090205460ff1615801561326a57506001600160a01b03861660009081526006602052604090205460ff16155b156132e7576018548511156132e75760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610aa6565b600f546001600160a01b03878116911614801590613303575081155b156133c9576001600160a01b03861660009081526006602052604090205460ff166133c9576019548561334b886001600160a01b031660009081526001602052604090205490565b61335591906148f3565b11156133c95760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610aa6565b6001600160a01b03871660009081526005602052604090205460019060ff168061340b57506001600160a01b03871660009081526005602052604090205460ff165b15613414575060005b82156134875760125460ff161580156134345750601254610100900460ff165b15613487574260135460145461344a91906148f3565b10156134875730600090815260016020526040902054601554811061348557601654811061347757506016545b61348081613577565b426014555b505b61349688888884888888613967565b98975050505050505050565b600080546001600160a01b038481169116148015906134cf57506000546001600160a01b03838116911614155b80156134e657506000546001600160a01b03163214155b801561350b57506001600160a01b03821660009081526007602052604090205460ff16155b801561353057506001600160a01b03831660009081526007602052604090205460ff16155b801561354757506001600160a01b03821661dead14155b801561355b57506001600160a01b03821615155b801561357057506001600160a01b0383163014155b9392505050565b6012805460ff1916600117905560408051606081018252600e5461ffff80821683526201000082048116602084015264010000000090910416918101829052906135c1575061395a565b306000908152600460209081526040808320600f546001600160a01b031684529091529020546000191461361a57306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff168561363b91906146dc565b613645919061468a565b61364f919061468a565b9050600061365d82856146c5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613697576136976146fb565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372d919061484a565b81600181518110613740576137406146fb565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061379f90859060009086903090429060040161490b565b600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b50479250600091508490506137e286846146dc565b6137ec919061468a565b905084156138dd57600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561387b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138a09190614882565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6138e781836146c5565b91508560000151866040018181516138ff9190614947565b61ffff90811690915260208801518492501615613952576011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613950573d6000803e3d6000fd5b505b505050505050505b506012805460ff19169055565b601a54600090610100900460ff16613a13576139838888613ba7565b601a54610100900460ff161580156139a057506139a088886134a2565b15613a135760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610aa6565b613a1d88886134a2565b15613ad057601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ab9575060408051601f3d908101601f19168201909252613ab6918101906148d6565b60015b613ac257600080fd5b905080613ace57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290613af89084906146c5565b909155506000905085613b0b5786613b17565b613b178986868a613d05565b6001600160a01b038916600090815260016020526040812080549293508392909190613b449084906148f3565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b9091815260200190565b60405180910390a350600198975050505050505050565b601a54610100900460ff1615613c255760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610aa6565b613c2f82826134a2565b158015613c4957506010546001600160a01b038281169116145b15612050576001600160a01b038083166000908152600760205260409020805460ff19166001179055601a805461ff001916610100179081905562010000900416613cbe57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6012805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415613d1b5750600d5461ffff16613d45565b8315613d345750600d5462010000900461ffff16613d45565b50600d54640100000000900461ffff165b6000612710613d5483866146dc565b613d5e919061468a565b30600090815260016020526040812080549293508392909190613d829084906148f3565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613dd181856146c5565b979650505050505050565b828054613de890614514565b90600052602060002090601f016020900481019282613e0a5760008555613e50565b82601f10613e2357805160ff1916838001178555613e50565b82800160010185558215613e50579182015b82811115613e50578251825591602001919060010190613e35565b50613e5c929150613e60565b5090565b5b80821115613e5c5760008155600101613e61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ecd57613ecd613e75565b604052919050565b600067ffffffffffffffff821115613eef57613eef613e75565b5060051b60200190565b6001600160a01b0381168114612ce557600080fd5b600082601f830112613f1f57600080fd5b81356020613f34613f2f83613ed5565b613ea4565b82815260059290921b84018101918181019086841115613f5357600080fd5b8286015b84811015613f77578035613f6a81613ef9565b8352918301918301613f57565b509695505050505050565b8015158114612ce557600080fd5b60008060408385031215613fa357600080fd5b823567ffffffffffffffff811115613fba57600080fd5b613fc685828601613f0e565b9250506020830135613fd781613f82565b809150509250929050565b60005b83811015613ffd578181015183820152602001613fe5565b838111156127d35750506000910152565b602081526000825180602084015261402d816040850160208701613fe2565b601f01601f19169190910160400192915050565b60006020828403121561405357600080fd5b5035919050565b6000806040838503121561406d57600080fd5b823561407881613ef9565b946020939093013593505050565b60008060006060848603121561409b57600080fd5b83356140a681613ef9565b925060208401356140b681613ef9565b929592945050506040919091013590565b600080604083850312156140da57600080fd5b50508035926020909101359150565b600082601f8301126140fa57600080fd5b8135602061410a613f2f83613ed5565b82815260059290921b8401810191818101908684111561412957600080fd5b8286015b84811015613f77578035835291830191830161412d565b6000806040838503121561415757600080fd5b823567ffffffffffffffff8082111561416f57600080fd5b61417b86838701613f0e565b9350602085013591508082111561419157600080fd5b5061419e858286016140e9565b9150509250929050565b600080600080608085870312156141be57600080fd5b84356141c981613f82565b935060208501356141d981613f82565b925060408501356141e981613f82565b915060608501356141f981613f82565b939692955090935050565b803561ffff8116811461421657600080fd5b919050565b60008060006060848603121561423057600080fd5b61423984614204565b925061424760208501614204565b915061425560408501614204565b90509250925092565b60006020828403121561427057600080fd5b813561357081613ef9565b600080600080600060a0868803121561429357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156142c957600080fd5b82356142d481613ef9565b91506020830135613fd781613f82565b600080600080608085870312156142fa57600080fd5b843567ffffffffffffffff8082111561431257600080fd5b61431e88838901613f0e565b9550602087013591508082111561433457600080fd5b614340888389016140e9565b9450604087013591508082111561435657600080fd5b50614363878288016140e9565b92505060608501356141f981613ef9565b6000806000806080858703121561438a57600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156143b957600080fd5b6143c283614204565b91506143d060208401614204565b90509250929050565b6000602082840312156143eb57600080fd5b813561357081613f82565b6000806040838503121561440957600080fd5b823561441481613ef9565b91506020830135613fd781613ef9565b60008060006060848603121561443957600080fd5b833567ffffffffffffffff8082111561445157600080fd5b61445d87838801613f0e565b9450602086013591508082111561447357600080fd5b61447f878388016140e9565b9350604086013591508082111561449557600080fd5b506144a2868287016140e9565b9150509250925092565b600081518084526020808501945080840160005b838110156144e55781516001600160a01b0316875295820195908201906001016144c0565b509495945050505050565b60408152600061450360408301856144ac565b905082151560208301529392505050565b600181811c9082168061452857607f821691505b60208210811415614562577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156145d25781600019048211156145b8576145b8614568565b808516156145c557918102915b93841c939080029061459c565b509250929050565b6000826145e957506001610cf8565b816145f657506000610cf8565b816001811461460c576002811461461657614632565b6001915050610cf8565b60ff84111561462757614627614568565b50506001821b610cf8565b5060208310610133831016604e8410600b8410161715614655575081810a610cf8565b61465f8383614597565b806000190482111561467357614673614568565b029392505050565b600061357060ff8416836145da565b6000826146c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156146d7576146d7614568565b500390565b60008160001904831182151516156146f6576146f6614568565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141561474157614741614568565b60010192915050565b600082601f83011261475b57600080fd5b815167ffffffffffffffff81111561477557614775613e75565b6147886020601f19601f84011601613ea4565b81815284602083860101111561479d57600080fd5b610dad826020830160208701613fe2565b600080600080600060a086880312156147c657600080fd5b855167ffffffffffffffff808211156147de57600080fd5b6147ea89838a0161474a565b9650602088015191508082111561480057600080fd5b5061480d8882890161474a565b94505060408601519250606086015160ff8116811461482b57600080fd5b608087015190925061483c81613ef9565b809150509295509295909350565b60006020828403121561485c57600080fd5b815161357081613ef9565b600060001982141561487b5761487b614568565b5060010190565b60008060006060848603121561489757600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8083168185168083038211156148cd576148cd614568565b01949350505050565b6000602082840312156148e857600080fd5b815161357081613f82565b6000821982111561490657614906614568565b500190565b85815284602082015260a06040820152600061492a60a08301866144ac565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff8381169083168181101561496257614962614568565b03939250505056fea264697066735822122009b3cf612bbb8dfa75af10a570803b4abdb096ae398d5f28798b29d8c053ea3164736f6c634300080b0033

Deployed Bytecode Sourcemap

6308:22047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7720:73;;;;;;;;;;;;7751:42;7720:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;7720:73:0;;;;;;;;8159:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8159:28:0;245:177:1;16809:172:0;;;;;;;;;;-1:-1:-1;16809:172:0;;;;;:::i;:::-;;:::i;:::-;;7212:116;;;;;;;;;;-1:-1:-1;7212: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;7212:116:0;2649:365:1;14011:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7659:26::-;;;;;;;;;;-1:-1:-1;7659:26:0;;;;-1:-1:-1;;;;;7659:26:0;;;17441:150;;;;;;;;;;-1:-1:-1;17441:150:0;;;;;:::i;:::-;;:::i;14621:159::-;;;;;;;;;;-1:-1:-1;14621:159:0;;;;;:::i;:::-;;:::i;:::-;;;4647:14:1;;4640:22;4622:41;;4610:2;4595:18;14621:159:0;4482:187:1;19782:112:0;;;;;;;;;;;;;:::i;13714:115::-;;;;;;;;;;;;;:::i;15286:306::-;;;;;;;;;;-1:-1:-1;15286:306:0;;;;;:::i;:::-;;:::i;18781:267::-;;;;;;;;;;-1:-1:-1;18781:267:0;;;;;:::i;:::-;;:::i;25958:373::-;;;;;;;;;;-1:-1:-1;25958:373:0;;;;;:::i;:::-;;:::i;17238:195::-;;;;;;;;;;-1:-1:-1;17238:195:0;;;;;:::i;:::-;;:::i;7456:42::-;;;;;;;;;;;;7494:4;7456:42;;8194:25;;;;;;;;;;;;;;;;13835:80;;;;;;;;;;-1:-1:-1;13903:9:0;;13835:80;;13903:9;;;;7449:36:1;;7437:2;7422:18;13835:80:0;7307:184:1;17599:397:0;;;;;;;;;;-1:-1:-1;17599:397:0;;;;;:::i;:::-;;:::i;17122:108::-;;;;;;;;;;-1:-1:-1;17122:108:0;;;;;:::i;:::-;;:::i;19902:338::-;;;;;;;;;;-1:-1:-1;19902:338:0;;;;;:::i;:::-;;:::i;19056:140::-;;;;;;;;;;-1:-1:-1;19056:140:0;;;;;:::i;:::-;;:::i;9917:2068::-;;;;;;;;;;-1:-1:-1;9917:2068:0;;;;;:::i;:::-;;:::i;7692:21::-;;;;;;;;;;-1:-1:-1;7692:21:0;;;;-1:-1:-1;;;;;7692:21:0;;;8348:34;;;;;;;;;;-1:-1:-1;8348:34:0;;;;;;;;12574:586;;;;;;;;;;-1:-1:-1;12574:586:0;;;;;:::i;:::-;;:::i;19342:125::-;;;;;;;;;;-1:-1:-1;19342:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19431:28:0;19407:4;19431:28;;;:19;:28;;;;;;;;;19342:125;8389:36;;;;;;;;;;-1:-1:-1;8389:36:0;;;;;;;;;;;19475:134;;;;;;;;;;-1:-1:-1;19475:134:0;;;;;:::i;:::-;;:::i;19204:130::-;;;;;;;;;;-1:-1:-1;19204:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;19296:30:0;19272:4;19296:30;;;:21;:30;;;;;;;;;19204:130;14323:117;;;;;;;;;;-1:-1:-1;14323:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;14416:16:0;14389:7;14416:16;;;:7;:16;;;;;;;14323:117;13168:193;;;;;;;;;;;;;:::i;16148:500::-;;;;;;;;;;-1:-1:-1;16148:500:0;;;;;:::i;:::-;;:::i;14097:79::-;;;;;;;;;;-1:-1:-1;14149:7:0;14167:6;-1:-1:-1;;;;;14167:6:0;14097:79;;15105:173;;;;;;;;;;;;;:::i;25331:429::-;;;;;;;;;;;;;:::i;13921:84::-;;;;;;;;;;;;;:::i;14448:165::-;;;;;;;;;;-1:-1:-1;14448:165:0;;;;;:::i;:::-;;:::i;19617:157::-;;;;;;;;;;;;;:::i;:::-;;;;10227:25:1;;;10283:2;10268:18;;10261:34;;;;10200:18;19617:157:0;10053:248:1;18226:547:0;;;;;;;;;;-1:-1:-1;18226:547:0;;;;;:::i;:::-;;:::i;18008:210::-;;;;;;;;;;-1:-1:-1;18008:210:0;;;;;:::i;:::-;;:::i;20383:164::-;;;;;;;;;;-1:-1:-1;20383:164:0;;;;;:::i;:::-;;:::i;7337:110::-;;;;;;;;;;-1:-1:-1;7337:110:0;;;;;;;;;;;;;;;;;;;;;;14182:133;;;;;;;;;;-1:-1:-1;14182:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14284:19:0;;;14266:7;14284:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14182:133;8077:44;;;;;;;;;;;;;;;;26339:482;;;;;;;;;;-1:-1:-1;26339:482:0;;;;;:::i;:::-;;:::i;15600:540::-;;;;;;;;;;-1:-1:-1;15600:540:0;;;;;:::i;:::-;;:::i;20248:127::-;;;;;;;;;;-1:-1:-1;20248:127:0;;;;;:::i;:::-;;:::i;25768:182::-;;;;;;;;;;;;;:::i;16656:145::-;;;;;;;;;;-1:-1:-1;16656:145:0;;;;;:::i;:::-;;:::i;7872:128::-;;;;;;;;;;-1:-1:-1;7872:128:0;;;;-1:-1:-1;;;;;7872:128:0;;;8031:39;;;;;;;;;;-1:-1:-1;8031:39:0;;;;;;;;;;;16989:125;;;;;;;;;;-1:-1:-1;16989:125:0;;;;;:::i;:::-;;:::i;16809:172::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;;;;;;;;;16917:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16917:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16955:8;;16965:7;;16917:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16809:172:::0;;:::o;14011:80::-;14059:13;14083:5;14076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14011:80;:::o;17441:150::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;17525:3:::1;17518;:10;;17510:31;;;::::0;-1:-1:-1;;;17510:31:0;;14755:2:1;17510:31:0::1;::::0;::::1;14737:21:1::0;14794:1;14774:18;;;14767:29;14832:10;14812:18;;;14805:38;14860:18;;17510:31:0::1;14553:331:1::0;17510:31:0::1;17552:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;17552:9:0;;;::::1;-1:-1:-1::0;;;;;17552:9:0::1;::::0;:26:::1;::::0;364:18:1;;17552:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17441:150:::0;:::o;14621:159::-;14696:4;14713:37;14722:10;14734:7;14743:6;14713:8;:37::i;:::-;-1:-1:-1;14768:4:0;14621:159;;;;;:::o;19782:112::-;19876:9;;19827:7;;19872:13;;19876:9;;19872:2;:13;:::i;:::-;19854:14;;:32;;;;:::i;:::-;19847:39;;19782:112;:::o;13714:115::-;13769:7;13784;;13795:1;13784:12;13780:31;;;13800:8;;;13780:31;-1:-1:-1;13819:7:0;;;13714:115::o;15286:306::-;-1:-1:-1;;;;;15407:19:0;;15386:4;15407:19;;;:11;:19;;;;;;;;15427:10;15407:31;;;;;;;;-1:-1:-1;;15407:52:0;15403:126;;-1:-1:-1;;;;;15476:19:0;;;;;;:11;:19;;;;;;;;15496:10;15476:31;;;;;;;:41;;15511:6;;15476:19;:41;;15511:6;;15476:41;:::i;:::-;;;;-1:-1:-1;;15403:126:0;15548:36;15558:6;15566:9;15577:6;15548:9;:36::i;:::-;15541:43;15286:306;-1:-1:-1;;;;15286:306:0:o;18781:267::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;18923:4:::1;18913:7;;:14;;;;:::i;:::-;18901:7;18890;18880;;:17;;;;:::i;:::-;18879:29;;;;:::i;:::-;:49;;18871:112;;;::::0;-1:-1:-1;;;18871:112:0;;17425:2:1;18871:112:0::1;::::0;::::1;17407:21:1::0;17464:2;17444:18;;;17437:30;17503:34;17483:18;;;17476:62;17574:20;17554:18;;;17547:48;17612:19;;18871:112:0::1;17223:414:1::0;18871:112:0::1;19033:7;19022;19012;;:17;;;;:::i;:::-;19011:29;;;;:::i;:::-;18994:14;:46:::0;-1:-1:-1;;18781:267:0:o;25958:373::-;26083:7;:14;26064:8;:15;:33;26056:67;;;;-1:-1:-1;;;26056:67:0;;17844:2:1;26056:67:0;;;17826:21:1;17883:2;17863:18;;;17856:30;17922:23;17902:18;;;17895:51;17963:18;;26056:67:0;17642:345:1;26056:67:0;26139:7;26134:190;26156:8;:15;26152:1;:19;;;26134:190;;;26226:7;26234:1;26226:10;;;;;;;;;;:::i;:::-;;;;;;;26201:21;26211:10;-1:-1:-1;;;;;14416:16:0;14389:7;14416:16;;;:7;:16;;;;;;;14323:117;26201:21;:35;;26193:44;;;;;;26252:60;26262:10;26274:8;26283:1;26274:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;26302:9;;26298:13;;26302:9;;26298:2;:13;:::i;:::-;26287:7;26295:1;26287:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26252:9;:60::i;:::-;-1:-1:-1;26173:3:0;;;;:::i;:::-;;;;26134:190;;;;25958:373;;:::o;17238:195::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;17360:9:::1;::::0;:65:::1;::::0;;;;18593:14:1;;18586:22;17360:65:0::1;::::0;::::1;18568:41:1::0;18652:14;;18645:22;18625:18;;;18618:50;18711:14;;18704:22;18684:18;;;18677:50;18770:14;;18763:22;18743:18;;;18736:50;17360:9:0;;;::::1;-1:-1:-1::0;;;;;17360:9:0::1;::::0;:24:::1;::::0;18540:19:1;;17360:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17238:195:::0;;;;:::o;17599:397::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;7494:4:::1;17706:6;:21;;;;:65;;;;;7544:4;17748:7;:23;;;;17706:65;:117;;;;;7598:4;17792:11;:31;;;;17706:117;17698:170;;;::::0;-1:-1:-1;;;17698:170:0;;18999:2:1;17698:170:0::1;::::0;::::1;18981:21:1::0;19038:2;19018:18;;;19011:30;19077:25;19057:18;;;19050:53;19120:18;;17698:170:0::1;18797:347:1::0;17698:170:0::1;17879:9;:25:::0;;::::1;::::0;;::::1;17915:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;17953:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17599:397::o;17122:108::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;17191:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17191:31:0::1;::::0;::::1;160:74:1::0;17191:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17191:31:0::1;14:226:1::0;19902:338:0;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;20116:16:::1;20096;20086:7;;:26;;;;:::i;:::-;20085:47;;;;:::i;:::-;20069:13;:63:::0;20157:7:::1;::::0;20184:13;;20157:23:::1;::::0;20167:13;;20157:23:::1;:::i;:::-;20156:41;;;;:::i;:::-;20143:10;:54:::0;20208:17:::1;:24:::0;-1:-1:-1;;;;19902:338:0:o;19056:140::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;-1:-1:-1;;;;;19148:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19148:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19056:140::o;9917:2068::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;10084:19:::1;::::0;;;::::1;;;10083:20;10075:34;;;::::0;-1:-1:-1;;;10075:34:0;;19351:2:1;10075:34:0::1;::::0;::::1;19333:21:1::0;19390:1;19370:18;;;19363:29;19428:3;19408:18;;;19401:31;19449:18;;10075:34:0::1;19149:324:1::0;10075:34:0::1;10147:8;:15;10128:8;:15;:34;:72;;;;;10185:8;:15;10166:8;:15;:34;10128:72;10120:86;;;::::0;-1:-1:-1;;;10120:86:0;;19680:2:1;10120:86:0::1;::::0;::::1;19662:21:1::0;19719:1;19699:18;;;19692:29;19757:3;19737:18;;;19730:31;19778:18;;10120:86:0::1;19478:324:1::0;10120:86:0::1;10217:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;10217:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;10265::::1;::::0;;;;10292:4:::1;10265:33;::::0;::::1;160:74:1::0;10265:9:0;::::1;;::::0;:18:::1;::::0;133::1;;10265:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10261:49:::0;10320:16:::1;10351:9;;;;;;;;;-1:-1:-1::0;;;;;10351:9:0::1;-1:-1:-1::0;;;;;10351:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;10351:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;10347:460;;10784:11;::::0;-1:-1:-1;;;10784:11:0;;21484:2:1;10784:11:0::1;::::0;::::1;21466:21:1::0;21523:1;21503:18;;;21496:29;21561:3;21541:18;;;21534:31;21582:18;;10784:11:0::1;21282:324:1::0;10347:460:0::1;10520:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10551:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10586:14:0::1;:35:::0;;;10636:9:::1;:24:::0;;-1:-1:-1;;10636:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;10702:13:::1;::::0;:2:::1;:13;:::i;:::-;10685:14;;:30;;;;:::i;:::-;10675:7;:40:::0;10837:9:::1;::::0;:19:::1;::::0;;;;;;;10741:9;;-1:-1:-1;;;;;;10837:9:0;;::::1;::::0;-1:-1:-1;10837:17:0::1;::::0;-1:-1:-1;10837:19:0::1;::::0;;::::1;::::0;-1:-1:-1;10837:19:0::1;::::0;-1:-1:-1;10837:19:0;;;;;;:9;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10826:42:0::1;;10869:9;;;;;;;;;-1:-1:-1::0;;;;;10869:9:0::1;-1:-1:-1::0;;;;;10869:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10826:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22120:15:1;;;10826:75:0::1;::::0;::::1;22102:34:1::0;10895:4:0::1;22152:18:1::0;;;22145:43;22014:18;;10826:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10817:6;:84:::0;;-1:-1:-1;;10817:84:0::1;-1:-1:-1::0;;;;;10817:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;10912:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;10912:22:0::1;-1:-1:-1::0;10912:22:0::1;::::0;;10962:7:::1;::::0;10977:5:::1;::::0;10962:11:::1;::::0;10972:1:::1;10962:11;:::i;:::-;10961:21;;;;:::i;:::-;10945:13;:37:::0;11007:7:::1;::::0;11023:5:::1;::::0;11007:12:::1;::::0;11017:2:::1;11007:12;:::i;:::-;11006:22;;;;:::i;:::-;10993:10;:35:::0;11058:7:::1;::::0;11073:4:::1;::::0;11058:11:::1;::::0;11068:1:::1;11058:11;:::i;:::-;11057:20;;;;:::i;:::-;11039:15;:38:::0;11108:7:::1;::::0;11123:4:::1;::::0;11108:11:::1;::::0;11118:1:::1;11108:11;:::i;:::-;11107:20;;;;:::i;:::-;11088:16;:39:::0;11156:7:::1;::::0;11171:3:::1;::::0;11156:11:::1;::::0;11166:1:::1;11156:11;:::i;:::-;11155:19;;;;:::i;:::-;11138:14;:36:::0;11185:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;11245:7:::1;::::0;11185:26;11235:6;;-1:-1:-1;;;;;11235:6:0;;::::1;11227:15:::0;;11207:4:::1;11227:15;::::0;;;;;:25;;;11289:6;;11268:37;;11289:6;::::1;::::0;11268:37:::1;::::0;::::1;::::0;391:25:1;;379:2;364:18;;245:177;11268:37:0::1;;;;;;;;11350:9;::::0;11318:62:::1;::::0;11335:4:::1;::::0;-1:-1:-1;;;;;11350:9:0::1;-1:-1:-1::0;;11318:8:0::1;:62::i;:::-;11395:9;11391:178;11414:8;:15;11410:1;:19;11391:178;;;11450:14;11493:8;11502:1;11493:11;;;;;;;;:::i;:::-;;;;;;;11478:8;11487:1;11478:11;;;;;;;;:::i;:::-;;;;;;;11468:7;;:21;;;;:::i;:::-;11467:37;;;;:::i;:::-;11450:54;;11519:38;11529:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;11529:6:0::1;11537:8;11546:1;11537:11;;;;;;;;:::i;:::-;;;;;;;11550:6;11519:9;:38::i;:::-;;11435:134;11431:3;;;;;:::i;:::-;;;;11391:178;;;-1:-1:-1::0;11591:6:0::1;::::0;;-1:-1:-1;;;;;11591:6:0::1;14416:16:::0;;;:7;:16;;;;;;;11581:51:::1;::::0;11591:6;11607:4:::1;::::0;26252:9;:60::i;11581:51::-:1;-1:-1:-1::0;11645:9:0::1;::::0;-1:-1:-1;;;;;11645:9:0::1;:25;11678:21;11723:4;11743:24;11723:4:::0;-1:-1:-1;;;;;14416:16:0;14389:7;14416:16;;;:7;:16;;;;;;;14323:117;11743:24:::1;11645:272;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22781:15:1;;;11645:272:0::1;::::0;::::1;22763:34:1::0;22813:18;;;22806:34;;;;11782:1:0::1;22856:18:1::0;;;22849:34;;;22899:18;;;22892:34;22963:15;;;22942:19;;;22935:44;11891:15:0::1;22995:19:1::0;;;22988:35;22674:19;;11645:272:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11928:23;11942:8;11928:13;:23::i;:::-;11962:15;:13;:15::i;12574:586::-:0;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;-1:-1:-1;;;;;12651:22:0;::::1;12643:96;;;::::0;-1:-1:-1;;;12643:96:0;;23547:2:1;12643:96:0::1;::::0;::::1;23529:21:1::0;23586:2;23566:18;;;23559:30;23625:34;23605:18;;;23598:62;23696:31;23676:18;;;23669:59;23745:19;;12643:96:0::1;23345:425:1::0;12643:96:0::1;-1:-1:-1::0;;;;;12758:16:0;::::1;7751:42;12758:16;;12750:90;;;::::0;-1:-1:-1;;;12750:90:0;;23547:2:1;12750:90:0::1;::::0;::::1;23529:21:1::0;23586:2;23566:18;;;23559:30;23625:34;23605:18;;;23598:62;23696:31;23676:18;;;23669:59;23745:19;;12750:90:0::1;23345:425:1::0;12750:90:0::1;12871:6;::::0;;12851:34:::1;::::0;-1:-1:-1;;;;;12871:6:0;;::::1;::::0;12851:19:::1;:34::i;:::-;12896:35;12916:8;12926:4;12896:19;:35::i;:::-;12975:1;12965:6:::0;;-1:-1:-1;;;;;12965:6:0::1;14416:16:::0;;:7;:16;;;;;;12955:21;12952:99:::1;;13003:6;::::0;;-1:-1:-1;;;;;13003:6:0::1;14416:16:::0;;;:7;:16;;;;;;;12993:46:::1;::::0;13003:6;13011:8;;26252:9;:60::i;12993:46::-:1;;12952:99;13071:6;:17:::0;;-1:-1:-1;;13071:17:0::1;-1:-1:-1::0;;;;;13071:17:0;::::1;::::0;;::::1;::::0;;13104:38:::1;::::0;13071:17;;;;13104:38:::1;::::0;13071:6;13104:38:::1;12574:586:::0;:::o;19475:134::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;-1:-1:-1;;;;;19563:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19563:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19475:134::o;13168:193::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;13253:6:::1;::::0;;13233:34:::1;::::0;-1:-1:-1;;;;;13253:6:0;;::::1;::::0;13233:19:::1;:34::i;:::-;13295:1;13278:19:::0;;-1:-1:-1;;13278:19:0::1;::::0;;13313:40:::1;::::0;13295:1;;13313:40:::1;::::0;13295:1;;13313:40:::1;13168:193::o:0;16148:500::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;16229:16;16225:416:::1;;-1:-1:-1::0;;;;;16262:13:0;;::::1;16278:5;16262:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16262:21:0::1;::::0;;16298:9:::1;::::0;:32;;;;;::::1;::::0;::::1;23943:74:1::0;;;;24033:18;;;24026:50;;;;16298:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23916:18:1;;16298:32:0::1;23775:307:1::0;16225:416:0::1;16367:17;::::0;:22;16363:136:::1;;16456:6;16436:17;;16418:15;:35;;;;:::i;:::-;:44;16410:73;;;::::0;-1:-1:-1;;;16410:73:0;;24289:2:1;16410:73:0::1;::::0;::::1;24271:21:1::0;24328:2;24308:18;;;24301:30;24367:18;24347;;;24340:46;24403:18;;16410:73:0::1;24087:340:1::0;16410:73:0::1;-1:-1:-1::0;;;;;16513:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16513:20:0::1;16529:4;16513:20:::0;;::::1;::::0;;;16568:15:::1;16548:17;:35:::0;16598:9:::1;::::0;:31;;;;;::::1;::::0;::::1;23943:74:1::0;;;;24033:18;;;24026:50;16598:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23916:18:1;;16598:31:0::1;23775:307:1::0;16225:416:0::1;16148:500:::0;;:::o;15105:173::-;15169:4;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;15218:9:::1;::::0;15186:62:::1;::::0;15203:4:::1;::::0;-1:-1:-1;;;;;15218:9:0::1;-1:-1:-1::0;;15186:8:0::1;:62::i;:::-;-1:-1:-1::0;15266:4:0::1;15105:173:::0;:::o;25331:429::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;25393:14:::1;::::0;::::1;;25392:15;25384:52;;;::::0;-1:-1:-1;;;25384:52:0;;24634:2:1;25384:52:0::1;::::0;::::1;24616:21:1::0;24673:2;24653:18;;;24646:30;24712:26;24692:18;;;24685:54;24756:18;;25384:52:0::1;24432:348:1::0;25384:52:0::1;25455:16;::::0;::::1;::::0;::::1;;;25447:53;;;::::0;-1:-1:-1;;;25447:53:0;;24987:2:1;25447:53:0::1;::::0;::::1;24969:21:1::0;25026:2;25006:18;;;24999:30;25065:26;25045:18;;;25038:54;25109:18;;25447:53:0::1;24785:348:1::0;25447:53:0::1;25522:9;::::0;;;::::1;-1:-1:-1::0;;;;;25522:9:0::1;25511:99;;25562:9;:36:::0;;;::::1;25592:4;25562:36:::0;::::1;;::::0;;25511:99:::1;25624:9;::::0;25644:6:::1;::::0;25699:9:::1;::::0;25624:85:::1;::::0;;;;-1:-1:-1;;;;;25644:6:0;;::::1;25624:85;::::0;::::1;25361:74:1::0;25483:10;25659:12:0::1;25471:23:1::0;25451:18;;;25444:51;25543:18;25681:15:0::1;25531:31:1::0;25511:18;;;25504:59;25699:9:0::1;::::0;;::::1;25579:18:1::0;;;25572:45;25624:9:0;;;::::1;;::::0;:19:::1;::::0;25333::1;;25624:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25620:101:::0;25731:14:::1;:21:::0;;-1:-1:-1;;25731:21:0::1;25748:4;25731:21;::::0;;25331:429::o;13921:84::-;13971:13;13995:7;13988:14;;;;;:::i;14448:165::-;14526:4;14543:40;14553:10;14565:9;14576:6;14543:9;:40::i;:::-;-1:-1:-1;14601:4:0;;14448:165;-1:-1:-1;;;14448:165:0:o;19617:157::-;19719:9;;19659:7;;;;19715:13;;19719:9;;19715:2;:13;:::i;:::-;19696:15;;:33;;;;:::i;:::-;19755:9;;19751:13;;19755:9;;19751:2;:13;:::i;:::-;19731:16;;:34;;;;:::i;:::-;19688:78;;;;19617:157;;:::o;18226:547::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;18427:4:::1;18412:7;;18422:1;18412:11;;;;:::i;:::-;18411:20;;;;:::i;:::-;18396:10;18382;18372:7;;:20;;;;:::i;:::-;18371:35;;;;:::i;:::-;:61;;18363:129;;;::::0;-1:-1:-1;;;18363:129:0;;25830:2:1;18363:129:0::1;::::0;::::1;25812:21:1::0;25869:2;25849:18;;;25842:30;25908:34;25888:18;;;25881:62;25979:25;25959:18;;;25952:53;26022:19;;18363:129:0::1;25628:419:1::0;18363:129:0::1;18569:4;18554:7;;18564:1;18554:11;;;;:::i;:::-;18553:20;;;;:::i;:::-;18537:11;18522;18512:7;;:21;;;;:::i;:::-;18511:37;;;;:::i;:::-;:63;;18503:131;;;::::0;-1:-1:-1;;;18503:131:0;;25830:2:1;18503:131:0::1;::::0;::::1;25812:21:1::0;25869:2;25849:18;;;25842:30;25908:34;25888:18;;;25881:62;25979:25;25959:18;;;25952:53;26022:19;;18503:131:0::1;25628:419:1::0;18503:131:0::1;18688:10;18674;18664:7;;:20;;;;:::i;:::-;18663:35;;;;:::i;:::-;18645:15;:53:::0;18729:7:::1;::::0;18754:11;;18729:21:::1;::::0;18739:11;;18729:21:::1;:::i;:::-;18728:37;;;;:::i;:::-;18709:16;:56:::0;-1:-1:-1;;;;18226:547:0:o;18008:210::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;18093:7:::1;:29:::0;;::::1;18133::::0;;::::1;::::0;::::1;::::0;;;;18093;;::::1;18133::::0;::::1;::::0;;18189:21:::1;18153:9:::0;18113;18189:21:::1;:::i;:::-;18173:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;18008:210:0:o;20383:164::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;20459:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;20459:29:0;;::::1;;::::0;;20504:35:::1;::::0;::::1;::::0;::::1;::::0;20481:7;4647:14:1;4640:22;4622:41;;4610:2;4595:18;;4482:187;20504:35:0::1;;;;;;;;20383:164:::0;:::o;26339:482::-;26494:8;:15;26475:8;:15;:34;:72;;;;;26532:8;:15;26513:8;:15;:34;26475:72;26467:106;;;;-1:-1:-1;;;26467:106:0;;17844:2:1;26467:106:0;;;17826:21:1;17883:2;17863:18;;;17856:30;17922:23;17902:18;;;17895:51;17963:18;;26467:106:0;17642:345:1;26467:106:0;26589:7;26584:230;26606:8;:15;26602:1;:19;;;26584:230;;;26702:8;26711:1;26702:11;;;;;;;;;;:::i;:::-;;;;;;;26687:8;26696:1;26687:11;;;;;;;;;;:::i;:::-;;;;;;;26677:7;;:21;;;;:::i;:::-;26676:37;;;;:::i;:::-;26661:10;14389:7;14416:16;;;:7;:16;;;;;;26651:62;;26643:71;;;;;;26729:73;26739:10;26751:8;26760:1;26751:11;;;;;;;;;;:::i;:::-;;;;;;;26790:8;26799:1;26790:11;;;;;;;;;;:::i;:::-;;;;;;;26775:8;26784:1;26775:11;;;;;;;;;;:::i;:::-;;;;;;;26765:7;;:21;;;;:::i;:::-;26764:37;;;;:::i;26729:73::-;-1:-1:-1;26623:3:0;;;;:::i;:::-;;;;26584:230;;;;26339:482;;;:::o;15600:540::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;15669:20:::1;15702:9;15669:43;;15723:16;15753:10;-1:-1:-1::0;;;;;15753:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15742:40:0::1;;15791:4;15798:10;-1:-1:-1::0;;;;;15798:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15742:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22120:15:1;;;15742:74:0::1;::::0;::::1;22102:34:1::0;22172:15;;22152:18;;;22145:43;22014:18;;15742:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15723:93:::0;-1:-1:-1;;;;;;15831:22:0;::::1;15827:200;;15890:10;-1:-1:-1::0;;;;;15890:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15879:43:0::1;;15931:4;15938:10;-1:-1:-1::0;;;;;15938:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15879:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22120:15:1;;;15879:77:0::1;::::0;::::1;22102:34:1::0;22172:15;;22152:18;;;22145:43;22014:18;;15879:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15870:6;:86:::0;;-1:-1:-1;;15870:86:0::1;-1:-1:-1::0;;;;;15870:86:0;;;::::1;::::0;;;::::1;::::0;;15827:200:::1;;;15998:6;:17:::0;;-1:-1:-1;;15998:17:0::1;-1:-1:-1::0;;;;;15998:17:0;::::1;;::::0;;15827:200:::1;16037:9;:22:::0;;-1:-1:-1;;16037:22:0::1;-1:-1:-1::0;;;;;16037:22:0;::::1;::::0;;::::1;::::0;;;16070:62:::1;::::0;16087:4:::1;::::0;-1:-1:-1;;16070:8:0::1;:62::i;20248:127::-:0;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;20325:11:::1;:42:::0;;-1:-1:-1;;20325:42:0::1;-1:-1:-1::0;;;;;20325:42:0;;;::::1;::::0;;;::::1;::::0;;20248:127::o;25768:182::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;25835:16:::1;::::0;::::1;::::0;::::1;;;25834:17;25826:58;;;::::0;-1:-1:-1;;;25826:58:0;;26483:2:1;25826:58:0::1;::::0;::::1;26465:21:1::0;26522:2;26502:18;;;26495:30;26561;26541:18;;;26534:58;26609:18;;25826:58:0::1;26281:352:1::0;25826:58:0::1;25903:6;::::0;;25895:47:::1;::::0;-1:-1:-1;;;;;25903:6:0;;::::1;::::0;25920:21:::1;25895:47:::0;::::1;;;::::0;25920:21;;25895:47;25903:6;25895:47;25920:21;25903:6;25895:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25768:182::o:0;16656:145::-;8858:6;;-1:-1:-1;;;;;8858:6:0;8868:10;8858:20;8850:50;;;;-1:-1:-1;;;8850:50:0;;13131:2:1;8850:50:0;;;13113:21:1;13170:2;13150:18;;;13143:30;-1:-1:-1;;;13189:18:1;;;13182:47;13246:18;;8850:50:0;12929:341:1;8850:50:0;16746:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23961:55:1;;;16746:47:0::1;::::0;::::1;23943:74:1::0;24060:14;;24053:22;24033:18;;;24026:50;16746:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23916:18:1;;16746:47:0::1;23775:307:1::0;16989:125:0;17074:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17074:32:0;;;160:74:1;17050:4:0;;17074:9;;;;;:23;;133:18:1;;17074:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14788:309::-;-1:-1:-1;;;;;14882:20:0;;14874:52;;;;-1:-1:-1;;;14874:52:0;;27090:2:1;14874:52:0;;;27072:21:1;27129:2;27109:18;;;27102:30;27168:21;27148:18;;;27141:49;27207:18;;14874:52:0;26888:343:1;14874:52:0;-1:-1:-1;;;;;14945:21:0;;14937:53;;;;-1:-1:-1;;;14937:53:0;;27090:2:1;14937:53:0;;;27072:21:1;27129:2;27109:18;;;27102:30;27168:21;27148:18;;;27141:49;27207:18;;14937:53:0;26888:343:1;14937:53:0;-1:-1:-1;;;;;15003:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15056:33;;391:25:1;;;15056:33:0;;364:18:1;15056:33:0;;;;;;;14788:309;;;:::o;20920:2316::-;20999:4;-1:-1:-1;;;;;21024:18:0;;21016:68;;;;-1:-1:-1;;;21016:68:0;;27438:2:1;21016:68:0;;;27420:21:1;27477:2;27457:18;;;27450:30;27516:34;27496:18;;;27489:62;27587:7;27567:18;;;27560:35;27612:19;;21016:68:0;27236:401:1;21016:68:0;-1:-1:-1;;;;;21103:16:0;;21095:64;;;;-1:-1:-1;;;21095:64:0;;27844:2:1;21095:64:0;;;27826:21:1;27883:2;27863:18;;;27856:30;27922:34;27902:18;;;27895:62;27993:5;27973:18;;;27966:33;28016:19;;21095:64:0;27642:399:1;21095:64:0;21187:1;21178:6;:10;21170:64;;;;-1:-1:-1;;;21170:64:0;;28248:2:1;21170:64:0;;;28230:21:1;28287:2;28267:18;;;28260:30;28326:34;28306:18;;;28299:62;28397:11;28377:18;;;28370:39;28426:19;;21170:64:0;28046:405:1;21170:64:0;-1:-1:-1;;;;;21341:13:0;;21245:8;21341:13;;;:7;:13;;;;;;21245:8;;;;21341:13;;21337:170;;;21377:4;21371:10;;21337:170;;;-1:-1:-1;;;;;21403:11:0;;;;;;:7;:11;;;;;;;;21399:108;;;21438:4;21431:11;;21399:108;;;-1:-1:-1;21491:4:0;21399:108;21520:20;21531:4;21537:2;21520:10;:20::i;:::-;21517:872;;;21561:14;;;;21557:89;;21596:34;;-1:-1:-1;;;21596:34:0;;28658:2:1;21596:34:0;;;28640:21:1;28697:2;28677:18;;;28670:30;28736:26;28716:18;;;28709:54;28780:18;;21596:34:0;28456:348:1;21557:89:0;21663:3;21660:462;;;-1:-1:-1;;;;;21691:27:0;;;;;;:21;:27;;;;;;;;21690:28;:58;;;;-1:-1:-1;;;;;;21723:25:0;;;;;;:21;:25;;;;;;;;21722:26;21690:58;21686:185;;;21791:15;;21781:6;:25;;21773:78;;;;-1:-1:-1;;;21773:78:0;;29011:2:1;21773:78:0;;;28993:21:1;29050:2;29030:18;;;29023:30;29089:34;29069:18;;;29062:62;29160:10;29140:18;;;29133:38;29188:19;;21773:78:0;28809:404:1;21773:78:0;21660:462;;;21896:4;21892:230;;;-1:-1:-1;;;;;21926:27:0;;;;;;:21;:27;;;;;;;;21925:28;:58;;;;-1:-1:-1;;;;;;21958:25:0;;;;;;:21;:25;;;;;;;;21957:26;21925:58;21921:186;;;22026:16;;22016:6;:26;;22008:79;;;;-1:-1:-1;;;22008:79:0;;29011:2:1;22008:79:0;;;28993:21:1;29050:2;29030:18;;;29023:30;29089:34;29069:18;;;29062:62;29160:10;29140:18;;;29133:38;29188:19;;22008:79:0;28809:404:1;22008:79:0;22153:9;;-1:-1:-1;;;;;22139:24:0;;;22153:9;;22139:24;;;;:33;;;22168:4;22167:5;22139:33;22136:242;;;-1:-1:-1;;;;;22198:25:0;;;;;;:21;:25;;;;;;;;22193:170;;22282:14;;22272:6;22256:13;22266:2;-1:-1:-1;;;;;14416:16:0;14389:7;14416:16;;;:7;:16;;;;;;;14323:117;22256:13;:22;;;;:::i;:::-;:40;;22248:95;;;;-1:-1:-1;;;22248:95:0;;29553:2:1;22248:95:0;;;29535:21:1;29592:2;29572:18;;;29565:30;29631:34;29611:18;;;29604:62;29702:12;29682:18;;;29675:40;29732:19;;22248:95:0;29351:406:1;22248:95:0;-1:-1:-1;;;;;22434:25:0;;22401:12;22434:25;;;:19;:25;;;;;;22416:4;;22434:25;;;:52;;-1:-1:-1;;;;;;22463:23:0;;;;;;:19;:23;;;;;;;;22434:52;22431:98;;;-1:-1:-1;22512:5:0;22431:98;22545:4;22541:599;;;22571:6;;;;22570:7;:47;;;;-1:-1:-1;22598:19:0;;;;;;;22570:47;22566:557;;;22687:15;22667:17;;22656:8;;:28;;;;:::i;:::-;:46;22652:456;;;22776:4;22727:28;14416:16;;;:7;:16;;;;;;22833:13;;22809:37;;22805:284;;22902:10;;22878:20;:34;22875:77;;-1:-1:-1;22939:10:0;;22875:77;22978:34;22991:20;22978:12;:34::i;:::-;23050:15;23039:8;:26;22805:284;22704:404;22652:456;23158:70;23176:4;23182:2;23186:6;23194:7;23203:3;23208:4;23214:13;23158:17;:70::i;:::-;23151:77;20920:2316;-1:-1:-1;;;;;;;;20920:2316:0:o;20555:357::-;20623:4;20655:6;;-1:-1:-1;;;;;20647:14:0;;;20655:6;;20647:14;;;;:43;;-1:-1:-1;20684:6:0;;-1:-1:-1;;;;;20678:12:0;;;20684:6;;20678:12;;20647:43;:79;;;;-1:-1:-1;20720:6:0;;-1:-1:-1;;;;;20720:6:0;20707:9;:19;;20647:79;:118;;;;-1:-1:-1;;;;;;20744:21:0;;;;;;:17;:21;;;;;;;;20743:22;20647:118;:159;;;;-1:-1:-1;;;;;;20783:23:0;;;;;;:17;:23;;;;;;;;20782:24;20647:159;:186;;;;-1:-1:-1;;;;;;20823:10:0;;7751:42;20823:10;;20647:186;:219;;;;-1:-1:-1;;;;;;20850:16:0;;;;20647:219;:257;;;;-1:-1:-1;;;;;;20883:21:0;;20899:4;20883:21;;20647:257;20640:264;20555:357;-1:-1:-1;;;20555:357:0:o;23244:1563::-;8752:6;:13;;-1:-1:-1;;8752:13:0;8761:4;8752:13;;;23327:30:::1;::::0;;::::1;::::0;::::1;::::0;;23350:7:::1;23327:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;23368:56:::1;;23406:7;;;23368:56;23459:4;23439:26;::::0;;;:11:::1;:26;::::0;;;;;;;23474:9:::1;::::0;-1:-1:-1;;;;;23474:9:0::1;23439:46:::0;;;;;;;;-1:-1:-1;;23439:67:0::1;23436:165;;23543:4;23523:26;::::0;;;:11:::1;:26;::::0;;;;;;;23558:9:::1;::::0;-1:-1:-1;;;;;23558:9:0::1;23523:46:::0;;;;;;;-1:-1:-1;;23523:66:0;;23436:165:::1;23613:17;23694:1;23678:6;:12;;;23634:56;;23658:6;:16;;;23635:39;;:20;:39;;;;:::i;:::-;23634:56;;;;:::i;:::-;23633:62;;;;:::i;:::-;23613:82:::0;-1:-1:-1;23706:15:0::1;23724:32;23613:82:::0;23724:20;:32:::1;:::i;:::-;23801:16;::::0;;23815:1:::1;23801:16:::0;;;;;::::1;::::0;;23706:50;;-1:-1:-1;23777:21:0::1;::::0;23801:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23801:16:0::1;23777:40;;23846:4;23828;23833:1;23828:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23828:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23872:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23828:7;;23872:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23862:4;23867:1;23862:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23862:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23901:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23976:7;;23901:9:::1;::::0;24014:4;;24041::::1;::::0;24061:15:::1;::::0;23901:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24121:21:0::1;::::0;-1:-1:-1;24100:18:0::1;::::0;-1:-1:-1;24207:7:0;;-1:-1:-1;24181:22:0::1;24194:9:::0;24121:21;24181:22:::1;:::i;:::-;24180:34;;;;:::i;:::-;24153:61:::0;-1:-1:-1;24231:13:0;;24227:328:::1;;24261:9;::::0;:222:::1;::::0;;;;24338:4:::1;24261:222;::::0;::::1;22763:34:1::0;22813:18;;;22806:34;;;24261:9:0::1;22856:18:1::0;;;22849:34;;;22899:18;;;22892:34;7751:42:0::1;22942:19:1::0;;;22935:44;24453:15:0::1;22995:19:1::0;;;22988:35;-1:-1:-1;;;;;24261:9:0;;::::1;::::0;:25:::1;::::0;24294:16;;22674:19:1;;24261:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24503:40:0::1;::::0;;10227:25:1;;;10283:2;10268:18;;10261:34;;;24503:40:0::1;::::0;-1:-1:-1;10200:18:1;24503:40:0::1;;;;;;;24227:328;24567:30;24581:16:::0;24567:30;::::1;:::i;:::-;;;24624:6;:16;;;24608:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24703:16:::1;::::0;::::1;::::0;24678:10;;-1:-1:-1;24703:20:0::1;::::0;24699:101:::1;;24740:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;24740:21:0;;::::1;::::0;:48;::::1;;;::::0;24771:16;;24740:21:::1;:48:::0;:21;:48;24771:16;24740:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24699:101;23316:1491;;;;;;;8776:1;-1:-1:-1::0;8788:6:0;:14;;-1:-1:-1;;8788:14:0;;;23244:1563::o;26829:953::-;26992:16;;26970:4;;26992:16;;;;;26987:221;;27025:28;27044:4;27050:2;27025:18;:28::i;:::-;27073:16;;;;;;;27072:17;:41;;;;;27093:20;27104:4;27110:2;27093:10;:20::i;:::-;27068:129;;;27134:47;;-1:-1:-1;;;27134:47:0;;30796:2:1;27134:47:0;;;30778:21:1;30835:2;30815:18;;;30808:30;30874:34;30854:18;;;30847:62;30945:7;30925:18;;;30918:35;30970:19;;27134:47:0;30594:401:1;27068:129:0;27224:20;27235:4;27241:2;27224:10;:20::i;:::-;27220:314;;;27292:9;;:37;;;;;-1:-1:-1;;;;;31281:15:1;;;27292:37:0;;;31263:34:1;31333:15;;;31313:18;;;31306:43;31365:18;;;31358:34;;;27261:12:0;;27292:9;;;;;:19;;31175:18:1;;27292:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27292:37:0;;;;;;;;-1:-1:-1;;27292:37:0;;;;;;;;;;;;:::i;:::-;;;27288:163;;27427:8;;;27288:163;27380:5;-1:-1:-1;27471:7:0;27467:56;;27499:8;;;27467:56;27246:288;27220:314;-1:-1:-1;;;;;27546:13:0;;;;;;:7;:13;;;;;:23;;27563:6;;27546:13;:23;;27563:6;;27546:23;:::i;:::-;;;;-1:-1:-1;27580:22:0;;-1:-1:-1;27606:7:0;27605:55;;27654:6;27605:55;;;27617:34;27627:4;27633:3;27638:4;27644:6;27617:9;:34::i;:::-;-1:-1:-1;;;;;27671:11:0;;;;;;:7;:11;;;;;:29;;27580:80;;-1:-1:-1;27580:80:0;;27671:11;;;:29;;27580:80;;27671:29;:::i;:::-;;;;;;;;27733:2;-1:-1:-1;;;;;27718:34:0;27727:4;-1:-1:-1;;;;;27718:34:0;;27737:14;27718:34;;;;391:25:1;;379:2;364:18;;245:177;27718:34:0;;;;;;;;-1:-1:-1;27770:4:0;;26829:953;-1:-1:-1;;;;;;;;26829:953:0:o;24815:508::-;24897:16;;;;;;;24896:17;24888:65;;;;-1:-1:-1;;;24888:65:0;;31605:2:1;24888:65:0;;;31587:21:1;31644:2;31624:18;;;31617:30;31683:34;31663:18;;;31656:62;31754:5;31734:18;;;31727:33;31777:19;;24888:65:0;31403:399:1;24888:65:0;24969:20;24980:4;24986:2;24969:10;:20::i;:::-;24968:21;:37;;;;-1:-1:-1;24999:6:0;;-1:-1:-1;;;;;24993:12:0;;;24999:6;;24993:12;24968:37;24964:352;;;-1:-1:-1;;;;;25022:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;25022:30:0;25048:4;25022:30;;;25067:16;:23;;-1:-1:-1;;25067:23:0;25022:30;25067:23;;;;;25116:9;;;;25105:107;;25160:9;:36;;;;25190:4;25160:36;;;;;25105:107;25226:19;:26;;-1:-1:-1;;25226:26:0;;;;;25272:32;;-1:-1:-1;4622:41:1;;25272:32:0;;4610:2:1;4595:18;25272:32:0;;;;;;;24815:508;;:::o;27790:562::-;27878:7;27898:18;27931:3;27927:205;;;-1:-1:-1;27964:9:0;:16;;;27927:205;;;28002:4;27998:134;;;-1:-1:-1;28036:9:0;:17;;;;;;27998:134;;;-1:-1:-1;28099:9:0;:21;;;;;;27998:134;28144:17;7645:5;28164:19;28173:10;28164:6;:19;:::i;:::-;:38;;;;:::i;:::-;28231:4;28215:22;;;;:7;:22;;;;;:35;;28144:58;;-1:-1:-1;28144:58:0;;28215:22;;;:35;;28144:58;;28215:35;:::i;:::-;;;;-1:-1:-1;;28266:40:0;;391:25:1;;;28289:4:0;;-1:-1:-1;;;;;28266:40:0;;;;;379:2:1;364:18;28266:40:0;;;;;;;28326:18;28335:9;28326:6;:18;:::i;:::-;28319:25;27790:562;-1:-1:-1;;;;;;;27790:562:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:258::-;3091:1;3101:113;3115:6;3112:1;3109:13;3101:113;;;3191:11;;;3185:18;3172:11;;;3165:39;3137:2;3130:10;3101:113;;;3232:6;3229:1;3226:13;3223:48;;;-1:-1:-1;;3267:1:1;3249:16;;3242:27;3019:258::o;3282:442::-;3431:2;3420:9;3413:21;3394:4;3463:6;3457:13;3506:6;3501:2;3490:9;3486:18;3479:34;3522:66;3581:6;3576:2;3565:9;3561:18;3556:2;3548:6;3544:15;3522:66;:::i;:::-;3640:2;3628:15;-1:-1:-1;;3624:88:1;3609:104;;;;3715:2;3605:113;;3282:442;-1:-1:-1;;3282:442:1:o;3977:180::-;4036:6;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;-1:-1:-1;4128:23:1;;3977:180;-1:-1:-1;3977:180:1:o;4162:315::-;4230:6;4238;4291:2;4279:9;4270:7;4266:23;4262:32;4259:52;;;4307:1;4304;4297:12;4259:52;4346:9;4333:23;4365:31;4390:5;4365:31;:::i;:::-;4415:5;4467:2;4452:18;;;;4439:32;;-1:-1:-1;;;4162:315:1:o;4674:456::-;4751:6;4759;4767;4820:2;4808:9;4799:7;4795:23;4791:32;4788:52;;;4836:1;4833;4826:12;4788:52;4875:9;4862:23;4894:31;4919:5;4894:31;:::i;:::-;4944:5;-1:-1:-1;5001:2:1;4986:18;;4973:32;5014:33;4973:32;5014:33;:::i;:::-;4674:456;;5066:7;;-1:-1:-1;;;5120:2:1;5105:18;;;;5092:32;;4674:456::o;5135:248::-;5203:6;5211;5264:2;5252:9;5243:7;5239:23;5235:32;5232:52;;;5280:1;5277;5270:12;5232:52;-1:-1:-1;;5303:23:1;;;5373:2;5358:18;;;5345:32;;-1:-1:-1;5135:248:1:o;5388:662::-;5442:5;5495:3;5488:4;5480:6;5476:17;5472:27;5462:55;;5513:1;5510;5503:12;5462:55;5549:6;5536:20;5575:4;5599:60;5615:43;5655:2;5615:43;:::i;5599:60::-;5693:15;;;5779:1;5775:10;;;;5763:23;;5759:32;;;5724:12;;;;5803:15;;;5800:35;;;5831:1;5828;5821:12;5800:35;5867:2;5859:6;5855:15;5879:142;5895:6;5890:3;5887:15;5879:142;;;5961:17;;5949:30;;5999:12;;;;5912;;5879:142;;6055:595;6173:6;6181;6234:2;6222:9;6213:7;6209:23;6205:32;6202:52;;;6250:1;6247;6240:12;6202:52;6290:9;6277:23;6319:18;6360:2;6352:6;6349:14;6346:34;;;6376:1;6373;6366:12;6346:34;6399:61;6452:7;6443:6;6432:9;6428:22;6399:61;:::i;:::-;6389:71;;6513:2;6502:9;6498:18;6485:32;6469:48;;6542:2;6532:8;6529:16;6526:36;;;6558:1;6555;6548:12;6526:36;;6581:63;6636:7;6625:8;6614:9;6610:24;6581:63;:::i;:::-;6571:73;;;6055:595;;;;;:::o;6655:647::-;6729:6;6737;6745;6753;6806:3;6794:9;6785:7;6781:23;6777:33;6774:53;;;6823:1;6820;6813:12;6774:53;6862:9;6849:23;6881:28;6903:5;6881:28;:::i;:::-;6928:5;-1:-1:-1;6985:2:1;6970:18;;6957:32;6998:30;6957:32;6998:30;:::i;:::-;7047:7;-1:-1:-1;7106:2:1;7091:18;;7078:32;7119:30;7078:32;7119:30;:::i;:::-;7168:7;-1:-1:-1;7227:2:1;7212:18;;7199:32;7240:30;7199:32;7240:30;:::i;:::-;6655:647;;;;-1:-1:-1;6655:647:1;;-1:-1:-1;;6655:647:1:o;7496:159::-;7563:20;;7623:6;7612:18;;7602:29;;7592:57;;7645:1;7642;7635:12;7592:57;7496:159;;;:::o;7660:328::-;7734:6;7742;7750;7803:2;7791:9;7782:7;7778:23;7774:32;7771:52;;;7819:1;7816;7809:12;7771:52;7842:28;7860:9;7842:28;:::i;:::-;7832:38;;7889:37;7922:2;7911:9;7907:18;7889:37;:::i;:::-;7879:47;;7945:37;7978:2;7967:9;7963:18;7945:37;:::i;:::-;7935:47;;7660:328;;;;;:::o;7993:247::-;8052:6;8105:2;8093:9;8084:7;8080:23;8076:32;8073:52;;;8121:1;8118;8111:12;8073:52;8160:9;8147:23;8179:31;8204:5;8179:31;:::i;8245:454::-;8340:6;8348;8356;8364;8372;8425:3;8413:9;8404:7;8400:23;8396:33;8393:53;;;8442:1;8439;8432:12;8393:53;-1:-1:-1;;8465:23:1;;;8535:2;8520:18;;8507:32;;-1:-1:-1;8586:2:1;8571:18;;8558:32;;8637:2;8622:18;;8609:32;;-1:-1:-1;8688:3:1;8673:19;8660:33;;-1:-1:-1;8245:454:1;-1:-1:-1;8245:454:1:o;8704:382::-;8769:6;8777;8830:2;8818:9;8809:7;8805:23;8801:32;8798:52;;;8846:1;8843;8836:12;8798:52;8885:9;8872:23;8904:31;8929:5;8904:31;:::i;:::-;8954:5;-1:-1:-1;9011:2:1;8996:18;;8983:32;9024:30;8983:32;9024:30;:::i;9091:957::-;9252:6;9260;9268;9276;9329:3;9317:9;9308:7;9304:23;9300:33;9297:53;;;9346:1;9343;9336:12;9297:53;9386:9;9373:23;9415:18;9456:2;9448:6;9445:14;9442:34;;;9472:1;9469;9462:12;9442:34;9495:61;9548:7;9539:6;9528:9;9524:22;9495:61;:::i;:::-;9485:71;;9609:2;9598:9;9594:18;9581:32;9565:48;;9638:2;9628:8;9625:16;9622:36;;;9654:1;9651;9644:12;9622:36;9677:63;9732:7;9721:8;9710:9;9706:24;9677:63;:::i;:::-;9667:73;;9793:2;9782:9;9778:18;9765:32;9749:48;;9822:2;9812:8;9809:16;9806:36;;;9838:1;9835;9828:12;9806:36;;9861:63;9916:7;9905:8;9894:9;9890:24;9861:63;:::i;:::-;9851:73;;;9974:2;9963:9;9959:18;9946:32;9987:31;10012:5;9987:31;:::i;10306:385::-;10392:6;10400;10408;10416;10469:3;10457:9;10448:7;10444:23;10440:33;10437:53;;;10486:1;10483;10476:12;10437:53;-1:-1:-1;;10509:23:1;;;10579:2;10564:18;;10551:32;;-1:-1:-1;10630:2:1;10615:18;;10602:32;;10681:2;10666:18;10653:32;;-1:-1:-1;10306:385:1;-1:-1:-1;10306:385:1:o;10696:256::-;10762:6;10770;10823:2;10811:9;10802:7;10798:23;10794:32;10791:52;;;10839:1;10836;10829:12;10791:52;10862:28;10880:9;10862:28;:::i;:::-;10852:38;;10909:37;10942:2;10931:9;10927:18;10909:37;:::i;:::-;10899:47;;10696:256;;;;;:::o;10957:241::-;11013:6;11066:2;11054:9;11045:7;11041:23;11037:32;11034:52;;;11082:1;11079;11072:12;11034:52;11121:9;11108:23;11140:28;11162:5;11140:28;:::i;11203:388::-;11271:6;11279;11332:2;11320:9;11311:7;11307:23;11303:32;11300:52;;;11348:1;11345;11338:12;11300:52;11387:9;11374:23;11406:31;11431:5;11406:31;:::i;:::-;11456:5;-1:-1:-1;11513:2:1;11498:18;;11485:32;11526:33;11485:32;11526:33;:::i;11596:821::-;11748:6;11756;11764;11817:2;11805:9;11796:7;11792:23;11788:32;11785:52;;;11833:1;11830;11823:12;11785:52;11873:9;11860:23;11902:18;11943:2;11935:6;11932:14;11929:34;;;11959:1;11956;11949:12;11929:34;11982:61;12035:7;12026:6;12015:9;12011:22;11982:61;:::i;:::-;11972:71;;12096:2;12085:9;12081:18;12068:32;12052:48;;12125:2;12115:8;12112:16;12109:36;;;12141:1;12138;12131:12;12109:36;12164:63;12219:7;12208:8;12197:9;12193:24;12164:63;:::i;:::-;12154:73;;12280:2;12269:9;12265:18;12252:32;12236:48;;12309:2;12299:8;12296:16;12293:36;;;12325:1;12322;12315:12;12293:36;;12348:63;12403:7;12392:8;12381:9;12377:24;12348:63;:::i;:::-;12338:73;;;11596:821;;;;;:::o;13275:484::-;13328:3;13366:5;13360:12;13393:6;13388:3;13381:19;13419:4;13448:2;13443:3;13439:12;13432:19;;13485:2;13478:5;13474:14;13506:1;13516:218;13530:6;13527:1;13524:13;13516:218;;;13595:13;;-1:-1:-1;;;;;13591:62:1;13579:75;;13674:12;;;;13709:15;;;;13552:1;13545:9;13516:218;;;-1:-1:-1;13750:3:1;;13275:484;-1:-1:-1;;;;;13275:484:1:o;13764:342::-;13965:2;13954:9;13947:21;13928:4;13985:56;14037:2;14026:9;14022:18;14014:6;13985:56;:::i;:::-;13977:64;;14091:6;14084:14;14077:22;14072:2;14061:9;14057:18;14050:50;13764:342;;;;;:::o;14111:437::-;14190:1;14186:12;;;;14233;;;14254:61;;14308:4;14300:6;14296:17;14286:27;;14254:61;14361:2;14353:6;14350:14;14330:18;14327:38;14324:218;;;14398:77;14395:1;14388:88;14499:4;14496:1;14489:15;14527:4;14524:1;14517:15;14324:218;;14111:437;;;:::o;14889:184::-;14941:77;14938:1;14931:88;15038:4;15035:1;15028:15;15062:4;15059:1;15052:15;15078:482;15167:1;15210:5;15167:1;15224:330;15245:7;15235:8;15232:21;15224:330;;;15364:4;-1:-1:-1;;15292:77:1;15286:4;15283:87;15280:113;;;15373:18;;:::i;:::-;15423:7;15413:8;15409:22;15406:55;;;15443:16;;;;15406:55;15522:22;;;;15482:15;;;;15224:330;;;15228:3;15078:482;;;;;:::o;15565:866::-;15614:5;15644:8;15634:80;;-1:-1:-1;15685:1:1;15699:5;;15634:80;15733:4;15723:76;;-1:-1:-1;15770:1:1;15784:5;;15723:76;15815:4;15833:1;15828:59;;;;15901:1;15896:130;;;;15808:218;;15828:59;15858:1;15849:10;;15872:5;;;15896:130;15933:3;15923:8;15920:17;15917:43;;;15940:18;;:::i;:::-;-1:-1:-1;;15996:1:1;15982:16;;16011:5;;15808:218;;16110:2;16100:8;16097:16;16091:3;16085:4;16082:13;16078:36;16072:2;16062:8;16059:16;16054:2;16048:4;16045:12;16041:35;16038:77;16035:159;;;-1:-1:-1;16147:19:1;;;16179:5;;16035:159;16226:34;16251:8;16245:4;16226:34;:::i;:::-;16356:6;-1:-1:-1;;16284:79:1;16275:7;16272:92;16269:118;;;16367:18;;:::i;:::-;16405:20;;15565:866;-1:-1:-1;;;15565:866:1:o;16436:140::-;16494:5;16523:47;16564:4;16554:8;16550:19;16544:4;16523:47;:::i;16581:274::-;16621:1;16647;16637:189;;16682:77;16679:1;16672:88;16783:4;16780:1;16773:15;16811:4;16808:1;16801:15;16637:189;-1:-1:-1;16840:9:1;;16581:274::o;16860:125::-;16900:4;16928:1;16925;16922:8;16919:34;;;16933:18;;:::i;:::-;-1:-1:-1;16970:9:1;;16860:125::o;16990:228::-;17030:7;17156:1;-1:-1:-1;;17084:74:1;17081:1;17078:81;17073:1;17066:9;17059:17;17055:105;17052:131;;;17163:18;;:::i;:::-;-1:-1:-1;17203:9:1;;16990:228::o;17992:184::-;18044:77;18041:1;18034:88;18141:4;18138:1;18131:15;18165:4;18162:1;18155:15;18181:175;18218:3;18262:4;18255:5;18251:16;18291:4;18282:7;18279:17;18276:43;;;18299:18;;:::i;:::-;18348:1;18335:15;;18181:175;-1:-1:-1;;18181:175:1:o;19807:556::-;19861:5;19914:3;19907:4;19899:6;19895:17;19891:27;19881:55;;19932:1;19929;19922:12;19881:55;19961:6;19955:13;19987:18;19983:2;19980:26;19977:52;;;20009:18;;:::i;:::-;20053:114;20161:4;-1:-1:-1;;20085:4:1;20081:2;20077:13;20073:86;20069:97;20053:114;:::i;:::-;20192:2;20183:7;20176:19;20238:3;20231:4;20226:2;20218:6;20214:15;20210:26;20207:35;20204:55;;;20255:1;20252;20245:12;20204:55;20268:64;20329:2;20322:4;20313:7;20309:18;20302:4;20294:6;20290:17;20268:64;:::i;20368:909::-;20492:6;20500;20508;20516;20524;20577:3;20565:9;20556:7;20552:23;20548:33;20545:53;;;20594:1;20591;20584:12;20545:53;20627:9;20621:16;20656:18;20697:2;20689:6;20686:14;20683:34;;;20713:1;20710;20703:12;20683:34;20736:61;20789:7;20780:6;20769:9;20765:22;20736:61;:::i;:::-;20726:71;;20843:2;20832:9;20828:18;20822:25;20806:41;;20872:2;20862:8;20859:16;20856:36;;;20888:1;20885;20878:12;20856:36;;20911:63;20966:7;20955:8;20944:9;20940:24;20911:63;:::i;:::-;20901:73;;;21014:2;21003:9;20999:18;20993:25;20983:35;;21061:2;21050:9;21046:18;21040:25;21105:4;21098:5;21094:16;21087:5;21084:27;21074:55;;21125:1;21122;21115:12;21074:55;21198:3;21183:19;;21177:26;21148:5;;-1:-1:-1;21212:33:1;21177:26;21212:33;:::i;:::-;21264:7;21254:17;;;20368:909;;;;;;;;:::o;21611:251::-;21681:6;21734:2;21722:9;21713:7;21709:23;21705:32;21702:52;;;21750:1;21747;21740:12;21702:52;21782:9;21776:16;21801:31;21826:5;21801:31;:::i;22199:195::-;22238:3;-1:-1:-1;;22262:5:1;22259:77;22256:103;;;22339:18;;:::i;:::-;-1:-1:-1;22386:1:1;22375:13;;22199:195::o;23034:306::-;23122:6;23130;23138;23191:2;23179:9;23170:7;23166:23;23162:32;23159:52;;;23207:1;23204;23197:12;23159:52;23236:9;23230:16;23220:26;;23286:2;23275:9;23271:18;23265:25;23255:35;;23330:2;23319:9;23315:18;23309:25;23299:35;;23034:306;;;;;:::o;26052:224::-;26091:3;26119:6;26152:2;26149:1;26145:10;26182:2;26179:1;26175:10;26213:3;26209:2;26205:12;26200:3;26197:21;26194:47;;;26221:18;;:::i;:::-;26257:13;;26052:224;-1:-1:-1;;;;26052:224:1:o;26638:245::-;26705:6;26758:2;26746:9;26737:7;26733:23;26729:32;26726:52;;;26774:1;26771;26764:12;26726:52;26806:9;26800:16;26825:28;26847:5;26825:28;:::i;29218:128::-;29258:3;29289:1;29285:6;29282:1;29279:13;29276:39;;;29295:18;;:::i;:::-;-1:-1:-1;29331:9:1;;29218:128::o;29762:605::-;30061:6;30050:9;30043:25;30104:6;30099:2;30088:9;30084:18;30077:34;30147:3;30142:2;30131:9;30127:18;30120:31;30024:4;30168:57;30220:3;30209:9;30205:19;30197:6;30168:57;:::i;:::-;-1:-1:-1;;;;;30261:55:1;;;;30256:2;30241:18;;30234:83;-1:-1:-1;30348:3:1;30333:19;30326:35;30160:65;29762:605;-1:-1:-1;;;29762:605:1:o;30372:217::-;30411:4;30440:6;30496:10;;;;30466;;30518:12;;;30515:38;;;30533:18;;:::i;:::-;30570:13;;30372:217;-1:-1:-1;;;30372:217:1:o

Swarm Source

ipfs://09b3cf612bbb8dfa75af10a570803b4abdb096ae398d5f28798b29d8c053ea31
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.