ETH Price: $3,369.31 (-2.56%)

Token

Tanuki Inu (TANUKI)
 

Overview

Max Total Supply

1,000,000,000,000 TANUKI

Holders

327

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 TANUKI

Value
$0.00
0x7148bd3255651b263908949b6a82af862a0a84c6
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:
TanukiInu

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

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

contract TanukiInu 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 _isExcludedFromLimits;
    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 MAX = ~uint256(0);
    uint256 private _rTotal;

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

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

    Fees public _buyTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 400,
        development: 500,
        totalSwap: 1100
        });

    Fees public _sellTaxes = Fees({
        reflect: 200,
        liquidity: 300,
        marketing: 1000,
        development: 1000,
        totalSwap: 2300
        });

    Fees public _transferTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 400,
        development: 500,
        totalSwap: 1100
        });

    Ratios public _ratios = Ratios({
        liquidity: 5,
        marketing: 14,
        development: 15,
        total: 34
        });

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

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

    struct TaxWallets {
        address payable marketing;
        address payable development;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x5E2a0550167F946C4048a801762038c371C2a527),
        development: payable(0x508B819CDEd275A1D4DE02C9FbDDF57A522E33ec)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount = (_tTotal * 3) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 6) / 1000;

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

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

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

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

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

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

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

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

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

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            if(account != lpPair){
                _excluded.push(account);
            }
        } else if (!enabled) {
            require(_isExcluded[account], "Account is already included.");
            if (account == lpPair) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
            } else if(_excluded.length == 1) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _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;
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _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 removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    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] -= values.rAmount;
        _rOwned[to] += values.rTransferAmount;

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

        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;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.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) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 divisor = masterTaxDivisor;

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

            values.tFee = (tAmount * currentReflect) / divisor;
            values.tSwap = (tAmount * currentSwap) / divisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

            values.rFee = 0;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if(_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(_isExcluded[lpPair]) {
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply) return _rTotal / _tTotal;
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
        }
        if(_excluded.length > 0) {
            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":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","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":"development","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":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","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":"development","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":[],"name":"contractInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPrivateSaleBlacklistEnabled","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"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","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"},{"internalType":"uint16","name":"development","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"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

600060048190556000196010556064608081905260c860a081905261019060c08190526101f460e081905261044c610100819052601280546001600160501b031990811669044c01f4019000c8006490811790925561012086905261012c610140526103e86101608190526101808190526108fc6101a0526013805483166908fc03e803e8012c00c81790556101c0979097526101e09590955261020093909352610220919091526102405260148054909216179055600561026052600e61028052600f6102a081905260226102c052601580546001600160401b0319166622000f000e0005179055610320604052735e2a0550167f946c4048a801762038c371c2a5276102e081905273508b819cded275a1d4de02c9fbddf57a522e33ec610300819052601880546001600160a01b0319908116909317905560198054909216179055601a805461ff0019169055601b929092559054620001639060036200042b565b6200016f919062000459565b601f556103e8600f5460066200018691906200042b565b62000192919062000459565b6020556021805461ffff60ff60b01b0119169055600080546001600160a01b031916331790556038461415620001ee57601680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200026b565b46606114156200022457601680546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200026b565b4660011480620002345750466004145b156200026657601680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200026b565b600080fd5b6000546016546200028c916001600160a01b0390811691166000196200032a565b601654620002a89030906001600160a01b03166000196200032a565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a909252909220805490911690911790556200047c565b6001600160a01b0383166200037c5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003ca5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000373565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008160001904831182151516156200045457634e487b7160e01b600052601160045260246000fd5b500290565b6000826200047757634e487b7160e01b600052601260045260246000fd5b500490565b615cae806200048c6000396000f3fe6080604052600436106104175760003560e01c80636ebd007811610228578063bc77169d11610128578063dd62ed3e116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610d1d578063fdb78c0e14610d64578063fe575a8714610d8357600080fd5b8063ee5d9c2d14610ce8578063eec2744e14610cfd57600080fd5b8063dd62ed3e14610c4c578063e4fcfd1814610c92578063e8a0e3f914610ca8578063eafb5a3c14610cc857600080fd5b8063c6a276c2116100f7578063c6a276c214610b81578063cab5ebea14610ba1578063cf84770614610bc1578063d3f6a15714610c2c57600080fd5b8063bc77169d14610aa7578063becdf13f14610ac7578063c2fa418f14610ae7578063c6831cd814610b3457600080fd5b80638a8c523c116101bb578063a986a3411161018a578063aa5454731161016f578063aa54547314610a87578063b1b08f711461062c578063b3d514fb1461062c57600080fd5b8063a986a34114610a47578063aa22b17214610a6757600080fd5b80638a8c523c146109dd57806395d89b41146109f2578063a457c2d714610a07578063a9059cbb14610a2757600080fd5b806380c581d1116101f757806380c581d11461095157806388f8202014610971578063893d20e8146109aa5780638a63bd9b146109c857600080fd5b80636ebd00781461088557806370a082311461089a578063715018a6146108ba5780637b45d431146108cf57600080fd5b80632d8381191161033357806343b5beec116102c65780634fbee19311610295578063590ffdce1161027a578063590ffdce1461080c5780635c24b0741461082c5780635cce86cd1461084c57600080fd5b80634fbee193146107b457806350a8e016146107ed57600080fd5b806343b5beec1461073a578063452ed4f11461075a5780634ada218b1461077a5780634fb2e45d1461079457600080fd5b806334cd82601161030257806334cd8260146106ba57806336fddb04146106da57806339509351146106fa5780633f3cf56c1461071a57600080fd5b80632d838119146106425780632e8fa82114610662578063313ce5671461067857806333251a0b1461069a57600080fd5b80630fa604e4116103ab578063260039571161037a57806326003957146105cc5780632610eaca146105ec57806329dd87981461060c5780632b28fc7a1461062c57600080fd5b80630fa604e41461056257806313e461921461057757806318160ddd1461059757806323b872dd146105ac57600080fd5b806306fdde03116103e757806306fdde03146104e05780630758d924146105025780630923160214610522578063095ea7b31461054257600080fd5b8062b347471461042357806303fd2a451461046c5780630445b6671461049a57806305bbedb6146104be57600080fd5b3661041e57005b600080fd5b34801561042f57600080fd5b5060215461045790760100000000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561047857600080fd5b5061048261dead81565b6040516001600160a01b039091168152602001610463565b3480156104a657600080fd5b506104b0601d5481565b604051908152602001610463565b3480156104ca57600080fd5b506104de6104d9366004615285565b610da3565b005b3480156104ec57600080fd5b506104f5610e7c565b6040516104639190615303565b34801561050e57600080fd5b50601654610482906001600160a01b031681565b34801561052e57600080fd5b506104de61053d366004615336565b610f0e565b34801561054e57600080fd5b5061045761055d36600461534f565b61102d565b34801561056e57600080fd5b506104b0611044565b34801561058357600080fd5b506104de61059236600461537b565b61106a565b3480156105a357600080fd5b506104b061152d565b3480156105b857600080fd5b506104576105c73660046153a9565b611546565b3480156105d857600080fd5b506104de6105e73660046153ea565b6115be565b3480156105f857600080fd5b506104de610607366004615467565b6116c9565b34801561061857600080fd5b506104de6106273660046154cb565b6117ce565b34801561063857600080fd5b506104b06107d081565b34801561064e57600080fd5b506104b061065d366004615336565b6118b7565b34801561066e57600080fd5b506104b0601e5481565b34801561068457600080fd5b50600e5460405160ff9091168152602001610463565b3480156106a657600080fd5b506104de6106b5366004615527565b61194e565b3480156106c657600080fd5b506104de6106d5366004615544565b6119ee565b3480156106e657600080fd5b506104de6106f536600461537b565b611a7e565b34801561070657600080fd5b5061045761071536600461534f565b611af7565b34801561072657600080fd5b506104de6107353660046153ea565b611b33565b34801561074657600080fd5b506104de61075536600461557f565b611c3e565b34801561076657600080fd5b50601754610482906001600160a01b031681565b34801561078657600080fd5b506021546104579060ff1681565b3480156107a057600080fd5b506104de6107af366004615527565b6123e2565b3480156107c057600080fd5b506104576107cf366004615527565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107f957600080fd5b5060215461045790610100900460ff1681565b34801561081857600080fd5b506104de61082736600461537b565b6125e1565b34801561083857600080fd5b506104de610847366004615527565b61265a565b34801561085857600080fd5b50610457610867366004615527565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561089157600080fd5b506104b0612799565b3480156108a657600080fd5b506104b06108b5366004615527565b6127ba565b3480156108c657600080fd5b506104de612819565b3480156108db57600080fd5b5060125461091c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610463565b34801561095d57600080fd5b506104de61096c36600461537b565b6128c9565b34801561097d57600080fd5b5061045761098c366004615527565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156109b657600080fd5b506000546001600160a01b0316610482565b3480156109d457600080fd5b50610457612a85565b3480156109e957600080fd5b506104de612af4565b3480156109fe57600080fd5b506104f5612ce4565b348015610a1357600080fd5b50610457610a2236600461534f565b612cf3565b348015610a3357600080fd5b50610457610a4236600461534f565b612d2a565b348015610a5357600080fd5b506104de610a6236600461560f565b612d41565b348015610a7357600080fd5b506104de610a82366004615643565b612ddf565b348015610a9357600080fd5b506104de610aa2366004615686565b612edb565b348015610ab357600080fd5b506104de610ac2366004615686565b613036565b348015610ad357600080fd5b506104de610ae2366004615686565b613191565b348015610af357600080fd5b5060145461091c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b4057600080fd5b5060135461091c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b8d57600080fd5b506104de610b9c366004615527565b6132ec565b348015610bad57600080fd5b506104de610bbc36600461560f565b61338c565b348015610bcd57600080fd5b50601554610bfe9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610463565b348015610c3857600080fd5b506104de610c473660046156da565b61342e565b348015610c5857600080fd5b506104b0610c673660046156da565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c9e57600080fd5b506104b0601b5481565b348015610cb457600080fd5b506104de610cc3366004615708565b6134b7565b348015610cd457600080fd5b506104de610ce3366004615527565b61360e565b348015610cf457600080fd5b506104de6139bd565b348015610d0957600080fd5b506104de610d1836600461537b565b613aa0565b348015610d2957600080fd5b50601854601954610d44916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610463565b348015610d7057600080fd5b50601a5461045790610100900460ff1681565b348015610d8f57600080fd5b50610457610d9e366004615527565b613b48565b6000546001600160a01b03163314610df65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e4690859085906004016157d4565b600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050505050565b6060600c8054610e8b906157f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb7906157f8565b8015610f045780601f10610ed957610100808354040283529160200191610f04565b820191906000526020600020905b815481529060010190602001808311610ee757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60c8811015610fad5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ded565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b5050505050565b600061103a338484613bd6565b5060015b92915050565b600e546000906110589060ff16600a61595f565b602054611065919061599d565b905090565b6000546001600160a01b031633146110b85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b801561120d576001600160a01b03821660009081526008602052604090205460ff16156111275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610ded565b6001600160a01b03821660009081526001602052604090205415611181576001600160a01b038216600090815260016020526040902054611167906118b7565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556017549091161461120957600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611209576001600160a01b03821660009081526008602052604090205460ff1661127a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610ded565b6017546001600160a01b03838116911614156112f557611298613ce3565b6001600160a01b0383166000908152600260205260409020546112bb91906159b1565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156113a557611308613ce3565b6001600160a01b03831660009081526002602052604090205461132b91906159b1565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690556009805480611372576113726159d0565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561152857826001600160a01b0316600982815481106113cf576113cf6159ff565b6000918252602090912001546001600160a01b0316141561151657600980546113fa90600190615a2e565b8154811061140a5761140a6159ff565b600091825260209091200154600980546001600160a01b039092169183908110611436576114366159ff565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03948516179055918516815260029091526040812055611482613ce3565b6001600160a01b0384166000908152600260205260409020546114a591906159b1565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806114e2576114e26159d0565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061152081615a45565b9150506113a8565b505050565b6000600f546000141561153f57600080fd5b50600f5490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146115ab576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906115a5908490615a2e565b90915550505b6115b6848484613f56565b949350505050565b6000546001600160a01b0316331461160c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6103e8600f5461161c919061599d565b8183600f5461162b91906159b1565b611635919061599d565b10156116a95760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ded565b8082600f546116b891906159b1565b6116c2919061599d565b6020555050565b805182511461171a5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ded565b60005b82518160ff16101561152857818160ff168151811061173e5761173e6159ff565b602002602001015161174f336127ba565b101561175a57600080fd5b6117bb33848360ff1681518110611773576117736159ff565b6020908102919091010151600e5461178f9060ff16600a61595f565b858560ff16815181106117a4576117a46159ff565b60200260200101516117b691906159b1565b613f56565b50806117c681615a60565b91505061171d565b6000546001600160a01b0316331461181c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b5050505050505050565b60006011548211156119315760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ded565b600061193b613ce3565b9050611947818461599d565b9392505050565b6000546001600160a01b0316331461199c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610ff8565b6000546001600160a01b03163314611a3c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b8385600f54611a4b91906159b1565b611a55919061599d565b601d55600f548290611a689085906159b1565b611a72919061599d565b601e55601b5550505050565b6000546001600160a01b03163314611acc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161103a918590611b2e908690615a80565b613bd6565b6000546001600160a01b03163314611b815760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6103e8600f54611b91919061599d565b8183600f54611ba091906159b1565b611baa919061599d565b1015611c1e5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ded565b8082600f54611c2d91906159b1565b611c37919061599d565b601f555050565b6000546001600160a01b03163314611c8c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b602154760100000000000000000000000000000000000000000000900460ff1615611cf95760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610ded565b8251845114611d4a5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610ded565b602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611ddc57600080fd5b505af1925050508015611ded575060015b50602160029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611e6257506040513d6000823e601f3d908101601f19168201604052611e5f9190810190615afc565b60015b611eae5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610ded565b8351611ec190600c9060208701906150d1565b508251611ed590600d9060208601906150d1565b50600b829055600e805460ff191660ff8316908117909155611ef890600a61595f565b600b54611f0591906159b1565b600f819055601054611f179190615b77565b601054611f249190615a2e565b60115550505050601660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa29190615b8b565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120279190615b8b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190615b8b565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600f54612710906121069060056159b1565b612110919061599d565b601d55600f546127109061212590600a6159b1565b61212f919061599d565b601e55600f546103e8906121449060036159b1565b61214e919061599d565b601f55600f546103e8906121639060066159b1565b61216d919061599d565b6020908155602180547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601154600080546001600160a01b039081168252600184526040808320939093558154600f549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a360005460165461222c916001600160a01b039081169116600019613bd6565b6016546122469030906001600160a01b0316600019613bd6565b60005b84518110156122ed576000838281518110612266576122666159ff565b6020026020010151858381518110612280576122806159ff565b6020026020010151600f5461229591906159b1565b61229f919061599d565b90506122d860008054906101000a90046001600160a01b03168784815181106122ca576122ca6159ff565b602002602001015183613f56565b505080806122e590615a45565b915050612249565b50600054612308906001600160a01b0316306117b6826127ba565b506016546001600160a01b031663f305d7194730612325816127ba565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af11580156123ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123d19190615ba8565b5050506123dc612af4565b50505050565b6000546001600160a01b031633146124305760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6001600160a01b0381166124ac5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ded565b6001600160a01b03811661dead141561252d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ded565b60008054612546916001600160a01b03909116906125e1565b6125518160016125e1565b60008054612567906001600160a01b03166127ba565b111561258957600054612587906001600160a01b0316826117b6826127ba565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461262f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146126a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b602154610100900460ff16156127005760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610ded565b6001600160a01b0381163014156127595760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ded565b602180546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600e546000906127ad9060ff16600a61595f565b601f54611065919061599d565b6001600160a01b03811660009081526008602052604081205460ff16156127f757506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461103e906118b7565b6000546001600160a01b031633146128675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60008054612880916001600160a01b03909116906125e1565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146129175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b806129a3576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e6057600080fd5b60045415612a0a576203f480600454426129bd9190615a2e565b11612a0a5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ded565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610e46565b600080546001600160a01b03163314612ad45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b601654612aee9030906001600160a01b0316600019613bd6565b50600190565b6000546001600160a01b03163314612b425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60215460ff1615612b955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ded565b602154610100900460ff16612bec5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ded565b6021546201000090046001600160a01b0316612c3257602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601754600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612cc357600080fd5b505af1925050508015612cd4575060015b506021805460ff19166001179055565b6060600d8054610e8b906157f8565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161103a918590611b2e908690615a2e565b6000612d37338484613f56565b5060019392505050565b6000546001600160a01b03163314612d8f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517fa986a3410000000000000000000000000000000000000000000000000000000081528215156004820152620100009091046001600160a01b03169063a986a34190602401610ff8565b6000546001600160a01b03163314612e2d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6015805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580612ea58385615bd6565b612eaf9190615bd6565b6015805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b03163314612f295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60008183612f378688615bd6565b612f419190615bd6565b612f4b9190615bd6565b90506107d08161ffff161115612f6057600080fd5b6014805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff0000000000001916660100000000000091851691909102179055612fef8582615bfc565b6014805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146130845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b600081836130928688615bd6565b61309c9190615bd6565b6130a69190615bd6565b90506107d08161ffff1611156130bb57600080fd5b6012805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff000000000000191666010000000000009185169190910217905561314a8582615bfc565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146131df5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b600081836131ed8688615bd6565b6131f79190615bd6565b6132019190615bd6565b90506107d08161ffff16111561321657600080fd5b6013805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556132a58582615bfc565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461333a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610ff8565b6000546001600160a01b031633146133da5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061342390831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461347c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b601880546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560198054929093169116179055565b815183511480156134c9575080518251145b6135155760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ded565b60005b83518160ff1610156123dc57818160ff1681518110613539576135396159ff565b6020026020010151838260ff1681518110613556576135566159ff565b6020026020010151600f5461356b91906159b1565b613575919061599d565b61357e336127ba565b101561358957600080fd5b6135fb33858360ff16815181106135a2576135a26159ff565b6020026020010151848460ff16815181106135bf576135bf6159ff565b6020026020010151868560ff16815181106135dc576135dc6159ff565b6020026020010151600f546135f191906159b1565b6117b6919061599d565b508061360681615a60565b915050613518565b6000546001600160a01b0316331461365c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c59190615b8b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137369190615b8b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190615b8b565b90506001600160a01b03811661395b57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561380b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382f9190615b8b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561387c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a09190615b8b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139299190615b8b565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613984565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611528903090600019613bd6565b6000546001600160a01b03163314613a0b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b602154610100900460ff1615613a635760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ded565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613a9d573d6000803e3d6000fd5b50565b6000546001600160a01b03163314613aee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e46565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613bb2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e9190615c1f565b6001600160a01b038316613c2c5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ded565b6001600160a01b038216613c825760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ded565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601154600f546017546001600160a01b03166000908152600860205260408120549092919060ff1615613dbd576017546001600160a01b0316600090815260016020526040902054821080613d5157506017546001600160a01b031660009081526002602052604090205481105b15613d6d57600f54601154613d66919061599d565b9250505090565b6017546001600160a01b0316600090815260016020526040902054613d929083615a2e565b6017546001600160a01b0316600090815260026020526040902054909250613dba9082615a2e565b90505b60095415613f255760005b60095460ff82161015613f2357826001600060098460ff1681548110613df057613df06159ff565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613e5e5750816002600060098460ff1681548110613e3757613e376159ff565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613e7b57600f54601154613e73919061599d565b935050505090565b6001600060098360ff1681548110613e9557613e956159ff565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613ec49084615a2e565b92506002600060098360ff1681548110613ee057613ee06159ff565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613f0f9083615a2e565b915080613f1b81615a60565b915050613dc8565b505b600f54601154613f35919061599d565b821015613f4c57600f54601154613d66919061599d565b613d66818361599d565b60006001600160a01b038416613fd45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ded565b6001600160a01b0383166140505760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ded565b600082116140c65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ded565b6140d084846143fc565b156143115760215460ff166141275760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ded565b6001600160a01b03841660009081526003602052604090205460ff168061416657506001600160a01b03831660009081526003602052604090205460ff165b1561422a576001600160a01b03841660009081526007602052604090205460ff161580156141ad57506001600160a01b03831660009081526007602052604090205460ff16155b1561422a57601f5482111561422a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ded565b6016546001600160a01b0384811691161480159061426157506001600160a01b03831660009081526003602052604090205460ff16155b15614311576001600160a01b03831660009081526007602052604090205460ff166143115760205482614293856127ba565b61429d9190615a80565b11156143115760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ded565b6001600160a01b03841660009081526006602052604090205460019060ff168061435357506001600160a01b03841660009081526006602052604090205460ff165b1561435c575060005b6001600160a01b03841660009081526003602052604090205460ff16156143e757601a5460ff161580156143975750601a54610100900460ff165b156143e75742601b54601c546143ad9190615a80565b10156143e75760006143be306127ba565b9050601d5481106143e557601e5481106143d75750601e545b6143e0816144d0565b42601c555b505b6143f385858584614957565b95945050505050565b600080546001600160a01b0384811691161480159061442957506000546001600160a01b03838116911614155b801561444057506000546001600160a01b03163214155b801561446557506001600160a01b0382166000908152600a602052604090205460ff16155b801561448a57506001600160a01b0383166000908152600a602052604090205460ff16155b80156144a157506001600160a01b03821661dead14155b80156144b557506001600160a01b03821615155b801561194757506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160808101825260155461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000090049091166060820181905261452e575061494a565b3060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914614587573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856145a891906159b1565b6145b2919061599d565b6145bc919061599d565b905060006145ca8285615a2e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614604576146046159ff565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061469a9190615b8b565b816001815181106146ad576146ad6159ff565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061470c908590600090869030904290600401615c3c565b600060405180830381600087803b15801561472657600080fd5b505af115801561473a573d6000803e3d6000fd5b504792506000915084905061474f86846159b1565b614759919061599d565b9050841561484a576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156147e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061480d9190615ba8565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6148548183615a2e565b915085600001518660600181815161486c9190615bfc565b61ffff9081169091526060880151604089015160009350908216916148929116856159b1565b61489c919061599d565b905060006148aa8285615a2e565b604089015190915061ffff16156148f7576019546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156148f5573d6000803e3d6000fd5b505b602088015161ffff1615614941576018546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561493f573d6000803e3d6000fd5b505b50505050505050505b50601a805460ff19169055565b602154600090610100900460ff16614a03576149738585614bcb565b602154610100900460ff16158015614990575061499085856143fc565b15614a035760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ded565b6000614a1186868686614d29565b60808101516001600160a01b038816600090815260016020526040812080549394509192614a40908490615a2e565b909155505060608101516001600160a01b03861660009081526001602052604081208054909190614a72908490615a80565b90915550506001600160a01b03861660009081526008602052604090205460ff1615614ad6576001600160a01b038616600090815260026020526040902054614abc908590615a2e565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff1615614b365780516001600160a01b038616600090815260026020526040902054614b1c9190615a80565b6001600160a01b0386166000908152600260205260409020555b60008160a001511180614b4d575060008160200151115b15614b6e578060a0015160116000828254614b689190615a2e565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051614bb791815260200190565b60405180910390a350600195945050505050565b602154610100900460ff1615614c495760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ded565b614c5382826143fc565b158015614c6d57506017546001600160a01b038281169116145b15611209576001600160a01b038083166000908152600a60205260409020805460ff191660011790556021805461ff001916610100179081905562010000900416614ce257602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614d696040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614da96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614db1613ce3565b60c08201819052614dc290856159b1565b6080820152614dd186866143fc565b15614e84576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614e6d575060408051601f3d908101601f19168201909252614e6a91810190615c1f565b60015b614e7657600080fd5b905080614e8257600080fd5b505b8215614fa1576001600160a01b03851660009081526003602052604081205481906127109060ff1615614ed15760135461ffff808216945068010000000000000000909104169150614f2e565b6001600160a01b03891660009081526003602052604090205460ff1615614f125760125461ffff808216945068010000000000000000909104169150614f2e565b60145461ffff8082169450680100000000000000009091041691505b80614f3984896159b1565b614f43919061599d565b602085015280614f5383896159b1565b614f5d919061599d565b604085018190526020850151614f739190615a80565b614f7d9088615a2e565b845260c08401516020850151614f9391906159b1565b60a085015250614fba915050565b6000602082018190526040820181905284825260a08201525b604081015115615091578060c001518160400151614fd891906159b1565b3060009081526001602052604081208054909190614ff7908490615a80565b90915550503060009081526008602052604090205460ff161561503f576040808201513060009081526002602052918220805491929091615039908490615a80565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161508891815260200190565b60405180910390a35b8060c0015181604001516150a591906159b1565b8160a001516150b49190615a80565b81608001516150c39190615a2e565b606082015295945050505050565b8280546150dd906157f8565b90600052602060002090601f0160209004810192826150ff5760008555615145565b82601f1061511857805160ff1916838001178555615145565b82800160010185558215615145579182015b8281111561514557825182559160200191906001019061512a565b50615151929150615155565b5090565b5b808211156151515760008155600101615156565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151c2576151c261516a565b604052919050565b600067ffffffffffffffff8211156151e4576151e461516a565b5060051b60200190565b6001600160a01b0381168114613a9d57600080fd5b600082601f83011261521457600080fd5b81356020615229615224836151ca565b615199565b82815260059290921b8401810191818101908684111561524857600080fd5b8286015b8481101561526c57803561525f816151ee565b835291830191830161524c565b509695505050505050565b8015158114613a9d57600080fd5b6000806040838503121561529857600080fd5b823567ffffffffffffffff8111156152af57600080fd5b6152bb85828601615203565b92505060208301356152cc81615277565b809150509250929050565b60005b838110156152f25781810151838201526020016152da565b838111156123dc5750506000910152565b60208152600082518060208401526153228160408501602087016152d7565b601f01601f19169190910160400192915050565b60006020828403121561534857600080fd5b5035919050565b6000806040838503121561536257600080fd5b823561536d816151ee565b946020939093013593505050565b6000806040838503121561538e57600080fd5b8235615399816151ee565b915060208301356152cc81615277565b6000806000606084860312156153be57600080fd5b83356153c9816151ee565b925060208401356153d9816151ee565b929592945050506040919091013590565b600080604083850312156153fd57600080fd5b50508035926020909101359150565b600082601f83011261541d57600080fd5b8135602061542d615224836151ca565b82815260059290921b8401810191818101908684111561544c57600080fd5b8286015b8481101561526c5780358352918301918301615450565b6000806040838503121561547a57600080fd5b823567ffffffffffffffff8082111561549257600080fd5b61549e86838701615203565b935060208501359150808211156154b457600080fd5b506154c18582860161540c565b9150509250929050565b600080600080608085870312156154e157600080fd5b84356154ec81615277565b935060208501356154fc81615277565b9250604085013561550c81615277565b9150606085013561551c81615277565b939692955090935050565b60006020828403121561553957600080fd5b8135611947816151ee565b600080600080600060a0868803121561555c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000806080858703121561559557600080fd5b843567ffffffffffffffff808211156155ad57600080fd5b6155b988838901615203565b955060208701359150808211156155cf57600080fd5b6155db8883890161540c565b945060408701359150808211156155f157600080fd5b506155fe8782880161540c565b925050606085013561551c816151ee565b60006020828403121561562157600080fd5b813561194781615277565b803561ffff8116811461563e57600080fd5b919050565b60008060006060848603121561565857600080fd5b6156618461562c565b925061566f6020850161562c565b915061567d6040850161562c565b90509250925092565b6000806000806080858703121561569c57600080fd5b6156a58561562c565b93506156b36020860161562c565b92506156c16040860161562c565b91506156cf6060860161562c565b905092959194509250565b600080604083850312156156ed57600080fd5b82356156f8816151ee565b915060208301356152cc816151ee565b60008060006060848603121561571d57600080fd5b833567ffffffffffffffff8082111561573557600080fd5b61574187838801615203565b9450602086013591508082111561575757600080fd5b6157638783880161540c565b9350604086013591508082111561577957600080fd5b506157868682870161540c565b9150509250925092565b600081518084526020808501945080840160005b838110156157c95781516001600160a01b0316875295820195908201906001016157a4565b509495945050505050565b6040815260006157e76040830185615790565b905082151560208301529392505050565b600181811c9082168061580c57607f821691505b60208210811415615846577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156158b657816000190482111561589c5761589c61584c565b808516156158a957918102915b93841c9390800290615880565b509250929050565b6000826158cd5750600161103e565b816158da5750600061103e565b81600181146158f057600281146158fa57615916565b600191505061103e565b60ff84111561590b5761590b61584c565b50506001821b61103e565b5060208310610133831016604e8410600b8410161715615939575081810a61103e565b615943838361587b565b80600019048211156159575761595761584c565b029392505050565b600061194760ff8416836158be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826159ac576159ac61596e565b500490565b60008160001904831182151516156159cb576159cb61584c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015615a4057615a4061584c565b500390565b6000600019821415615a5957615a5961584c565b5060010190565b600060ff821660ff811415615a7757615a7761584c565b60010192915050565b60008219821115615a9357615a9361584c565b500190565b600082601f830112615aa957600080fd5b815167ffffffffffffffff811115615ac357615ac361516a565b615ad66020601f19601f84011601615199565b818152846020838601011115615aeb57600080fd5b6115b68260208301602087016152d7565b60008060008060808587031215615b1257600080fd5b845167ffffffffffffffff80821115615b2a57600080fd5b615b3688838901615a98565b95506020870151915080821115615b4c57600080fd5b50615b5987828801615a98565b93505060408501519150606085015160ff8116811461551c57600080fd5b600082615b8657615b8661596e565b500690565b600060208284031215615b9d57600080fd5b8151611947816151ee565b600080600060608486031215615bbd57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff808316818516808303821115615bf357615bf361584c565b01949350505050565b600061ffff83811690831681811015615c1757615c1761584c565b039392505050565b600060208284031215615c3157600080fd5b815161194781615277565b85815284602082015260a060408201526000615c5b60a0830186615790565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b88054254752ff331d0d906ebf59ad6a99433b8c7e12fa59b6ff11fc4b79146064736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106104175760003560e01c80636ebd007811610228578063bc77169d11610128578063dd62ed3e116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610d1d578063fdb78c0e14610d64578063fe575a8714610d8357600080fd5b8063ee5d9c2d14610ce8578063eec2744e14610cfd57600080fd5b8063dd62ed3e14610c4c578063e4fcfd1814610c92578063e8a0e3f914610ca8578063eafb5a3c14610cc857600080fd5b8063c6a276c2116100f7578063c6a276c214610b81578063cab5ebea14610ba1578063cf84770614610bc1578063d3f6a15714610c2c57600080fd5b8063bc77169d14610aa7578063becdf13f14610ac7578063c2fa418f14610ae7578063c6831cd814610b3457600080fd5b80638a8c523c116101bb578063a986a3411161018a578063aa5454731161016f578063aa54547314610a87578063b1b08f711461062c578063b3d514fb1461062c57600080fd5b8063a986a34114610a47578063aa22b17214610a6757600080fd5b80638a8c523c146109dd57806395d89b41146109f2578063a457c2d714610a07578063a9059cbb14610a2757600080fd5b806380c581d1116101f757806380c581d11461095157806388f8202014610971578063893d20e8146109aa5780638a63bd9b146109c857600080fd5b80636ebd00781461088557806370a082311461089a578063715018a6146108ba5780637b45d431146108cf57600080fd5b80632d8381191161033357806343b5beec116102c65780634fbee19311610295578063590ffdce1161027a578063590ffdce1461080c5780635c24b0741461082c5780635cce86cd1461084c57600080fd5b80634fbee193146107b457806350a8e016146107ed57600080fd5b806343b5beec1461073a578063452ed4f11461075a5780634ada218b1461077a5780634fb2e45d1461079457600080fd5b806334cd82601161030257806334cd8260146106ba57806336fddb04146106da57806339509351146106fa5780633f3cf56c1461071a57600080fd5b80632d838119146106425780632e8fa82114610662578063313ce5671461067857806333251a0b1461069a57600080fd5b80630fa604e4116103ab578063260039571161037a57806326003957146105cc5780632610eaca146105ec57806329dd87981461060c5780632b28fc7a1461062c57600080fd5b80630fa604e41461056257806313e461921461057757806318160ddd1461059757806323b872dd146105ac57600080fd5b806306fdde03116103e757806306fdde03146104e05780630758d924146105025780630923160214610522578063095ea7b31461054257600080fd5b8062b347471461042357806303fd2a451461046c5780630445b6671461049a57806305bbedb6146104be57600080fd5b3661041e57005b600080fd5b34801561042f57600080fd5b5060215461045790760100000000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561047857600080fd5b5061048261dead81565b6040516001600160a01b039091168152602001610463565b3480156104a657600080fd5b506104b0601d5481565b604051908152602001610463565b3480156104ca57600080fd5b506104de6104d9366004615285565b610da3565b005b3480156104ec57600080fd5b506104f5610e7c565b6040516104639190615303565b34801561050e57600080fd5b50601654610482906001600160a01b031681565b34801561052e57600080fd5b506104de61053d366004615336565b610f0e565b34801561054e57600080fd5b5061045761055d36600461534f565b61102d565b34801561056e57600080fd5b506104b0611044565b34801561058357600080fd5b506104de61059236600461537b565b61106a565b3480156105a357600080fd5b506104b061152d565b3480156105b857600080fd5b506104576105c73660046153a9565b611546565b3480156105d857600080fd5b506104de6105e73660046153ea565b6115be565b3480156105f857600080fd5b506104de610607366004615467565b6116c9565b34801561061857600080fd5b506104de6106273660046154cb565b6117ce565b34801561063857600080fd5b506104b06107d081565b34801561064e57600080fd5b506104b061065d366004615336565b6118b7565b34801561066e57600080fd5b506104b0601e5481565b34801561068457600080fd5b50600e5460405160ff9091168152602001610463565b3480156106a657600080fd5b506104de6106b5366004615527565b61194e565b3480156106c657600080fd5b506104de6106d5366004615544565b6119ee565b3480156106e657600080fd5b506104de6106f536600461537b565b611a7e565b34801561070657600080fd5b5061045761071536600461534f565b611af7565b34801561072657600080fd5b506104de6107353660046153ea565b611b33565b34801561074657600080fd5b506104de61075536600461557f565b611c3e565b34801561076657600080fd5b50601754610482906001600160a01b031681565b34801561078657600080fd5b506021546104579060ff1681565b3480156107a057600080fd5b506104de6107af366004615527565b6123e2565b3480156107c057600080fd5b506104576107cf366004615527565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107f957600080fd5b5060215461045790610100900460ff1681565b34801561081857600080fd5b506104de61082736600461537b565b6125e1565b34801561083857600080fd5b506104de610847366004615527565b61265a565b34801561085857600080fd5b50610457610867366004615527565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561089157600080fd5b506104b0612799565b3480156108a657600080fd5b506104b06108b5366004615527565b6127ba565b3480156108c657600080fd5b506104de612819565b3480156108db57600080fd5b5060125461091c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610463565b34801561095d57600080fd5b506104de61096c36600461537b565b6128c9565b34801561097d57600080fd5b5061045761098c366004615527565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156109b657600080fd5b506000546001600160a01b0316610482565b3480156109d457600080fd5b50610457612a85565b3480156109e957600080fd5b506104de612af4565b3480156109fe57600080fd5b506104f5612ce4565b348015610a1357600080fd5b50610457610a2236600461534f565b612cf3565b348015610a3357600080fd5b50610457610a4236600461534f565b612d2a565b348015610a5357600080fd5b506104de610a6236600461560f565b612d41565b348015610a7357600080fd5b506104de610a82366004615643565b612ddf565b348015610a9357600080fd5b506104de610aa2366004615686565b612edb565b348015610ab357600080fd5b506104de610ac2366004615686565b613036565b348015610ad357600080fd5b506104de610ae2366004615686565b613191565b348015610af357600080fd5b5060145461091c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b4057600080fd5b5060135461091c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b8d57600080fd5b506104de610b9c366004615527565b6132ec565b348015610bad57600080fd5b506104de610bbc36600461560f565b61338c565b348015610bcd57600080fd5b50601554610bfe9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610463565b348015610c3857600080fd5b506104de610c473660046156da565b61342e565b348015610c5857600080fd5b506104b0610c673660046156da565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c9e57600080fd5b506104b0601b5481565b348015610cb457600080fd5b506104de610cc3366004615708565b6134b7565b348015610cd457600080fd5b506104de610ce3366004615527565b61360e565b348015610cf457600080fd5b506104de6139bd565b348015610d0957600080fd5b506104de610d1836600461537b565b613aa0565b348015610d2957600080fd5b50601854601954610d44916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610463565b348015610d7057600080fd5b50601a5461045790610100900460ff1681565b348015610d8f57600080fd5b50610457610d9e366004615527565b613b48565b6000546001600160a01b03163314610df65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e4690859085906004016157d4565b600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050505050565b6060600c8054610e8b906157f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb7906157f8565b8015610f045780601f10610ed957610100808354040283529160200191610f04565b820191906000526020600020905b815481529060010190602001808311610ee757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60c8811015610fad5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ded565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b5050505050565b600061103a338484613bd6565b5060015b92915050565b600e546000906110589060ff16600a61595f565b602054611065919061599d565b905090565b6000546001600160a01b031633146110b85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b801561120d576001600160a01b03821660009081526008602052604090205460ff16156111275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610ded565b6001600160a01b03821660009081526001602052604090205415611181576001600160a01b038216600090815260016020526040902054611167906118b7565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556017549091161461120957600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611209576001600160a01b03821660009081526008602052604090205460ff1661127a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610ded565b6017546001600160a01b03838116911614156112f557611298613ce3565b6001600160a01b0383166000908152600260205260409020546112bb91906159b1565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156113a557611308613ce3565b6001600160a01b03831660009081526002602052604090205461132b91906159b1565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690556009805480611372576113726159d0565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561152857826001600160a01b0316600982815481106113cf576113cf6159ff565b6000918252602090912001546001600160a01b0316141561151657600980546113fa90600190615a2e565b8154811061140a5761140a6159ff565b600091825260209091200154600980546001600160a01b039092169183908110611436576114366159ff565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03948516179055918516815260029091526040812055611482613ce3565b6001600160a01b0384166000908152600260205260409020546114a591906159b1565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806114e2576114e26159d0565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061152081615a45565b9150506113a8565b505050565b6000600f546000141561153f57600080fd5b50600f5490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146115ab576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906115a5908490615a2e565b90915550505b6115b6848484613f56565b949350505050565b6000546001600160a01b0316331461160c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6103e8600f5461161c919061599d565b8183600f5461162b91906159b1565b611635919061599d565b10156116a95760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ded565b8082600f546116b891906159b1565b6116c2919061599d565b6020555050565b805182511461171a5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ded565b60005b82518160ff16101561152857818160ff168151811061173e5761173e6159ff565b602002602001015161174f336127ba565b101561175a57600080fd5b6117bb33848360ff1681518110611773576117736159ff565b6020908102919091010151600e5461178f9060ff16600a61595f565b858560ff16815181106117a4576117a46159ff565b60200260200101516117b691906159b1565b613f56565b50806117c681615a60565b91505061171d565b6000546001600160a01b0316331461181c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b5050505050505050565b60006011548211156119315760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ded565b600061193b613ce3565b9050611947818461599d565b9392505050565b6000546001600160a01b0316331461199c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610ff8565b6000546001600160a01b03163314611a3c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b8385600f54611a4b91906159b1565b611a55919061599d565b601d55600f548290611a689085906159b1565b611a72919061599d565b601e55601b5550505050565b6000546001600160a01b03163314611acc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161103a918590611b2e908690615a80565b613bd6565b6000546001600160a01b03163314611b815760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6103e8600f54611b91919061599d565b8183600f54611ba091906159b1565b611baa919061599d565b1015611c1e5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ded565b8082600f54611c2d91906159b1565b611c37919061599d565b601f555050565b6000546001600160a01b03163314611c8c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b602154760100000000000000000000000000000000000000000000900460ff1615611cf95760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610ded565b8251845114611d4a5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610ded565b602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611ddc57600080fd5b505af1925050508015611ded575060015b50602160029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611e6257506040513d6000823e601f3d908101601f19168201604052611e5f9190810190615afc565b60015b611eae5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610ded565b8351611ec190600c9060208701906150d1565b508251611ed590600d9060208601906150d1565b50600b829055600e805460ff191660ff8316908117909155611ef890600a61595f565b600b54611f0591906159b1565b600f819055601054611f179190615b77565b601054611f249190615a2e565b60115550505050601660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa29190615b8b565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120279190615b8b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190615b8b565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600f54612710906121069060056159b1565b612110919061599d565b601d55600f546127109061212590600a6159b1565b61212f919061599d565b601e55600f546103e8906121449060036159b1565b61214e919061599d565b601f55600f546103e8906121639060066159b1565b61216d919061599d565b6020908155602180547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601154600080546001600160a01b039081168252600184526040808320939093558154600f549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a360005460165461222c916001600160a01b039081169116600019613bd6565b6016546122469030906001600160a01b0316600019613bd6565b60005b84518110156122ed576000838281518110612266576122666159ff565b6020026020010151858381518110612280576122806159ff565b6020026020010151600f5461229591906159b1565b61229f919061599d565b90506122d860008054906101000a90046001600160a01b03168784815181106122ca576122ca6159ff565b602002602001015183613f56565b505080806122e590615a45565b915050612249565b50600054612308906001600160a01b0316306117b6826127ba565b506016546001600160a01b031663f305d7194730612325816127ba565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af11580156123ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123d19190615ba8565b5050506123dc612af4565b50505050565b6000546001600160a01b031633146124305760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6001600160a01b0381166124ac5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ded565b6001600160a01b03811661dead141561252d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ded565b60008054612546916001600160a01b03909116906125e1565b6125518160016125e1565b60008054612567906001600160a01b03166127ba565b111561258957600054612587906001600160a01b0316826117b6826127ba565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461262f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146126a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b602154610100900460ff16156127005760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610ded565b6001600160a01b0381163014156127595760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ded565b602180546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600e546000906127ad9060ff16600a61595f565b601f54611065919061599d565b6001600160a01b03811660009081526008602052604081205460ff16156127f757506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461103e906118b7565b6000546001600160a01b031633146128675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60008054612880916001600160a01b03909116906125e1565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146129175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b806129a3576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e6057600080fd5b60045415612a0a576203f480600454426129bd9190615a2e565b11612a0a5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ded565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610e46565b600080546001600160a01b03163314612ad45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b601654612aee9030906001600160a01b0316600019613bd6565b50600190565b6000546001600160a01b03163314612b425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60215460ff1615612b955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ded565b602154610100900460ff16612bec5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ded565b6021546201000090046001600160a01b0316612c3257602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601754600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612cc357600080fd5b505af1925050508015612cd4575060015b506021805460ff19166001179055565b6060600d8054610e8b906157f8565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161103a918590611b2e908690615a2e565b6000612d37338484613f56565b5060019392505050565b6000546001600160a01b03163314612d8f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517fa986a3410000000000000000000000000000000000000000000000000000000081528215156004820152620100009091046001600160a01b03169063a986a34190602401610ff8565b6000546001600160a01b03163314612e2d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6015805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580612ea58385615bd6565b612eaf9190615bd6565b6015805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b03163314612f295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60008183612f378688615bd6565b612f419190615bd6565b612f4b9190615bd6565b90506107d08161ffff161115612f6057600080fd5b6014805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff0000000000001916660100000000000091851691909102179055612fef8582615bfc565b6014805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146130845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b600081836130928688615bd6565b61309c9190615bd6565b6130a69190615bd6565b90506107d08161ffff1611156130bb57600080fd5b6012805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff000000000000191666010000000000009185169190910217905561314a8582615bfc565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146131df5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b600081836131ed8688615bd6565b6131f79190615bd6565b6132019190615bd6565b90506107d08161ffff16111561321657600080fd5b6013805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556132a58582615bfc565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461333a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610ff8565b6000546001600160a01b031633146133da5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061342390831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461347c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b601880546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560198054929093169116179055565b815183511480156134c9575080518251145b6135155760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ded565b60005b83518160ff1610156123dc57818160ff1681518110613539576135396159ff565b6020026020010151838260ff1681518110613556576135566159ff565b6020026020010151600f5461356b91906159b1565b613575919061599d565b61357e336127ba565b101561358957600080fd5b6135fb33858360ff16815181106135a2576135a26159ff565b6020026020010151848460ff16815181106135bf576135bf6159ff565b6020026020010151868560ff16815181106135dc576135dc6159ff565b6020026020010151600f546135f191906159b1565b6117b6919061599d565b508061360681615a60565b915050613518565b6000546001600160a01b0316331461365c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c59190615b8b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137369190615b8b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190615b8b565b90506001600160a01b03811661395b57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561380b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382f9190615b8b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561387c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a09190615b8b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139299190615b8b565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613984565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611528903090600019613bd6565b6000546001600160a01b03163314613a0b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b602154610100900460ff1615613a635760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ded565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613a9d573d6000803e3d6000fd5b50565b6000546001600160a01b03163314613aee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ded565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e46565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613bb2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e9190615c1f565b6001600160a01b038316613c2c5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ded565b6001600160a01b038216613c825760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ded565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601154600f546017546001600160a01b03166000908152600860205260408120549092919060ff1615613dbd576017546001600160a01b0316600090815260016020526040902054821080613d5157506017546001600160a01b031660009081526002602052604090205481105b15613d6d57600f54601154613d66919061599d565b9250505090565b6017546001600160a01b0316600090815260016020526040902054613d929083615a2e565b6017546001600160a01b0316600090815260026020526040902054909250613dba9082615a2e565b90505b60095415613f255760005b60095460ff82161015613f2357826001600060098460ff1681548110613df057613df06159ff565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613e5e5750816002600060098460ff1681548110613e3757613e376159ff565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613e7b57600f54601154613e73919061599d565b935050505090565b6001600060098360ff1681548110613e9557613e956159ff565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613ec49084615a2e565b92506002600060098360ff1681548110613ee057613ee06159ff565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613f0f9083615a2e565b915080613f1b81615a60565b915050613dc8565b505b600f54601154613f35919061599d565b821015613f4c57600f54601154613d66919061599d565b613d66818361599d565b60006001600160a01b038416613fd45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ded565b6001600160a01b0383166140505760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ded565b600082116140c65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ded565b6140d084846143fc565b156143115760215460ff166141275760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ded565b6001600160a01b03841660009081526003602052604090205460ff168061416657506001600160a01b03831660009081526003602052604090205460ff165b1561422a576001600160a01b03841660009081526007602052604090205460ff161580156141ad57506001600160a01b03831660009081526007602052604090205460ff16155b1561422a57601f5482111561422a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ded565b6016546001600160a01b0384811691161480159061426157506001600160a01b03831660009081526003602052604090205460ff16155b15614311576001600160a01b03831660009081526007602052604090205460ff166143115760205482614293856127ba565b61429d9190615a80565b11156143115760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ded565b6001600160a01b03841660009081526006602052604090205460019060ff168061435357506001600160a01b03841660009081526006602052604090205460ff165b1561435c575060005b6001600160a01b03841660009081526003602052604090205460ff16156143e757601a5460ff161580156143975750601a54610100900460ff165b156143e75742601b54601c546143ad9190615a80565b10156143e75760006143be306127ba565b9050601d5481106143e557601e5481106143d75750601e545b6143e0816144d0565b42601c555b505b6143f385858584614957565b95945050505050565b600080546001600160a01b0384811691161480159061442957506000546001600160a01b03838116911614155b801561444057506000546001600160a01b03163214155b801561446557506001600160a01b0382166000908152600a602052604090205460ff16155b801561448a57506001600160a01b0383166000908152600a602052604090205460ff16155b80156144a157506001600160a01b03821661dead14155b80156144b557506001600160a01b03821615155b801561194757506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160808101825260155461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000090049091166060820181905261452e575061494a565b3060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914614587573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856145a891906159b1565b6145b2919061599d565b6145bc919061599d565b905060006145ca8285615a2e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614604576146046159ff565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061469a9190615b8b565b816001815181106146ad576146ad6159ff565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061470c908590600090869030904290600401615c3c565b600060405180830381600087803b15801561472657600080fd5b505af115801561473a573d6000803e3d6000fd5b504792506000915084905061474f86846159b1565b614759919061599d565b9050841561484a576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156147e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061480d9190615ba8565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6148548183615a2e565b915085600001518660600181815161486c9190615bfc565b61ffff9081169091526060880151604089015160009350908216916148929116856159b1565b61489c919061599d565b905060006148aa8285615a2e565b604089015190915061ffff16156148f7576019546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156148f5573d6000803e3d6000fd5b505b602088015161ffff1615614941576018546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561493f573d6000803e3d6000fd5b505b50505050505050505b50601a805460ff19169055565b602154600090610100900460ff16614a03576149738585614bcb565b602154610100900460ff16158015614990575061499085856143fc565b15614a035760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ded565b6000614a1186868686614d29565b60808101516001600160a01b038816600090815260016020526040812080549394509192614a40908490615a2e565b909155505060608101516001600160a01b03861660009081526001602052604081208054909190614a72908490615a80565b90915550506001600160a01b03861660009081526008602052604090205460ff1615614ad6576001600160a01b038616600090815260026020526040902054614abc908590615a2e565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff1615614b365780516001600160a01b038616600090815260026020526040902054614b1c9190615a80565b6001600160a01b0386166000908152600260205260409020555b60008160a001511180614b4d575060008160200151115b15614b6e578060a0015160116000828254614b689190615a2e565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051614bb791815260200190565b60405180910390a350600195945050505050565b602154610100900460ff1615614c495760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ded565b614c5382826143fc565b158015614c6d57506017546001600160a01b038281169116145b15611209576001600160a01b038083166000908152600a60205260409020805460ff191660011790556021805461ff001916610100179081905562010000900416614ce257602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614d696040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614da96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614db1613ce3565b60c08201819052614dc290856159b1565b6080820152614dd186866143fc565b15614e84576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614e6d575060408051601f3d908101601f19168201909252614e6a91810190615c1f565b60015b614e7657600080fd5b905080614e8257600080fd5b505b8215614fa1576001600160a01b03851660009081526003602052604081205481906127109060ff1615614ed15760135461ffff808216945068010000000000000000909104169150614f2e565b6001600160a01b03891660009081526003602052604090205460ff1615614f125760125461ffff808216945068010000000000000000909104169150614f2e565b60145461ffff8082169450680100000000000000009091041691505b80614f3984896159b1565b614f43919061599d565b602085015280614f5383896159b1565b614f5d919061599d565b604085018190526020850151614f739190615a80565b614f7d9088615a2e565b845260c08401516020850151614f9391906159b1565b60a085015250614fba915050565b6000602082018190526040820181905284825260a08201525b604081015115615091578060c001518160400151614fd891906159b1565b3060009081526001602052604081208054909190614ff7908490615a80565b90915550503060009081526008602052604090205460ff161561503f576040808201513060009081526002602052918220805491929091615039908490615a80565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161508891815260200190565b60405180910390a35b8060c0015181604001516150a591906159b1565b8160a001516150b49190615a80565b81608001516150c39190615a2e565b606082015295945050505050565b8280546150dd906157f8565b90600052602060002090601f0160209004810192826150ff5760008555615145565b82601f1061511857805160ff1916838001178555615145565b82800160010185558215615145579182015b8281111561514557825182559160200191906001019061512a565b50615151929150615155565b5090565b5b808211156151515760008155600101615156565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151c2576151c261516a565b604052919050565b600067ffffffffffffffff8211156151e4576151e461516a565b5060051b60200190565b6001600160a01b0381168114613a9d57600080fd5b600082601f83011261521457600080fd5b81356020615229615224836151ca565b615199565b82815260059290921b8401810191818101908684111561524857600080fd5b8286015b8481101561526c57803561525f816151ee565b835291830191830161524c565b509695505050505050565b8015158114613a9d57600080fd5b6000806040838503121561529857600080fd5b823567ffffffffffffffff8111156152af57600080fd5b6152bb85828601615203565b92505060208301356152cc81615277565b809150509250929050565b60005b838110156152f25781810151838201526020016152da565b838111156123dc5750506000910152565b60208152600082518060208401526153228160408501602087016152d7565b601f01601f19169190910160400192915050565b60006020828403121561534857600080fd5b5035919050565b6000806040838503121561536257600080fd5b823561536d816151ee565b946020939093013593505050565b6000806040838503121561538e57600080fd5b8235615399816151ee565b915060208301356152cc81615277565b6000806000606084860312156153be57600080fd5b83356153c9816151ee565b925060208401356153d9816151ee565b929592945050506040919091013590565b600080604083850312156153fd57600080fd5b50508035926020909101359150565b600082601f83011261541d57600080fd5b8135602061542d615224836151ca565b82815260059290921b8401810191818101908684111561544c57600080fd5b8286015b8481101561526c5780358352918301918301615450565b6000806040838503121561547a57600080fd5b823567ffffffffffffffff8082111561549257600080fd5b61549e86838701615203565b935060208501359150808211156154b457600080fd5b506154c18582860161540c565b9150509250929050565b600080600080608085870312156154e157600080fd5b84356154ec81615277565b935060208501356154fc81615277565b9250604085013561550c81615277565b9150606085013561551c81615277565b939692955090935050565b60006020828403121561553957600080fd5b8135611947816151ee565b600080600080600060a0868803121561555c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000806080858703121561559557600080fd5b843567ffffffffffffffff808211156155ad57600080fd5b6155b988838901615203565b955060208701359150808211156155cf57600080fd5b6155db8883890161540c565b945060408701359150808211156155f157600080fd5b506155fe8782880161540c565b925050606085013561551c816151ee565b60006020828403121561562157600080fd5b813561194781615277565b803561ffff8116811461563e57600080fd5b919050565b60008060006060848603121561565857600080fd5b6156618461562c565b925061566f6020850161562c565b915061567d6040850161562c565b90509250925092565b6000806000806080858703121561569c57600080fd5b6156a58561562c565b93506156b36020860161562c565b92506156c16040860161562c565b91506156cf6060860161562c565b905092959194509250565b600080604083850312156156ed57600080fd5b82356156f8816151ee565b915060208301356152cc816151ee565b60008060006060848603121561571d57600080fd5b833567ffffffffffffffff8082111561573557600080fd5b61574187838801615203565b9450602086013591508082111561575757600080fd5b6157638783880161540c565b9350604086013591508082111561577957600080fd5b506157868682870161540c565b9150509250925092565b600081518084526020808501945080840160005b838110156157c95781516001600160a01b0316875295820195908201906001016157a4565b509495945050505050565b6040815260006157e76040830185615790565b905082151560208301529392505050565b600181811c9082168061580c57607f821691505b60208210811415615846577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156158b657816000190482111561589c5761589c61584c565b808516156158a957918102915b93841c9390800290615880565b509250929050565b6000826158cd5750600161103e565b816158da5750600061103e565b81600181146158f057600281146158fa57615916565b600191505061103e565b60ff84111561590b5761590b61584c565b50506001821b61103e565b5060208310610133831016604e8410600b8410161715615939575081810a61103e565b615943838361587b565b80600019048211156159575761595761584c565b029392505050565b600061194760ff8416836158be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826159ac576159ac61596e565b500490565b60008160001904831182151516156159cb576159cb61584c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015615a4057615a4061584c565b500390565b6000600019821415615a5957615a5961584c565b5060010190565b600060ff821660ff811415615a7757615a7761584c565b60010192915050565b60008219821115615a9357615a9361584c565b500190565b600082601f830112615aa957600080fd5b815167ffffffffffffffff811115615ac357615ac361516a565b615ad66020601f19601f84011601615199565b818152846020838601011115615aeb57600080fd5b6115b68260208301602087016152d7565b60008060008060808587031215615b1257600080fd5b845167ffffffffffffffff80821115615b2a57600080fd5b615b3688838901615a98565b95506020870151915080821115615b4c57600080fd5b50615b5987828801615a98565b93505060408501519150606085015160ff8116811461551c57600080fd5b600082615b8657615b8661596e565b500690565b600060208284031215615b9d57600080fd5b8151611947816151ee565b600080600060608486031215615bbd57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff808316818516808303821115615bf357615bf361584c565b01949350505050565b600061ffff83811690831681811015615c1757615c1761584c565b039392505050565b600060208284031215615c3157600080fd5b815161194781615277565b85815284602082015260a060408201526000615c5b60a0830186615790565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b88054254752ff331d0d906ebf59ad6a99433b8c7e12fa59b6ff11fc4b79146064736f6c634300080b0033

Deployed Bytecode Sourcemap

6748:28727:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9745:39;;;;;;;;;;-1:-1:-1;9745:39:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;9745:39:0;;;;;;;;8890:73;;;;;;;;;;;;8921:42;8890:73;;;;;-1:-1:-1;;;;;370:55:1;;;352:74;;340:2;325:18;8890:73:0;206:226:1;9442:28:0;;;;;;;;;;;;;;;;;;;583:25:1;;;571:2;556:18;9442:28:0;437:177:1;20600:172:0;;;;;;;;;;-1:-1:-1;20600:172:0;;;;;:::i;:::-;;:::i;:::-;;15092:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8829:26::-;;;;;;;;;;-1:-1:-1;8829:26:0;;;;-1:-1:-1;;;;;8829:26:0;;;21358:150;;;;;;;;;;-1:-1:-1;21358:150:0;;;;;:::i;:::-;;:::i;15785:161::-;;;;;;;;;;-1:-1:-1;15785:161:0;;;;;:::i;:::-;;:::i;24444:112::-;;;;;;;;;;;;;:::i;18406:1519::-;;;;;;;;;;-1:-1:-1;18406:1519:0;;;;;:::i;:::-;;:::i;14795:115::-;;;;;;;;;;;;;:::i;16452:306::-;;;;;;;;;;-1:-1:-1;16452:306:0;;;;;:::i;:::-;;:::i;23494:267::-;;;;;;;;;;-1:-1:-1;23494:267:0;;;;;:::i;:::-;;:::i;30585:373::-;;;;;;;;;;-1:-1:-1;30585:373:0;;;;;:::i;:::-;;:::i;21155:195::-;;;;;;;;;;-1:-1:-1;21155:195:0;;;;;:::i;:::-;;:::i;8626:42::-;;;;;;;;;;;;8664:4;8626:42;;19933:250;;;;;;;;;;-1:-1:-1;19933:250:0;;;;;:::i;:::-;;:::i;9477:25::-;;;;;;;;;;;;;;;;14916:80;;;;;;;;;;-1:-1:-1;14984:9:0;;14916:80;;14984:9;;;;7466:36:1;;7454:2;7439:18;14916:80:0;7324:184:1;21039:108:0;;;;;;;;;;-1:-1:-1;21039:108:0;;;;;:::i;:::-;;:::i;24564:338::-;;;;;;;;;;-1:-1:-1;24564:338:0;;;;;:::i;:::-;;:::i;23769:140::-;;;;;;;;;;-1:-1:-1;23769:140:0;;;;;:::i;:::-;;:::i;16766:215::-;;;;;;;;;;-1:-1:-1;16766:215:0;;;;;:::i;:::-;;:::i;23217:269::-;;;;;;;;;;-1:-1:-1;23217:269:0;;;;;:::i;:::-;;:::i;11085:1979::-;;;;;;;;;;-1:-1:-1;11085:1979:0;;;;;:::i;:::-;;:::i;8862:21::-;;;;;;;;;;-1:-1:-1;8862:21:0;;;;-1:-1:-1;;;;;8862:21:0;;;9635:34;;;;;;;;;;-1:-1:-1;9635:34:0;;;;;;;;13653:588;;;;;;;;;;-1:-1:-1;13653:588:0;;;;;:::i;:::-;;:::i;24055:125::-;;;;;;;;;;-1:-1:-1;24055:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;24144:28:0;24120:4;24144:28;;;:19;:28;;;;;;;;;24055:125;9676:36;;;;;;;;;;-1:-1:-1;9676:36:0;;;;;;;;;;;24188:134;;;;;;;;;;-1:-1:-1;24188:134:0;;;;;:::i;:::-;;:::i;20191:248::-;;;;;;;;;;-1:-1:-1;20191:248:0;;;;;:::i;:::-;;:::i;23917:130::-;;;;;;;;;;-1:-1:-1;23917:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;24009:30:0;23985:4;24009:30;;;:21;:30;;;;;;;;;23917:130;24330:106;;;;;;;;;;;;;:::i;15404:198::-;;;;;;;;;;-1:-1:-1;15404:198:0;;;;;:::i;:::-;;:::i;14249:193::-;;;;;;;;;;;;;:::i;7945:167::-;;;;;;;;;;-1:-1:-1;7945:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:6:1;9478:15;;;9460:34;;9530:15;;;9525:2;9510:18;;9503:43;9582:15;;;9562:18;;;9555:43;;;;9634:15;;9629:2;9614:18;;9607:43;9687:15;;;9681:3;9666:19;;9659:44;9422:3;9407:19;7945:167:0;9186:523:1;17770:500:0;;;;;;;;;;-1:-1:-1;17770:500:0;;;;;:::i;:::-;;:::i;18278:120::-;;;;;;;;;;-1:-1:-1;18278:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18370:20:0;18346:4;18370:20;;;:11;:20;;;;;;;;;18278:120;15178:79;;;;;;;;;;-1:-1:-1;15230:7:0;15248:6;-1:-1:-1;;;;;15248:6:0;15178:79;;16271:173;;;;;;;;;;;;;:::i;29958:429::-;;;;;;;;;;;;;:::i;15002:84::-;;;;;;;;;;;;;:::i;16989:225::-;;;;;;;;;;-1:-1:-1;16989:225:0;;;;;:::i;:::-;;:::i;15610:167::-;;;;;;;;;;-1:-1:-1;15610:167:0;;;;;:::i;:::-;;:::i;25303:141::-;;;;;;;;;;-1:-1:-1;25303:141:0;;;;;:::i;:::-;;:::i;22921:288::-;;;;;;;;;;-1:-1:-1;22921:288:0;;;;;:::i;:::-;;:::i;22436:477::-;;;;;;;;;;-1:-1:-1;22436:477:0;;;;;:::i;:::-;;:::i;21520:447::-;;;;;;;;;;-1:-1:-1;21520:447:0;;;;;:::i;:::-;;:::i;21975:453::-;;;;;;;;;;-1:-1:-1;21975:453:0;;;;;:::i;:::-;;:::i;8300:172::-;;;;;;;;;;-1:-1:-1;8300:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8121:170;;;;;;;;;;-1:-1:-1;8121:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20780:118;;;;;;;;;;-1:-1:-1;20780:118:0;;;;;:::i;:::-;;:::i;25131:164::-;;;;;;;;;;-1:-1:-1;25131:164:0;;;;;:::i;:::-;;:::i;8481:136::-;;;;;;;;;;-1:-1:-1;8481:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11096:6:1;11129:15;;;11111:34;;11181:15;;;11176:2;11161:18;;11154:43;11233:15;;;11213:18;;;11206:43;;;;11285:15;;;11280:2;11265:18;;11258:43;11073:3;11058:19;8481:136:0;10863:444:1;24910:213:0;;;;;;;;;;-1:-1:-1;24910:213:0;;;;;:::i;:::-;;:::i;15263:133::-;;;;;;;;;;-1:-1:-1;15263:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15365:19:0;;;15347:7;15365:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15263:133;9360:44;;;;;;;;;;;;;;;;30966:482;;;;;;;;;;-1:-1:-1;30966:482:0;;;;;:::i;:::-;;:::i;17222:540::-;;;;;;;;;;-1:-1:-1;17222:540:0;;;;;:::i;:::-;;:::i;30395:182::-;;;;;;;;;;;;;:::i;20447:145::-;;;;;;;;;;-1:-1:-1;20447:145:0;;;;;:::i;:::-;;:::i;9080:203::-;;;;;;;;;;-1:-1:-1;9080:203:0;;;;;;-1:-1:-1;;;;;9080:203:0;;;;;;;;;;;-1:-1:-1;;;;;13225:15:1;;;13207:34;;13277:15;;;;13272:2;13257:18;;13250:43;13119:18;9080:203:0;12940:359:1;9314:39:0;;;;;;;;;;-1:-1:-1;9314:39:0;;;;;;;;;;;20906:125;;;;;;;;;;-1:-1:-1;20906:125:0;;;;;:::i;:::-;;:::i;20600:172::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;;;;;;;;;20708:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20708:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20746:8;;20756:7;;20708:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20600:172:::0;;:::o;15092:80::-;15140:13;15164:5;15157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15092:80;:::o;21358:150::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;21442:3:::1;21435;:10;;21427:31;;;::::0;-1:-1:-1;;;21427:31:0;;15130:2:1;21427:31:0::1;::::0;::::1;15112:21:1::0;15169:1;15149:18;;;15142:29;15207:10;15187:18;;;15180:38;15235:18;;21427:31:0::1;14928:331:1::0;21427:31:0::1;21469:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;583:25:1::0;;;21469:9:0;;;::::1;-1:-1:-1::0;;;;;21469:9:0::1;::::0;:26:::1;::::0;556:18:1;;21469:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21358:150:::0;:::o;15785:161::-;15860:4;15877:39;189:10;15900:7;15909:6;15877:8;:39::i;:::-;-1:-1:-1;15934:4:0;15785:161;;;;;:::o;24444:112::-;24538:9;;24489:7;;24534:13;;24538:9;;24534:2;:13;:::i;:::-;24516:14;;:32;;;;:::i;:::-;24509:39;;24444:112;:::o;18406:1519::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;18500:7:::1;18496:1422;;;-1:-1:-1::0;;;;;18533:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18532:21;18524:62;;;::::0;-1:-1:-1;;;18524:62:0;;17472:2:1;18524:62:0::1;::::0;::::1;17454:21:1::0;17511:2;17491:18;;;17484:30;17550;17530:18;;;17523:58;17598:18;;18524:62:0::1;17270:352:1::0;18524:62:0::1;-1:-1:-1::0;;;;;18604:16:0;::::1;18623:1;18604:16:::0;;;:7:::1;:16;::::0;;;;;:20;18601:116:::1;;-1:-1:-1::0;;;;;18684:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18664:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18645:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18601:116:::1;-1:-1:-1::0;;;;;18731:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18731:27:0::1;18754:4;18731:27;::::0;;18787:6:::1;::::0;;;::::1;18776:17;18773:79;;18813:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;18813:23:0;;;;;::::1;::::0;;-1:-1:-1;;18813:23:0::1;-1:-1:-1::0;;;;;18813:23:0;::::1;;::::0;;18773:79:::1;18406:1519:::0;;:::o;18496:1422::-:1;18874:7;18869:1049;;-1:-1:-1::0;;;;;18906:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18898:61;;;::::0;-1:-1:-1;;;18898:61:0;;17829:2:1;18898:61:0::1;::::0;::::1;17811:21:1::0;17868:2;17848:18;;;17841:30;17907;17887:18;;;17880:58;17955:18;;18898:61:0::1;17627:352:1::0;18898:61:0::1;18989:6;::::0;-1:-1:-1;;;;;18978:17:0;;::::1;18989:6:::0;::::1;18978:17;18974:933;;;19054:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;19035:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19016:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19083:7:::1;:16:::0;;;;;:20;;;19122:11:::1;:20:::0;;;:28;;-1:-1:-1;;19122:28:0::1;::::0;;18406:1519;;:::o;18974:933::-:1;19175:9;:16:::0;19195:1:::1;19175:21;19172:735;;;19255:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;19236:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19217:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19284:7:::1;:16:::0;;;;;:20;;;19323:11:::1;:20:::0;;;:28;;-1:-1:-1;;19323:28:0::1;::::0;;19370:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19370:15:0;;;;;-1:-1:-1;;19370:15:0::1;::::0;;;;;18406:1519;;:::o;19172:735::-:1;19431:9;19426:466;19450:9;:16:::0;19446:20;::::1;19426:466;;;19516:7;-1:-1:-1::0;;;;;19500:23:0::1;:9;19510:1;19500:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19500:12:0::1;:23;19496:377;;;19567:9;19577:16:::0;;:20:::1;::::0;19596:1:::1;::::0;19577:20:::1;:::i;:::-;19567:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19552:9:::1;:12:::0;;-1:-1:-1;;;;;19567:31:0;;::::1;::::0;19562:1;;19552:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19552:46:0::1;-1:-1:-1::0;;;;;19552:46:0;;::::1;;::::0;;19625:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;19710:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;19691:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19672:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19747:11:::1;:20:::0;;;:28;;-1:-1:-1;;19747:28:0::1;::::0;;19802:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19802:15:0;;;;;-1:-1:-1;;19802:15:0::1;::::0;;;;;19426:466:::1;18406:1519:::0;;:::o;19496:377::-:1;19468:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19426:466;;;;18406:1519:::0;;:::o;14795:115::-;14850:7;14865;;14876:1;14865:12;14861:31;;;14881:8;;;14861:31;-1:-1:-1;14900:7:0;;;14795:115::o;16452:306::-;-1:-1:-1;;;;;16573:19:0;;16552:4;16573:19;;;:11;:19;;;;;;;;16593:10;16573:31;;;;;;;;-1:-1:-1;;16573:52:0;16569:126;;-1:-1:-1;;;;;16642:19:0;;;;;;:11;:19;;;;;;;;16662:10;16642:31;;;;;;;:41;;16677:6;;16642:19;:41;;16677:6;;16642:41;:::i;:::-;;;;-1:-1:-1;;16569:126:0;16714:36;16724:6;16732:9;16743:6;16714:9;:36::i;:::-;16707:43;16452:306;-1:-1:-1;;;;16452:306:0:o;23494:267::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;23636:4:::1;23626:7;;:14;;;;:::i;:::-;23614:7;23603;23593;;:17;;;;:::i;:::-;23592:29;;;;:::i;:::-;:49;;23584:112;;;::::0;-1:-1:-1;;;23584:112:0;;19127:2:1;23584:112:0::1;::::0;::::1;19109:21:1::0;19166:2;19146:18;;;19139:30;19205:34;19185:18;;;19178:62;19276:20;19256:18;;;19249:48;19314:19;;23584:112:0::1;18925:414:1::0;23584:112:0::1;23746:7;23735;23725;;:17;;;;:::i;:::-;23724:29;;;;:::i;:::-;23707:14;:46:::0;-1:-1:-1;;23494:267:0:o;30585:373::-;30710:7;:14;30691:8;:15;:33;30683:67;;;;-1:-1:-1;;;30683:67:0;;19546:2:1;30683:67:0;;;19528:21:1;19585:2;19565:18;;;19558:30;19624:23;19604:18;;;19597:51;19665:18;;30683:67:0;19344:345:1;30683:67:0;30766:7;30761:190;30783:8;:15;30779:1;:19;;;30761:190;;;30853:7;30861:1;30853:10;;;;;;;;;;:::i;:::-;;;;;;;30828:21;30838:10;30828:9;:21::i;:::-;:35;;30820:44;;;;;;30879:60;30889:10;30901:8;30910:1;30901:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;30929:9;;30925:13;;30929:9;;30925:2;:13;:::i;:::-;30914:7;30922:1;30914:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;30879:9;:60::i;:::-;-1:-1:-1;30800:3:0;;;;:::i;:::-;;;;30761:190;;21155:195;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;21277:9:::1;::::0;:65:::1;::::0;;;;20106:14:1;;20099:22;21277:65:0::1;::::0;::::1;20081:41:1::0;20165:14;;20158:22;20138:18;;;20131:50;20224:14;;20217:22;20197:18;;;20190:50;20283:14;;20276:22;20256:18;;;20249:50;21277:9:0;;;::::1;-1:-1:-1::0;;;;;21277:9:0::1;::::0;:24:::1;::::0;20053:19:1;;21277:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21155:195:::0;;;;:::o;19933:250::-;19999:7;20038;;20027;:18;;20019:73;;;;-1:-1:-1;;;20019:73:0;;20512:2:1;20019:73:0;;;20494:21:1;20551:2;20531:18;;;20524:30;20590:34;20570:18;;;20563:62;20661:12;20641:18;;;20634:40;20691:19;;20019:73:0;20310:406:1;20019:73:0;20103:19;20126:10;:8;:10::i;:::-;20103:33;-1:-1:-1;20154:21:0;20103:33;20154:7;:21;:::i;:::-;20147:28;19933:250;-1:-1:-1;;;19933:250:0:o;21039:108::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;21108:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;370:55:1;;;21108:31:0::1;::::0;::::1;352:74:1::0;21108:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;325:18:1;;21108:31:0::1;206:226:1::0;24564:338:0;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;24778:16:::1;24758;24748:7;;:26;;;;:::i;:::-;24747:47;;;;:::i;:::-;24731:13;:63:::0;24819:7:::1;::::0;24846:13;;24819:23:::1;::::0;24829:13;;24819:23:::1;:::i;:::-;24818:41;;;;:::i;:::-;24805:10;:54:::0;24870:17:::1;:24:::0;-1:-1:-1;;;;24564:338:0:o;23769:140::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;-1:-1:-1;;;;;23861:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;23861:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23769:140::o;16766:215::-;189:10;16854:4;16903:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16903:34:0;;;;;;;;;;16854:4;;16871:80;;16894:7;;16903:47;;16940:10;;16903:47;:::i;:::-;16871:8;:80::i;23217:269::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;23358:4:::1;23348:7;;:14;;;;:::i;:::-;23336:7;23325;23315;;:17;;;;:::i;:::-;23314:29;;;;:::i;:::-;:49;;23306:117;;;::::0;-1:-1:-1;;;23306:117:0;;21056:2:1;23306:117:0::1;::::0;::::1;21038:21:1::0;21095:2;21075:18;;;21068:30;21134:34;21114:18;;;21107:62;21205:25;21185:18;;;21178:53;21248:19;;23306:117:0::1;20854:419:1::0;23306:117:0::1;23471:7;23460;23450;;:17;;;;:::i;:::-;23449:29;;;;:::i;:::-;23434:12;:44:::0;-1:-1:-1;;23217:269:0:o;11085:1979::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;11252:19:::1;::::0;;;::::1;;;11251:20;11243:34;;;::::0;-1:-1:-1;;;11243:34:0;;21480:2:1;11243:34:0::1;::::0;::::1;21462:21:1::0;21519:1;21499:18;;;21492:29;21557:3;21537:18;;;21530:31;21578:18;;11243:34:0::1;21278:324:1::0;11243:34:0::1;11315:8;:15;11296:8;:15;:34;11288:48;;;::::0;-1:-1:-1;;;11288:48:0;;21809:2:1;11288:48:0::1;::::0;::::1;21791:21:1::0;21848:1;21828:18;;;21821:29;21886:3;21866:18;;;21859:31;21907:18;;11288:48:0::1;21607:324:1::0;11288:48:0::1;11347:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11347:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11395::::1;::::0;;;;11422:4:::1;11395:33;::::0;::::1;352:74:1::0;11395:9:0;::::1;;::::0;:18:::1;::::0;325::1;;11395:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;11391:49:::0;11454:9:::1;;;;;;;;;-1:-1:-1::0;;;;;11454:9:0::1;-1:-1:-1::0;;;;;11454:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;11454:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;11450:454;;11881:11;::::0;-1:-1:-1;;;11881:11:0;;23478:2:1;11881:11:0::1;::::0;::::1;23460:21:1::0;23517:1;23497:18;;;23490:29;23555:3;23535:18;;;23528:31;23576:18;;11881:11:0::1;23276:324:1::0;11450:454:0::1;11604:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11635:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11670:14:0::1;:35:::0;;;11720:9:::1;:24:::0;;-1:-1:-1;;11720:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;11786:13:::1;::::0;:2:::1;:13;:::i;:::-;11769:14;;:30;;;;:::i;:::-;11759:7;:40:::0;;;11832:3:::1;::::0;:13:::1;::::0;11759:40;11832:13:::1;:::i;:::-;11825:3;;:21;;;;:::i;:::-;11814:7;:33:::0;-1:-1:-1;;;;11934:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;11934:9:0::1;-1:-1:-1::0;;;;;11934:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11923:42:0::1;;11966:9;;;;;;;;;-1:-1:-1::0;;;;;11966:9:0::1;-1:-1:-1::0;;;;;11966:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11923:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13225:15:1;;;11923:75:0::1;::::0;::::1;13207:34:1::0;11992:4:0::1;13257:18:1::0;;;13250:43;13119:18;;11923:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11914:6;:84:::0;;-1:-1:-1;;11914:84:0::1;-1:-1:-1::0;;;;;11914:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;12009:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;12009:22:0::1;-1:-1:-1::0;12009:22:0::1;::::0;;12059:7:::1;::::0;12074:5:::1;::::0;12059:11:::1;::::0;12069:1:::1;12059:11;:::i;:::-;12058:21;;;;:::i;:::-;12042:13;:37:::0;12104:7:::1;::::0;12120:5:::1;::::0;12104:12:::1;::::0;12114:2:::1;12104:12;:::i;:::-;12103:22;;;;:::i;:::-;12090:10;:35:::0;12152:7:::1;::::0;12167:4:::1;::::0;12152:11:::1;::::0;12162:1:::1;12152:11;:::i;:::-;12151:20;;;;:::i;:::-;12136:12;:35:::0;12200:7:::1;::::0;12215:4:::1;::::0;12200:11:::1;::::0;12210:1:::1;12200:11;:::i;:::-;12199:20;;;;:::i;:::-;12182:14;:37:::0;;;12230:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;12290:7:::1;::::0;-1:-1:-1;12280:6:0;;-1:-1:-1;;;;;12280:6:0;;::::1;12272:15:::0;;-1:-1:-1;12272:15:0;;;;;;:25;;;;12334:6;;12342:7:::1;::::0;12313:37;;583:25:1;;;12334:6:0::1;::::0;-1:-1:-1;;12313:37:0::1;::::0;556:18:1;12313:37:0::1;;;;;;;12372:6;::::0;12388:9:::1;::::0;12363:55:::1;::::0;-1:-1:-1;;;;;12372:6:0;;::::1;::::0;12388:9:::1;-1:-1:-1::0;;12363:8:0::1;:55::i;:::-;12461:9;::::0;12429:62:::1;::::0;12446:4:::1;::::0;-1:-1:-1;;;;;12461:9:0::1;-1:-1:-1::0;;12429:8:0::1;:62::i;:::-;12508:9;12504:178;12527:8;:15;12523:1;:19;12504:178;;;12563:14;12606:8;12615:1;12606:11;;;;;;;;:::i;:::-;;;;;;;12591:8;12600:1;12591:11;;;;;;;;:::i;:::-;;;;;;;12581:7;;:21;;;;:::i;:::-;12580:37;;;;:::i;:::-;12563:54;;12632:38;12642:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;12642:6:0::1;12650:8;12659:1;12650:11;;;;;;;;:::i;:::-;;;;;;;12663:6;12632:9;:38::i;:::-;;12548:134;12544:3;;;;;:::i;:::-;;;;12504:178;;;-1:-1:-1::0;12704:6:0::1;::::0;12694:51:::1;::::0;-1:-1:-1;;;;;12704:6:0::1;12720:4;12727:17;12704:6:::0;12727:9:::1;:17::i;12694:51::-;-1:-1:-1::0;12758:9:0::1;::::0;-1:-1:-1;;;;;12758:9:0::1;:25;12791:21;12836:4;12856:24;12836:4:::0;12856:9:::1;:24::i;:::-;12895:1;12981:6:::0;;12758:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;24692:15:1;;;12758:270:0::1;::::0;::::1;24674:34:1::0;24724:18;;;24717:34;;;;24767:18;;;24760:34;;;24810:18;;;24803:34;;;;12981:6:0;;;::::1;24853:19:1::0;;;24846:44;13002:15:0::1;24906:19:1::0;;;24899:35;24585:19;;12758:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13041:15;:13;:15::i;:::-;11085:1979:::0;;;;:::o;13653:588::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;-1:-1:-1;;;;;13732:22:0;::::1;13724:96;;;::::0;-1:-1:-1;;;13724:96:0;;25458:2:1;13724:96:0::1;::::0;::::1;25440:21:1::0;25497:2;25477:18;;;25470:30;25536:34;25516:18;;;25509:62;25607:31;25587:18;;;25580:59;25656:19;;13724:96:0::1;25256:425:1::0;13724:96:0::1;-1:-1:-1::0;;;;;13839:16:0;::::1;8921:42;13839:16;;13831:90;;;::::0;-1:-1:-1;;;13831:90:0;;25458:2:1;13831:90:0::1;::::0;::::1;25440:21:1::0;25497:2;25477:18;;;25470:30;25536:34;25516:18;;;25509:62;25607:31;25587:18;;;25580:59;25656:19;;13831:90:0::1;25256:425:1::0;13831:90:0::1;13952:6;::::0;;13932:34:::1;::::0;-1:-1:-1;;;;;13952:6:0;;::::1;::::0;13932:19:::1;:34::i;:::-;13977:35;13997:8;14007:4;13977:19;:35::i;:::-;14056:1;14046:6:::0;;14036:17:::1;::::0;-1:-1:-1;;;;;14046:6:0::1;14036:9;:17::i;:::-;:21;14033:99;;;14084:6;::::0;14074:46:::1;::::0;-1:-1:-1;;;;;14084:6:0::1;14092:8:::0;14102:17:::1;14084:6:::0;14102:9:::1;:17::i;14074:46::-;;14033:99;14152:6;:17:::0;;-1:-1:-1;;14152:17:0::1;-1:-1:-1::0;;;;;14152:17:0;::::1;::::0;;::::1;::::0;;14185:38:::1;::::0;14152:17;;;;14185:38:::1;::::0;14152:6;14185:38:::1;13653:588:::0;:::o;24188:134::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;-1:-1:-1;;;;;24276:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;24276:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24188:134::o;20191:248::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;20275:16:::1;::::0;::::1;::::0;::::1;;;20274:17;20266:54;;;::::0;-1:-1:-1;;;20266:54:0;;25888:2:1;20266:54:0::1;::::0;::::1;25870:21:1::0;25927:2;25907:18;;;25900:30;25966:26;25946:18;;;25939:54;26010:18;;20266:54:0::1;25686:348:1::0;20266:54:0::1;-1:-1:-1::0;;;;;20339:28:0;::::1;20362:4;20339:28;;20331:55;;;::::0;-1:-1:-1;;;20331:55:0;;26241:2:1;20331:55:0::1;::::0;::::1;26223:21:1::0;26280:2;26260:18;;;26253:30;26319:16;26299:18;;;26292:44;26353:18;;20331:55:0::1;26039:338:1::0;20331:55:0::1;20397:9;:34:::0;;-1:-1:-1;;;;;20397:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20191:248::o;24330:106::-;24418:9;;24371:7;;24414:13;;24418:9;;24414:2;:13;:::i;:::-;24398:12;;:30;;;;:::i;15404:198::-;-1:-1:-1;;;;;15494:20:0;;15470:7;15494:20;;;:11;:20;;;;;;;;15490:49;;;-1:-1:-1;;;;;;15523:16:0;;;;;:7;:16;;;;;;;15404:198::o;15490:49::-;-1:-1:-1;;;;;15577:16:0;;;;;;:7;:16;;;;;;15557:37;;:19;:37::i;14249:193::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;14334:6:::1;::::0;;14314:34:::1;::::0;-1:-1:-1;;;;;14334:6:0;;::::1;::::0;14314:19:::1;:34::i;:::-;14376:1;14359:19:::0;;-1:-1:-1;;14359:19:0::1;::::0;;14394:40:::1;::::0;14376:1;;14394:40:::1;::::0;14376:1;;14394:40:::1;14249:193::o:0;17770:500::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;17851:16;17847:416:::1;;-1:-1:-1::0;;;;;17884:13:0;;::::1;17900:5;17884:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17884:21:0::1;::::0;;17920:9:::1;::::0;:32;;;;;::::1;::::0;::::1;26550:74:1::0;;;;26640:18;;;26633:50;;;;17920:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;26523:18:1;;17920:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17847:416;17989:17;::::0;:22;17985:136:::1;;18078:6;18058:17;;18040:15;:35;;;;:::i;:::-;:44;18032:73;;;::::0;-1:-1:-1;;;18032:73:0;;26896:2:1;18032:73:0::1;::::0;::::1;26878:21:1::0;26935:2;26915:18;;;26908:30;26974:18;26954;;;26947:46;27010:18;;18032:73:0::1;26694:340:1::0;18032:73:0::1;-1:-1:-1::0;;;;;18135:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18135:20:0::1;18151:4;18135:20:::0;;::::1;::::0;;;18190:15:::1;18170:17;:35:::0;;;18220:9:::1;::::0;:31;;;;;;;::::1;26550:74:1::0;;;;26640:18;;;26633:50;18220:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;26523:18:1;;18220:31:0::1;26382:307:1::0;16271:173:0;16335:4;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;16384:9:::1;::::0;16352:62:::1;::::0;16369:4:::1;::::0;-1:-1:-1;;;;;16384:9:0::1;-1:-1:-1::0;;16352:8:0::1;:62::i;:::-;-1:-1:-1::0;16432:4:0::1;16271:173:::0;:::o;29958:429::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;30020:14:::1;::::0;::::1;;30019:15;30011:52;;;::::0;-1:-1:-1;;;30011:52:0;;27241:2:1;30011:52:0::1;::::0;::::1;27223:21:1::0;27280:2;27260:18;;;27253:30;27319:26;27299:18;;;27292:54;27363:18;;30011:52:0::1;27039:348:1::0;30011:52:0::1;30082:16;::::0;::::1;::::0;::::1;;;30074:53;;;::::0;-1:-1:-1;;;30074:53:0;;27594:2:1;30074:53:0::1;::::0;::::1;27576:21:1::0;27633:2;27613:18;;;27606:30;27672:26;27652:18;;;27645:54;27716:18;;30074:53:0::1;27392:348:1::0;30074:53:0::1;30149:9;::::0;;;::::1;-1:-1:-1::0;;;;;30149:9:0::1;30138:99;;30189:9;:36:::0;;;::::1;30219:4;30189:36:::0;::::1;;::::0;;30138:99:::1;30251:9;::::0;30271:6:::1;::::0;30326:9:::1;::::0;30251:85:::1;::::0;;;;-1:-1:-1;;;;;30271:6:0;;::::1;30251:85;::::0;::::1;27968:74:1::0;28090:10;30286:12:0::1;28078:23:1::0;28058:18;;;28051:51;28150:18;30308:15:0::1;28138:31:1::0;28118:18;;;28111:59;30326:9:0::1;::::0;;::::1;28186:18:1::0;;;28179:45;30251:9:0;;;::::1;;::::0;:19:::1;::::0;27940::1;;30251:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;30247:101:::0;30358:14:::1;:21:::0;;-1:-1:-1;;30358:21:0::1;30375:4;30358:21;::::0;;29958:429::o;15002:84::-;15052:13;15076:7;15069:14;;;;;:::i;16989:225::-;189:10;17082:4;17131:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17131:34:0;;;;;;;;;;17082:4;;17099:85;;17122:7;;17131:52;;17168:15;;17131:52;:::i;15610:167::-;15688:4;15705:42;189:10;15729:9;15740:6;15705:9;:42::i;:::-;-1:-1:-1;15765:4:0;;15610:167;-1:-1:-1;;;15610:167:0:o;25303:141::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;25387:9:::1;::::0;:49:::1;::::0;;;;179:14:1;;172:22;25387:49:0::1;::::0;::::1;154:41:1::0;25387:9:0;;;::::1;-1:-1:-1::0;;;;;25387:9:0::1;::::0;:40:::1;::::0;127:18:1;;25387:49:0::1;14:187:1::0;22921:288:0;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;23026:7:::1;:29:::0;;::::1;23106:33:::0;;::::1;::::0;::::1;::::0;23066:29;;::::1;::::0;::::1;::::0;;;;23026;;::::1;23066::::0;;;;;;;::::1;23106:33;;::::0;;23128:11;23166:21:::1;23086:9:::0;23046;23166:21:::1;:::i;:::-;:35;;;;:::i;:::-;23150:7;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;23150:51:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22921:288:0:o;22436:477::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;22564:12:::1;22613:11:::0;22601:9;22579:19:::1;22589:9:::0;22579:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;22564:60;;8664:4;22643:5;:20;;;;22635:29;;;::::0;::::1;;22675:14;:36:::0;;::::1;22722:32:::0;;::::1;22765:36:::0;;;;22675;;;::::1;;22765::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;22812:40:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;22890:15:::1;22722:32:::0;22890:5;:15:::1;:::i;:::-;22863:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;22436:477:0:o;21520:447::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;21643:12:::1;21692:11:::0;21680:9;21658:19:::1;21668:9:::0;21658:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;21643:60;;8664:4;21722:5;:20;;;;21714:29;;;::::0;::::1;;21754:9;:31:::0;;::::1;21796:27:::0;;::::1;21834:31:::0;;;;21754;;;::::1;;21834::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;21876:35:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;21944:15:::1;21796:27:::0;21944:5;:15:::1;:::i;:::-;21922:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21520:447:0:o;21975:453::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;22099:12:::1;22148:11:::0;22136:9;22114:19:::1;22124:9:::0;22114:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;22099:60;;8664:4;22178:5;:20;;;;22170:29;;;::::0;::::1;;22210:10;:32:::0;;::::1;22253:28:::0;;::::1;22292:32:::0;;;;22210;;;::::1;;22292::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;22335:36:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;22405:15:::1;22253:28:::0;22405:5;:15:::1;:::i;:::-;22382:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21975:453:0:o;20780:118::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;20854:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;370:55:1;;;20854:36:0::1;::::0;::::1;352:74:1::0;20854:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;325:18:1;;20854:36:0::1;206:226:1::0;25131:164:0;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;25207:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;25207:29:0;;::::1;;::::0;;25252:35:::1;::::0;::::1;::::0;::::1;::::0;25229:7;179:14:1;172:22;154:41;;142:2;127:18;;14:187;25252:35:0::1;;;;;;;;25131:164:::0;:::o;24910:213::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;25016:11:::1;:42:::0;;-1:-1:-1;;;;;25016:42:0;;::::1;-1:-1:-1::0;;25016:42:0;;::::1;;::::0;;;25069:23;:46;;;;;::::1;::::0;::::1;;::::0;;24910:213::o;30966:482::-;31121:8;:15;31102:8;:15;:34;:72;;;;;31159:8;:15;31140:8;:15;:34;31102:72;31094:106;;;;-1:-1:-1;;;31094:106:0;;19546:2:1;31094:106:0;;;19528:21:1;19585:2;19565:18;;;19558:30;19624:23;19604:18;;;19597:51;19665:18;;31094:106:0;19344:345:1;31094:106:0;31216:7;31211:230;31233:8;:15;31229:1;:19;;;31211:230;;;31329:8;31338:1;31329:11;;;;;;;;;;:::i;:::-;;;;;;;31314:8;31323:1;31314:11;;;;;;;;;;:::i;:::-;;;;;;;31304:7;;:21;;;;:::i;:::-;31303:37;;;;:::i;:::-;31278:21;31288:10;31278:9;:21::i;:::-;:62;;31270:71;;;;;;31356:73;31366:10;31378:8;31387:1;31378:11;;;;;;;;;;:::i;:::-;;;;;;;31417:8;31426:1;31417:11;;;;;;;;;;:::i;:::-;;;;;;;31402:8;31411:1;31402:11;;;;;;;;;;:::i;:::-;;;;;;;31392:7;;:21;;;;:::i;:::-;31391:37;;;;:::i;31356:73::-;-1:-1:-1;31250:3:0;;;;:::i;:::-;;;;31211:230;;17222:540;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;17291:20:::1;17324:9;17291:43;;17345:16;17375:10;-1:-1:-1::0;;;;;17375:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17364:40:0::1;;17413:4;17420:10;-1:-1:-1::0;;;;;17420:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17364:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13225:15:1;;;17364:74:0::1;::::0;::::1;13207:34:1::0;13277:15;;13257:18;;;13250:43;13119:18;;17364:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17345:93:::0;-1:-1:-1;;;;;;17453:22:0;::::1;17449:200;;17512:10;-1:-1:-1::0;;;;;17512:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17501:43:0::1;;17553:4;17560:10;-1:-1:-1::0;;;;;17560:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17501:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13225:15:1;;;17501:77:0::1;::::0;::::1;13207:34:1::0;13277:15;;13257:18;;;13250:43;13119:18;;17501:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17492:6;:86:::0;;-1:-1:-1;;17492:86:0::1;-1:-1:-1::0;;;;;17492:86:0;;;::::1;::::0;;;::::1;::::0;;17449:200:::1;;;17620:6;:17:::0;;-1:-1:-1;;17620:17:0::1;-1:-1:-1::0;;;;;17620:17:0;::::1;;::::0;;17449:200:::1;17659:9;:22:::0;;-1:-1:-1;;17659:22:0::1;-1:-1:-1::0;;;;;17659:22:0;::::1;::::0;;::::1;::::0;;;17692:62:::1;::::0;17709:4:::1;::::0;-1:-1:-1;;17692:8:0::1;:62::i;30395:182::-:0;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;30462:16:::1;::::0;::::1;::::0;::::1;;;30461:17;30453:58;;;::::0;-1:-1:-1;;;30453:58:0;;28888:2:1;30453:58:0::1;::::0;::::1;28870:21:1::0;28927:2;28907:18;;;28900:30;28966;28946:18;;;28939:58;29014:18;;30453:58:0::1;28686:352:1::0;30453:58:0::1;30530:6;::::0;;30522:47:::1;::::0;-1:-1:-1;;;;;30530:6:0;;::::1;::::0;30547:21:::1;30522:47:::0;::::1;;;::::0;30547:21;;30522:47;30530:6;30522:47;30547:21;30530:6;30522:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30395:182::o:0;20447:145::-;10150:6;;-1:-1:-1;;;;;10150:6:0;189:10;10150:22;10142:52;;;;-1:-1:-1;;;10142:52:0;;13506:2:1;10142:52:0;;;13488:21:1;13545:2;13525:18;;;13518:30;-1:-1:-1;;;13564:18:1;;;13557:47;13621:18;;10142:52:0;13304:341:1;10142:52:0;20537:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;26568:55:1;;;20537:47:0::1;::::0;::::1;26550:74:1::0;26667:14;;26660:22;26640:18;;;26633:50;20537:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;26523:18:1;;20537:47:0::1;26382:307:1::0;20906:125:0;20991:9;;:32;;;;;-1:-1:-1;;;;;370:55:1;;;20991:32:0;;;352:74:1;20967:4:0;;20991:9;;;;;:23;;325:18:1;;20991:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15954:309::-;-1:-1:-1;;;;;16048:20:0;;16040:52;;;;-1:-1:-1;;;16040:52:0;;29495:2:1;16040:52:0;;;29477:21:1;29534:2;29514:18;;;29507:30;29573:21;29553:18;;;29546:49;29612:18;;16040:52:0;29293:343:1;16040:52:0;-1:-1:-1;;;;;16111:21:0;;16103:53;;;;-1:-1:-1;;;16103:53:0;;29495:2:1;16103:53:0;;;29477:21:1;29534:2;29514:18;;;29507:30;29573:21;29553:18;;;29546:49;29612:18;;16103:53:0;29293:343:1;16103:53:0;-1:-1:-1;;;;;16169:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16222:33;;583:25:1;;;16222:33:0;;556:18:1;16222:33:0;;;;;;;15954:309;;;:::o;34654:818::-;34734:7;;34770;;34803:6;;-1:-1:-1;;;;;34803:6:0;34696:7;34791:19;;;:11;:19;;;;;;34696:7;;34734;34770;34791:19;;34788:217;;;34839:6;;-1:-1:-1;;;;;34839:6:0;34831:15;;;;:7;:15;;;;;;:25;-1:-1:-1;34831:25:0;:54;;-1:-1:-1;34868:6:0;;-1:-1:-1;;;;;34868:6:0;34860:15;;;;:7;:15;;;;;;:25;-1:-1:-1;34831:54:0;34827:84;;;34904:7;;34894;;:17;;;;:::i;:::-;34887:24;;;;34654:818;:::o;34827:84::-;34945:6;;-1:-1:-1;;;;;34945:6:0;34937:15;;;;:7;:15;;;;;;34926:26;;;;:::i;:::-;34986:6;;-1:-1:-1;;;;;34986:6:0;34978:15;;;;:7;:15;;;;;;34926:26;;-1:-1:-1;34967:26:0;;;;:::i;:::-;;;34788:217;35018:9;:16;:20;35015:347;;35060:7;35055:296;35077:9;:16;35073:20;;;;35055:296;;;35147:7;35123;:21;35131:9;35141:1;35131:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35131:12:0;35123:21;;;;;;;;;;;;;:31;;:66;;;35182:7;35158;:21;35166:9;35176:1;35166:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35166:12:0;35158:21;;;;;;;;;;;;;:31;35123:66;35119:96;;;35208:7;;35198;;:17;;;;:::i;:::-;35191:24;;;;;34654:818;:::o;35119:96::-;35254:7;:21;35262:9;35272:1;35262:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35262:12:0;35254:21;;;;;;;;;;;;;35244:31;;:7;:31;:::i;:::-;35234:41;;35314:7;:21;35322:9;35332:1;35322:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35322:12:0;35314:21;;;;;;;;;;;;;35304:31;;:7;:31;:::i;:::-;35294:41;-1:-1:-1;35095:3:0;;;;:::i;:::-;;;;35055:296;;;;35015:347;35396:7;;35386;;:17;;;;:::i;:::-;35376:7;:27;35372:57;;;35422:7;;35412;;:17;;;;:::i;35372:57::-;35447:17;35457:7;35447;:17;:::i;25817:1820::-;25896:4;-1:-1:-1;;;;;25921:18:0;;25913:68;;;;-1:-1:-1;;;25913:68:0;;29843:2:1;25913:68:0;;;29825:21:1;29882:2;29862:18;;;29855:30;29921:34;29901:18;;;29894:62;29992:7;29972:18;;;29965:35;30017:19;;25913:68:0;29641:401:1;25913:68:0;-1:-1:-1;;;;;26000:16:0;;25992:64;;;;-1:-1:-1;;;25992:64:0;;30249:2:1;25992:64:0;;;30231:21:1;30288:2;30268:18;;;30261:30;30327:34;30307:18;;;30300:62;30398:5;30378:18;;;30371:33;30421:19;;25992:64:0;30047:399:1;25992:64:0;26084:1;26075:6;:10;26067:64;;;;-1:-1:-1;;;26067:64:0;;30653:2:1;26067:64:0;;;30635:21:1;30692:2;30672:18;;;30665:30;30731:34;30711:18;;;30704:62;30802:11;30782:18;;;30775:39;30831:19;;26067:64:0;30451:405:1;26067:64:0;26145:20;26156:4;26162:2;26145:10;:20::i;:::-;26142:665;;;26186:14;;;;26182:89;;26221:34;;-1:-1:-1;;;26221:34:0;;31063:2:1;26221:34:0;;;31045:21:1;31102:2;31082:18;;;31075:30;31141:26;31121:18;;;31114:54;31185:18;;26221:34:0;30861:348:1;26182:89:0;-1:-1:-1;;;;;26288:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;26305:11:0;;;;;;:7;:11;;;;;;;;26288:28;26285:248;;;-1:-1:-1;;;;;26341:27:0;;;;;;:21;:27;;;;;;;;26340:28;:58;;;;-1:-1:-1;;;;;;26373:25:0;;;;;;:21;:25;;;;;;;;26372:26;26340:58;26336:182;;;26441:12;;26431:6;:22;;26423:75;;;;-1:-1:-1;;;26423:75:0;;31416:2:1;26423:75:0;;;31398:21:1;31455:2;31435:18;;;31428:30;31494:34;31474:18;;;31467:62;31565:10;31545:18;;;31538:38;31593:19;;26423:75:0;31214:404:1;26423:75:0;26564:9;;-1:-1:-1;;;;;26550:24:0;;;26564:9;;26550:24;;;;:40;;-1:-1:-1;;;;;;26579:11:0;;;;;;:7;:11;;;;;;;;26578:12;26550:40;26547:249;;;-1:-1:-1;;;;;26616:25:0;;;;;;:21;:25;;;;;;;;26611:170;;26700:14;;26690:6;26674:13;26684:2;26674:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26666:95;;;;-1:-1:-1;;;26666:95:0;;31825:2:1;26666:95:0;;;31807:21:1;31864:2;31844:18;;;31837:30;31903:34;31883:18;;;31876:62;31974:12;31954:18;;;31947:40;32004:19;;26666:95:0;31623:406:1;26666:95:0;-1:-1:-1;;;;;26854:25:0;;26821:12;26854:25;;;:19;:25;;;;;;26836:4;;26854:25;;;:52;;-1:-1:-1;;;;;;26883:23:0;;;;;;:19;:23;;;;;;;;26854:52;26851:98;;;-1:-1:-1;26932:5:0;26851:98;-1:-1:-1;;;;;26965:11:0;;;;;;:7;:11;;;;;;;;26961:606;;;26998:6;;;;26997:7;:47;;;;-1:-1:-1;27025:19:0;;;;;;;26997:47;26993:557;;;27114:15;27094:17;;27083:8;;:28;;;;:::i;:::-;:46;27079:456;;;27154:28;27185:24;27203:4;27185:9;:24::i;:::-;27154:55;;27260:13;;27236:20;:37;27232:284;;27329:10;;27305:20;:34;27302:77;;-1:-1:-1;27366:10:0;;27302:77;27405:34;27418:20;27405:12;:34::i;:::-;27477:15;27466:8;:26;27232:284;27131:404;27079:456;27585:44;27603:4;27609:2;27613:6;27621:7;27585:17;:44::i;:::-;27578:51;25817:1820;-1:-1:-1;;;;;25817:1820:0:o;25452:357::-;25520:4;25552:6;;-1:-1:-1;;;;;25544:14:0;;;25552:6;;25544:14;;;;:43;;-1:-1:-1;25581:6:0;;-1:-1:-1;;;;;25575:12:0;;;25581:6;;25575:12;;25544:43;:79;;;;-1:-1:-1;25617:6:0;;-1:-1:-1;;;;;25617:6:0;25604:9;:19;;25544:79;:118;;;;-1:-1:-1;;;;;;25641:21:0;;;;;;:17;:21;;;;;;;;25640:22;25544:118;:159;;;;-1:-1:-1;;;;;;25680:23:0;;;;;;:17;:23;;;;;;;;25679:24;25544:159;:186;;;;-1:-1:-1;;;;;;25720:10:0;;8921:42;25720:10;;25544:186;:219;;;;-1:-1:-1;;;;;;25747:16:0;;;;25544:219;:257;;;;-1:-1:-1;;;;;;25780:21:0;;25796:4;25780:21;;25537:264;25452:357;-1:-1:-1;;;25452:357:0:o;27645:1789::-;10044:6;:13;;-1:-1:-1;;10044:13:0;10053:4;10044:13;;;27728:30:::1;::::0;;::::1;::::0;::::1;::::0;;27751:7:::1;27728:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;27769:56:::1;;27807:7;;;27769:56;27860:4;27840:26;::::0;;;:11:::1;:26;::::0;;;;;;;27875:9:::1;::::0;-1:-1:-1;;;;;27875:9:0::1;27840:46:::0;;;;;;;;-1:-1:-1;;27840:67:0::1;27837:165;;27944:4;27924:26;::::0;;;:11:::1;:26;::::0;;;;;;;27959:9:::1;::::0;-1:-1:-1;;;;;27959:9:0::1;27924:46:::0;;;;;;;-1:-1:-1;;27924:66:0;;27837:165:::1;28014:17;28095:1;28079:6;:12;;;28035:56;;28059:6;:16;;;28036:39;;:20;:39;;;;:::i;:::-;28035:56;;;;:::i;:::-;28034:62;;;;:::i;:::-;28014:82:::0;-1:-1:-1;28107:15:0::1;28125:32;28014:82:::0;28125:20;:32:::1;:::i;:::-;28202:16;::::0;;28216:1:::1;28202:16:::0;;;;;::::1;::::0;;28107:50;;-1:-1:-1;28178:21:0::1;::::0;28202:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28202:16:0::1;28178:40;;28247:4;28229;28234:1;28229:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28229:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28273:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;28229:7;;28273:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28263:4;28268:1;28263:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28263:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;28302:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;28377:7;;28302:9:::1;::::0;28415:4;;28442::::1;::::0;28462:15:::1;::::0;28302:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28522:21:0::1;::::0;-1:-1:-1;28501:18:0::1;::::0;-1:-1:-1;28608:7:0;;-1:-1:-1;28582:22:0::1;28595:9:::0;28522:21;28582:22:::1;:::i;:::-;28581:34;;;;:::i;:::-;28554:61:::0;-1:-1:-1;28632:13:0;;28628:328:::1;;28662:9;::::0;:222:::1;::::0;;;;28739:4:::1;28662:222;::::0;::::1;24674:34:1::0;24724:18;;;24717:34;;;28662:9:0::1;24767:18:1::0;;;24760:34;;;24810:18;;;24803:34;8921:42:0::1;24853:19:1::0;;;24846:44;28854:15:0::1;24906:19:1::0;;;24899:35;-1:-1:-1;;;;;28662:9:0;;::::1;::::0;:25:::1;::::0;28695:16;;24585:19:1;;28662:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28904:40:0::1;::::0;;32818:25:1;;;32874:2;32859:18;;32852:34;;;28904:40:0::1;::::0;-1:-1:-1;32791:18:1;28904:40:0::1;;;;;;;28628:328;28968:30;28982:16:::0;28968:30;::::1;:::i;:::-;;;29025:6;:16;;;29009:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;29117:12:::1;::::0;::::1;::::0;29095:18:::1;::::0;::::1;::::0;29052:26:::1;::::0;-1:-1:-1;29081:48:0;;::::1;::::0;29082:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;29081:48;;;;:::i;:::-;29052:77:::0;-1:-1:-1;29140:24:0::1;29167:31;29052:77:::0;29167:10;:31:::1;:::i;:::-;29213:18;::::0;::::1;::::0;29140:58;;-1:-1:-1;29213:22:0::1;;::::0;29209:107:::1;;29252:23:::0;;:52:::1;::::0;-1:-1:-1;;;;;29252:23:0;;::::1;::::0;:52;::::1;;;::::0;29285:18;;29252:23:::1;:52:::0;:23;:52;29285:18;29252:23;:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29209:107;29330:16;::::0;::::1;::::0;:20:::1;;::::0;29326:101:::1;;29367:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;29367:21:0;;::::1;::::0;:48;::::1;;;::::0;29398:16;;29367:21:::1;:48:::0;:21;:48;29398:16;29367:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29326:101;27717:1717;;;;;;;;10068:1;-1:-1:-1::0;10080:6:0;:14;;-1:-1:-1;;10080:14:0;;;27645:1789::o;31689:909::-;31812:16;;31790:4;;31812:16;;;;;31807:221;;31845:28;31864:4;31870:2;31845:18;:28::i;:::-;31893:16;;;;;;;31892:17;:41;;;;;31913:20;31924:4;31930:2;31913:10;:20::i;:::-;31888:129;;;31954:47;;-1:-1:-1;;;31954:47:0;;33099:2:1;31954:47:0;;;33081:21:1;33138:2;33118:18;;;33111:30;33177:34;33157:18;;;33150:62;33248:7;33228:18;;;33221:35;33273:19;;31954:47:0;32897:401:1;31888:129:0;32040:25;32068:38;32079:4;32085:2;32089:7;32098;32068:10;:38::i;:::-;32136:14;;;;-1:-1:-1;;;;;32119:13:0;;;;;;:7;:13;;;;;:31;;32040:66;;-1:-1:-1;32136:14:0;;32119:31;;32136:14;;32119:31;:::i;:::-;;;;-1:-1:-1;;32176:22:0;;;;-1:-1:-1;;;;;32161:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;32176:22;;32161:37;:::i;:::-;;;;-1:-1:-1;;;;;;;32215:17:0;;;;;;:11;:17;;;;;;;;32211:89;;;-1:-1:-1;;;;;32265:13:0;;;;;;:7;:13;;;;;;:23;;32281:7;;32265:23;:::i;:::-;-1:-1:-1;;;;;32249:13:0;;;;;;:7;:13;;;;;:39;32211:89;-1:-1:-1;;;;;32314:15:0;;;;;;:11;:15;;;;;;;;32310:98;;;32374:22;;-1:-1:-1;;;;;32360:11:0;;32374:22;32360:11;;;:7;:11;;;;;;:36;;32374:22;32360:36;:::i;:::-;-1:-1:-1;;;;;32346:11:0;;;;;;:7;:11;;;;;:50;32310:98;32438:1;32424:6;:11;;;:15;:34;;;;32457:1;32443:6;:11;;;:15;32424:34;32420:89;;;32486:6;:11;;;32475:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;32420:89:0;32541:2;-1:-1:-1;;;;;32526:42:0;32535:4;-1:-1:-1;;;;;32526:42:0;;32545:6;:22;;;32526:42;;;;583:25:1;;571:2;556:18;;437:177;32526:42:0;;;;;;;;-1:-1:-1;32586:4:0;;31689:909;-1:-1:-1;;;;;31689:909:0:o;29442:508::-;29524:16;;;;;;;29523:17;29515:65;;;;-1:-1:-1;;;29515:65:0;;33505:2:1;29515:65:0;;;33487:21:1;33544:2;33524:18;;;33517:30;33583:34;33563:18;;;33556:62;33654:5;33634:18;;;33627:33;33677:19;;29515:65:0;33303:399:1;29515:65:0;29596:20;29607:4;29613:2;29596:10;:20::i;:::-;29595:21;:37;;;;-1:-1:-1;29626:6:0;;-1:-1:-1;;;;;29620:12:0;;;29626:6;;29620:12;29595:37;29591:352;;;-1:-1:-1;;;;;29649:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;29649:30:0;29675:4;29649:30;;;29694:16;:23;;-1:-1:-1;;29694:23:0;29649:30;29694:23;;;;;29743:9;;;;29732:107;;29787:9;:36;;;;29817:4;29787:36;;;;;29732:107;29853:19;:26;;-1:-1:-1;;29853:26:0;;;;;29899:32;;-1:-1:-1;154:41:1;;29899:32:0;;142:2:1;127:18;29899:32:0;;;;;;;29442:508;;:::o;32606:2040::-;32700:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32700:18:0;32731:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32731:25:0;32788:10;:8;:10::i;:::-;32767:18;;;:31;;;32828:28;;:7;:28;:::i;:::-;32811:14;;;:45;32873:20;32884:4;32890:2;32873:10;:20::i;:::-;32869:315;;;32941:9;;:38;;;;;-1:-1:-1;;;;;33988:15:1;;;32941:38:0;;;33970:34:1;34040:15;;;34020:18;;;34013:43;34072:18;;;34065:34;;;32910:12:0;;32941:9;;;;;:19;;33882:18:1;;32941:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;32941:38:0;;;;;;;;-1:-1:-1;;32941:38:0;;;;;;;;;;;;:::i;:::-;;;32937:164;;33077:8;;;32937:164;33030:5;-1:-1:-1;33121:7:0;33117:56;;33149:8;;;33117:56;32895:289;32869:315;33199:7;33196:1012;;;-1:-1:-1;;;;;33349:11:0;;33223:22;33349:11;;;:7;:11;;;;;;33223:22;;8815:5;;33349:11;;33345:423;;;33398:10;:18;;;;;;-1:-1:-1;33449:20:0;;;;;;-1:-1:-1;33345:423:0;;;-1:-1:-1;;;;;33495:13:0;;;;;;:7;:13;;;;;;;;33491:277;;;33546:9;:17;;;;;;-1:-1:-1;33596:19:0;;;;;;-1:-1:-1;33491:277:0;;;33673:14;:22;;;;;;-1:-1:-1;33728:24:0;;;;;;-1:-1:-1;33491:277:0;33827:7;33799:24;33809:14;33799:7;:24;:::i;:::-;33798:36;;;;:::i;:::-;33784:11;;;:50;33890:7;33865:21;33875:11;33865:7;:21;:::i;:::-;33864:33;;;;:::i;:::-;33849:12;;;:48;;;33948:11;;;;:26;;33849:48;33948:26;:::i;:::-;33937:38;;:7;:38;:::i;:::-;33912:63;;34020:18;;;;34006:11;;;;:32;;34020:18;34006:32;:::i;:::-;33992:11;;;:46;-1:-1:-1;33196:1012:0;;-1:-1:-1;;33196:1012:0;;34085:1;34071:11;;;:15;;;34101:12;;;:16;;;34132:32;;;34181:11;;;:15;33196:1012;34224:12;;;;:16;34220:289;;34298:6;:18;;;34283:6;:12;;;:33;;;;:::i;:::-;34273:4;34257:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;34354:4:0;34334:26;;;;:11;:26;;;;;;;;34331:104;;;34407:12;;;;;34397:4;34381:22;;;;:7;:22;;;;;:38;;34407:12;;34381:22;;:38;;34407:12;;34381:38;:::i;:::-;;;;-1:-1:-1;;34331:104:0;34477:4;-1:-1:-1;;;;;34454:43:0;34463:4;-1:-1:-1;;;;;34454:43:0;;34484:6;:12;;;34454:43;;;;583:25:1;;571:2;556:18;;437:177;34454:43:0;;;;;;;;34220:289;34594:6;:18;;;34579:6;:12;;;:33;;;;:::i;:::-;34564:6;:11;;;:49;;;;:::i;:::-;34546:6;:14;;;:68;;;;:::i;:::-;34521:22;;;:93;:22;32606:2040;-1:-1:-1;;;;;32606:2040:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;619:184:1;671:77;668:1;661:88;768:4;765:1;758:15;792:4;789:1;782:15;808:334;879:2;873:9;935:2;925:13;;-1:-1:-1;;921:86:1;909:99;;1038:18;1023:34;;1059:22;;;1020:62;1017:88;;;1085:18;;:::i;:::-;1121:2;1114:22;808:334;;-1:-1:-1;808:334:1:o;1147:183::-;1207:4;1240:18;1232:6;1229:30;1226:56;;;1262:18;;:::i;:::-;-1:-1:-1;1307:1:1;1303:14;1319:4;1299:25;;1147:183::o;1335:154::-;-1:-1:-1;;;;;1414:5:1;1410:54;1403:5;1400:65;1390:93;;1479:1;1476;1469:12;1494:737;1548:5;1601:3;1594:4;1586:6;1582:17;1578:27;1568:55;;1619:1;1616;1609:12;1568:55;1655:6;1642:20;1681:4;1705:60;1721:43;1761:2;1721:43;:::i;:::-;1705:60;:::i;:::-;1799:15;;;1885:1;1881:10;;;;1869:23;;1865:32;;;1830:12;;;;1909:15;;;1906:35;;;1937:1;1934;1927:12;1906:35;1973:2;1965:6;1961:15;1985:217;2001:6;1996:3;1993:15;1985:217;;;2081:3;2068:17;2098:31;2123:5;2098:31;:::i;:::-;2142:18;;2180:12;;;;2018;;1985:217;;;-1:-1:-1;2220:5:1;1494:737;-1:-1:-1;;;;;;1494:737:1:o;2236:118::-;2322:5;2315:13;2308:21;2301:5;2298:32;2288:60;;2344:1;2341;2334:12;2359:477;2449:6;2457;2510:2;2498:9;2489:7;2485:23;2481:32;2478:52;;;2526:1;2523;2516:12;2478:52;2566:9;2553:23;2599:18;2591:6;2588:30;2585:50;;;2631:1;2628;2621:12;2585:50;2654:61;2707:7;2698:6;2687:9;2683:22;2654:61;:::i;:::-;2644:71;;;2765:2;2754:9;2750:18;2737:32;2778:28;2800:5;2778:28;:::i;:::-;2825:5;2815:15;;;2359:477;;;;;:::o;2841:258::-;2913:1;2923:113;2937:6;2934:1;2931:13;2923:113;;;3013:11;;;3007:18;2994:11;;;2987:39;2959:2;2952:10;2923:113;;;3054:6;3051:1;3048:13;3045:48;;;-1:-1:-1;;3089:1:1;3071:16;;3064:27;2841:258::o;3104:442::-;3253:2;3242:9;3235:21;3216:4;3285:6;3279:13;3328:6;3323:2;3312:9;3308:18;3301:34;3344:66;3403:6;3398:2;3387:9;3383:18;3378:2;3370:6;3366:15;3344:66;:::i;:::-;3462:2;3450:15;-1:-1:-1;;3446:88:1;3431:104;;;;3537:2;3427:113;;3104:442;-1:-1:-1;;3104:442:1:o;3799:180::-;3858:6;3911:2;3899:9;3890:7;3886:23;3882:32;3879:52;;;3927:1;3924;3917:12;3879:52;-1:-1:-1;3950:23:1;;3799:180;-1:-1:-1;3799:180:1:o;3984:315::-;4052:6;4060;4113:2;4101:9;4092:7;4088:23;4084:32;4081:52;;;4129:1;4126;4119:12;4081:52;4168:9;4155:23;4187:31;4212:5;4187:31;:::i;:::-;4237:5;4289:2;4274:18;;;;4261:32;;-1:-1:-1;;;3984:315:1:o;4304:382::-;4369:6;4377;4430:2;4418:9;4409:7;4405:23;4401:32;4398:52;;;4446:1;4443;4436:12;4398:52;4485:9;4472:23;4504:31;4529:5;4504:31;:::i;:::-;4554:5;-1:-1:-1;4611:2:1;4596:18;;4583:32;4624:30;4583:32;4624:30;:::i;4691:456::-;4768:6;4776;4784;4837:2;4825:9;4816:7;4812:23;4808:32;4805:52;;;4853:1;4850;4843:12;4805:52;4892:9;4879:23;4911:31;4936:5;4911:31;:::i;:::-;4961:5;-1:-1:-1;5018:2:1;5003:18;;4990:32;5031:33;4990:32;5031:33;:::i;:::-;4691:456;;5083:7;;-1:-1:-1;;;5137:2:1;5122:18;;;;5109:32;;4691:456::o;5152:248::-;5220:6;5228;5281:2;5269:9;5260:7;5256:23;5252:32;5249:52;;;5297:1;5294;5287:12;5249:52;-1:-1:-1;;5320:23:1;;;5390:2;5375:18;;;5362:32;;-1:-1:-1;5152:248:1:o;5405:662::-;5459:5;5512:3;5505:4;5497:6;5493:17;5489:27;5479:55;;5530:1;5527;5520:12;5479:55;5566:6;5553:20;5592:4;5616:60;5632:43;5672:2;5632:43;:::i;5616:60::-;5710:15;;;5796:1;5792:10;;;;5780:23;;5776:32;;;5741:12;;;;5820:15;;;5817:35;;;5848:1;5845;5838:12;5817:35;5884:2;5876:6;5872:15;5896:142;5912:6;5907:3;5904:15;5896:142;;;5978:17;;5966:30;;6016:12;;;;5929;;5896:142;;6072:595;6190:6;6198;6251:2;6239:9;6230:7;6226:23;6222:32;6219:52;;;6267:1;6264;6257:12;6219:52;6307:9;6294:23;6336:18;6377:2;6369:6;6366:14;6363:34;;;6393:1;6390;6383:12;6363:34;6416:61;6469:7;6460:6;6449:9;6445:22;6416:61;:::i;:::-;6406:71;;6530:2;6519:9;6515:18;6502:32;6486:48;;6559:2;6549:8;6546:16;6543:36;;;6575:1;6572;6565:12;6543:36;;6598:63;6653:7;6642:8;6631:9;6627:24;6598:63;:::i;:::-;6588:73;;;6072:595;;;;;:::o;6672:647::-;6746:6;6754;6762;6770;6823:3;6811:9;6802:7;6798:23;6794:33;6791:53;;;6840:1;6837;6830:12;6791:53;6879:9;6866:23;6898:28;6920:5;6898:28;:::i;:::-;6945:5;-1:-1:-1;7002:2:1;6987:18;;6974:32;7015:30;6974:32;7015:30;:::i;:::-;7064:7;-1:-1:-1;7123:2:1;7108:18;;7095:32;7136:30;7095:32;7136:30;:::i;:::-;7185:7;-1:-1:-1;7244:2:1;7229:18;;7216:32;7257:30;7216:32;7257:30;:::i;:::-;6672:647;;;;-1:-1:-1;6672:647:1;;-1:-1:-1;;6672:647:1:o;7513:247::-;7572:6;7625:2;7613:9;7604:7;7600:23;7596:32;7593:52;;;7641:1;7638;7631:12;7593:52;7680:9;7667:23;7699:31;7724:5;7699:31;:::i;7765:454::-;7860:6;7868;7876;7884;7892;7945:3;7933:9;7924:7;7920:23;7916:33;7913:53;;;7962:1;7959;7952:12;7913:53;-1:-1:-1;;7985:23:1;;;8055:2;8040:18;;8027:32;;-1:-1:-1;8106:2:1;8091:18;;8078:32;;8157:2;8142:18;;8129:32;;-1:-1:-1;8208:3:1;8193:19;8180:33;;-1:-1:-1;7765:454:1;-1:-1:-1;7765:454:1:o;8224:957::-;8385:6;8393;8401;8409;8462:3;8450:9;8441:7;8437:23;8433:33;8430:53;;;8479:1;8476;8469:12;8430:53;8519:9;8506:23;8548:18;8589:2;8581:6;8578:14;8575:34;;;8605:1;8602;8595:12;8575:34;8628:61;8681:7;8672:6;8661:9;8657:22;8628:61;:::i;:::-;8618:71;;8742:2;8731:9;8727:18;8714:32;8698:48;;8771:2;8761:8;8758:16;8755:36;;;8787:1;8784;8777:12;8755:36;8810:63;8865:7;8854:8;8843:9;8839:24;8810:63;:::i;:::-;8800:73;;8926:2;8915:9;8911:18;8898:32;8882:48;;8955:2;8945:8;8942:16;8939:36;;;8971:1;8968;8961:12;8939:36;;8994:63;9049:7;9038:8;9027:9;9023:24;8994:63;:::i;:::-;8984:73;;;9107:2;9096:9;9092:18;9079:32;9120:31;9145:5;9120:31;:::i;9714:241::-;9770:6;9823:2;9811:9;9802:7;9798:23;9794:32;9791:52;;;9839:1;9836;9829:12;9791:52;9878:9;9865:23;9897:28;9919:5;9897:28;:::i;9960:159::-;10027:20;;10087:6;10076:18;;10066:29;;10056:57;;10109:1;10106;10099:12;10056:57;9960:159;;;:::o;10124:328::-;10198:6;10206;10214;10267:2;10255:9;10246:7;10242:23;10238:32;10235:52;;;10283:1;10280;10273:12;10235:52;10306:28;10324:9;10306:28;:::i;:::-;10296:38;;10353:37;10386:2;10375:9;10371:18;10353:37;:::i;:::-;10343:47;;10409:37;10442:2;10431:9;10427:18;10409:37;:::i;:::-;10399:47;;10124:328;;;;;:::o;10457:401::-;10539:6;10547;10555;10563;10616:3;10604:9;10595:7;10591:23;10587:33;10584:53;;;10633:1;10630;10623:12;10584:53;10656:28;10674:9;10656:28;:::i;:::-;10646:38;;10703:37;10736:2;10725:9;10721:18;10703:37;:::i;:::-;10693:47;;10759:37;10792:2;10781:9;10777:18;10759:37;:::i;:::-;10749:47;;10815:37;10848:2;10837:9;10833:18;10815:37;:::i;:::-;10805:47;;10457:401;;;;;;;:::o;11312:404::-;11396:6;11404;11457:2;11445:9;11436:7;11432:23;11428:32;11425:52;;;11473:1;11470;11463:12;11425:52;11512:9;11499:23;11531:31;11556:5;11531:31;:::i;:::-;11581:5;-1:-1:-1;11638:2:1;11623:18;;11610:32;11651:33;11610:32;11651:33;:::i;12114:821::-;12266:6;12274;12282;12335:2;12323:9;12314:7;12310:23;12306:32;12303:52;;;12351:1;12348;12341:12;12303:52;12391:9;12378:23;12420:18;12461:2;12453:6;12450:14;12447:34;;;12477:1;12474;12467:12;12447:34;12500:61;12553:7;12544:6;12533:9;12529:22;12500:61;:::i;:::-;12490:71;;12614:2;12603:9;12599:18;12586:32;12570:48;;12643:2;12633:8;12630:16;12627:36;;;12659:1;12656;12649:12;12627:36;12682:63;12737:7;12726:8;12715:9;12711:24;12682:63;:::i;:::-;12672:73;;12798:2;12787:9;12783:18;12770:32;12754:48;;12827:2;12817:8;12814:16;12811:36;;;12843:1;12840;12833:12;12811:36;;12866:63;12921:7;12910:8;12899:9;12895:24;12866:63;:::i;:::-;12856:73;;;12114:821;;;;;:::o;13650:484::-;13703:3;13741:5;13735:12;13768:6;13763:3;13756:19;13794:4;13823:2;13818:3;13814:12;13807:19;;13860:2;13853:5;13849:14;13881:1;13891:218;13905:6;13902:1;13899:13;13891:218;;;13970:13;;-1:-1:-1;;;;;13966:62:1;13954:75;;14049:12;;;;14084:15;;;;13927:1;13920:9;13891:218;;;-1:-1:-1;14125:3:1;;13650:484;-1:-1:-1;;;;;13650:484:1:o;14139:342::-;14340:2;14329:9;14322:21;14303:4;14360:56;14412:2;14401:9;14397:18;14389:6;14360:56;:::i;:::-;14352:64;;14466:6;14459:14;14452:22;14447:2;14436:9;14432:18;14425:50;14139:342;;;;;:::o;14486:437::-;14565:1;14561:12;;;;14608;;;14629:61;;14683:4;14675:6;14671:17;14661:27;;14629:61;14736:2;14728:6;14725:14;14705:18;14702:38;14699:218;;;14773:77;14770:1;14763:88;14874:4;14871:1;14864:15;14902:4;14899:1;14892:15;14699:218;;14486:437;;;:::o;15264:184::-;15316:77;15313:1;15306:88;15413:4;15410:1;15403:15;15437:4;15434:1;15427:15;15453:482;15542:1;15585:5;15542:1;15599:330;15620:7;15610:8;15607:21;15599:330;;;15739:4;-1:-1:-1;;15667:77:1;15661:4;15658:87;15655:113;;;15748:18;;:::i;:::-;15798:7;15788:8;15784:22;15781:55;;;15818:16;;;;15781:55;15897:22;;;;15857:15;;;;15599:330;;;15603:3;15453:482;;;;;:::o;15940:866::-;15989:5;16019:8;16009:80;;-1:-1:-1;16060:1:1;16074:5;;16009:80;16108:4;16098:76;;-1:-1:-1;16145:1:1;16159:5;;16098:76;16190:4;16208:1;16203:59;;;;16276:1;16271:130;;;;16183:218;;16203:59;16233:1;16224:10;;16247:5;;;16271:130;16308:3;16298:8;16295:17;16292:43;;;16315:18;;:::i;:::-;-1:-1:-1;;16371:1:1;16357:16;;16386:5;;16183:218;;16485:2;16475:8;16472:16;16466:3;16460:4;16457:13;16453:36;16447:2;16437:8;16434:16;16429:2;16423:4;16420:12;16416:35;16413:77;16410:159;;;-1:-1:-1;16522:19:1;;;16554:5;;16410:159;16601:34;16626:8;16620:4;16601:34;:::i;:::-;16731:6;-1:-1:-1;;16659:79:1;16650:7;16647:92;16644:118;;;16742:18;;:::i;:::-;16780:20;;15940:866;-1:-1:-1;;;15940:866:1:o;16811:140::-;16869:5;16898:47;16939:4;16929:8;16925:19;16919:4;16898:47;:::i;16956:184::-;17008:77;17005:1;16998:88;17105:4;17102:1;17095:15;17129:4;17126:1;17119:15;17145:120;17185:1;17211;17201:35;;17216:18;;:::i;:::-;-1:-1:-1;17250:9:1;;17145:120::o;17984:228::-;18024:7;18150:1;-1:-1:-1;;18078:74:1;18075:1;18072:81;18067:1;18060:9;18053:17;18049:105;18046:131;;;18157:18;;:::i;:::-;-1:-1:-1;18197:9:1;;17984:228::o;18217:184::-;18269:77;18266:1;18259:88;18366:4;18363:1;18356:15;18390:4;18387:1;18380:15;18406:184;18458:77;18455:1;18448:88;18555:4;18552:1;18545:15;18579:4;18576:1;18569:15;18595:125;18635:4;18663:1;18660;18657:8;18654:34;;;18668:18;;:::i;:::-;-1:-1:-1;18705:9:1;;18595:125::o;18725:195::-;18764:3;-1:-1:-1;;18788:5:1;18785:77;18782:103;;;18865:18;;:::i;:::-;-1:-1:-1;18912:1:1;18901:13;;18725:195::o;19694:175::-;19731:3;19775:4;19768:5;19764:16;19804:4;19795:7;19792:17;19789:43;;;19812:18;;:::i;:::-;19861:1;19848:15;;19694:175;-1:-1:-1;;19694:175:1:o;20721:128::-;20761:3;20792:1;20788:6;20785:1;20782:13;20779:39;;;20798:18;;:::i;:::-;-1:-1:-1;20834:9:1;;20721:128::o;21936:556::-;21990:5;22043:3;22036:4;22028:6;22024:17;22020:27;22010:55;;22061:1;22058;22051:12;22010:55;22090:6;22084:13;22116:18;22112:2;22109:26;22106:52;;;22138:18;;:::i;:::-;22182:114;22290:4;-1:-1:-1;;22214:4:1;22210:2;22206:13;22202:86;22198:97;22182:114;:::i;:::-;22321:2;22312:7;22305:19;22367:3;22360:4;22355:2;22347:6;22343:15;22339:26;22336:35;22333:55;;;22384:1;22381;22374:12;22333:55;22397:64;22458:2;22451:4;22442:7;22438:18;22431:4;22423:6;22419:17;22397:64;:::i;22497:774::-;22612:6;22620;22628;22636;22689:3;22677:9;22668:7;22664:23;22660:33;22657:53;;;22706:1;22703;22696:12;22657:53;22739:9;22733:16;22768:18;22809:2;22801:6;22798:14;22795:34;;;22825:1;22822;22815:12;22795:34;22848:61;22901:7;22892:6;22881:9;22877:22;22848:61;:::i;:::-;22838:71;;22955:2;22944:9;22940:18;22934:25;22918:41;;22984:2;22974:8;22971:16;22968:36;;;23000:1;22997;22990:12;22968:36;;23023:63;23078:7;23067:8;23056:9;23052:24;23023:63;:::i;:::-;23013:73;;;23126:2;23115:9;23111:18;23105:25;23095:35;;23173:2;23162:9;23158:18;23152:25;23217:4;23210:5;23206:16;23199:5;23196:27;23186:55;;23237:1;23234;23227:12;23605:112;23637:1;23663;23653:35;;23668:18;;:::i;:::-;-1:-1:-1;23702:9:1;;23605:112::o;23722:251::-;23792:6;23845:2;23833:9;23824:7;23820:23;23816:32;23813:52;;;23861:1;23858;23851:12;23813:52;23893:9;23887:16;23912:31;23937:5;23912:31;:::i;24945:306::-;25033:6;25041;25049;25102:2;25090:9;25081:7;25077:23;25073:32;25070:52;;;25118:1;25115;25108:12;25070:52;25147:9;25141:16;25131:26;;25197:2;25186:9;25182:18;25176:25;25166:35;;25241:2;25230:9;25226:18;25220:25;25210:35;;24945:306;;;;;:::o;28235:224::-;28274:3;28302:6;28335:2;28332:1;28328:10;28365:2;28362:1;28358:10;28396:3;28392:2;28388:12;28383:3;28380:21;28377:47;;;28404:18;;:::i;:::-;28440:13;;28235:224;-1:-1:-1;;;;28235:224:1:o;28464:217::-;28503:4;28532:6;28588:10;;;;28558;;28610:12;;;28607:38;;;28625:18;;:::i;:::-;28662:13;;28464:217;-1:-1:-1;;;28464:217:1:o;29043:245::-;29110:6;29163:2;29151:9;29142:7;29138:23;29134:32;29131:52;;;29179:1;29176;29169:12;29131:52;29211:9;29205:16;29230:28;29252:5;29230:28;:::i;32034:605::-;32333:6;32322:9;32315:25;32376:6;32371:2;32360:9;32356:18;32349:34;32419:3;32414:2;32403:9;32399:18;32392:31;32296:4;32440:57;32492:3;32481:9;32477:19;32469:6;32440:57;:::i;:::-;-1:-1:-1;;;;;32533:55:1;;;;32528:2;32513:18;;32506:83;-1:-1:-1;32620:3:1;32605:19;32598:35;32432:65;32034:605;-1:-1:-1;;;32034:605:1:o

Swarm Source

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