ETH Price: $2,981.34 (-2.53%)
Gas: 2 Gwei

Token

LunaFox (LUFX)
 

Overview

Max Total Supply

69,000,000,000,000,000,000,000 LUFX

Holders

2,150

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: LUFX 4
Balance
15,601,473,202,593,231,985,031.056913786 LUFX

Value
$0.00
0x78b985b2ff47b34134035b7d65b0289a56fe14f9
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:
LunaFox

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-19
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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 getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function setPrivateLockEnabled(bool enabled) external;
}

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

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

    uint256 private _tTotal;
    uint256 private _rTotal;

    struct CurrentFees {
        uint16 reflect;
        uint16 totalSwap;
    }

    struct Fees {
        uint16 reflect;
        uint16 liquidity;
        uint16 marketing;
        uint16 totalSwap;
    }

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

    CurrentFees private currentTaxes = CurrentFees({
        reflect: 0,
        totalSwap: 0
        });

    Fees public _buyTaxes = Fees({
        reflect: 300,
        liquidity: 200,
        marketing: 600,
        totalSwap: 800
        });

    Fees public _sellTaxes = Fees({
        reflect: 300,
        liquidity: 200,
        marketing: 600,
        totalSwap: 800
        });

    Fees public _transferTaxes = Fees({
        reflect: 300,
        liquidity: 200,
        marketing: 600,
        totalSwap: 800
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 6,
        total: 8
        });

    uint256 public masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;

    address public currentRouter;
    // PCS ROUTER
    address private pcsV2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    // UNI ROUTER
    address private uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xa64B8f991863f373CdA9cC6A682c312346b7c849)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;

    AntiSnipe antiSnipe;
    uint256 public launch;
    bool contractInitialized = false;

    address[] path;

    uint256 public maxEthBuy = 5 * 10**17;
    uint256 public maxEthSell = 1 * 10**18;
    bool public timedLimitsEnabled = true;
    bool public maxEthTradesEnabled = true;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56 || block.chainid == 97) {
            currentRouter = pcsV2Router;
        } else if (block.chainid == 1) {
            currentRouter = uniswapV2Router;
        }

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

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

    function intializeContract(address[] memory accounts, uint256[] memory amounts, uint256[] memory amountsD, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length < 100, "2");
        require(accounts.length == amounts.length, "3");
        require(amounts.length == amountsD.length, "4");
        startingSupply = 69_000_000_000_000_000_000_000;
        antiSnipe = AntiSnipe(_antiSnipe);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.transfer(address(this)) {} catch {}
        if (startingSupply < 10000000000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (~uint256(0) - (~uint256(0) % _tTotal));
        _name = "LunaFox";
        _symbol = "LUFX";
        dexRouter = IRouter02(currentRouter);
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;        
        path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 25) / 10000;
        contractInitialized = true;     
        _rOwned[owner()] = _rTotal;
        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*amounts[i]) / amountsD[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
            owner(),
            block.timestamp
        );

        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 owner() public view returns (address) {
        return _owner;
    }

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

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

    function totalSupply() external 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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

    function changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        currentRouter = router;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            if(_excluded.length == 1){
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

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

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

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

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

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

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

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

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

    function setPrivateLockEnabled(bool enabled) external onlyOwner {
        antiSnipe.setPrivateLockEnabled(enabled);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2000);
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2000);
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2000);
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
        _transferTaxes.totalSwap = check - reflect;
    }

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

    function setEthLimits(uint256 buyVal, uint256 buyMult, uint256 sellVal, uint256 sellMult) external onlyOwner {
        maxEthBuy = buyVal * 10**buyMult;
        maxEthSell = sellVal * 10**sellMult;
        require(maxEthBuy >= 5 * 10**17 && maxEthSell >= 1 * 10**18);
    }

    function setEthLimitsEnabled(bool maxEthTrades) external onlyOwner {
        maxEthTradesEnabled = maxEthTrades;
    }

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

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

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != 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 takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
            if (maxEthTradesEnabled) {
                if(lpPairs[from]) {
                    require(ethBalance <= maxEthBuy);
                } else if (lpPairs[to]) {
                    require(ethBalance <= maxEthSell);
                }
            }
        }

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

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        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 toSwapForEth = contractTokenBalance - toLiquify;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0 && _ratios.total - _ratios.liquidity > 0) {
            _taxWallets.marketing.transfer(address(this).balance);
        }
    }

    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.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        launch = block.timestamp;
    }

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

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

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

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        }
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + (values.tSwap * _getRate());
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + values.tSwap;
            emit Transfer(from, address(this), values.tSwap); // Transparency is the key to success.
        }
        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }


        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

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

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

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.totalSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.totalSwap = _buyTaxes.totalSwap;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.totalSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / masterTaxDivisor;
            values.tSwap = (tAmount * currentTaxes.totalSwap) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tSwap = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tSwap * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint8 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
}

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":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"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":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"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":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsD","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterTaxDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthTradesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"uint256","name":"buyVal","type":"uint256"},{"internalType":"uint256","name":"buyMult","type":"uint256"},{"internalType":"uint256","name":"sellVal","type":"uint256"},{"internalType":"uint256","name":"sellMult","type":"uint256"}],"name":"setEthLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"maxEthTrades","type":"bool"}],"name":"setEthLimitsEnabled","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":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPrivateLockEnabled","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"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","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":"timedLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60006004819055608081905260a08190526010805463ffffffff1916905561012c60c081905260c860e0819052610258610100819052610320610120819052601180546001600160401b0319908116670320025800c8012c9081179092556101408690526101608590526101808490526101a0839052601280548216831790556101c0959095526101e0939093526102009190915261022052601380549092161790556002610240526006610260526008610280526014805465ffffffffffff1916640800060002179055612710601555601980547310ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031991821617909155601a8054737a250d5630b4cf539739df2c5dacb4c659f2488d9083161790556102c060405273a64b8f991863f373cda9cc6a682c312346b7c8496102a0819052601b805483169091179055601c805461ff0019169055601f805461ffff199081169091556021805460ff191690556706f05b59d3b20000602355670de0b6b3a76400006024556025805490911661010117905581543391161790554660381480620001a45750466061145b15620001d257601954601880546001600160a01b0319166001600160a01b03909216919091179055620001ff565b4660011415620001ff57601a54601880546001600160a01b0319166001600160a01b039092169190911790555b6018546200021b9033906001600160a01b031660001962000306565b601854620002379030906001600160a01b031660001962000306565b600160066000620002506000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600990620002d86000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000407565b6001600160a01b038316620003585760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003a65760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200034f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61552e80620004176000396000f3fe6080604052600436106103e25760003560e01c806370a082311161020d578063bcd96a2511610128578063dd62ed3e116100bb578063eec2744e1161008a578063fb78680d1161006f578063fb78680d14610c48578063fdb78c0e14610c68578063fe575a8714610c8757600080fd5b8063eec2744e14610c08578063f94aa1b414610c2857600080fd5b8063dd62ed3e14610b6d578063eafb5a3c14610bb3578063eb50e70e14610bd3578063ee5d9c2d14610bf357600080fd5b8063c6a276c2116100f7578063c6a276c214610ac1578063cab5ebea14610ae1578063cf84770614610b01578063d32e507314610b5757600080fd5b8063bcd96a2514610a08578063c011f20314610a28578063c2fa418f14610a47578063c6831cd814610a8457600080fd5b80638a8c523c116101a05780639baf6a3b1161016f5780639baf6a3b14610992578063a457c2d7146109a8578063a9059cbb146109c8578063adc59ae0146109e857600080fd5b80638a8c523c146109485780638da5cb5b146108f557806394a6feb61461095d57806395d89b411461097d57600080fd5b806388f82020116101dc57806388f82020146108bc578063893d20e8146108f55780638965b55d146109135780638a63bd9b1461093357600080fd5b806370a08231146107fc578063715018a61461081c5780637b45d4311461083157806380c581d11461089c57600080fd5b8063313ce567116102fd5780634fbee1931161029057806355dbc3691161025f57806355dbc36914610787578063590ffdce1461079c5780635c24b074146107bc578063684c8199146107dc57600080fd5b80634fbee193146106f557806350a8e0161461072e57806353b692251461074d57806355d8ece61461076757600080fd5b806343b5beec116102cc57806343b5beec1461067b578063452ed4f11461069b5780634ada218b146106bb5780634fb2e45d146106d557600080fd5b8063313ce567146105f957806333251a0b1461061b578063384f36b61461063b578063395093511461065b57600080fd5b806313e461921161037557806323b872dd1161034457806323b872dd1461058457806329dd8798146105a45780632b112e49146105c45780632d838119146105d957600080fd5b806313e461921461051957806318160ddd146105395780631d6167ac1461054e5780631e90afe31461056457600080fd5b80630758d924116103b15780630758d9241461048957806309231602146104a9578063095ea7b3146104c9578063122fea3b146104f957600080fd5b806301339c21146103ee57806303fd2a451461041757806305bbedb61461044557806306fdde031461046757600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040460205481565b6040519081526020015b60405180910390f35b34801561042357600080fd5b5061042d61dead81565b6040516001600160a01b03909116815260200161040e565b34801561045157600080fd5b50610465610460366004614c22565b610ca7565b005b34801561047357600080fd5b5061047c610d80565b60405161040e9190614c74565b34801561049557600080fd5b5060165461042d906001600160a01b031681565b3480156104b557600080fd5b506104656104c4366004614cc9565b610e12565b3480156104d557600080fd5b506104e96104e4366004614ce2565b610f31565b604051901515815260200161040e565b34801561050557600080fd5b5060185461042d906001600160a01b031681565b34801561052557600080fd5b50610465610534366004614d0e565b610f48565b34801561054557600080fd5b50610404611303565b34801561055a57600080fd5b5061040460155481565b34801561057057600080fd5b5061046561057f366004614d53565b61131c565b34801561059057600080fd5b506104e961059f366004614d96565b61144e565b3480156105b057600080fd5b506104656105bf366004614dd7565b6114c6565b3480156105d057600080fd5b506104046115af565b3480156105e557600080fd5b506104046105f4366004614cc9565b6115e2565b34801561060557600080fd5b50600d5460405160ff909116815260200161040e565b34801561062757600080fd5b50610465610636366004614e33565b611679565b34801561064757600080fd5b50610465610656366004614e33565b611719565b34801561066757600080fd5b506104e9610676366004614ce2565b6117ab565b34801561068757600080fd5b50610465610696366004614eab565b6117e7565b3480156106a757600080fd5b5060175461042d906001600160a01b031681565b3480156106c757600080fd5b50601f546104e99060ff1681565b3480156106e157600080fd5b506104656106f0366004614e33565b612157565b34801561070157600080fd5b506104e9610710366004614e33565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561073a57600080fd5b50601f546104e990610100900460ff1681565b34801561075957600080fd5b506025546104e99060ff1681565b34801561077357600080fd5b50610465610782366004614d53565b612356565b34801561079357600080fd5b50610404612488565b3480156107a857600080fd5b506104656107b7366004614d0e565b612501565b3480156107c857600080fd5b506104656107d7366004614e33565b61257a565b3480156107e857600080fd5b506104656107f7366004614f3b565b6126b9565b34801561080857600080fd5b50610404610817366004614e33565b612721565b34801561082857600080fd5b50610465612780565b34801561083d57600080fd5b5060115461086e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161040e565b3480156108a857600080fd5b506104656108b7366004614d0e565b612830565b3480156108c857600080fd5b506104e96108d7366004614e33565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561090157600080fd5b506000546001600160a01b031661042d565b34801561091f57600080fd5b5061046561092e366004614d53565b6129ec565b34801561093f57600080fd5b506104e9612b1e565b34801561095457600080fd5b50610465612b8d565b34801561096957600080fd5b50610465610978366004614f3b565b612da3565b34801561098957600080fd5b5061047c612e41565b34801561099e57600080fd5b5061040460245481565b3480156109b457600080fd5b506104e96109c3366004614ce2565b612e50565b3480156109d457600080fd5b506104e96109e3366004614ce2565b612e87565b3480156109f457600080fd5b50610465610a03366004614f58565b612e9e565b348015610a1457600080fd5b50610465610a23366004614f8a565b612f49565b348015610a3457600080fd5b506025546104e990610100900460ff1681565b348015610a5357600080fd5b5060135461086e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a9057600080fd5b5060125461086e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610acd57600080fd5b50610465610adc366004614e33565b613000565b348015610aed57600080fd5b50610465610afc366004614f3b565b6130a0565b348015610b0d57600080fd5b50601454610b329061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161040e565b348015610b6357600080fd5b5061040460235481565b348015610b7957600080fd5b50610404610b88366004614fbd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610bbf57600080fd5b50610465610bce366004614e33565b613142565b348015610bdf57600080fd5b50610465610bee366004614e33565b6134f1565b348015610bff57600080fd5b5061046561356e565b348015610c1457600080fd5b50610465610c23366004614d0e565b613651565b348015610c3457600080fd5b50601b5461042d906001600160a01b031681565b348015610c5457600080fd5b50610465610c63366004614f58565b6136f9565b348015610c7457600080fd5b50601c546104e990610100900460ff1681565b348015610c9357600080fd5b506104e9610ca2366004614e33565b613786565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d4a9085908590600401614feb565b600060405180830381600087803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b505050505050565b6060600b8054610d8f9061503f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb9061503f565b8015610e085780601f10610ddd57610100808354040283529160200191610e08565b820191906000526020600020905b815481529060010190602001808311610deb57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610e605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b604b811015610eb15760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610cf1565b601f546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b5050505050565b6000610f3e338484613814565b5060015b92915050565b6000546001600160a01b03163314610f965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b600181151514156110d8576001600160a01b03821660009081526007602052604090205460ff161561100a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cf1565b6001600160a01b03821660009081526001602052604090205415611064576001600160a01b03821660009081526001602052604090205461104a906115e2565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b806112ff576001600160a01b03821660009081526007602052604090205460ff166111455760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cf1565b600854600114156111c1576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff19169055600880548061118e5761118e615093565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6008548110156112fd57826001600160a01b0316600882815481106111eb576111eb6150c2565b6000918252602090912001546001600160a01b031614156112eb576008805461121690600190615120565b81548110611226576112266150c2565b600091825260209091200154600880546001600160a01b039092169183908110611252576112526150c2565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff1916905560088054806112b7576112b7615093565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190556112fd565b806112f581615137565b9150506111c4565b505b5050565b6000600e546000141561131557600080fd5b50600e5490565b6000546001600160a01b0316331461136a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6000816113778486615152565b6113819190615152565b90506107d08161ffff16111561139657600080fd5b6013805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909316929092179087161717905561140a8482615178565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146114b3576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114ad908490615120565b90915550505b6114be848484613921565b949350505050565b6000546001600160a01b031633146115145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b5050505050505050565b60006115bb6000612721565b6115c661dead612721565b6115d0919061519b565b600e546115dd9190615120565b905090565b6000600f5482111561165c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cf1565b6000611666613ceb565b905061167281846151e2565b9392505050565b6000546001600160a01b031633146116c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610efc565b6000546001600160a01b031633146117675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f54610100900460ff161561177c57600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f3e9185906117e290869061519b565b613814565b6000546001600160a01b031633146118355760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b60215460ff16156118885760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b60648451106118d95760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b825184511461192a5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b815183511461197b5760405162461bcd60e51b815260206004820152600160248201527f34000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b690e9c7f5bd65501200000600a55601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038481168202929092179283905590910416611a0057601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b158015611a6357600080fd5b505af1925050508015611a74575060015b506402540be400600a541015611a9657600d805460ff19166012179055611aa4565b600d805460ff191660091790555b600d54611ab59060ff16600a6152da565b600a54611ac291906152e9565b600e819055611ad390600019615308565b611adf90600019615120565b600f556040805180820190915260078082527f4c756e61466f78000000000000000000000000000000000000000000000000006020909201918252611b2691600b91614a0c565b506040805180820190915260048082527f4c554658000000000000000000000000000000000000000000000000000000006020909201918252611b6b91600c91614a0c565b506018546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c12919061531c565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c97919061531c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f919061531c565b601780546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199092168217905560009081526003602052604090819020805460ff1916600117905580516002808252606082019092529081602001602082028036833750508151611d97926022925060200190614a90565b50306022600081548110611dad57611dad6150c2565b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5c919061531c565b6022600181548110611e7057611e706150c2565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612710600e546005611eb091906152e9565b611eba91906151e2565b601d55600e5461271090611ecf9060196152e9565b611ed991906151e2565b601e556021805460ff19166001908117909155600f54906000611f046000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611f306000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051611f7791815260200190565b60405180910390a3601654611f999030906001600160a01b0316600019613814565b60005b845181101561203e576000838281518110611fb957611fb96150c2565b6020026020010151858381518110611fd357611fd36150c2565b6020026020010151600e54611fe891906152e9565b611ff291906151e2565b90506120296120096000546001600160a01b031690565b87848151811061201b5761201b6150c2565b602002602001015183613921565b5050808061203690615137565b915050611f9c565b5061206f6120546000546001600160a01b031690565b3061206a6108176000546001600160a01b031690565b613921565b506016546001600160a01b031663f305d719473061208c81612721565b6000806120a16000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612121573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121469190615339565b505050612151612b8d565b50505050565b6000546001600160a01b031633146121a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6001600160a01b0381166122215760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf1565b6001600160a01b03811661dead14156122a25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf1565b600080546122bb916001600160a01b0390911690612501565b6122c6816001612501565b600080546122dc906001600160a01b0316612721565b11156122fe576000546122fc906001600160a01b03168261206a82612721565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146123a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6000816123b18486615152565b6123bb9190615152565b90506107d08161ffff1611156123d057600080fd5b6011805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556124448482615178565b6011805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000601f60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd9190615367565b6000546001600160a01b0316331461254f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146125c85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f54610100900460ff16156126205760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610cf1565b6001600160a01b0381163014156126795760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cf1565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146127075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b602580549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561275e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f42906115e2565b6000546001600160a01b031633146127ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b600080546127e7916001600160a01b0390911690612501565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461287e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b8061290a576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d6457600080fd5b60045415612971576203f480600454426129249190615120565b116129715760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cf1565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d4a565b6000546001600160a01b03163314612a3a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b600081612a478486615152565b612a519190615152565b90506107d08161ffff161115612a6657600080fd5b6012805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009093169290921790871617179055612ada8482615178565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b03163314612b6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601654612b879030906001600160a01b0316600019613814565b50600190565b6000546001600160a01b03163314612bdb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f5460ff1615612c2e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cf1565b601f54610100900460ff16612c855760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cf1565b612c90306001610f48565b601754612ca7906001600160a01b03166001610f48565b601f546201000090046001600160a01b0316612ced57601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f54601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612d7e57600080fd5b505af1925050508015612d8f575060015b50601f805460ff1916600117905542602055565b6000546001600160a01b03163314612df15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517f94a6feb60000000000000000000000000000000000000000000000000000000081528215156004820152620100009091046001600160a01b0316906394a6feb690602401610efc565b6060600c8054610d8f9061503f565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f3e9185906117e2908690615120565b6000612e94338484613921565b5060019392505050565b6000546001600160a01b03163314612eec5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b612ef783600a615380565b612f0190856152e9565b602355612f0f81600a615380565b612f1990836152e9565b6024556023546706f05b59d3b2000011801590612f405750670de0b6b3a764000060245410155b61215157600080fd5b6000546001600160a01b03163314612f975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6014805461ffff838116620100000263ffffffff1990921690851617179055612fc08183615152565b6014805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b0316331461304e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610efc565b6000546001600160a01b031633146130ee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601c80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061313790831515815260200190565b60405180910390a150565b6000546001600160a01b031633146131905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f9919061531c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a919061531c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f1919061531c565b90506001600160a01b03811661348f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561333f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613363919061531c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d4919061531c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d919061531c565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556134b8565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112fd903090600019613814565b6000546001600160a01b0316331461353f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146135bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f54610100900460ff16156136145760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cf1565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561364e573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461369f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d4a565b6000546001600160a01b031633146137475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b8284600e5461375691906152e9565b61376091906151e2565b601d55600e5481906137739084906152e9565b61377d91906151e2565b601e5550505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156137f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f42919061538c565b6001600160a01b03831661386a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf1565b6001600160a01b0382166138c05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf1565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661399f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf1565b6001600160a01b038316613a1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf1565b60008211613a915760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cf1565b6001600160a01b03841660009081526006602052604090205460019060ff1680613ad357506001600160a01b03841660009081526006602052604090205460ff165b15613adc575060005b613ae68585613e8b565b15613c6757601f5460ff16613b3d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cf1565b6016546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f90613b8a9087906022906004016153f2565b600060405180830381865afa158015613ba7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bcf919081019061540b565b600181518110613be157613be16150c2565b60200260200101519050602560019054906101000a900460ff1615613c65576001600160a01b03861660009081526003602052604090205460ff1615613c3557602354811115613c3057600080fd5b613c65565b6001600160a01b03851660009081526003602052604090205460ff1615613c6557602454811115613c6557600080fd5b505b6001600160a01b03841660009081526003602052604090205460ff1615613cd657601c5460ff16158015613ca25750601c54610100900460ff165b15613cd6576000613cb230612721565b9050601d548110613cd457601e548110613ccb5750601e545b613cd481613f48565b505b613ce285858584614241565b95945050505050565b600f54600e5460009190825b60085460ff82161015613e5257826001600060088460ff1681548110613d1f57613d1f6150c2565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613d8d5750816002600060088460ff1681548110613d6657613d666150c2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613daa57600e54600f54613da291906151e2565b935050505090565b6001600060088360ff1681548110613dc457613dc46150c2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613df39084615120565b92506002600060088360ff1681548110613e0f57613e0f6150c2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613e3e9083615120565b915080613e4a8161549c565b915050613cf7565b50600e54600f54613e6391906151e2565b821015613e8157600e54600f54613e7a91906151e2565b9250505090565b613e7a81836151e2565b600080546001600160a01b03848116911614801590613eb857506000546001600160a01b03838116911614155b8015613edd57506001600160a01b03821660009081526009602052604090205460ff16155b8015613f0257506001600160a01b03831660009081526009602052604090205460ff16155b8015613f1957506001600160a01b03821661dead14155b8015613f2d57506001600160a01b03821615155b801561167257506001600160a01b0383163014159392505050565b601c805460ff1916600117905560145461ffff64010000000090910416613f6e57614234565b3060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914613fc7573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff6401000000008204811691613fe99116856152e9565b613ff391906151e2565b613ffd91906151e2565b9050600061400b8284615120565b6016546040517f791ac9470000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063791ac9479061405f908490600090602290309042906004016154bc565b600060405180830381600087803b15801561407957600080fd5b505af115801561408d573d6000803e3d6000fd5b5050601454600092506002915061ffff64010000000082048116916140b39116476152e9565b6140bd91906151e2565b6140c791906151e2565b905082156141c0576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614156573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061417b9190615339565b505060408051858152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000471180156141f057506014546000906141ea9061ffff80821691640100000000900416615178565b61ffff16115b1561423057601b546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561422e573d6000803e3d6000fd5b505b5050505b50601c805460ff19169055565b601f54600090610100900460ff166142ed5761425d85856145a5565b601f54610100900460ff1615801561427a575061427a8585613e8b565b156142ed5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cf1565b60006142fb86868686614703565b60808101516001600160a01b03881660009081526001602052604090205491925061432591615120565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461435c919061519b565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156143ce576001600160a01b0386166000908152600260205260409020546143b4908590615120565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff161561442e5780516001600160a01b038616600090815260026020526040902054614414919061519b565b6001600160a01b0386166000908152600260205260409020555b60408101511561451057614440613ceb565b816040015161444f91906152e9565b30600090815260016020526040902054614469919061519b565b3060009081526001602090815260408083209390935560079052205460ff16156144be57604080820151306000908152600260205291909120546144ad919061519b565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161450791815260200190565b60405180910390a35b60008160a001511180614527575060008160200151115b15614548578060a00151600f60008282546145429190615120565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161459191815260200190565b60405180910390a350600195945050505050565b601f54610100900460ff16156146235760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cf1565b61462d8282613e8b565b15801561464757506017546001600160a01b038281169116145b156112ff576001600160a01b038083166000908152600960205260409020805460ff19166001179055601f805461ff0019166101001790819055620100009004166146bc57601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61473c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147756040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061477f613ceb565b905061478b81866152e9565b608083015261479a8787613e8b565b1561484d57601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614836575060408051601f3d908101601f191682019092526148339181019061538c565b60015b61483f57600080fd5b90508061484b57600080fd5b505b83156149b6576001600160a01b03861660009081526003602052604090205460ff16156148aa576012546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614933565b6001600160a01b03871660009081526003602052604090205460ff1615614901576011546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614933565b6013546010805461ffff80841663ffffffff199092169190911766010000000000009093041662010000029190911790555b6015546010546149479061ffff16876152e9565b61495191906151e2565b60208301526015546010546149709062010000900461ffff16876152e9565b61497a91906151e2565b604083018190526020830151614990919061519b565b61499a9086615120565b825260208201516149ac9082906152e9565b60a08301526149cf565b6000602083018190526040830181905285835260a08301525b8082604001516149df91906152e9565b8260a001516149ee919061519b565b82608001516149fd9190615120565b60608301525095945050505050565b828054614a189061503f565b90600052602060002090601f016020900481019282614a3a5760008555614a80565b82601f10614a5357805160ff1916838001178555614a80565b82800160010185558215614a80579182015b82811115614a80578251825591602001919060010190614a65565b50614a8c929150614af2565b5090565b828054828255906000526020600020908101928215614a80579160200282015b82811115614a80578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190614ab0565b5b80821115614a8c5760008155600101614af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b5f57614b5f614b07565b604052919050565b600067ffffffffffffffff821115614b8157614b81614b07565b5060051b60200190565b6001600160a01b038116811461364e57600080fd5b600082601f830112614bb157600080fd5b81356020614bc6614bc183614b67565b614b36565b82815260059290921b84018101918181019086841115614be557600080fd5b8286015b84811015614c09578035614bfc81614b8b565b8352918301918301614be9565b509695505050505050565b801515811461364e57600080fd5b60008060408385031215614c3557600080fd5b823567ffffffffffffffff811115614c4c57600080fd5b614c5885828601614ba0565b9250506020830135614c6981614c14565b809150509250929050565b600060208083528351808285015260005b81811015614ca157858101830151858201604001528201614c85565b81811115614cb3576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614cdb57600080fd5b5035919050565b60008060408385031215614cf557600080fd5b8235614d0081614b8b565b946020939093013593505050565b60008060408385031215614d2157600080fd5b8235614d2c81614b8b565b91506020830135614c6981614c14565b803561ffff81168114614d4e57600080fd5b919050565b600080600060608486031215614d6857600080fd5b614d7184614d3c565b9250614d7f60208501614d3c565b9150614d8d60408501614d3c565b90509250925092565b600080600060608486031215614dab57600080fd5b8335614db681614b8b565b92506020840135614dc681614b8b565b929592945050506040919091013590565b60008060008060808587031215614ded57600080fd5b8435614df881614c14565b93506020850135614e0881614c14565b92506040850135614e1881614c14565b91506060850135614e2881614c14565b939692955090935050565b600060208284031215614e4557600080fd5b813561167281614b8b565b600082601f830112614e6157600080fd5b81356020614e71614bc183614b67565b82815260059290921b84018101918181019086841115614e9057600080fd5b8286015b84811015614c095780358352918301918301614e94565b60008060008060808587031215614ec157600080fd5b843567ffffffffffffffff80821115614ed957600080fd5b614ee588838901614ba0565b95506020870135915080821115614efb57600080fd5b614f0788838901614e50565b94506040870135915080821115614f1d57600080fd5b50614f2a87828801614e50565b9250506060850135614e2881614b8b565b600060208284031215614f4d57600080fd5b813561167281614c14565b60008060008060808587031215614f6e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215614f9d57600080fd5b614fa683614d3c565b9150614fb460208401614d3c565b90509250929050565b60008060408385031215614fd057600080fd5b8235614fdb81614b8b565b91506020830135614c6981614b8b565b604080825283519082018190526000906020906060840190828701845b8281101561502d5781516001600160a01b031684529284019290840190600101615008565b50505093151592019190915250919050565b600181811c9082168061505357607f821691505b6020821081141561508d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015615132576151326150f1565b500390565b600060001982141561514b5761514b6150f1565b5060010190565b600061ffff80831681851680830382111561516f5761516f6150f1565b01949350505050565b600061ffff83811690831681811015615193576151936150f1565b039392505050565b600082198211156151ae576151ae6150f1565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826151f1576151f16151b3565b500490565b600181815b80851115615231578160001904821115615217576152176150f1565b8085161561522457918102915b93841c93908002906151fb565b509250929050565b60008261524857506001610f42565b8161525557506000610f42565b816001811461526b576002811461527557615291565b6001915050610f42565b60ff841115615286576152866150f1565b50506001821b610f42565b5060208310610133831016604e8410600b84101617156152b4575081810a610f42565b6152be83836151f6565b80600019048211156152d2576152d26150f1565b029392505050565b600061167260ff841683615239565b6000816000190483118215151615615303576153036150f1565b500290565b600082615317576153176151b3565b500690565b60006020828403121561532e57600080fd5b815161167281614b8b565b60008060006060848603121561534e57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561537957600080fd5b5051919050565b60006116728383615239565b60006020828403121561539e57600080fd5b815161167281614c14565b6000815480845260208085019450836000528060002060005b838110156153e75781546001600160a01b0316875295820195600191820191016153c2565b509495945050505050565b8281526040602082015260006114be60408301846153a9565b6000602080838503121561541e57600080fd5b825167ffffffffffffffff81111561543557600080fd5b8301601f8101851361544657600080fd5b8051615454614bc182614b67565b81815260059190911b8201830190838101908783111561547357600080fd5b928401925b8284101561549157835182529284019290840190615478565b979650505050505050565b600060ff821660ff8114156154b3576154b36150f1565b60010192915050565b85815284602082015260a0604082015260006154db60a08301866153a9565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122071596d7ba15303d0897a31ff6d3456636d23cc3db867e26e32d0917377d30e5264736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103e25760003560e01c806370a082311161020d578063bcd96a2511610128578063dd62ed3e116100bb578063eec2744e1161008a578063fb78680d1161006f578063fb78680d14610c48578063fdb78c0e14610c68578063fe575a8714610c8757600080fd5b8063eec2744e14610c08578063f94aa1b414610c2857600080fd5b8063dd62ed3e14610b6d578063eafb5a3c14610bb3578063eb50e70e14610bd3578063ee5d9c2d14610bf357600080fd5b8063c6a276c2116100f7578063c6a276c214610ac1578063cab5ebea14610ae1578063cf84770614610b01578063d32e507314610b5757600080fd5b8063bcd96a2514610a08578063c011f20314610a28578063c2fa418f14610a47578063c6831cd814610a8457600080fd5b80638a8c523c116101a05780639baf6a3b1161016f5780639baf6a3b14610992578063a457c2d7146109a8578063a9059cbb146109c8578063adc59ae0146109e857600080fd5b80638a8c523c146109485780638da5cb5b146108f557806394a6feb61461095d57806395d89b411461097d57600080fd5b806388f82020116101dc57806388f82020146108bc578063893d20e8146108f55780638965b55d146109135780638a63bd9b1461093357600080fd5b806370a08231146107fc578063715018a61461081c5780637b45d4311461083157806380c581d11461089c57600080fd5b8063313ce567116102fd5780634fbee1931161029057806355dbc3691161025f57806355dbc36914610787578063590ffdce1461079c5780635c24b074146107bc578063684c8199146107dc57600080fd5b80634fbee193146106f557806350a8e0161461072e57806353b692251461074d57806355d8ece61461076757600080fd5b806343b5beec116102cc57806343b5beec1461067b578063452ed4f11461069b5780634ada218b146106bb5780634fb2e45d146106d557600080fd5b8063313ce567146105f957806333251a0b1461061b578063384f36b61461063b578063395093511461065b57600080fd5b806313e461921161037557806323b872dd1161034457806323b872dd1461058457806329dd8798146105a45780632b112e49146105c45780632d838119146105d957600080fd5b806313e461921461051957806318160ddd146105395780631d6167ac1461054e5780631e90afe31461056457600080fd5b80630758d924116103b15780630758d9241461048957806309231602146104a9578063095ea7b3146104c9578063122fea3b146104f957600080fd5b806301339c21146103ee57806303fd2a451461041757806305bbedb61461044557806306fdde031461046757600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040460205481565b6040519081526020015b60405180910390f35b34801561042357600080fd5b5061042d61dead81565b6040516001600160a01b03909116815260200161040e565b34801561045157600080fd5b50610465610460366004614c22565b610ca7565b005b34801561047357600080fd5b5061047c610d80565b60405161040e9190614c74565b34801561049557600080fd5b5060165461042d906001600160a01b031681565b3480156104b557600080fd5b506104656104c4366004614cc9565b610e12565b3480156104d557600080fd5b506104e96104e4366004614ce2565b610f31565b604051901515815260200161040e565b34801561050557600080fd5b5060185461042d906001600160a01b031681565b34801561052557600080fd5b50610465610534366004614d0e565b610f48565b34801561054557600080fd5b50610404611303565b34801561055a57600080fd5b5061040460155481565b34801561057057600080fd5b5061046561057f366004614d53565b61131c565b34801561059057600080fd5b506104e961059f366004614d96565b61144e565b3480156105b057600080fd5b506104656105bf366004614dd7565b6114c6565b3480156105d057600080fd5b506104046115af565b3480156105e557600080fd5b506104046105f4366004614cc9565b6115e2565b34801561060557600080fd5b50600d5460405160ff909116815260200161040e565b34801561062757600080fd5b50610465610636366004614e33565b611679565b34801561064757600080fd5b50610465610656366004614e33565b611719565b34801561066757600080fd5b506104e9610676366004614ce2565b6117ab565b34801561068757600080fd5b50610465610696366004614eab565b6117e7565b3480156106a757600080fd5b5060175461042d906001600160a01b031681565b3480156106c757600080fd5b50601f546104e99060ff1681565b3480156106e157600080fd5b506104656106f0366004614e33565b612157565b34801561070157600080fd5b506104e9610710366004614e33565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561073a57600080fd5b50601f546104e990610100900460ff1681565b34801561075957600080fd5b506025546104e99060ff1681565b34801561077357600080fd5b50610465610782366004614d53565b612356565b34801561079357600080fd5b50610404612488565b3480156107a857600080fd5b506104656107b7366004614d0e565b612501565b3480156107c857600080fd5b506104656107d7366004614e33565b61257a565b3480156107e857600080fd5b506104656107f7366004614f3b565b6126b9565b34801561080857600080fd5b50610404610817366004614e33565b612721565b34801561082857600080fd5b50610465612780565b34801561083d57600080fd5b5060115461086e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161040e565b3480156108a857600080fd5b506104656108b7366004614d0e565b612830565b3480156108c857600080fd5b506104e96108d7366004614e33565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561090157600080fd5b506000546001600160a01b031661042d565b34801561091f57600080fd5b5061046561092e366004614d53565b6129ec565b34801561093f57600080fd5b506104e9612b1e565b34801561095457600080fd5b50610465612b8d565b34801561096957600080fd5b50610465610978366004614f3b565b612da3565b34801561098957600080fd5b5061047c612e41565b34801561099e57600080fd5b5061040460245481565b3480156109b457600080fd5b506104e96109c3366004614ce2565b612e50565b3480156109d457600080fd5b506104e96109e3366004614ce2565b612e87565b3480156109f457600080fd5b50610465610a03366004614f58565b612e9e565b348015610a1457600080fd5b50610465610a23366004614f8a565b612f49565b348015610a3457600080fd5b506025546104e990610100900460ff1681565b348015610a5357600080fd5b5060135461086e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a9057600080fd5b5060125461086e9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610acd57600080fd5b50610465610adc366004614e33565b613000565b348015610aed57600080fd5b50610465610afc366004614f3b565b6130a0565b348015610b0d57600080fd5b50601454610b329061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161040e565b348015610b6357600080fd5b5061040460235481565b348015610b7957600080fd5b50610404610b88366004614fbd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610bbf57600080fd5b50610465610bce366004614e33565b613142565b348015610bdf57600080fd5b50610465610bee366004614e33565b6134f1565b348015610bff57600080fd5b5061046561356e565b348015610c1457600080fd5b50610465610c23366004614d0e565b613651565b348015610c3457600080fd5b50601b5461042d906001600160a01b031681565b348015610c5457600080fd5b50610465610c63366004614f58565b6136f9565b348015610c7457600080fd5b50601c546104e990610100900460ff1681565b348015610c9357600080fd5b506104e9610ca2366004614e33565b613786565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d4a9085908590600401614feb565b600060405180830381600087803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b505050505050565b6060600b8054610d8f9061503f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb9061503f565b8015610e085780601f10610ddd57610100808354040283529160200191610e08565b820191906000526020600020905b815481529060010190602001808311610deb57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610e605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b604b811015610eb15760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610cf1565b601f546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b5050505050565b6000610f3e338484613814565b5060015b92915050565b6000546001600160a01b03163314610f965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b600181151514156110d8576001600160a01b03821660009081526007602052604090205460ff161561100a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cf1565b6001600160a01b03821660009081526001602052604090205415611064576001600160a01b03821660009081526001602052604090205461104a906115e2565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b806112ff576001600160a01b03821660009081526007602052604090205460ff166111455760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cf1565b600854600114156111c1576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff19169055600880548061118e5761118e615093565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6008548110156112fd57826001600160a01b0316600882815481106111eb576111eb6150c2565b6000918252602090912001546001600160a01b031614156112eb576008805461121690600190615120565b81548110611226576112266150c2565b600091825260209091200154600880546001600160a01b039092169183908110611252576112526150c2565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff1916905560088054806112b7576112b7615093565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190556112fd565b806112f581615137565b9150506111c4565b505b5050565b6000600e546000141561131557600080fd5b50600e5490565b6000546001600160a01b0316331461136a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6000816113778486615152565b6113819190615152565b90506107d08161ffff16111561139657600080fd5b6013805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909316929092179087161717905561140a8482615178565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146114b3576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114ad908490615120565b90915550505b6114be848484613921565b949350505050565b6000546001600160a01b031633146115145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b5050505050505050565b60006115bb6000612721565b6115c661dead612721565b6115d0919061519b565b600e546115dd9190615120565b905090565b6000600f5482111561165c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cf1565b6000611666613ceb565b905061167281846151e2565b9392505050565b6000546001600160a01b031633146116c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610efc565b6000546001600160a01b031633146117675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f54610100900460ff161561177c57600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f3e9185906117e290869061519b565b613814565b6000546001600160a01b031633146118355760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b60215460ff16156118885760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b60648451106118d95760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b825184511461192a5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b815183511461197b5760405162461bcd60e51b815260206004820152600160248201527f34000000000000000000000000000000000000000000000000000000000000006044820152606401610cf1565b690e9c7f5bd65501200000600a55601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038481168202929092179283905590910416611a0057601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b158015611a6357600080fd5b505af1925050508015611a74575060015b506402540be400600a541015611a9657600d805460ff19166012179055611aa4565b600d805460ff191660091790555b600d54611ab59060ff16600a6152da565b600a54611ac291906152e9565b600e819055611ad390600019615308565b611adf90600019615120565b600f556040805180820190915260078082527f4c756e61466f78000000000000000000000000000000000000000000000000006020909201918252611b2691600b91614a0c565b506040805180820190915260048082527f4c554658000000000000000000000000000000000000000000000000000000006020909201918252611b6b91600c91614a0c565b506018546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c12919061531c565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c97919061531c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f919061531c565b601780546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199092168217905560009081526003602052604090819020805460ff1916600117905580516002808252606082019092529081602001602082028036833750508151611d97926022925060200190614a90565b50306022600081548110611dad57611dad6150c2565b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5c919061531c565b6022600181548110611e7057611e706150c2565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612710600e546005611eb091906152e9565b611eba91906151e2565b601d55600e5461271090611ecf9060196152e9565b611ed991906151e2565b601e556021805460ff19166001908117909155600f54906000611f046000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611f306000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051611f7791815260200190565b60405180910390a3601654611f999030906001600160a01b0316600019613814565b60005b845181101561203e576000838281518110611fb957611fb96150c2565b6020026020010151858381518110611fd357611fd36150c2565b6020026020010151600e54611fe891906152e9565b611ff291906151e2565b90506120296120096000546001600160a01b031690565b87848151811061201b5761201b6150c2565b602002602001015183613921565b5050808061203690615137565b915050611f9c565b5061206f6120546000546001600160a01b031690565b3061206a6108176000546001600160a01b031690565b613921565b506016546001600160a01b031663f305d719473061208c81612721565b6000806120a16000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612121573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121469190615339565b505050612151612b8d565b50505050565b6000546001600160a01b031633146121a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6001600160a01b0381166122215760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf1565b6001600160a01b03811661dead14156122a25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf1565b600080546122bb916001600160a01b0390911690612501565b6122c6816001612501565b600080546122dc906001600160a01b0316612721565b11156122fe576000546122fc906001600160a01b03168261206a82612721565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146123a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6000816123b18486615152565b6123bb9190615152565b90506107d08161ffff1611156123d057600080fd5b6011805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556124448482615178565b6011805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000601f60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd9190615367565b6000546001600160a01b0316331461254f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146125c85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f54610100900460ff16156126205760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610cf1565b6001600160a01b0381163014156126795760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cf1565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146127075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b602580549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561275e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f42906115e2565b6000546001600160a01b031633146127ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b600080546127e7916001600160a01b0390911690612501565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461287e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b8061290a576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d6457600080fd5b60045415612971576203f480600454426129249190615120565b116129715760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cf1565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d4a565b6000546001600160a01b03163314612a3a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b600081612a478486615152565b612a519190615152565b90506107d08161ffff161115612a6657600080fd5b6012805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009093169290921790871617179055612ada8482615178565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b03163314612b6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601654612b879030906001600160a01b0316600019613814565b50600190565b6000546001600160a01b03163314612bdb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f5460ff1615612c2e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cf1565b601f54610100900460ff16612c855760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cf1565b612c90306001610f48565b601754612ca7906001600160a01b03166001610f48565b601f546201000090046001600160a01b0316612ced57601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f54601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612d7e57600080fd5b505af1925050508015612d8f575060015b50601f805460ff1916600117905542602055565b6000546001600160a01b03163314612df15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517f94a6feb60000000000000000000000000000000000000000000000000000000081528215156004820152620100009091046001600160a01b0316906394a6feb690602401610efc565b6060600c8054610d8f9061503f565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f3e9185906117e2908690615120565b6000612e94338484613921565b5060019392505050565b6000546001600160a01b03163314612eec5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b612ef783600a615380565b612f0190856152e9565b602355612f0f81600a615380565b612f1990836152e9565b6024556023546706f05b59d3b2000011801590612f405750670de0b6b3a764000060245410155b61215157600080fd5b6000546001600160a01b03163314612f975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b6014805461ffff838116620100000263ffffffff1990921690851617179055612fc08183615152565b6014805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b0316331461304e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610efc565b6000546001600160a01b031633146130ee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601c80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061313790831515815260200190565b60405180910390a150565b6000546001600160a01b031633146131905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f9919061531c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a919061531c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f1919061531c565b90506001600160a01b03811661348f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561333f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613363919061531c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d4919061531c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d919061531c565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556134b8565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112fd903090600019613814565b6000546001600160a01b0316331461353f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146135bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f54610100900460ff16156136145760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cf1565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561364e573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461369f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d4a565b6000546001600160a01b031633146137475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf1565b8284600e5461375691906152e9565b61376091906151e2565b601d55600e5481906137739084906152e9565b61377d91906151e2565b601e5550505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156137f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f42919061538c565b6001600160a01b03831661386a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf1565b6001600160a01b0382166138c05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf1565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661399f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf1565b6001600160a01b038316613a1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf1565b60008211613a915760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cf1565b6001600160a01b03841660009081526006602052604090205460019060ff1680613ad357506001600160a01b03841660009081526006602052604090205460ff165b15613adc575060005b613ae68585613e8b565b15613c6757601f5460ff16613b3d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cf1565b6016546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f90613b8a9087906022906004016153f2565b600060405180830381865afa158015613ba7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bcf919081019061540b565b600181518110613be157613be16150c2565b60200260200101519050602560019054906101000a900460ff1615613c65576001600160a01b03861660009081526003602052604090205460ff1615613c3557602354811115613c3057600080fd5b613c65565b6001600160a01b03851660009081526003602052604090205460ff1615613c6557602454811115613c6557600080fd5b505b6001600160a01b03841660009081526003602052604090205460ff1615613cd657601c5460ff16158015613ca25750601c54610100900460ff165b15613cd6576000613cb230612721565b9050601d548110613cd457601e548110613ccb5750601e545b613cd481613f48565b505b613ce285858584614241565b95945050505050565b600f54600e5460009190825b60085460ff82161015613e5257826001600060088460ff1681548110613d1f57613d1f6150c2565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613d8d5750816002600060088460ff1681548110613d6657613d666150c2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613daa57600e54600f54613da291906151e2565b935050505090565b6001600060088360ff1681548110613dc457613dc46150c2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613df39084615120565b92506002600060088360ff1681548110613e0f57613e0f6150c2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613e3e9083615120565b915080613e4a8161549c565b915050613cf7565b50600e54600f54613e6391906151e2565b821015613e8157600e54600f54613e7a91906151e2565b9250505090565b613e7a81836151e2565b600080546001600160a01b03848116911614801590613eb857506000546001600160a01b03838116911614155b8015613edd57506001600160a01b03821660009081526009602052604090205460ff16155b8015613f0257506001600160a01b03831660009081526009602052604090205460ff16155b8015613f1957506001600160a01b03821661dead14155b8015613f2d57506001600160a01b03821615155b801561167257506001600160a01b0383163014159392505050565b601c805460ff1916600117905560145461ffff64010000000090910416613f6e57614234565b3060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914613fc7573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff6401000000008204811691613fe99116856152e9565b613ff391906151e2565b613ffd91906151e2565b9050600061400b8284615120565b6016546040517f791ac9470000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063791ac9479061405f908490600090602290309042906004016154bc565b600060405180830381600087803b15801561407957600080fd5b505af115801561408d573d6000803e3d6000fd5b5050601454600092506002915061ffff64010000000082048116916140b39116476152e9565b6140bd91906151e2565b6140c791906151e2565b905082156141c0576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614156573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061417b9190615339565b505060408051858152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000471180156141f057506014546000906141ea9061ffff80821691640100000000900416615178565b61ffff16115b1561423057601b546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561422e573d6000803e3d6000fd5b505b5050505b50601c805460ff19169055565b601f54600090610100900460ff166142ed5761425d85856145a5565b601f54610100900460ff1615801561427a575061427a8585613e8b565b156142ed5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cf1565b60006142fb86868686614703565b60808101516001600160a01b03881660009081526001602052604090205491925061432591615120565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461435c919061519b565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156143ce576001600160a01b0386166000908152600260205260409020546143b4908590615120565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff161561442e5780516001600160a01b038616600090815260026020526040902054614414919061519b565b6001600160a01b0386166000908152600260205260409020555b60408101511561451057614440613ceb565b816040015161444f91906152e9565b30600090815260016020526040902054614469919061519b565b3060009081526001602090815260408083209390935560079052205460ff16156144be57604080820151306000908152600260205291909120546144ad919061519b565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161450791815260200190565b60405180910390a35b60008160a001511180614527575060008160200151115b15614548578060a00151600f60008282546145429190615120565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161459191815260200190565b60405180910390a350600195945050505050565b601f54610100900460ff16156146235760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cf1565b61462d8282613e8b565b15801561464757506017546001600160a01b038281169116145b156112ff576001600160a01b038083166000908152600960205260409020805460ff19166001179055601f805461ff0019166101001790819055620100009004166146bc57601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61473c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147756040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061477f613ceb565b905061478b81866152e9565b608083015261479a8787613e8b565b1561484d57601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614836575060408051601f3d908101601f191682019092526148339181019061538c565b60015b61483f57600080fd5b90508061484b57600080fd5b505b83156149b6576001600160a01b03861660009081526003602052604090205460ff16156148aa576012546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614933565b6001600160a01b03871660009081526003602052604090205460ff1615614901576011546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614933565b6013546010805461ffff80841663ffffffff199092169190911766010000000000009093041662010000029190911790555b6015546010546149479061ffff16876152e9565b61495191906151e2565b60208301526015546010546149709062010000900461ffff16876152e9565b61497a91906151e2565b604083018190526020830151614990919061519b565b61499a9086615120565b825260208201516149ac9082906152e9565b60a08301526149cf565b6000602083018190526040830181905285835260a08301525b8082604001516149df91906152e9565b8260a001516149ee919061519b565b82608001516149fd9190615120565b60608301525095945050505050565b828054614a189061503f565b90600052602060002090601f016020900481019282614a3a5760008555614a80565b82601f10614a5357805160ff1916838001178555614a80565b82800160010185558215614a80579182015b82811115614a80578251825591602001919060010190614a65565b50614a8c929150614af2565b5090565b828054828255906000526020600020908101928215614a80579160200282015b82811115614a80578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190614ab0565b5b80821115614a8c5760008155600101614af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b5f57614b5f614b07565b604052919050565b600067ffffffffffffffff821115614b8157614b81614b07565b5060051b60200190565b6001600160a01b038116811461364e57600080fd5b600082601f830112614bb157600080fd5b81356020614bc6614bc183614b67565b614b36565b82815260059290921b84018101918181019086841115614be557600080fd5b8286015b84811015614c09578035614bfc81614b8b565b8352918301918301614be9565b509695505050505050565b801515811461364e57600080fd5b60008060408385031215614c3557600080fd5b823567ffffffffffffffff811115614c4c57600080fd5b614c5885828601614ba0565b9250506020830135614c6981614c14565b809150509250929050565b600060208083528351808285015260005b81811015614ca157858101830151858201604001528201614c85565b81811115614cb3576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614cdb57600080fd5b5035919050565b60008060408385031215614cf557600080fd5b8235614d0081614b8b565b946020939093013593505050565b60008060408385031215614d2157600080fd5b8235614d2c81614b8b565b91506020830135614c6981614c14565b803561ffff81168114614d4e57600080fd5b919050565b600080600060608486031215614d6857600080fd5b614d7184614d3c565b9250614d7f60208501614d3c565b9150614d8d60408501614d3c565b90509250925092565b600080600060608486031215614dab57600080fd5b8335614db681614b8b565b92506020840135614dc681614b8b565b929592945050506040919091013590565b60008060008060808587031215614ded57600080fd5b8435614df881614c14565b93506020850135614e0881614c14565b92506040850135614e1881614c14565b91506060850135614e2881614c14565b939692955090935050565b600060208284031215614e4557600080fd5b813561167281614b8b565b600082601f830112614e6157600080fd5b81356020614e71614bc183614b67565b82815260059290921b84018101918181019086841115614e9057600080fd5b8286015b84811015614c095780358352918301918301614e94565b60008060008060808587031215614ec157600080fd5b843567ffffffffffffffff80821115614ed957600080fd5b614ee588838901614ba0565b95506020870135915080821115614efb57600080fd5b614f0788838901614e50565b94506040870135915080821115614f1d57600080fd5b50614f2a87828801614e50565b9250506060850135614e2881614b8b565b600060208284031215614f4d57600080fd5b813561167281614c14565b60008060008060808587031215614f6e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215614f9d57600080fd5b614fa683614d3c565b9150614fb460208401614d3c565b90509250929050565b60008060408385031215614fd057600080fd5b8235614fdb81614b8b565b91506020830135614c6981614b8b565b604080825283519082018190526000906020906060840190828701845b8281101561502d5781516001600160a01b031684529284019290840190600101615008565b50505093151592019190915250919050565b600181811c9082168061505357607f821691505b6020821081141561508d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015615132576151326150f1565b500390565b600060001982141561514b5761514b6150f1565b5060010190565b600061ffff80831681851680830382111561516f5761516f6150f1565b01949350505050565b600061ffff83811690831681811015615193576151936150f1565b039392505050565b600082198211156151ae576151ae6150f1565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826151f1576151f16151b3565b500490565b600181815b80851115615231578160001904821115615217576152176150f1565b8085161561522457918102915b93841c93908002906151fb565b509250929050565b60008261524857506001610f42565b8161525557506000610f42565b816001811461526b576002811461527557615291565b6001915050610f42565b60ff841115615286576152866150f1565b50506001821b610f42565b5060208310610133831016604e8410600b84101617156152b4575081810a610f42565b6152be83836151f6565b80600019048211156152d2576152d26150f1565b029392505050565b600061167260ff841683615239565b6000816000190483118215151615615303576153036150f1565b500290565b600082615317576153176151b3565b500690565b60006020828403121561532e57600080fd5b815161167281614b8b565b60008060006060848603121561534e57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561537957600080fd5b5051919050565b60006116728383615239565b60006020828403121561539e57600080fd5b815161167281614c14565b6000815480845260208085019450836000528060002060005b838110156153e75781546001600160a01b0316875295820195600191820191016153c2565b509495945050505050565b8281526040602082015260006114be60408301846153a9565b6000602080838503121561541e57600080fd5b825167ffffffffffffffff81111561543557600080fd5b8301601f8101851361544657600080fd5b8051615454614bc182614b67565b81815260059190911b8201830190838101908783111561547357600080fd5b928401925b8284101561549157835182529284019290840190615478565b979650505050505050565b600060ff821660ff8114156154b3576154b36150f1565b60010192915050565b85815284602082015260a0604082015260006154db60a08301866153a9565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122071596d7ba15303d0897a31ff6d3456636d23cc3db867e26e32d0917377d30e5264736f6c634300080a0033

Deployed Bytecode Sourcemap

6094:25895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8787:21;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;8787:21:0;;;;;;;;8245:73;;;;;;;;;;;;8276:42;8245:73;;;;;-1:-1:-1;;;;;360:55:1;;;342:74;;330:2;315:18;8245:73:0;196:226:1;20251:172:0;;;;;;;;;;-1:-1:-1;20251:172:0;;;;;:::i;:::-;;:::i;:::-;;14542:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7945:26::-;;;;;;;;;;-1:-1:-1;7945:26:0;;;;-1:-1:-1;;;;;7945:26:0;;;21252:149;;;;;;;;;;-1:-1:-1;21252:149:0;;;;;:::i;:::-;;:::i;15236:161::-;;;;;;;;;;-1:-1:-1;15236:161:0;;;;;:::i;:::-;;:::i;:::-;;;4228:14:1;;4221:22;4203:41;;4191:2;4176:18;15236:161:0;4063:187:1;8008:28:0;;;;;;;;;;-1:-1:-1;8008:28:0;;;;-1:-1:-1;;;;;8008:28:0;;;18437:1139;;;;;;;;;;-1:-1:-1;18437:1139:0;;;;;:::i;:::-;;:::i;14199:161::-;;;;;;;;;;;;;:::i;7897:39::-;;;;;;;;;;;;;;;;22154:385;;;;;;;;;;-1:-1:-1;22154:385:0;;;;;:::i;:::-;;:::i;15903:306::-;;;;;;;;;;-1:-1:-1;15903:306:0;;;;;:::i;:::-;;:::i;20918:195::-;;;;;;;;;;-1:-1:-1;20918:195:0;;;;;:::i;:::-;;:::i;17885:141::-;;;;;;;;;;;;;:::i;19584:250::-;;;;;;;;;;-1:-1:-1;19584:250:0;;;;;:::i;:::-;;:::i;14366:80::-;;;;;;;;;;-1:-1:-1;14434:9:0;;14366:80;;14434:9;;;;6394:36:1;;6382:2;6367:18;14366:80:0;6252:184:1;20802:108:0;;;;;;;;;;-1:-1:-1;20802:108:0;;;;;:::i;:::-;;:::i;17731:146::-;;;;;;;;;;-1:-1:-1;17731:146:0;;;;;:::i;:::-;;:::i;16217:215::-;;;;;;;;;;-1:-1:-1;16217:215:0;;;;;:::i;:::-;;:::i;10291:2086::-;;;;;;;;;;-1:-1:-1;10291:2086:0;;;;;:::i;:::-;;:::i;7978:21::-;;;;;;;;;;-1:-1:-1;7978:21:0;;;;-1:-1:-1;;;;;7978:21:0;;;8675:34;;;;;;;;;;-1:-1:-1;8675:34:0;;;;;;;;13053:590;;;;;;;;;;-1:-1:-1;13053:590:0;;;;;:::i;:::-;;:::i;18034:125::-;;;;;;;;;;-1:-1:-1;18034:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18123:28:0;18099:4;18123:28;;;:19;:28;;;;;;;;;18034:125;8716:36;;;;;;;;;;-1:-1:-1;8716:36:0;;;;;;;;;;;8968:37;;;;;;;;;;-1:-1:-1;8968:37:0;;;;;;;;21413:360;;;;;;;;;;-1:-1:-1;21413:360:0;;;;;:::i;:::-;;:::i;20690:104::-;;;;;;;;;;;;;:::i;18167:134::-;;;;;;;;;;-1:-1:-1;18167:134:0;;;;;:::i;:::-;;:::i;19842:248::-;;;;;;;;;;-1:-1:-1;19842:248:0;;;;;:::i;:::-;;:::i;23050:120::-;;;;;;;;;;-1:-1:-1;23050:120:0;;;;;:::i;:::-;;:::i;14855:198::-;;;;;;;;;;-1:-1:-1;14855:198:0;;;;;:::i;:::-;;:::i;13651:195::-;;;;;;;;;;;;;:::i;7330:139::-;;;;;;;;;;-1:-1:-1;7330:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8801:6:1;8834:15;;;8816:34;;8886:15;;;8881:2;8866:18;;8859:43;8938:15;;;8918:18;;;8911:43;;;;8990:15;;;8985:2;8970:18;;8963:43;8778:3;8763:19;7330:139:0;8568:444:1;17223:500:0;;;;;;;;;;-1:-1:-1;17223:500:0;;;;;:::i;:::-;;:::i;18309:120::-;;;;;;;;;;-1:-1:-1;18309:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18401:20:0;18377:4;18401:20;;;:11;:20;;;;;;;;;18309:120;14628:80;;;;;;;;;;-1:-1:-1;14680:7:0;13031:6;-1:-1:-1;;;;;13031:6:0;14628:80;17885:141;21781:365;;;;;;;;;;-1:-1:-1;21781:365:0;;;;;:::i;:::-;;:::i;15722:173::-;;;;;;;;;;;;;:::i;27500:563::-;;;;;;;;;;;;;:::i;21121:123::-;;;;;;;;;;-1:-1:-1;21121:123:0;;;;;:::i;:::-;;:::i;14452:84::-;;;;;;;;;;;;;:::i;8923:38::-;;;;;;;;;;;;;;;;16440:225;;;;;;;;;;-1:-1:-1;16440:225:0;;;;;:::i;:::-;;:::i;15061:167::-;;;;;;;;;;-1:-1:-1;15061:167:0;;;;;:::i;:::-;;:::i;22765:277::-;;;;;;;;;;-1:-1:-1;22765:277:0;;;;;:::i;:::-;;:::i;22547:210::-;;;;;;;;;;-1:-1:-1;22547:210:0;;;;;:::i;:::-;;:::i;9012:38::-;;;;;;;;;;-1:-1:-1;9012:38:0;;;;;;;;;;;7627:144;;;;;;;;;;-1:-1:-1;7627:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7478:140;;;;;;;;;;-1:-1:-1;7478:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20431:118;;;;;;;;;;-1:-1:-1;20431:118:0;;;;;:::i;:::-;;:::i;23610:165::-;;;;;;;;;;-1:-1:-1;23610:165:0;;;;;:::i;:::-;;:::i;7780:108::-;;;;;;;;;;-1:-1:-1;7780:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;9874:6:1;9907:15;;;9889:34;;9959:15;;;9954:2;9939:18;;9932:43;10011:15;;9991:18;;;9984:43;;;;9852:2;9837:18;7780:108:0;9668:365:1;8879:37:0;;;;;;;;;;;;;;;;14714:133;;;;;;;;;;-1:-1:-1;14714:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14816:19:0;;;14798:7;14816:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14714:133;16673:542;;;;;;;;;;-1:-1:-1;16673:542:0;;;;;:::i;:::-;;:::i;23475:127::-;;;;;;;;;;-1:-1:-1;23475:127:0;;;;;:::i;:::-;;:::i;28071:183::-;;;;;;;;;;;;;:::i;20098:145::-;;;;;;;;;;-1:-1:-1;20098:145:0;;;;;:::i;:::-;;:::i;8397:128::-;;;;;;;;;;-1:-1:-1;8397:128:0;;;;-1:-1:-1;;;;;8397:128:0;;;23178:289;;;;;;;;;;-1:-1:-1;23178:289:0;;;;;:::i;:::-;;:::i;8556:39::-;;;;;;;;;;-1:-1:-1;8556:39:0;;;;;;;;;;;20557:125;;;;;;;;;;-1:-1:-1;20557:125:0;;;;;:::i;:::-;;:::i;20251:172::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;;;;;;;;;20359:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20359:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20397:8;;20407:7;;20359:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20251:172:::0;;:::o;14542:80::-;14590:13;14614:5;14607:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14542:80;:::o;21252:149::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;21336:2:::1;21329:3;:9;;21321:30;;;::::0;-1:-1:-1;;;21321:30:0;;12697:2:1;21321:30:0::1;::::0;::::1;12679:21:1::0;12736:1;12716:18;;;12709:29;12774:10;12754:18;;;12747:38;12802:18;;21321:30:0::1;12495:331:1::0;21321:30:0::1;21362:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;160:25:1::0;;;21362:9:0;;;::::1;-1:-1:-1::0;;;;;21362:9:0::1;::::0;:26:::1;::::0;133:18:1;;21362:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21252:149:::0;:::o;15236:161::-;15311:4;15328:39;189:10;15351:7;15360:6;15328:8;:39::i;:::-;-1:-1:-1;15385:4:0;15236:161;;;;;:::o;18437:1139::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;18542:4:::1;18531:15:::0;::::1;;;18527:1042;;;-1:-1:-1::0;;;;;18572:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18571:21;18563:62;;;::::0;-1:-1:-1;;;18563:62:0;;13033:2:1;18563:62:0::1;::::0;::::1;13015:21:1::0;13072:2;13052:18;;;13045:30;13111;13091:18;;;13084:58;13159:18;;18563:62:0::1;12831:352:1::0;18563:62:0::1;-1:-1:-1::0;;;;;18643:16:0;::::1;18662:1;18643:16:::0;;;:7:::1;:16;::::0;;;;;:20;18640:116:::1;;-1:-1:-1::0;;;;;18723:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18703:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18684:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18640:116:::1;-1:-1:-1::0;;;;;;18770:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18770:27:0::1;18793:4;18770:27:::0;;::::1;::::0;;;18812:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;18812:23:0::1;::::0;;::::1;::::0;;18437:1139::o;18527:1042::-:1;18857:16:::0;18853:716:::1;;-1:-1:-1::0;;;;;18898:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18890:61;;;::::0;-1:-1:-1;;;18890:61:0;;13390:2:1;18890:61:0::1;::::0;::::1;13372:21:1::0;13429:2;13409:18;;;13402:30;13468;13448:18;;;13441:58;13516:18;;18890:61:0::1;13188:352:1::0;18890:61:0::1;18969:9;:16:::0;18989:1:::1;18969:21;18966:592;;;-1:-1:-1::0;;;;;19010:16:0;::::1;19029:1;19010:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;19049:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;19049:28:0::1;::::0;;19096:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19096:15:0;;;;;-1:-1:-1;;19096:15:0::1;::::0;;;;;18437:1139;;:::o;18966:592::-:1;19157:9;19152:391;19176:9;:16:::0;19172:20;::::1;19152:391;;;19242:7;-1:-1:-1::0;;;;;19226:23:0::1;:9;19236:1;19226:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19226:12:0::1;:23;19222:302;;;19293:9;19303:16:::0;;:20:::1;::::0;19322:1:::1;::::0;19303:20:::1;:::i;:::-;19293:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19278:9:::1;:12:::0;;-1:-1:-1;;;;;19293:31:0;;::::1;::::0;19288:1;;19278:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19278:46:0::1;-1:-1:-1::0;;;;;19278:46:0;;::::1;;::::0;;19351:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19398:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19398:28:0::1;::::0;;19453:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19453:15:0;;;;;-1:-1:-1;;19453:15:0::1;::::0;;;;;19495:5:::1;;19222:302;19194:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19152:391;;;;18966:592;18437:1139:::0;;:::o;14199:161::-;14254:7;14278;;14289:1;14278:12;14274:53;;;14307:8;;;14274:53;-1:-1:-1;14344:7:0;;;14199:161::o;22154:385::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;22262:12:::1;22299:9:::0;22277:19:::1;22287:9:::0;22277:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;22262:46;;22336:4;22327:5;:13;;;;22319:22;;;::::0;::::1;;22352:14;:36:::0;;::::1;22442::::0;;::::1;::::0;::::1;::::0;22352;;::::1;::::0;::::1;22442::::0;;;;;;;;;22399:32;;::::1;22442:36:::0;::::1;::::0;;22516:15:::1;22424:7:::0;22516:5;:15:::1;:::i;:::-;22489:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;22154:385:0:o;15903:306::-;-1:-1:-1;;;;;16024:19:0;;16003:4;16024:19;;;:11;:19;;;;;;;;16044:10;16024:31;;;;;;;;-1:-1:-1;;16024:52:0;16020:126;;-1:-1:-1;;;;;16093:19:0;;;;;;:11;:19;;;;;;;;16113:10;16093:31;;;;;;;:41;;16128:6;;16093:19;:41;;16128:6;;16093:41;:::i;:::-;;;;-1:-1:-1;;16020:126:0;16165:36;16175:6;16183:9;16194:6;16165:9;:36::i;:::-;16158:43;15903:306;-1:-1:-1;;;;15903:306:0:o;20918:195::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;21040:9:::1;::::0;:65:::1;::::0;;;;15125:14:1;;15118:22;21040:65:0::1;::::0;::::1;15100:41:1::0;15184:14;;15177:22;15157:18;;;15150:50;15243:14;;15236:22;15216:18;;;15209:50;15302:14;;15295:22;15275:18;;;15268:50;21040:9:0;;;::::1;-1:-1:-1::0;;;;;21040:9:0::1;::::0;:24:::1;::::0;15072:19:1;;21040:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20918:195:::0;;;;:::o;17885:141::-;17938:7;17995:21;18013:1;17995:9;:21::i;:::-;17977:15;8276:42;17977:9;:15::i;:::-;:39;;;;:::i;:::-;17966:7;;:51;;;;:::i;:::-;17958:60;;17885:141;:::o;19584:250::-;19650:7;19689;;19678;:18;;19670:73;;;;-1:-1:-1;;;19670:73:0;;15664:2:1;19670:73:0;;;15646:21:1;15703:2;15683:18;;;15676:30;15742:34;15722:18;;;15715:62;15813:12;15793:18;;;15786:40;15843:19;;19670:73:0;15462:406:1;19670:73:0;19754:19;19777:10;:8;:10::i;:::-;19754:33;-1:-1:-1;19805:21:0;19754:33;19805:7;:21;:::i;:::-;19798:28;19584:250;-1:-1:-1;;;19584:250:0:o;20802:108::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;20871:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;360:55:1;;;20871:31:0::1;::::0;::::1;342:74:1::0;20871:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;315:18:1;;20871:31:0::1;196:226:1::0;17731:146:0;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;17819:16:::1;::::0;::::1;::::0;::::1;;;17818:17;17810:26;;;::::0;::::1;;17847:13;:22:::0;;-1:-1:-1;;17847:22:0::1;-1:-1:-1::0;;;;;17847:22:0;;;::::1;::::0;;;::::1;::::0;;17731:146::o;16217:215::-;189:10;16305:4;16354:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16354:34:0;;;;;;;;;;16305:4;;16322:80;;16345:7;;16354:47;;16391:10;;16354:47;:::i;:::-;16322:8;:80::i;10291:2086::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;10457:19:::1;::::0;::::1;;10456:20;10448:34;;;::::0;-1:-1:-1;;;10448:34:0;;16389:2:1;10448:34:0::1;::::0;::::1;16371:21:1::0;16428:1;16408:18;;;16401:29;16466:3;16446:18;;;16439:31;16487:18;;10448:34:0::1;16187:324:1::0;10448:34:0::1;10519:3;10501:8;:15;:21;10493:35;;;::::0;-1:-1:-1;;;10493:35:0;;16718:2:1;10493:35:0::1;::::0;::::1;16700:21:1::0;16757:1;16737:18;;;16730:29;16795:3;16775:18;;;16768:31;16816:18;;10493:35:0::1;16516:324:1::0;10493:35:0::1;10566:7;:14;10547:8;:15;:33;10539:47;;;::::0;-1:-1:-1;;;10539:47:0;;17047:2:1;10539:47:0::1;::::0;::::1;17029:21:1::0;17086:1;17066:18;;;17059:29;17124:3;17104:18;;;17097:31;17145:18;;10539:47:0::1;16845:324:1::0;10539:47:0::1;10623:8;:15;10605:7;:14;:33;10597:47;;;::::0;-1:-1:-1;;;10597:47:0;;17376:2:1;10597:47:0::1;::::0;::::1;17358:21:1::0;17415:1;17395:18;;;17388:29;17453:3;17433:18;;;17426:31;17474:18;;10597:47:0::1;17174:324:1::0;10597:47:0::1;10672:30;10655:14;:47:::0;10713:9:::1;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;10713:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;10768:9;;::::1;;10757:99;;10808:9;:36:::0;;;::::1;10838:4;10808:36:::0;::::1;;::::0;;10757:99:::1;10870:9;::::0;:33:::1;::::0;;;;10897:4:::1;10870:33;::::0;::::1;342:74:1::0;10870:9:0;;;::::1;-1:-1:-1::0;;;;;10870:9:0::1;::::0;:18:::1;::::0;315::1;;10870:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10866:49:::0;10946:11:::1;10929:14;;:28;10925:121;;;10974:9;:14:::0;;-1:-1:-1;;10974:14:0::1;10986:2;10974:14;::::0;;10925:121:::1;;;11021:9;:13:::0;;-1:-1:-1;;11021:13:0::1;11033:1;11021:13;::::0;;10925:121:::1;11088:9;::::0;11084:13:::1;::::0;11088:9:::1;;11084:2;:13;:::i;:::-;11066:14;;:32;;;;:::i;:::-;11056:7;:42:::0;;;11135:21:::1;::::0;-1:-1:-1;;11135:21:0::1;:::i;:::-;11120:37;::::0;-1:-1:-1;;11120:37:0::1;:::i;:::-;11109:7;:49:::0;11169:17:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:17:::1;:::i;:::-;-1:-1:-1::0;11197:16:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:16:::1;:::i;:::-;-1:-1:-1::0;11246:13:0::1;::::0;11224:9:::1;:36:::0;;-1:-1:-1;;11224:36:0::1;-1:-1:-1::0;;;;;11246:13:0;;::::1;11224:36:::0;;::::1;::::0;;11291:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;11246:13;11291:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11280:42:0::1;;11323:9;;;;;;;;;-1:-1:-1::0;;;;;11323:9:0::1;-1:-1:-1::0;;;;;11323:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11280:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19865:15:1;;;11280:75:0::1;::::0;::::1;19847:34:1::0;11349:4:0::1;19897:18:1::0;;;19890:43;19759:18;;11280:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11271:6;:84:::0;;-1:-1:-1;;;;;11271:84:0;;;::::1;-1:-1:-1::0;;11271:84:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;11366:15:0;;;:7:::1;:15;::::0;;;;;;:22;;-1:-1:-1;;11366:22:0::1;-1:-1:-1::0;11366:22:0::1;::::0;;11414:16;;11428:1:::1;11414:16:::0;;;;;::::1;::::0;;;;::::1;;;;;;;;;;-1:-1:-1::0;;11407:23:0;;::::1;::::0;:4:::1;::::0;-1:-1:-1;11407:23:0::1;;::::0;::::1;:::i;:::-;;11459:4;11441;11446:1;11441:7;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;:23:::0;;-1:-1:-1;;11441:23:0::1;-1:-1:-1::0;;;;;11441:23:0;;::::1;;::::0;;11485:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;11441:7;;11485:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11475:4;11480:1;11475:7;;;;;;;;:::i;:::-;;;;;;;;;:26;;;;;-1:-1:-1::0;;;;;11475:26:0::1;;;;;-1:-1:-1::0;;;;;11475:26:0::1;;;;;;11544:5;11529:7;;11539:1;11529:11;;;;:::i;:::-;11528:21;;;;:::i;:::-;11512:13;:37:::0;11574:7:::1;::::0;11590:5:::1;::::0;11574:12:::1;::::0;11584:2:::1;11574:12;:::i;:::-;11573:22;;;;:::i;:::-;11560:10;:35:::0;11606:19:::1;:26:::0;;-1:-1:-1;;11606:26:0::1;11628:4;11606:26:::0;;::::1;::::0;;;11667:7:::1;::::0;;11606:19:::1;11656:7;13004::::0;13031:6;-1:-1:-1;;;;;13031:6:0;;12966:79;11656:7:::1;-1:-1:-1::0;;;;;11648:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11648:16:0;:26;11711:7:::1;13004::::0;13031:6;-1:-1:-1;;;;;13031:6:0;;12966:79;11711:7:::1;-1:-1:-1::0;;;;;11690:38:0::1;11707:1;-1:-1:-1::0;;;;;11690:38:0::1;;11720:7;;11690:38;;;;160:25:1::0;;148:2;133:18;;14:177;11690:38:0::1;;;;;;;;11773:9;::::0;11741:62:::1;::::0;11758:4:::1;::::0;-1:-1:-1;;;;;11773:9:0::1;-1:-1:-1::0;;11741:8:0::1;:62::i;:::-;11820:9;11816:176;11839:8;:15;11835:1;:19;11816:176;;;11875:14;11915:8;11924:1;11915:11;;;;;;;;:::i;:::-;;;;;;;11901:7;11909:1;11901:10;;;;;;;;:::i;:::-;;;;;;;11893:7;;:18;;;;:::i;:::-;11892:34;;;;:::i;:::-;11875:51;;11941:39;11951:7;13004::::0;13031:6;-1:-1:-1;;;;;13031:6:0;;12966:79;11951:7:::1;11960:8;11969:1;11960:11;;;;;;;;:::i;:::-;;;;;;;11973:6;11941:9;:39::i;:::-;;11860:132;11856:3;;;;;:::i;:::-;;;;11816:176;;;;12004:53;12014:7;13004::::0;13031:6;-1:-1:-1;;;;;13031:6:0;;12966:79;12014:7:::1;12031:4;12038:18;12048:7;13004::::0;13031:6;-1:-1:-1;;;;;13031:6:0;;12966:79;12038:18:::1;12004:9;:53::i;:::-;-1:-1:-1::0;12070:9:0::1;::::0;-1:-1:-1;;;;;12070:9:0::1;:25;12103:21;12148:4;12168:24;12148:4:::0;12168:9:::1;:24::i;:::-;12207:1;12250::::0;12293:7:::1;13004::::0;13031:6;-1:-1:-1;;;;;13031:6:0;;12966:79;12293:7:::1;12070:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;20326:15:1;;;12070:271:0::1;::::0;::::1;20308:34:1::0;20358:18;;;20351:34;;;;20401:18;;;20394:34;;;;20444:18;;;20437:34;20508:15;;;20487:19;;;20480:44;12315:15:0::1;20540:19:1::0;;;20533:35;20219:19;;12070:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12354:15;:13;:15::i;:::-;10291:2086:::0;;;;:::o;13053:590::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;-1:-1:-1;;;;;13134:22:0;::::1;13126:96;;;::::0;-1:-1:-1;;;13126:96:0;;21092:2:1;13126:96:0::1;::::0;::::1;21074:21:1::0;21131:2;21111:18;;;21104:30;21170:34;21150:18;;;21143:62;21241:31;21221:18;;;21214:59;21290:19;;13126:96:0::1;20890:425:1::0;13126:96:0::1;-1:-1:-1::0;;;;;13241:16:0;::::1;8276:42;13241:16;;13233:90;;;::::0;-1:-1:-1;;;13233:90:0;;21092:2:1;13233:90:0::1;::::0;::::1;21074:21:1::0;21131:2;21111:18;;;21104:30;21170:34;21150:18;;;21143:62;21241:31;21221:18;;;21214:59;21290:19;;13233:90:0::1;20890:425:1::0;13233:90:0::1;13354:6;::::0;;13334:34:::1;::::0;-1:-1:-1;;;;;13354:6:0;;::::1;::::0;13334:19:::1;:34::i;:::-;13379:35;13399:8;13409:4;13379:19;:35::i;:::-;13458:1;13448:6:::0;;13438:17:::1;::::0;-1:-1:-1;;;;;13448:6:0::1;13438:9;:17::i;:::-;:21;13435:99;;;13486:6;::::0;13476:46:::1;::::0;-1:-1:-1;;;;;13486:6:0::1;13494:8:::0;13504:17:::1;13486:6:::0;13504:9:::1;:17::i;13476:46::-;;13435:99;13554:6;:17:::0;;-1:-1:-1;;13554:17:0::1;-1:-1:-1::0;;;;;13554:17:0;::::1;::::0;;::::1;::::0;;13587:38:::1;::::0;13554:17;;;;13587:38:::1;::::0;13554:6;13587:38:::1;13053:590:::0;:::o;21413:360::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;21516:12:::1;21553:9:::0;21531:19:::1;21541:9:::0;21531:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;21516:46;;21590:4;21581:5;:13;;;;21573:22;;;::::0;::::1;;21606:9;:31:::0;;::::1;21686::::0;;::::1;::::0;::::1;::::0;21606;;::::1;::::0;::::1;21686::::0;;;;;;;;;21648:27;;::::1;21686:31:::0;::::1;::::0;;21750:15:::1;21668:7:::0;21750:5;:15:::1;:::i;:::-;21728:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;21413:360:0:o;20690:104::-;20735:7;20762:9;;;;;;;;;-1:-1:-1;;;;;20762:9:0;-1:-1:-1;;;;;20762:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18167:134::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;-1:-1:-1;;;;;18255:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18255:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18167:134::o;19842:248::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;19926:16:::1;::::0;::::1;::::0;::::1;;;19925:17;19917:54;;;::::0;-1:-1:-1;;;19917:54:0;;21711:2:1;19917:54:0::1;::::0;::::1;21693:21:1::0;21750:2;21730:18;;;21723:30;21789:26;21769:18;;;21762:54;21833:18;;19917:54:0::1;21509:348:1::0;19917:54:0::1;-1:-1:-1::0;;;;;19990:28:0;::::1;20013:4;19990:28;;19982:55;;;::::0;-1:-1:-1;;;19982:55:0;;22064:2:1;19982:55:0::1;::::0;::::1;22046:21:1::0;22103:2;22083:18;;;22076:30;22142:16;22122:18;;;22115:44;22176:18;;19982:55:0::1;21862:338:1::0;19982:55:0::1;20048:9;:34:::0;;-1:-1:-1;;;;;20048:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19842:248::o;23050:120::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;23128:19:::1;:34:::0;;;::::1;;;;-1:-1:-1::0;;23128:34:0;;::::1;::::0;;;::::1;::::0;;23050:120::o;14855:198::-;-1:-1:-1;;;;;14945:20:0;;14921:7;14945:20;;;:11;:20;;;;;;;;14941:49;;;-1:-1:-1;;;;;;14974:16:0;;;;;:7;:16;;;;;;;14855:198::o;14941:49::-;-1:-1:-1;;;;;15028:16:0;;;;;;:7;:16;;;;;;15008:37;;:19;:37::i;13651:195::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;13738:6:::1;::::0;;13718:34:::1;::::0;-1:-1:-1;;;;;13738:6:0;;::::1;::::0;13718:19:::1;:34::i;:::-;13780:1;13763:19:::0;;-1:-1:-1;;13763:19:0::1;::::0;;13798:40:::1;::::0;13780:1;;13798:40:::1;::::0;13780:1;;13798:40:::1;13651:195::o:0;17223:500::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;17304:16;17300:416:::1;;-1:-1:-1::0;;;;;17337:13:0;;::::1;17353:5;17337:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17337:21:0::1;::::0;;17373:9:::1;::::0;:32;;;;;::::1;::::0;::::1;22373:74:1::0;;;;22463:18;;;22456:50;;;;17373:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22346:18:1;;17373:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17300:416;17442:17;::::0;:22;17438:136:::1;;17531:6;17511:17;;17493:15;:35;;;;:::i;:::-;:44;17485:73;;;::::0;-1:-1:-1;;;17485:73:0;;22719:2:1;17485:73:0::1;::::0;::::1;22701:21:1::0;22758:2;22738:18;;;22731:30;22797:18;22777;;;22770:46;22833:18;;17485:73:0::1;22517:340:1::0;17485:73:0::1;-1:-1:-1::0;;;;;17588:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17588:20:0::1;17604:4;17588:20:::0;;::::1;::::0;;;17643:15:::1;17623:17;:35:::0;;;17673:9:::1;::::0;:31;;;;;;;::::1;22373:74:1::0;;;;22463:18;;;22456:50;17673:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22346:18:1;;17673:31:0::1;22205:307:1::0;21781:365:0;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;21885:12:::1;21922:9:::0;21900:19:::1;21910:9:::0;21900:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;21885:46;;21959:4;21950:5;:13;;;;21942:22;;;::::0;::::1;;21975:10;:32:::0;;::::1;22057::::0;;::::1;::::0;::::1;::::0;21975;;::::1;::::0;::::1;22057::::0;;;;;;;;;22018:28;;::::1;22057:32:::0;::::1;::::0;;22123:15:::1;22039:7:::0;22123:5;:15:::1;:::i;:::-;22100:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;21781:365:0:o;15722:173::-;15786:4;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;15835:9:::1;::::0;15803:62:::1;::::0;15820:4:::1;::::0;-1:-1:-1;;;;;15835:9:0::1;-1:-1:-1::0;;15803:8:0::1;:62::i;:::-;-1:-1:-1::0;15883:4:0::1;15722:173:::0;:::o;27500:563::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;27562:14:::1;::::0;::::1;;27561:15;27553:52;;;::::0;-1:-1:-1;;;27553:52:0;;23064:2:1;27553:52:0::1;::::0;::::1;23046:21:1::0;23103:2;23083:18;;;23076:30;23142:26;23122:18;;;23115:54;23186:18;;27553:52:0::1;22862:348:1::0;27553:52:0::1;27624:16;::::0;::::1;::::0;::::1;;;27616:53;;;::::0;-1:-1:-1;;;27616:53:0;;23417:2:1;27616:53:0::1;::::0;::::1;23399:21:1::0;23456:2;23436:18;;;23429:30;23495:26;23475:18;;;23468:54;23539:18;;27616:53:0::1;23215:348:1::0;27616:53:0::1;27680:42;27710:4;27717;27680:21;:42::i;:::-;27755:6;::::0;27733:35:::1;::::0;-1:-1:-1;;;;;27755:6:0::1;::::0;27733:21:::1;:35::i;:::-;27790:9;::::0;;;::::1;-1:-1:-1::0;;;;;27790:9:0::1;27779:99;;27830:9;:36:::0;;;::::1;27860:4;27830:36:::0;::::1;;::::0;;27779:99:::1;27892:9;::::0;27912:6:::1;::::0;27967:9:::1;::::0;27892:85:::1;::::0;;;;-1:-1:-1;;;;;27912:6:0;;::::1;27892:85;::::0;::::1;23791:74:1::0;23913:10;27927:12:0::1;23901:23:1::0;23881:18;;;23874:51;23973:18;27949:15:0::1;23961:31:1::0;23941:18;;;23934:59;27967:9:0::1;::::0;;::::1;24009:18:1::0;;;24002:45;27892:9:0;;;::::1;;::::0;:19:::1;::::0;23763::1;;27892:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27888:101:::0;27999:14:::1;:21:::0;;-1:-1:-1;;27999:21:0::1;28016:4;27999:21;::::0;;28040:15:::1;28031:6;:24:::0;27500:563::o;21121:123::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;21196:9:::1;::::0;:40:::1;::::0;;;;4228:14:1;;4221:22;21196:40:0::1;::::0;::::1;4203:41:1::0;21196:9:0;;;::::1;-1:-1:-1::0;;;;;21196:9:0::1;::::0;:31:::1;::::0;4176:18:1;;21196:40:0::1;4063:187:1::0;14452:84:0;14502:13;14526:7;14519:14;;;;;:::i;16440:225::-;189:10;16533:4;16582:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16582:34:0;;;;;;;;;;16533:4;;16550:85;;16573:7;;16582:52;;16619:15;;16582:52;:::i;15061:167::-;15139:4;15156:42;189:10;15180:9;15191:6;15156:9;:42::i;:::-;-1:-1:-1;15216:4:0;;15061:167;-1:-1:-1;;;15061:167:0:o;22765:277::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;22906:11:::1;22910:7:::0;22906:2:::1;:11;:::i;:::-;22897:20;::::0;:6;:20:::1;:::i;:::-;22885:9;:32:::0;22951:12:::1;22955:8:::0;22951:2:::1;:12;:::i;:::-;22941:22;::::0;:7;:22:::1;:::i;:::-;22928:10;:35:::0;22982:9:::1;::::0;22995:10:::1;-1:-1:-1::0;22982:23:0;::::1;::::0;:51:::1;;;23023:10;23009;;:24;;22982:51;22974:60;;;::::0;::::1;22547:210:::0;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;22632:7:::1;:29:::0;;::::1;22672::::0;;::::1;::::0;::::1;-1:-1:-1::0;;22672:29:0;;;22632;;::::1;22672::::0;::::1;::::0;;22728:21:::1;22692:9:::0;22652;22728:21:::1;:::i;:::-;22712:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;22547:210:0:o;20431:118::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;20505:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;360:55:1;;;20505:36:0::1;::::0;::::1;342:74:1::0;20505:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;315:18:1;;20505:36:0::1;196:226:1::0;23610:165:0;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;23685:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;23685:30:0;;::::1;;::::0;;23731:36:::1;::::0;::::1;::::0;::::1;::::0;23707:8;4228:14:1;4221:22;4203:41;;4191:2;4176:18;;4063:187;23731:36:0::1;;;;;;;;23610:165:::0;:::o;16673:542::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;16744:20:::1;16777:9;16744:43;;16798:16;16828:10;-1:-1:-1::0;;;;;16828:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16817:40:0::1;;16866:4;16873:10;-1:-1:-1::0;;;;;16873:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16817:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19865:15:1;;;16817:74:0::1;::::0;::::1;19847:34:1::0;19917:15;;19897:18;;;19890:43;19759:18;;16817:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16798:93:::0;-1:-1:-1;;;;;;16906:22:0;::::1;16902:200;;16965:10;-1:-1:-1::0;;;;;16965:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16954:43:0::1;;17006:4;17013:10;-1:-1:-1::0;;;;;17013:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16954:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19865:15:1;;;16954:77:0::1;::::0;::::1;19847:34:1::0;19917:15;;19897:18;;;19890:43;19759:18;;16954:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16945:6;:86:::0;;-1:-1:-1;;16945:86:0::1;-1:-1:-1::0;;;;;16945:86:0;;;::::1;::::0;;;::::1;::::0;;16902:200:::1;;;17073:6;:17:::0;;-1:-1:-1;;17073:17:0::1;-1:-1:-1::0;;;;;17073:17:0;::::1;;::::0;;16902:200:::1;17112:9;:22:::0;;-1:-1:-1;;17112:22:0::1;-1:-1:-1::0;;;;;17112:22:0;::::1;::::0;;::::1;::::0;;;17145:62:::1;::::0;17162:4:::1;::::0;-1:-1:-1;;17145:8:0::1;:62::i;23475:127::-:0;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;23552:11:::1;:42:::0;;-1:-1:-1;;23552:42:0::1;-1:-1:-1::0;;;;;23552:42:0;;;::::1;::::0;;;::::1;::::0;;23475:127::o;28071:183::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;28138:16:::1;::::0;::::1;::::0;::::1;;;28137:17;28129:58;;;::::0;-1:-1:-1;;;28129:58:0;;24396:2:1;28129:58:0::1;::::0;::::1;24378:21:1::0;24435:2;24415:18;;;24408:30;24474;24454:18;;;24447:58;24522:18;;28129:58:0::1;24194:352:1::0;28129:58:0::1;13004:7:::0;13031:6;;28198:48:::1;::::0;-1:-1:-1;;;;;13031:6:0;;;;28224:21:::1;28198:48:::0;::::1;;;::::0;28224:21;;28198:48;13004:7;28198:48;28224:21;13031:6;28198:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28071:183::o:0;20098:145::-;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;20188:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;22391:55:1;;;20188:47:0::1;::::0;::::1;22373:74:1::0;22490:14;;22483:22;22463:18;;;22456:50;20188:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;22346:18:1;;20188:47:0::1;22205:307:1::0;23178:289:0;9595:6;;-1:-1:-1;;;;;9595:6:0;189:10;9595:22;9587:52;;;;-1:-1:-1;;;9587:52:0;;11140:2:1;9587:52:0;;;11122:21:1;11179:2;11159:18;;;11152:30;-1:-1:-1;;;11198:18:1;;;11191:47;11255:18;;9587:52:0;10938:341:1;9587:52:0;23378:16:::1;23358;23348:7;;:26;;;;:::i;:::-;23347:47;;;;:::i;:::-;23331:13;:63:::0;23419:7:::1;::::0;23446:13;;23419:23:::1;::::0;23429:13;;23419:23:::1;:::i;:::-;23418:41;;;;:::i;:::-;23405:10;:54:::0;-1:-1:-1;;;;23178:289:0:o;20557:125::-;20642:9;;:32;;;;;-1:-1:-1;;;;;360:55:1;;;20642:32:0;;;342:74:1;20618:4:0;;20642:9;;;;;:23;;315:18:1;;20642:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15405:309::-;-1:-1:-1;;;;;15499:20:0;;15491:52;;;;-1:-1:-1;;;15491:52:0;;25003:2:1;15491:52:0;;;24985:21:1;25042:2;25022:18;;;25015:30;25081:21;25061:18;;;25054:49;25120:18;;15491:52:0;24801:343:1;15491:52:0;-1:-1:-1;;;;;15562:21:0;;15554:53;;;;-1:-1:-1;;;15554:53:0;;25003:2:1;15554:53:0;;;24985:21:1;25042:2;25022:18;;;25015:30;25081:21;25061:18;;;25054:49;25120:18;;15554:53:0;24801:343:1;15554:53:0;-1:-1:-1;;;;;15620:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15673:33;;160:25:1;;;15673:33:0;;133:18:1;15673:33:0;;;;;;;15405:309;;;:::o;24114:1471::-;24193:4;-1:-1:-1;;;;;24218:18:0;;24210:68;;;;-1:-1:-1;;;24210:68:0;;25351:2:1;24210:68:0;;;25333:21:1;25390:2;25370:18;;;25363:30;25429:34;25409:18;;;25402:62;25500:7;25480:18;;;25473:35;25525:19;;24210:68:0;25149:401:1;24210:68:0;-1:-1:-1;;;;;24297:16:0;;24289:64;;;;-1:-1:-1;;;24289:64:0;;25757:2:1;24289:64:0;;;25739:21:1;25796:2;25776:18;;;25769:30;25835:34;25815:18;;;25808:62;25906:5;25886:18;;;25879:33;25929:19;;24289:64:0;25555:399:1;24289:64:0;24381:1;24372:6;:10;24364:64;;;;-1:-1:-1;;;24364:64:0;;26161:2:1;24364:64:0;;;26143:21:1;26200:2;26180:18;;;26173:30;26239:34;26219:18;;;26212:62;26310:11;26290:18;;;26283:39;26339:19;;24364:64:0;25959:405:1;24364:64:0;-1:-1:-1;;;;;24472:25:0;;24439:12;24472:25;;;:19;:25;;;;;;24454:4;;24472:25;;;:52;;-1:-1:-1;;;;;;24501:23:0;;;;;;:19;:23;;;;;;;;24472:52;24469:98;;;-1:-1:-1;24550:5:0;24469:98;24582:20;24593:4;24599:2;24582:10;:20::i;:::-;24579:481;;;24623:14;;;;24619:89;;24658:34;;-1:-1:-1;;;24658:34:0;;26571:2:1;24658:34:0;;;26553:21:1;26610:2;26590:18;;;26583:30;26649:26;26629:18;;;26622:54;26693:18;;24658:34:0;26369:348:1;24619:89:0;24743:9;;:37;;;;;24722:18;;-1:-1:-1;;;;;24743:9:0;;:23;;:37;;24767:6;;24775:4;;24743:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24743:37:0;;;;;;;;;;;;:::i;:::-;24781:1;24743:40;;;;;;;;:::i;:::-;;;;;;;24722:61;;24802:19;;;;;;;;;;;24798:251;;;-1:-1:-1;;;;;24845:13:0;;;;;;:7;:13;;;;;;;;24842:192;;;24905:9;;24891:10;:23;;24883:32;;;;;;24842:192;;;-1:-1:-1;;;;;24945:11:0;;;;;;:7;:11;;;;;;;;24941:93;;;25003:10;;24989;:24;;24981:33;;;;;;24604:456;24579:481;-1:-1:-1;;;;;25076:11:0;;;;;;:7;:11;;;;;;;;25072:443;;;25109:6;;;;25108:7;:47;;;;-1:-1:-1;25136:19:0;;;;;;;25108:47;25104:394;;;25190:28;25221:24;25239:4;25221:9;:24::i;:::-;25190:55;;25292:13;;25268:20;:37;25264:219;;25357:10;;25333:20;:34;25330:77;;-1:-1:-1;25394:10:0;;25330:77;25429:34;25442:20;25429:12;:34::i;:::-;25171:327;25104:394;25533:44;25551:4;25557:2;25561:6;25569:7;25533:17;:44::i;:::-;25526:51;24114:1471;-1:-1:-1;;;;;24114:1471:0:o;31462:524::-;31542:7;;31578;;31504;;31542;31504;31596:280;31618:9;:16;31614:20;;;;31596:280;;;31684:7;31660;:21;31668:9;31678:1;31668:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31668:12:0;31660:21;;;;;;;;;;;;;:31;;:66;;;31719:7;31695;:21;31703:9;31713:1;31703:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31703:12:0;31695:21;;;;;;;;;;;;;:31;31660:66;31656:96;;;31745:7;;31735;;:17;;;;:::i;:::-;31728:24;;;;;31462:524;:::o;31656:96::-;31787:7;:21;31795:9;31805:1;31795:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31795:12:0;31787:21;;;;;;;;;;;;;31777:31;;:7;:31;:::i;:::-;31767:41;;31843:7;:21;31851:9;31861:1;31851:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31851:12:0;31843:21;;;;;;;;;;;;;31833:31;;:7;:31;:::i;:::-;31823:41;-1:-1:-1;31636:3:0;;;;:::i;:::-;;;;31596:280;;;;31910:7;;31900;;:17;;;;:::i;:::-;31890:7;:27;31886:57;;;31936:7;;31926;;:17;;;;:::i;:::-;31919:24;;;;31462:524;:::o;31886:57::-;31961:17;31971:7;31961;:17;:::i;23783:323::-;23851:4;13031:6;;-1:-1:-1;;;;;23875:15:0;;;13031:6;;23875:15;;;;:45;;-1:-1:-1;13004:7:0;13031:6;-1:-1:-1;;;;;23907:13:0;;;13031:6;;23907:13;;23875:45;:84;;;;-1:-1:-1;;;;;;23938:21:0;;;;;;:17;:21;;;;;;;;23937:22;23875:84;:125;;;;-1:-1:-1;;;;;;23977:23:0;;;;;;:17;:23;;;;;;;;23976:24;23875:125;:152;;;;-1:-1:-1;;;;;;24017:10:0;;8276:42;24017:10;;23875:152;:185;;;;-1:-1:-1;;;;;;24044:16:0;;;;23875:185;:223;;;;-1:-1:-1;;;;;;24077:21:0;;24093:4;24077:21;;23868:230;23783:323;-1:-1:-1;;;23783:323:0:o;25593:1383::-;9489:6;:13;;-1:-1:-1;;9489:13:0;9498:4;9489:13;;;25680:7:::1;:13:::0;::::1;::::0;;;::::1;;25676:44;;25713:7;;25676:44;25755:4;25735:26;::::0;;;:11:::1;:26;::::0;;;;;;;25770:9:::1;::::0;-1:-1:-1;;;;;25770:9:0::1;25735:46:::0;;;;;;;;-1:-1:-1;;25735:67:0::1;25732:165;;25839:4;25819:26;::::0;;;:11:::1;:26;::::0;;;;;;;25854:9:::1;::::0;-1:-1:-1;;;;;25854:9:0::1;25819:46:::0;;;;;;;-1:-1:-1;;25819:66:0;;25732:165:::1;25975:7;:13:::0;25909:17:::1;::::0;25992:1:::1;::::0;25975:13:::1;::::0;;::::1;::::0;::::1;::::0;25931:40:::1;::::0;25954:17:::1;25931:20:::0;:40:::1;:::i;:::-;25930:58;;;;:::i;:::-;25929:64;;;;:::i;:::-;25909:84:::0;-1:-1:-1;26006:20:0::1;26029:32;25909:84:::0;26029:20;:32:::1;:::i;:::-;26074:9;::::0;:219:::1;::::0;;;;26006:55;;-1:-1:-1;;;;;;26074:9:0::1;::::0;:60:::1;::::0;:219:::1;::::0;26006:55;;26074:9:::1;::::0;26220:4:::1;::::0;26247::::1;::::0;26267:15:::1;::::0;26074:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26380:7:0::1;:13:::0;26306:24:::1;::::0;-1:-1:-1;26397:1:0::1;::::0;-1:-1:-1;26380:13:0::1;::::0;;::::1;::::0;::::1;::::0;26335:41:::1;::::0;26359:17:::1;26335:21;:41;:::i;:::-;26334:59;;;;:::i;:::-;26333:65;;;;:::i;:::-;26306:92:::0;-1:-1:-1;26415:13:0;;26411:396:::1;;26445:9;::::0;:276:::1;::::0;;;;26522:4:::1;26445:276;::::0;::::1;20308:34:1::0;20358:18;;;20351:34;;;26445:9:0::1;20401:18:1::0;;;20394:34;;;20444:18;;;20437:34;8276:42:0::1;20487:19:1::0;;;20480:44;26691:15:0::1;20540:19:1::0;;;20533:35;-1:-1:-1;;;;;26445:9:0;;::::1;::::0;:25:::1;::::0;26478:16;;20219:19:1;;26445:276:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26741:54:0::1;::::0;;29470:25:1;;;29526:2;29511:18;;29504:34;;;29554:18;;;29547:34;;;26741:54:0::1;::::0;-1:-1:-1;29458:2:1;29443:18;26741:54:0::1;;;;;;;26411:396;26845:1;26821:21;:25;:66;;;;-1:-1:-1::0;26866:7:0::1;:17:::0;26886:1:::1;::::0;26850:33:::1;::::0;26866:17:::1;::::0;;::::1;::::0;26850:13;;::::1;;:33;:::i;:::-;:37;;;26821:66;26817:152;;;26904:11;:21:::0;:53:::1;::::0;-1:-1:-1;;;;;26904:21:0;;::::1;::::0;26935::::1;26904:53:::0;::::1;;;::::0;:21:::1;:53:::0;:21;:53;26935:21;26904;:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26817:152;25665:1311;;;9513:1;-1:-1:-1::0;9525:6:0;:14;;-1:-1:-1;;9525:14:0;;;25593:1383::o;28463:1302::-;28586:16;;28564:4;;28586:16;;;;;28581:221;;28619:28;28638:4;28644:2;28619:18;:28::i;:::-;28667:16;;;;;;;28666:17;:41;;;;;28687:20;28698:4;28704:2;28687:10;:20::i;:::-;28662:129;;;28728:47;;-1:-1:-1;;;28728:47:0;;29794:2:1;28728:47:0;;;29776:21:1;29833:2;29813:18;;;29806:30;29872:34;29852:18;;;29845:62;29943:7;29923:18;;;29916:35;29968:19;;28728:47:0;29592:401:1;28662:129:0;28814:25;28842:38;28853:4;28859:2;28863:7;28872;28842:10;:38::i;:::-;28925:14;;;;-1:-1:-1;;;;;28909:13:0;;;;;;:7;:13;;;;;;28814:66;;-1:-1:-1;28909:30:0;;;:::i;:::-;-1:-1:-1;;;;;28893:13:0;;;;;;;:7;:13;;;;;;:46;;;;28978:22;;;;28964:11;;;;;;;;;;:36;;28978:22;28964:36;:::i;:::-;-1:-1:-1;;;;;28950:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;29017:17;;;;;:11;:17;;;;;;;29013:89;;;-1:-1:-1;;;;;29067:13:0;;;;;;:7;:13;;;;;;:23;;29083:7;;29067:23;:::i;:::-;-1:-1:-1;;;;;29051:13:0;;;;;;:7;:13;;;;;:39;29013:89;-1:-1:-1;;;;;29116:15:0;;;;;;:11;:15;;;;;;;;29112:98;;;29176:22;;-1:-1:-1;;;;;29162:11:0;;29176:22;29162:11;;;:7;:11;;;;;;:36;;29176:22;29162:36;:::i;:::-;-1:-1:-1;;;;;29148:11:0;;;;;;:7;:11;;;;;:50;29112:98;29226:12;;;;:16;29222:353;;29325:10;:8;:10::i;:::-;29310:6;:12;;;:25;;;;:::i;:::-;29300:4;29284:22;;;;:7;:22;;;;;;:52;;;;:::i;:::-;29275:4;29259:22;;;;:7;:22;;;;;;;;:77;;;;29354:11;:26;;;;;;29351:110;;;29449:12;;;;;29440:4;29424:22;;;;:7;:22;;;;;;;:37;;29449:12;29424:37;:::i;:::-;29415:4;29399:22;;;;:7;:22;;;;;:62;29351:110;29504:4;-1:-1:-1;;;;;29481:43:0;29490:4;-1:-1:-1;;;;;29481:43:0;;29511:6;:12;;;29481:43;;;;160:25:1;;148:2;133:18;;14:177;29481:43:0;;;;;;;;29222:353;29603:1;29589:6;:11;;;:15;:34;;;;29622:1;29608:6;:11;;;:15;29589:34;29585:89;;;29651:6;:11;;;29640:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;29585:89:0;29708:2;-1:-1:-1;;;;;29693:42:0;29702:4;-1:-1:-1;;;;;29693:42:0;;29712:6;:22;;;29693:42;;;;160:25:1;;148:2;133:18;;14:177;29693:42:0;;;;;;;;-1:-1:-1;29753:4:0;;28463:1302;-1:-1:-1;;;;;28463:1302:0:o;26984:508::-;27066:16;;;;;;;27065:17;27057:65;;;;-1:-1:-1;;;27057:65:0;;30200:2:1;27057:65:0;;;30182:21:1;30239:2;30219:18;;;30212:30;30278:34;30258:18;;;30251:62;30349:5;30329:18;;;30322:33;30372:19;;27057:65:0;29998:399:1;27057:65:0;27138:20;27149:4;27155:2;27138:10;:20::i;:::-;27137:21;:37;;;;-1:-1:-1;27168:6:0;;-1:-1:-1;;;;;27162:12:0;;;27168:6;;27162:12;27137:37;27133:352;;;-1:-1:-1;;;;;27191:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;27191:30:0;27217:4;27191:30;;;27236:16;:23;;-1:-1:-1;;27236:23:0;27191:30;27236:23;;;;;27285:9;;;;27274:107;;27329:9;:36;;;;27359:4;27329:36;;;;;27274:107;27395:19;:26;;-1:-1:-1;;27395:26:0;;;;;27441:32;;-1:-1:-1;4203:41:1;;27441:32:0;;4191:2:1;4176:18;27441:32:0;;;;;;;26984:508;;:::o;29773:1681::-;29867:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29867:18:0;29898:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29898:25:0;29934:19;29956:10;:8;:10::i;:::-;29934:32;-1:-1:-1;29996:21:0;29934:32;29996:7;:21;:::i;:::-;29979:14;;;:38;30034:20;30045:4;30051:2;30034:10;:20::i;:::-;30030:315;;;30102:9;;:38;;;;;-1:-1:-1;;;;;30683:15:1;;;30102:38:0;;;30665:34:1;30735:15;;;30715:18;;;30708:43;30767:18;;;30760:34;;;30071:12:0;;30102:9;;;;;:19;;30577:18:1;;30102:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;30102:38:0;;;;;;;;-1:-1:-1;;30102:38:0;;;;;;;;;;;;:::i;:::-;;;30098:164;;30238:8;;;30098:164;30191:5;-1:-1:-1;30282:7:0;30278:56;;30310:8;;;30278:56;30056:289;30030:315;30360:7;30357:969;;;-1:-1:-1;;;;;30388:11:0;;;;;;:7;:11;;;;;;;;30384:474;;;30443:10;:18;30420:12;:41;;30443:18;;;;-1:-1:-1;;30480:45:0;;;;;;;30505:20;;;;;30480:45;;;;;;;;30384:474;;;-1:-1:-1;;;;;30551:13:0;;;;;;:7;:13;;;;;;;;30547:311;;;30608:9;:17;30585:12;:40;;30608:17;;;;-1:-1:-1;;30644:44:0;;;;;;;30669:19;;;;;30644:44;;;;;;;;30547:311;;;30752:14;:22;30729:12;:45;;30752:22;;;;-1:-1:-1;;30793:49:0;;;;;;;30818:24;;;;;30793:49;;;;;;;;30547:311;30923:16;;30899:12;:20;30889:30;;30899:20;;30889:7;:30;:::i;:::-;30888:51;;;;:::i;:::-;30874:11;;;:65;31006:16;;30980:12;:22;30970:32;;30980:22;;;;;30970:7;:32;:::i;:::-;30969:53;;;;:::i;:::-;30954:12;;;:68;;;31073:11;;;;:26;;30954:68;31073:26;:::i;:::-;31062:38;;:7;:38;:::i;:::-;31037:63;;31131:11;;;;:25;;31145:11;;31131:25;:::i;:::-;31117:11;;;:39;30357:969;;;31203:1;31189:11;;;:15;;;31219:12;;;:16;;;31250:32;;;31299:11;;;:15;30357:969;31409:11;31394:6;:12;;;:26;;;;:::i;:::-;31379:6;:11;;;:42;;;;:::i;:::-;31361:6;:14;;;:61;;;;:::i;:::-;31336:22;;;:86;-1:-1:-1;31336:22:0;29773:1681;-1:-1:-1;;;;;29773:1681: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;2649:656::-;2761:4;2790:2;2819;2808:9;2801:21;2851:6;2845:13;2894:6;2889:2;2878:9;2874:18;2867:34;2919:1;2929:140;2943:6;2940:1;2937:13;2929:140;;;3038:14;;;3034:23;;3028:30;3004:17;;;3023:2;3000:26;2993:66;2958:10;;2929:140;;;3087:6;3084:1;3081:13;3078:91;;;3157:1;3152:2;3143:6;3132:9;3128:22;3124:31;3117:42;3078:91;-1:-1:-1;3221:2:1;3209:15;-1:-1:-1;;3205:88:1;3190:104;;;;3296:2;3186:113;;2649:656;-1:-1:-1;;;2649:656:1:o;3558:180::-;3617:6;3670:2;3658:9;3649:7;3645:23;3641:32;3638:52;;;3686:1;3683;3676:12;3638:52;-1:-1:-1;3709:23:1;;3558:180;-1:-1:-1;3558:180:1:o;3743:315::-;3811:6;3819;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;3927:9;3914:23;3946:31;3971:5;3946:31;:::i;:::-;3996:5;4048:2;4033:18;;;;4020:32;;-1:-1:-1;;;3743:315:1:o;4255:382::-;4320:6;4328;4381:2;4369:9;4360:7;4356:23;4352:32;4349:52;;;4397:1;4394;4387:12;4349:52;4436:9;4423:23;4455:31;4480:5;4455:31;:::i;:::-;4505:5;-1:-1:-1;4562:2:1;4547:18;;4534:32;4575:30;4534:32;4575:30;:::i;4642:159::-;4709:20;;4769:6;4758:18;;4748:29;;4738:57;;4791:1;4788;4781:12;4738:57;4642:159;;;:::o;4806:328::-;4880:6;4888;4896;4949:2;4937:9;4928:7;4924:23;4920:32;4917:52;;;4965:1;4962;4955:12;4917:52;4988:28;5006:9;4988:28;:::i;:::-;4978:38;;5035:37;5068:2;5057:9;5053:18;5035:37;:::i;:::-;5025:47;;5091:37;5124:2;5113:9;5109:18;5091:37;:::i;:::-;5081:47;;4806:328;;;;;:::o;5139:456::-;5216:6;5224;5232;5285:2;5273:9;5264:7;5260:23;5256:32;5253:52;;;5301:1;5298;5291:12;5253:52;5340:9;5327:23;5359:31;5384:5;5359:31;:::i;:::-;5409:5;-1:-1:-1;5466:2:1;5451:18;;5438:32;5479:33;5438:32;5479:33;:::i;:::-;5139:456;;5531:7;;-1:-1:-1;;;5585:2:1;5570:18;;;;5557:32;;5139:456::o;5600:647::-;5674:6;5682;5690;5698;5751:3;5739:9;5730:7;5726:23;5722:33;5719:53;;;5768:1;5765;5758:12;5719:53;5807:9;5794:23;5826:28;5848:5;5826:28;:::i;:::-;5873:5;-1:-1:-1;5930:2:1;5915:18;;5902:32;5943:30;5902:32;5943:30;:::i;:::-;5992:7;-1:-1:-1;6051:2:1;6036:18;;6023:32;6064:30;6023:32;6064:30;:::i;:::-;6113:7;-1:-1:-1;6172:2:1;6157:18;;6144:32;6185:30;6144:32;6185:30;:::i;:::-;5600:647;;;;-1:-1:-1;5600:647:1;;-1:-1:-1;;5600:647:1:o;6441:247::-;6500:6;6553:2;6541:9;6532:7;6528:23;6524:32;6521:52;;;6569:1;6566;6559:12;6521:52;6608:9;6595:23;6627:31;6652:5;6627:31;:::i;6693:662::-;6747:5;6800:3;6793:4;6785:6;6781:17;6777:27;6767:55;;6818:1;6815;6808:12;6767:55;6854:6;6841:20;6880:4;6904:60;6920:43;6960:2;6920:43;:::i;6904:60::-;6998:15;;;7084:1;7080:10;;;;7068:23;;7064:32;;;7029:12;;;;7108:15;;;7105:35;;;7136:1;7133;7126:12;7105:35;7172:2;7164:6;7160:15;7184:142;7200:6;7195:3;7192:15;7184:142;;;7266:17;;7254:30;;7304:12;;;;7217;;7184:142;;7360:957;7521:6;7529;7537;7545;7598:3;7586:9;7577:7;7573:23;7569:33;7566:53;;;7615:1;7612;7605:12;7566:53;7655:9;7642:23;7684:18;7725:2;7717:6;7714:14;7711:34;;;7741:1;7738;7731:12;7711:34;7764:61;7817:7;7808:6;7797:9;7793:22;7764:61;:::i;:::-;7754:71;;7878:2;7867:9;7863:18;7850:32;7834:48;;7907:2;7897:8;7894:16;7891:36;;;7923:1;7920;7913:12;7891:36;7946:63;8001:7;7990:8;7979:9;7975:24;7946:63;:::i;:::-;7936:73;;8062:2;8051:9;8047:18;8034:32;8018:48;;8091:2;8081:8;8078:16;8075:36;;;8107:1;8104;8097:12;8075:36;;8130:63;8185:7;8174:8;8163:9;8159:24;8130:63;:::i;:::-;8120:73;;;8243:2;8232:9;8228:18;8215:32;8256:31;8281:5;8256:31;:::i;8322:241::-;8378:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:52;;;8447:1;8444;8437:12;8399:52;8486:9;8473:23;8505:28;8527:5;8505:28;:::i;9017:385::-;9103:6;9111;9119;9127;9180:3;9168:9;9159:7;9155:23;9151:33;9148:53;;;9197:1;9194;9187:12;9148:53;-1:-1:-1;;9220:23:1;;;9290:2;9275:18;;9262:32;;-1:-1:-1;9341:2:1;9326:18;;9313:32;;9392:2;9377:18;9364:32;;-1:-1:-1;9017:385:1;-1:-1:-1;9017:385:1:o;9407:256::-;9473:6;9481;9534:2;9522:9;9513:7;9509:23;9505:32;9502:52;;;9550:1;9547;9540:12;9502:52;9573:28;9591:9;9573:28;:::i;:::-;9563:38;;9620:37;9653:2;9642:9;9638:18;9620:37;:::i;:::-;9610:47;;9407:256;;;;;:::o;10038:388::-;10106:6;10114;10167:2;10155:9;10146:7;10142:23;10138:32;10135:52;;;10183:1;10180;10173:12;10135:52;10222:9;10209:23;10241:31;10266:5;10241:31;:::i;:::-;10291:5;-1:-1:-1;10348:2:1;10333:18;;10320:32;10361:33;10320:32;10361:33;:::i;11284:764::-;11496:2;11508:21;;;11578:13;;11481:18;;;11600:22;;;11448:4;;11675;;11653:2;11638:18;;;11702:15;;;11448:4;11745:218;11759:6;11756:1;11753:13;11745:218;;;11824:13;;-1:-1:-1;;;;;11820:62:1;11808:75;;11903:12;;;;11938:15;;;;11781:1;11774:9;11745:218;;;-1:-1:-1;;;12026:14:1;;12019:22;11999:18;;11992:50;;;;-1:-1:-1;11980:3:1;11284:764;-1:-1:-1;11284:764:1:o;12053:437::-;12132:1;12128:12;;;;12175;;;12196:61;;12250:4;12242:6;12238:17;12228:27;;12196:61;12303:2;12295:6;12292:14;12272:18;12269:38;12266:218;;;12340:77;12337:1;12330:88;12441:4;12438:1;12431:15;12469:4;12466:1;12459:15;12266:218;;12053:437;;;:::o;13545:184::-;13597:77;13594:1;13587:88;13694:4;13691:1;13684:15;13718:4;13715:1;13708:15;13734:184;13786:77;13783:1;13776:88;13883:4;13880:1;13873:15;13907:4;13904:1;13897:15;13923:184;13975:77;13972:1;13965:88;14072:4;14069:1;14062:15;14096:4;14093:1;14086:15;14112:125;14152:4;14180:1;14177;14174:8;14171:34;;;14185:18;;:::i;:::-;-1:-1:-1;14222:9:1;;14112:125::o;14242:195::-;14281:3;-1:-1:-1;;14305:5:1;14302:77;14299:103;;;14382:18;;:::i;:::-;-1:-1:-1;14429:1:1;14418:13;;14242:195::o;14442:224::-;14481:3;14509:6;14542:2;14539:1;14535:10;14572:2;14569:1;14565:10;14603:3;14599:2;14595:12;14590:3;14587:21;14584:47;;;14611:18;;:::i;:::-;14647:13;;14442:224;-1:-1:-1;;;;14442:224:1:o;14671:217::-;14710:4;14739:6;14795:10;;;;14765;;14817:12;;;14814:38;;;14832:18;;:::i;:::-;14869:13;;14671:217;-1:-1:-1;;;14671:217:1:o;15329:128::-;15369:3;15400:1;15396:6;15393:1;15390:13;15387:39;;;15406:18;;:::i;:::-;-1:-1:-1;15442:9:1;;15329:128::o;15873:184::-;15925:77;15922:1;15915:88;16022:4;16019:1;16012:15;16046:4;16043:1;16036:15;16062:120;16102:1;16128;16118:35;;16133:18;;:::i;:::-;-1:-1:-1;16167:9:1;;16062:120::o;17503:482::-;17592:1;17635:5;17592:1;17649:330;17670:7;17660:8;17657:21;17649:330;;;17789:4;-1:-1:-1;;17717:77:1;17711:4;17708:87;17705:113;;;17798:18;;:::i;:::-;17848:7;17838:8;17834:22;17831:55;;;17868:16;;;;17831:55;17947:22;;;;17907:15;;;;17649:330;;;17653:3;17503:482;;;;;:::o;17990:866::-;18039:5;18069:8;18059:80;;-1:-1:-1;18110:1:1;18124:5;;18059:80;18158:4;18148:76;;-1:-1:-1;18195:1:1;18209:5;;18148:76;18240:4;18258:1;18253:59;;;;18326:1;18321:130;;;;18233:218;;18253:59;18283:1;18274:10;;18297:5;;;18321:130;18358:3;18348:8;18345:17;18342:43;;;18365:18;;:::i;:::-;-1:-1:-1;;18421:1:1;18407:16;;18436:5;;18233:218;;18535:2;18525:8;18522:16;18516:3;18510:4;18507:13;18503:36;18497:2;18487:8;18484:16;18479:2;18473:4;18470:12;18466:35;18463:77;18460:159;;;-1:-1:-1;18572:19:1;;;18604:5;;18460:159;18651:34;18676:8;18670:4;18651:34;:::i;:::-;18781:6;-1:-1:-1;;18709:79:1;18700:7;18697:92;18694:118;;;18792:18;;:::i;:::-;18830:20;;17990:866;-1:-1:-1;;;17990:866:1:o;18861:140::-;18919:5;18948:47;18989:4;18979:8;18975:19;18969:4;18948:47;:::i;19006:228::-;19046:7;19172:1;-1:-1:-1;;19100:74:1;19097:1;19094:81;19089:1;19082:9;19075:17;19071:105;19068:131;;;19179:18;;:::i;:::-;-1:-1:-1;19219:9:1;;19006:228::o;19239:112::-;19271:1;19297;19287:35;;19302:18;;:::i;:::-;-1:-1:-1;19336:9:1;;19239:112::o;19356:251::-;19426:6;19479:2;19467:9;19458:7;19454:23;19450:32;19447:52;;;19495:1;19492;19485:12;19447:52;19527:9;19521:16;19546:31;19571:5;19546:31;:::i;20579:306::-;20667:6;20675;20683;20736:2;20724:9;20715:7;20711:23;20707:32;20704:52;;;20752:1;20749;20742:12;20704:52;20781:9;20775:16;20765:26;;20831:2;20820:9;20816:18;20810:25;20800:35;;20875:2;20864:9;20860:18;20854:25;20844:35;;20579:306;;;;;:::o;21320:184::-;21390:6;21443:2;21431:9;21422:7;21418:23;21414:32;21411:52;;;21459:1;21456;21449:12;21411:52;-1:-1:-1;21482:16:1;;21320:184;-1:-1:-1;21320:184:1:o;24058:131::-;24118:5;24147:36;24174:8;24168:4;24147:36;:::i;24551:245::-;24618:6;24671:2;24659:9;24650:7;24646:23;24642:32;24639:52;;;24687:1;24684;24677:12;24639:52;24719:9;24713:16;24738:28;24760:5;24738:28;:::i;26722:518::-;26783:3;26821:5;26815:12;26848:6;26843:3;26836:19;26874:4;26903:2;26898:3;26894:12;26887:19;;26925:5;26922:1;26915:16;26967:2;26964:1;26954:16;26988:1;26998:217;27012:6;27009:1;27006:13;26998:217;;;27077:13;;-1:-1:-1;;;;;27073:62:1;27061:75;;27156:12;;;;27203:1;27191:14;;;;27027:9;26998:217;;;-1:-1:-1;27231:3:1;;26722:518;-1:-1:-1;;;;;26722:518:1:o;27245:337::-;27449:6;27438:9;27431:25;27492:2;27487;27476:9;27472:18;27465:30;27412:4;27512:64;27572:2;27561:9;27557:18;27549:6;27512:64;:::i;27587:881::-;27682:6;27713:2;27756;27744:9;27735:7;27731:23;27727:32;27724:52;;;27772:1;27769;27762:12;27724:52;27805:9;27799:16;27838:18;27830:6;27827:30;27824:50;;;27870:1;27867;27860:12;27824:50;27893:22;;27946:4;27938:13;;27934:27;-1:-1:-1;27924:55:1;;27975:1;27972;27965:12;27924:55;28004:2;27998:9;28027:60;28043:43;28083:2;28043:43;:::i;28027:60::-;28121:15;;;28203:1;28199:10;;;;28191:19;;28187:28;;;28152:12;;;;28227:19;;;28224:39;;;28259:1;28256;28249:12;28224:39;28283:11;;;;28303:135;28319:6;28314:3;28311:15;28303:135;;;28385:10;;28373:23;;28336:12;;;;28416;;;;28303:135;;;28457:5;27587:881;-1:-1:-1;;;;;;;27587:881:1:o;28473:175::-;28510:3;28554:4;28547:5;28543:16;28583:4;28574:7;28571:17;28568:43;;;28591:18;;:::i;:::-;28640:1;28627:15;;28473:175;-1:-1:-1;;28473:175:1:o;28653:610::-;28949:6;28938:9;28931:25;28992:6;28987:2;28976:9;28972:18;28965:34;29035:3;29030:2;29019:9;29015:18;29008:31;28912:4;29056:65;29116:3;29105:9;29101:19;29093:6;29056:65;:::i;:::-;-1:-1:-1;;;;;29157:55:1;;;;29152:2;29137:18;;29130:83;-1:-1:-1;29244:3:1;29229:19;29222:35;29048:73;28653:610;-1:-1:-1;;;28653:610:1:o

Swarm Source

ipfs://71596d7ba15303d0897a31ff6d3456636d23cc3db867e26e32d0917377d30e52
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.