ETH Price: $3,122.18 (-0.52%)

Token

Vibe Inu (VIBE)
 

Overview

Max Total Supply

1,000,000,000 VIBE

Holders

296

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1.002586665211013181 VIBE

Value
$0.00
0x92F22c8A84B9dD64b6dF00048ec0bAa187F03bc2
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:
VibeInu

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-04
*/

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  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);
    function sync() external;
}

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 swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) 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 fullReset() external;
}

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

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

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal;

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

    struct Ratios {
        uint16 reflection;
        uint16 whale;
        uint16 babyWhale;
        uint16 marketing;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        reflection: 100,
        whale: 1000,
        babyWhale: 100,
        marketing: 1000,
        totalSwap: 2100
        });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xB0F9b21067c0d8238a86e27eE8211CA5b143fcA9),
        whale: payable(0xCB2DB213D64A1212FCD5DbE8F13469Aea6F25955)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

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

    bool public buybackEnabled;
    bool public babyWhaleEnabled;
    bool public whaleEnabled;
    uint256 public babyWhalePercent = 10;
    uint256 public babyWhaleDivisor = 100;

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert("Not in list.");
        }

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

    receive() external payable {}

    bool contractInitialized;

    function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == amounts.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;
        _maxTxAmount = (_tTotal * 5) / 1000;
        _maxWalletSize = (_tTotal * 2) / 100;
        contractInitialized = true;     
        _rOwned[_owner] = _rTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(_owner, address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _finalizeTransfer(_owner, accounts[i], amount, false, false, true);
        }

        _finalizeTransfer(_owner, address(this), balanceOf(_owner), false, false, true);

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

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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) {
            _finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

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

    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { if (_tTotal == 0) { revert(); } 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(msg.sender, recipient, amount);
        return true;
    }

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

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

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

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

//================================================ BLACKLIST

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

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

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

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

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

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

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

    function setRatios(uint16 reflection, uint16 whale, uint16 babyWhale, uint16 marketing) external onlyOwner {
        _ratios.reflection = reflection;
        _ratios.whale = whale;
        _ratios.babyWhale = babyWhale;
        _ratios.marketing = marketing;
        _ratios.totalSwap = marketing + whale + babyWhale;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection <= total, "Cannot exceed sum of buy and sell fees.");
    }

    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 / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    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) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 200, "Cannot set above 2%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function setBuybackEnabled(bool enabled) external onlyOwner {
        buybackEnabled = enabled;
    }

    function setWhaleEnabled(bool enabled) external onlyOwner {
        if (enabled) {
            babyWhaleEnabled = false;
        }
        whaleEnabled = enabled;
    }

    function setBabyWhaleEnabled(bool enabled) external onlyOwner {
        if (enabled) {
            whaleEnabled = false;
        }
        babyWhaleEnabled = enabled;
    }

    function setBabyWhaleSettings(uint256 percent, uint256 divisor) external onlyOwner {
        babyWhalePercent = percent;
        babyWhaleDivisor = divisor;
    }

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

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

        if (sell) {
            if (!inSwap) {
                if(contractSwapEnabled
                ) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if(piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if(contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }

            if (buybackEnabled && from != address(this)) {
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = dexRouter.WETH();
                uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
                uint256 value = (ethBalance * babyWhalePercent) / babyWhaleDivisor;
                if (babyWhaleEnabled && value < address(this).balance) {
                    buybackAndBurn(value);
                }

                if (whaleEnabled) {
                    if (address(this).balance < ethBalance * 2) {
                        whaleEnabled = false;
                        babyWhaleEnabled = true;
                    } else {
                        buybackAndBurn(ethBalance * 2);
                    }
                }
            }
        } 
        return _finalizeTransfer(from, to, amount, buy, sell, other);
    }

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

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        uint256 initial = address(this).balance;

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

        uint256 amtBalance = address(this).balance - initial;
        bool success;
        uint256 whaleBalance = (amtBalance * ratios.whale) / ratios.totalSwap;
        uint256 babyWhaleBalance = (amtBalance * ratios.babyWhale) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (whaleBalance + babyWhaleBalance);
        if (ratios.whale > 0) {
            (success,) = _taxWallets.whale.call{value: whaleBalance, gas: 35000}("");
        }
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
    }

    function buybackAndBurn(uint256 amountETH) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            DEAD,
            block.timestamp
        );
    }

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

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

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

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, 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;
    }

    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 buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

        ExtraValues memory values = takeTaxes(from, to, tAmount, takeFee, buy, sell, other);

        _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 takeTaxes(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool other) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        Ratios memory ratios = _ratios;
        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 currentFee;

            if (buy) {
                currentFee = _taxRates.buyFee;
            } else if (sell) {
                currentFee = _taxRates.sellFee;
            } else {
                currentFee = _taxRates.transferFee;
            }

            uint256 feeAmount = (tAmount * currentFee) / masterTaxDivisor;
            uint256 total = ratios.totalSwap + ratios.reflection;
            values.tFee = (feeAmount * ratios.reflection) / total;
            values.tSwap = feeAmount - values.tFee;
            values.tTransferAmount = tAmount - feeAmount;

            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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"whale","type":"uint16"},{"internalType":"uint16","name":"babyWhale","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"whale","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"babyWhaleDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"babyWhaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"babyWhalePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackEnabled","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","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":"isExcludedFromProtection","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":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBabyWhaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBabyWhaleSettings","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":"setBuybackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","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":"setExcludedFromProtection","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":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"whale","type":"uint16"},{"internalType":"uint16","name":"babyWhale","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"whale","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setWhaleEnabled","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"},{"inputs":[],"name":"whaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600481905561044c608081905260a081905260c0526012805465ffffffffffff191665044c044c044c179055606460e08190526103e86101008190526101208290526101405261083461016052601380546001600160501b03191669083403e8006403e800641790556101c060405273b0f9b21067c0d8238a86e27ee8211ca5b143fca961018081905273cb2db213d64a1212fcd5dbe8f13469aea6f259556101a0819052601680546001600160a01b0319908116909317905560178054831690911790556018805461ff0019908116909155601f80549091169055600a6020556021919091558154339116179055466038036200012557601480546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200024e565b466061036200015a57601480546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d11790556200024e565b46600114806200016a5750466004145b80620001765750466003145b15620001a857601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200024e565b4661a86a03620001de57601480546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200024e565b4660fa036200021357601480546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200024e565b60405162461bcd60e51b815260206004820152600c60248201526b2737ba1034b7103634b9ba1760a11b604482015260640160405180910390fd5b600080546001600160a01b0390811682526008602090815260408084208054600160ff19918216811790925530865282862080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805482168317905585549094168552600690925290922080549091169091179055615bc480620002da6000396000f3fe6080604052600436106104845760003560e01c80635bde7ee71161025e578063bfc2fc3511610143578063eec2744e116100bb578063fb78680d1161008a578063fe575a871161006f578063fe575a8714610da9578063fe963ca114610dc9578063feadde9c14610ddf57600080fd5b8063fb78680d14610d6a578063fdb78c0e14610d8a57600080fd5b8063eec2744e14610ccd578063f744bbb814610ced578063f8a2928d14610d0d578063f94aa1b414610d2357600080fd5b8063dd62ed3e11610112578063e71c13fe116100f7578063e71c13fe14610c77578063eafb5a3c14610c98578063ee5d9c2d14610cb857600080fd5b8063dd62ed3e14610c11578063de3a3b6914610c5757600080fd5b8063bfc2fc3514610b2f578063c0ca98ba14610b4f578063cf84770614610b6f578063d3f6a15714610bf157600080fd5b80638a63bd9b116101d6578063a2230c56116101a5578063b1b08f711161018a578063b1b08f7114610740578063b3d514fb14610740578063b7df8b3614610b1557600080fd5b8063a2230c5614610ad4578063a9059cbb14610af557600080fd5b80638a63bd9b14610a755780638a8c523c14610a8a57806395d89b4114610a9f5780639a9b567d14610ab457600080fd5b806370a082311161022d57806380c581d11161021257806380c581d1146109fe57806388f8202014610a1e578063893d20e814610a5757600080fd5b806370a08231146109c9578063715018a6146109e957600080fd5b80635bde7ee71461093b5780635c24b0741461095b5780635cce86cd1461097b5780636ebd0078146109b457600080fd5b806328577751116103845780633f3cf56c116102fc5780634e718e48116102cb5780634fbee193116102b05780634fbee193146108c357806350a8e016146108fc578063590ffdce1461091b57600080fd5b80634e718e48146108835780634fb2e45d146108a357600080fd5b80633f3cf56c14610813578063452ed4f11461083357806346ea7ac8146108535780634ada218b1461086957600080fd5b80632e8fa8211161035357806332cde6641161033857806332cde664146107b357806333251a0b146107d357806336fddb04146107f357600080fd5b80632e8fa82114610776578063313ce5671461078c57600080fd5b806328577751146107155780632b112e491461072b5780632b28fc7a146107405780632d8381191461075657600080fd5b8063095ea7b311610417578063160d0da5116103e657806323b872dd116103cb57806323b872dd146106b557806326003957146106d55780632610eaca146106f557600080fd5b8063160d0da51461067f57806318160ddd146106a057600080fd5b8063095ea7b3146105e15780630dcbcf1c146106115780630fa604e41461064a57806313e461921461065f57600080fd5b8063069d955f11610453578063069d955f1461052957806306fdde031461057f5780630712d165146105a15780630758d924146105c157600080fd5b806303fd2a45146104905780630445b667146104c3578063044df726146104e757806305bbedb61461050957600080fd5b3661048b57005b600080fd5b34801561049c57600080fd5b506104a661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cf57600080fd5b506104d960195481565b6040519081526020016104ba565b3480156104f357600080fd5b50610507610502366004615153565b610dff565b005b34801561051557600080fd5b50610507610524366004615280565b610edc565b34801561053557600080fd5b5060125461055a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016104ba565b34801561058b57600080fd5b50610594610f7a565b6040516104ba91906152f3565b3480156105ad57600080fd5b506105076105bc36600461533d565b61100c565b3480156105cd57600080fd5b506014546104a6906001600160a01b031681565b3480156105ed57600080fd5b506106016105fc366004615391565b6111a7565b60405190151581526020016104ba565b34801561061d57600080fd5b5061060161062c3660046153bd565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561065657600080fd5b506104d96111be565b34801561066b57600080fd5b5061050761067a3660046153da565b6111e4565b34801561068b57600080fd5b50601f5461060190600160b01b900460ff1681565b3480156106ac57600080fd5b506104d9611671565b3480156106c157600080fd5b506106016106d03660046153f8565b611689565b3480156106e157600080fd5b506105076106f0366004615439565b611701565b34801561070157600080fd5b506105076107103660046154b6565b61180b565b34801561072157600080fd5b506104d9601c5481565b34801561073757600080fd5b506104d9611963565b34801561074c57600080fd5b506104d96107d081565b34801561076257600080fd5b506104d961077136600461551a565b611991565b34801561078257600080fd5b506104d9601a5481565b34801561079857600080fd5b506107a1611a28565b60405160ff90911681526020016104ba565b3480156107bf57600080fd5b506105076107ce366004615533565b611a43565b3480156107df57600080fd5b506105076107ee3660046153bd565b611ba9565b3480156107ff57600080fd5b5061050761080e3660046153da565b611c72565b34801561081f57600080fd5b5061050761082e366004615439565b611ceb565b34801561083f57600080fd5b506015546104a6906001600160a01b031681565b34801561085f57600080fd5b506104d9610dac81565b34801561087557600080fd5b50601f546106019060ff1681565b34801561088f57600080fd5b5061050761089e36600461551a565b611df6565b3480156108af57600080fd5b506105076108be3660046153bd565b611e9a565b3480156108cf57600080fd5b506106016108de3660046153bd565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561090857600080fd5b50601f5461060190610100900460ff1681565b34801561092757600080fd5b506105076109363660046153da565b612091565b34801561094757600080fd5b50610507610956366004615439565b61210a565b34801561096757600080fd5b506105076109763660046153bd565b612163565b34801561098757600080fd5b506106016109963660046153bd565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109c057600080fd5b506104d9612250565b3480156109d557600080fd5b506104d96109e43660046153bd565b612271565b3480156109f557600080fd5b506105076122d0565b348015610a0a57600080fd5b50610507610a193660046153da565b612382565b348015610a2a57600080fd5b50610601610a393660046153bd565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a6357600080fd5b506000546001600160a01b03166104a6565b348015610a8157600080fd5b50610601612511565b348015610a9657600080fd5b50610507612580565b348015610aab57600080fd5b506105946127c9565b348015610ac057600080fd5b50610507610acf366004615576565b6127d8565b348015610ae057600080fd5b50601f5461060190600160c01b900460ff1681565b348015610b0157600080fd5b50610601610b10366004615391565b61285f565b348015610b2157600080fd5b50601b546106019060ff1681565b348015610b3b57600080fd5b50610507610b4a366004615153565b612876565b348015610b5b57600080fd5b50610507610b6a366004615576565b612923565b348015610b7b57600080fd5b50601354610bbc9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016104ba565b348015610bfd57600080fd5b50610507610c0c366004615593565b6129a3565b348015610c1d57600080fd5b506104d9610c2c366004615593565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c6357600080fd5b50610507610c723660046155c1565b612a1f565b348015610c8357600080fd5b50601f5461060190600160b81b900460ff1681565b348015610ca457600080fd5b50610507610cb33660046153bd565b6130da565b348015610cc457600080fd5b50610507613432565b348015610cd957600080fd5b50610507610ce83660046153da565b613515565b348015610cf957600080fd5b50610507610d08366004615576565b6135bd565b348015610d1957600080fd5b506104d960215481565b348015610d2f57600080fd5b50601654601754610d4a916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016104ba565b348015610d7657600080fd5b50610507610d85366004615639565b61363d565b348015610d9657600080fd5b5060185461060190610100900460ff1681565b348015610db557600080fd5b50610601610dc43660046153bd565b613743565b348015610dd557600080fd5b506104d960205481565b348015610deb57600080fd5b50610507610dfa3660046153da565b6137d1565b6000546001600160a01b03163314610e525760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610ec057600080fd5b505af1158015610ed4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610ea690859085906004016156af565b6060600d8054610f89906156d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb5906156d3565b80156110025780601f10610fd757610100808354040283529160200191611002565b820191906000526020600020905b815481529060010190602001808311610fe557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461105a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6013805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff0000000019166401000000008583160267ffff000000000000191617660100000000000091841691909102179055816110b88483615723565b6110c29190615723565b6013805469ffff000000000000000019166801000000000000000061ffff938416021790556012546000916111009162010000810482169116615723565b60135461ffff9182169250829161112891808216916801000000000000000090910416615723565b61ffff1611156111a05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e49565b5050505050565b60006111b433848461384a565b5060015b92915050565b600f546000906111d29060ff16600a61582d565b601e546111df9190615852565b905090565b6000546001600160a01b031633146112325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801561137a576001600160a01b0382166000908152600a602052604090205460ff16156112a15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610e49565b6001600160a01b038216600090815260016020526040902054156112fb576001600160a01b0382166000908152600160205260409020546112e190611991565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff191660011790556015549091161461137657600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0384161790555b5050565b80611376576001600160a01b0382166000908152600a602052604090205460ff166113e75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610e49565b6015546001600160a01b039081169083160361146257611405613957565b6001600160a01b0383166000908152600260205260409020546114289190615866565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b5460010361150457611474613957565b6001600160a01b0383166000908152600260205260409020546114979190615866565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b8054806114de576114de615885565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600b5481101561166c57826001600160a01b0316600b828154811061152e5761152e61589b565b6000918252602090912001546001600160a01b03160361165a57600b8054611558906001906158b1565b815481106115685761156861589b565b600091825260209091200154600b80546001600160a01b0390921691839081106115945761159461589b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600290915260408120556115d3613957565b6001600160a01b0384166000908152600260205260409020546115f69190615866565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b80548061163357611633615885565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b80611664816158c8565b915050611507565b505050565b600060105460000361168257600080fd5b5060105490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146116ee576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906116e89084906158b1565b90915550505b6116f9848484613bca565b949350505050565b6000546001600160a01b0316331461174f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b606460105461175e9190615852565b818360105461176d9190615866565b6117779190615852565b10156117eb5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610e49565b80826010546117fa9190615866565b6118049190615852565b601e555050565b6000546001600160a01b031633146118595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b80518251146118aa5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e49565b60005b82518160ff16101561166c57818160ff16815181106118ce576118ce61589b565b60200260200101516118df33612271565b10156118ea57600080fd5b61195033848360ff16815181106119035761190361589b565b6020908102919091010151600f5461191f9060ff16600a61582d565b858560ff16815181106119345761193461589b565b60200260200101516119469190615866565b6000806001614297565b508061195b816158e1565b9150506118ad565b600061196f6000612271565b61197a61dead612271565b6119849190615900565b6010546111df91906158b1565b6000601154821115611a0b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610e49565b6000611a15613957565b9050611a218184615852565b9392505050565b6000601054600003611a3957600080fd5b50600f5460ff1690565b6000546001600160a01b03163314611a915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6107d08361ffff1611158015611aad57506107d08261ffff1611155b8015611abf57506107d08161ffff1611155b611b0b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e49565b610dac611b188385615723565b61ffff161115611b6a5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e49565b6012805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b158015611c5e57600080fd5b505af11580156111a0573d6000803e3d6000fd5b6000546001600160a01b03163314611cc05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d395760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6103e8601054611d499190615852565b8183601054611d589190615866565b611d629190615852565b1015611dd65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e49565b8082601054611de59190615866565b611def9190615852565b601d555050565b6000546001600160a01b03163314611e445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60c8811115611e955760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610e49565b601c55565b6000546001600160a01b03163314611ee85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b038116611f645760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e49565b61deac196001600160a01b03821601611fe55760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e49565b60008054611ffe916001600160a01b0390911690612091565b612009816001612091565b6000805461201f906001600160a01b0316612271565b11156120415760005461203f906001600160a01b03168261194682612271565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146120df5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146121585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b602091909155602155565b6000546001600160a01b031633146121b15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f5460ff16156121c157600080fd5b306001600160a01b038216036122195760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610e49565b601f80546001600160a01b03909216620100000275ffffffffffffffffffffffffffffffffffffffff000019909216919091179055565b600f546000906122649060ff16600a61582d565b601d546111df9190615852565b6001600160a01b0381166000908152600a602052604081205460ff16156122ae57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111b890611991565b6000546001600160a01b0316331461231e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60008054612337916001600160a01b0390911690612091565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146123d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801515600003612448576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610ec057600080fd5b600454156124af576203f4806004544261246291906158b1565b116124af5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610e49565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492516380c581d160e01b8152908101939093526024830152620100009004909116906380c581d190604401610ea6565b600080546001600160a01b031633146125605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60145461257a9030906001600160a01b031660001961384a565b50600190565b6000546001600160a01b031633146125ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f5460ff16156126215760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e49565b601f54610100900460ff166126785760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e49565b601f546201000090046001600160a01b03166126b557601f805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b601f54601554600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561274657600080fd5b505af1925050508015612757575060015b50601f805460ff191660011790556015546127109061277e906001600160a01b0316612271565b61278990600a615866565b6127939190615852565b601955601554612710906127af906001600160a01b0316612271565b6127ba906019615866565b6127c49190615852565b601a55565b6060600e8054610f89906156d3565b6000546001600160a01b031633146128265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f8054911515600160b01b027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600061286c338484613bca565b5060019392505050565b6000546001600160a01b031633146128c45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6018805461ff00191661010084151590810291909117909155601b805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146129715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801561298557601f805460ff60b81b191690555b601f8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b031633146129f15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b03163314612a6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60225460ff1615612ac05760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610e49565b8151835114612b115760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610e49565b601f805475ffffffffffffffffffffffffffffffffffffffff00001916620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612b9a57600080fd5b505af1925050508015612bab575060015b50601f60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612c2057506040513d6000823e601f3d908101601f19168201604052612c1d919081019061597c565b60015b612c6c5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610e49565b8351612c7f90600d9060208701906150ac565b508251612c9390600e9060208601906150ac565b50600c829055600f805460ff191660ff8316908117909155612cb690600a61582d565b600c54612cc39190615866565b6010819055612cd490600019615a02565b612ce0906000196158b1565b60115550505050601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5e9190615a16565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de39190615a16565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e539190615a16565b601580546001600160a01b0319166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556010546103e890612e9d906005615866565b612ea79190615852565b601d55601054606490612ebb906002615866565b612ec59190615852565b601e556022805460ff19166001908117909155601154600080546001600160a01b039081168252602093845260408083209390935581546010549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601454612f4d9030906001600160a01b031660001961384a565b600054601454612f6c916001600160a01b03908116911660001961384a565b60005b835181101561300357600f54600090612f8c9060ff16600a61582d565b848381518110612f9e57612f9e61589b565b6020026020010151612fb09190615866565b9050612fee60008054906101000a90046001600160a01b0316868481518110612fdb57612fdb61589b565b6020026020010151836000806001614297565b50508080612ffb906158c8565b915050612f6f565b5060005461301e906001600160a01b03163061194682612271565b506014546001600160a01b031663f305d719473061303b81612271565b6000805460405160e087901b6001600160e01b03191681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af11580156130aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130cf9190615a33565b50505061166c612580565b6000546001600160a01b031633146131285760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561316d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131919190615a16565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132029190615a16565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561324d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132719190615a16565b90506001600160a01b0381166133ea57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e39190615a16565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133549190615a16565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190615a16565b601580546001600160a01b0319166001600160a01b0392909216919091179055613406565b601580546001600160a01b0319166001600160a01b0383161790555b601480546001600160a01b0319166001600160a01b03841690811790915561166c90309060001961384a565b6000546001600160a01b031633146134805760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f54610100900460ff16156134d85760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e49565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613512573d6000803e3d6000fd5b50565b6000546001600160a01b031633146135635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610ea6565b6000546001600160a01b0316331461360b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801561361f57601f805460ff60c01b191690555b601f8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b0316331461368b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b828460105461369a9190615866565b6136a49190615852565b60195560105481906136b7908490615866565b6136c19190615852565b601a819055601954111561373d5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e49565b50505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156137ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190615a61565b6000546001600160a01b0316331461381f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166138a05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610e49565b6001600160a01b0382166138f65760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610e49565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6011546010546015546001600160a01b03166000908152600a60205260408120549092919060ff1615613a31576015546001600160a01b03166000908152600160205260409020548210806139c557506015546001600160a01b031660009081526002602052604090205481105b156139e1576010546011546139da9190615852565b9250505090565b6015546001600160a01b0316600090815260016020526040902054613a0690836158b1565b6015546001600160a01b0316600090815260026020526040902054909250613a2e90826158b1565b90505b600b5415613b995760005b600b5460ff82161015613b97578260016000600b8460ff1681548110613a6457613a6461589b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613ad257508160026000600b8460ff1681548110613aab57613aab61589b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613aef57601054601154613ae79190615852565b935050505090565b60016000600b8360ff1681548110613b0957613b0961589b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613b3890846158b1565b925060026000600b8360ff1681548110613b5457613b5461589b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613b8390836158b1565b915080613b8f816158e1565b915050613a3c565b505b601054601154613ba99190615852565b821015613bc0576010546011546139da9190615852565b6139da8183615852565b60006001600160a01b038416613c485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e49565b6001600160a01b038316613cc45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e49565b60008211613d3a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e49565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613d685760019250613d96565b6001600160a01b03861660009081526003602052604090205460ff1615613d925760019150613d96565b5060015b613da087876145b0565b15613f9057601f5460ff16613df75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e49565b8280613e005750815b15613ec4576001600160a01b03871660009081526009602052604090205460ff16158015613e4757506001600160a01b03861660009081526009602052604090205460ff16155b15613ec457601d54851115613ec45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e49565b6014546001600160a01b03878116911614801590613ee0575081155b15613f90576001600160a01b03861660009081526009602052604090205460ff16613f9057601e5485613f1288612271565b613f1c9190615900565b1115613f905760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e49565b811561427e5760185460ff1661402057601854610100900460ff1615614020576000613fbb30612271565b9050601954811061401e57601a54601b5460ff161561400857601c546015546127109190613ff1906001600160a01b0316612271565b613ffb9190615866565b6140059190615852565b90505b808210614013578091505b61401c82614684565b505b505b601f54600160b01b900460ff16801561404257506001600160a01b0387163014155b1561427e57604080516002808252606082018352600092602083019080368337019050509050308160008151811061407c5761407c61589b565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156140d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f99190615a16565b8160018151811061410c5761410c61589b565b6001600160a01b0392831660209182029290920101526014546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f90614169908a908690600401615a7e565b600060405180830381865afa158015614186573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141ae9190810190615a97565b6001815181106141c0576141c061589b565b602002602001015190506000602154602054836141dd9190615866565b6141e79190615852565b601f54909150600160b81b900460ff16801561420257504781105b156142105761421081614a17565b601f54600160c01b900460ff161561427a5761422d826002615866565b47101561426757601f80547fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b17905561427a565b61427a614275836002615866565b614a17565b5050505b61428c878787868686614297565b979650505050505050565b601f54600090610100900460ff16614397576142b38787614b83565b601f54610100900460ff161580156142d057506142d087876145b0565b80156142f557506001600160a01b03871660009081526007602052604090205460ff16155b801561431a57506001600160a01b03861660009081526007602052604090205460ff16155b8015614324575081155b156143975760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e49565b6001600160a01b03871660009081526008602052604090205460019060ff16806143d957506001600160a01b03871660009081526008602052604090205460ff165b156143e2575060005b60006143f3898989858a8a8a614cea565b60808101516001600160a01b038b166000908152600160205260408120805493945091926144229084906158b1565b909155505060608101516001600160a01b03891660009081526001602052604081208054909190614454908490615900565b90915550506001600160a01b0389166000908152600a602052604090205460ff16156144b8576001600160a01b03891660009081526002602052604090205461449e9088906158b1565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff16156145185780516001600160a01b0389166000908152600260205260409020546144fe9190615900565b6001600160a01b0389166000908152600260205260409020555b60008160a00151118061452f575060008160200151115b15614550578060a001516011600082825461454a91906158b1565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161459991815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906145dd57506000546001600160a01b03838116911614155b80156145f457506000546001600160a01b03163214155b801561461957506001600160a01b03821660009081526006602052604090205460ff16155b801561463e57506001600160a01b03831660009081526006602052604090205460ff16155b801561465557506001600160a01b03821661dead14155b801561466957506001600160a01b03821615155b8015611a2157506001600160a01b0383163014159392505050565b6018805460ff191660011790556040805160a08101825260135461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000009004909116608082018190526000036146f85750614a0a565b3060009081526005602090815260408083206014546001600160a01b0316845290915290205460001914614751573060009081526005602090815260408083206014546001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106147865761478661589b565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148039190615a16565b816001815181106148165761481661589b565b6001600160a01b0392831660209182029290920101526014546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac94790614879908790600090879030904290600401615b1d565b600060405180830381600087803b15801561489357600080fd5b505af11580156148a7573d6000803e3d6000fd5b50505050600081476148b991906158b1565b9050600080856080015161ffff16866020015161ffff16846148db9190615866565b6148e59190615852565b90506000866080015161ffff16876040015161ffff16856149069190615866565b6149109190615852565b9050600061491e8284615900565b61492890866158b1565b602089015190915061ffff1615614996576017546040516001600160a01b03909116906188b89085906000818181858888f193505050503d806000811461498b576040519150601f19603f3d011682016040523d82523d6000602084013e614990565b606091505b50909450505b606088015161ffff1615614a01576016546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146149f6576040519150601f19603f3d011682016040523d82523d6000602084013e6149fb565b606091505b50909450505b50505050505050505b506018805460ff19169055565b6040805160028082526060820183526000926020830190803683375050601454604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa59190615a16565b81600081518110614ab857614ab861589b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614aec57614aec61589b565b6001600160a01b0392831660209182029290920101526014546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908490614b4d90600090869061dead904290600401615b59565b6000604051808303818588803b158015614b6657600080fd5b505af1158015614b7a573d6000803e3d6000fd5b50505050505050565b601f54610100900460ff1615614c015760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e49565b614c0b82826145b0565b158015614c2557506015546001600160a01b038281169116145b15611376576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601f805461ff001916610100179081905562010000900416614caa57601f805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b6018805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612917565b614d2a6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614d6a6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a08101825260135461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000008104831660608301526801000000000000000090049091166080820152614dca613957565b60c08301819052614ddb9089615866565b6080830152614dea8a8a6145b0565b15614e9d57601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614e86575060408051601f3d908101601f19168201909252614e8391810190615a61565b60015b614e8f57600080fd5b905080614e9b57600080fd5b505b8615614f785760008615614eb8575060125461ffff16614ee2565b8515614ed1575060125462010000900461ffff16614ee2565b50601254640100000000900461ffff165b6000612710614ef1838c615866565b614efb9190615852565b9050600083600001518460800151614f139190615723565b845161ffff91821692508291614f2a911684615866565b614f349190615852565b60208601819052614f4590836158b1565b6040860152614f54828c6158b1565b855260c08501516020860151614f6a9190615866565b60a086015250614f91915050565b6000602083018190526040830181905288835260a08301525b604082015115615068578160c001518260400151614faf9190615866565b3060009081526001602052604081208054909190614fce908490615900565b9091555050306000908152600a602052604090205460ff1615615016576040808301513060009081526002602052918220805491929091615010908490615900565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040015160405161505f91815260200190565b60405180910390a35b8160c00151826040015161507c9190615866565b8260a0015161508b9190615900565b826080015161509a91906158b1565b60608301525098975050505050505050565b8280546150b8906156d3565b90600052602060002090601f0160209004810192826150da5760008555615120565b82601f106150f357805160ff1916838001178555615120565b82800160010185558215615120579182015b82811115615120578251825591602001919060010190615105565b5061512c929150615130565b5090565b5b8082111561512c5760008155600101615131565b801515811461351257600080fd5b6000806040838503121561516657600080fd5b823561517181615145565b9150602083013561518181615145565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151cb576151cb61518c565b604052919050565b600067ffffffffffffffff8211156151ed576151ed61518c565b5060051b60200190565b6001600160a01b038116811461351257600080fd5b600082601f83011261521d57600080fd5b8135602061523261522d836151d3565b6151a2565b82815260059290921b8401810191818101908684111561525157600080fd5b8286015b84811015615275578035615268816151f7565b8352918301918301615255565b509695505050505050565b6000806040838503121561529357600080fd5b823567ffffffffffffffff8111156152aa57600080fd5b6152b68582860161520c565b925050602083013561518181615145565b60005b838110156152e25781810151838201526020016152ca565b8381111561373d5750506000910152565b60208152600082518060208401526153128160408501602087016152c7565b601f01601f19169190910160400192915050565b803561ffff8116811461533857600080fd5b919050565b6000806000806080858703121561535357600080fd5b61535c85615326565b935061536a60208601615326565b925061537860408601615326565b915061538660608601615326565b905092959194509250565b600080604083850312156153a457600080fd5b82356153af816151f7565b946020939093013593505050565b6000602082840312156153cf57600080fd5b8135611a21816151f7565b600080604083850312156153ed57600080fd5b8235615171816151f7565b60008060006060848603121561540d57600080fd5b8335615418816151f7565b92506020840135615428816151f7565b929592945050506040919091013590565b6000806040838503121561544c57600080fd5b50508035926020909101359150565b600082601f83011261546c57600080fd5b8135602061547c61522d836151d3565b82815260059290921b8401810191818101908684111561549b57600080fd5b8286015b84811015615275578035835291830191830161549f565b600080604083850312156154c957600080fd5b823567ffffffffffffffff808211156154e157600080fd5b6154ed8683870161520c565b9350602085013591508082111561550357600080fd5b506155108582860161545b565b9150509250929050565b60006020828403121561552c57600080fd5b5035919050565b60008060006060848603121561554857600080fd5b61555184615326565b925061555f60208501615326565b915061556d60408501615326565b90509250925092565b60006020828403121561558857600080fd5b8135611a2181615145565b600080604083850312156155a657600080fd5b82356155b1816151f7565b91506020830135615181816151f7565b6000806000606084860312156155d657600080fd5b833567ffffffffffffffff808211156155ee57600080fd5b6155fa8783880161520c565b9450602086013591508082111561561057600080fd5b5061561d8682870161545b565b925050604084013561562e816151f7565b809150509250925092565b6000806000806080858703121561564f57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156156a45781516001600160a01b03168752958201959082019060010161567f565b509495945050505050565b6040815260006156c2604083018561566b565b905082151560208301529392505050565b600181811c908216806156e757607f821691505b60208210810361570757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff8083168185168083038211156157405761574061570d565b01949350505050565b600181815b8085111561578457816000190482111561576a5761576a61570d565b8085161561577757918102915b93841c939080029061574e565b509250929050565b60008261579b575060016111b8565b816157a8575060006111b8565b81600181146157be57600281146157c8576157e4565b60019150506111b8565b60ff8411156157d9576157d961570d565b50506001821b6111b8565b5060208310610133831016604e8410600b8410161715615807575081810a6111b8565b6158118383615749565b80600019048211156158255761582561570d565b029392505050565b6000611a2160ff84168361578c565b634e487b7160e01b600052601260045260246000fd5b6000826158615761586161583c565b500490565b60008160001904831182151516156158805761588061570d565b500290565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000828210156158c3576158c361570d565b500390565b6000600182016158da576158da61570d565b5060010190565b600060ff821660ff81036158f7576158f761570d565b60010192915050565b600082198211156159135761591361570d565b500190565b600082601f83011261592957600080fd5b815167ffffffffffffffff8111156159435761594361518c565b615956601f8201601f19166020016151a2565b81815284602083860101111561596b57600080fd5b6116f98260208301602087016152c7565b6000806000806080858703121561599257600080fd5b845167ffffffffffffffff808211156159aa57600080fd5b6159b688838901615918565b955060208701519150808211156159cc57600080fd5b506159d987828801615918565b93505060408501519150606085015160ff811681146159f757600080fd5b939692955090935050565b600082615a1157615a1161583c565b500690565b600060208284031215615a2857600080fd5b8151611a21816151f7565b600080600060608486031215615a4857600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615a7357600080fd5b8151611a2181615145565b8281526040602082015260006116f9604083018461566b565b60006020808385031215615aaa57600080fd5b825167ffffffffffffffff811115615ac157600080fd5b8301601f81018513615ad257600080fd5b8051615ae061522d826151d3565b81815260059190911b82018301908381019087831115615aff57600080fd5b928401925b8284101561428c57835182529284019290840190615b04565b85815284602082015260a060408201526000615b3c60a083018661566b565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000615b72608083018661566b565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220dbdad9846a7f0c784378f580515b83cfe0752b6453e50cbcf66174568f0e678564736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106104845760003560e01c80635bde7ee71161025e578063bfc2fc3511610143578063eec2744e116100bb578063fb78680d1161008a578063fe575a871161006f578063fe575a8714610da9578063fe963ca114610dc9578063feadde9c14610ddf57600080fd5b8063fb78680d14610d6a578063fdb78c0e14610d8a57600080fd5b8063eec2744e14610ccd578063f744bbb814610ced578063f8a2928d14610d0d578063f94aa1b414610d2357600080fd5b8063dd62ed3e11610112578063e71c13fe116100f7578063e71c13fe14610c77578063eafb5a3c14610c98578063ee5d9c2d14610cb857600080fd5b8063dd62ed3e14610c11578063de3a3b6914610c5757600080fd5b8063bfc2fc3514610b2f578063c0ca98ba14610b4f578063cf84770614610b6f578063d3f6a15714610bf157600080fd5b80638a63bd9b116101d6578063a2230c56116101a5578063b1b08f711161018a578063b1b08f7114610740578063b3d514fb14610740578063b7df8b3614610b1557600080fd5b8063a2230c5614610ad4578063a9059cbb14610af557600080fd5b80638a63bd9b14610a755780638a8c523c14610a8a57806395d89b4114610a9f5780639a9b567d14610ab457600080fd5b806370a082311161022d57806380c581d11161021257806380c581d1146109fe57806388f8202014610a1e578063893d20e814610a5757600080fd5b806370a08231146109c9578063715018a6146109e957600080fd5b80635bde7ee71461093b5780635c24b0741461095b5780635cce86cd1461097b5780636ebd0078146109b457600080fd5b806328577751116103845780633f3cf56c116102fc5780634e718e48116102cb5780634fbee193116102b05780634fbee193146108c357806350a8e016146108fc578063590ffdce1461091b57600080fd5b80634e718e48146108835780634fb2e45d146108a357600080fd5b80633f3cf56c14610813578063452ed4f11461083357806346ea7ac8146108535780634ada218b1461086957600080fd5b80632e8fa8211161035357806332cde6641161033857806332cde664146107b357806333251a0b146107d357806336fddb04146107f357600080fd5b80632e8fa82114610776578063313ce5671461078c57600080fd5b806328577751146107155780632b112e491461072b5780632b28fc7a146107405780632d8381191461075657600080fd5b8063095ea7b311610417578063160d0da5116103e657806323b872dd116103cb57806323b872dd146106b557806326003957146106d55780632610eaca146106f557600080fd5b8063160d0da51461067f57806318160ddd146106a057600080fd5b8063095ea7b3146105e15780630dcbcf1c146106115780630fa604e41461064a57806313e461921461065f57600080fd5b8063069d955f11610453578063069d955f1461052957806306fdde031461057f5780630712d165146105a15780630758d924146105c157600080fd5b806303fd2a45146104905780630445b667146104c3578063044df726146104e757806305bbedb61461050957600080fd5b3661048b57005b600080fd5b34801561049c57600080fd5b506104a661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cf57600080fd5b506104d960195481565b6040519081526020016104ba565b3480156104f357600080fd5b50610507610502366004615153565b610dff565b005b34801561051557600080fd5b50610507610524366004615280565b610edc565b34801561053557600080fd5b5060125461055a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016104ba565b34801561058b57600080fd5b50610594610f7a565b6040516104ba91906152f3565b3480156105ad57600080fd5b506105076105bc36600461533d565b61100c565b3480156105cd57600080fd5b506014546104a6906001600160a01b031681565b3480156105ed57600080fd5b506106016105fc366004615391565b6111a7565b60405190151581526020016104ba565b34801561061d57600080fd5b5061060161062c3660046153bd565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561065657600080fd5b506104d96111be565b34801561066b57600080fd5b5061050761067a3660046153da565b6111e4565b34801561068b57600080fd5b50601f5461060190600160b01b900460ff1681565b3480156106ac57600080fd5b506104d9611671565b3480156106c157600080fd5b506106016106d03660046153f8565b611689565b3480156106e157600080fd5b506105076106f0366004615439565b611701565b34801561070157600080fd5b506105076107103660046154b6565b61180b565b34801561072157600080fd5b506104d9601c5481565b34801561073757600080fd5b506104d9611963565b34801561074c57600080fd5b506104d96107d081565b34801561076257600080fd5b506104d961077136600461551a565b611991565b34801561078257600080fd5b506104d9601a5481565b34801561079857600080fd5b506107a1611a28565b60405160ff90911681526020016104ba565b3480156107bf57600080fd5b506105076107ce366004615533565b611a43565b3480156107df57600080fd5b506105076107ee3660046153bd565b611ba9565b3480156107ff57600080fd5b5061050761080e3660046153da565b611c72565b34801561081f57600080fd5b5061050761082e366004615439565b611ceb565b34801561083f57600080fd5b506015546104a6906001600160a01b031681565b34801561085f57600080fd5b506104d9610dac81565b34801561087557600080fd5b50601f546106019060ff1681565b34801561088f57600080fd5b5061050761089e36600461551a565b611df6565b3480156108af57600080fd5b506105076108be3660046153bd565b611e9a565b3480156108cf57600080fd5b506106016108de3660046153bd565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561090857600080fd5b50601f5461060190610100900460ff1681565b34801561092757600080fd5b506105076109363660046153da565b612091565b34801561094757600080fd5b50610507610956366004615439565b61210a565b34801561096757600080fd5b506105076109763660046153bd565b612163565b34801561098757600080fd5b506106016109963660046153bd565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109c057600080fd5b506104d9612250565b3480156109d557600080fd5b506104d96109e43660046153bd565b612271565b3480156109f557600080fd5b506105076122d0565b348015610a0a57600080fd5b50610507610a193660046153da565b612382565b348015610a2a57600080fd5b50610601610a393660046153bd565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a6357600080fd5b506000546001600160a01b03166104a6565b348015610a8157600080fd5b50610601612511565b348015610a9657600080fd5b50610507612580565b348015610aab57600080fd5b506105946127c9565b348015610ac057600080fd5b50610507610acf366004615576565b6127d8565b348015610ae057600080fd5b50601f5461060190600160c01b900460ff1681565b348015610b0157600080fd5b50610601610b10366004615391565b61285f565b348015610b2157600080fd5b50601b546106019060ff1681565b348015610b3b57600080fd5b50610507610b4a366004615153565b612876565b348015610b5b57600080fd5b50610507610b6a366004615576565b612923565b348015610b7b57600080fd5b50601354610bbc9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016104ba565b348015610bfd57600080fd5b50610507610c0c366004615593565b6129a3565b348015610c1d57600080fd5b506104d9610c2c366004615593565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c6357600080fd5b50610507610c723660046155c1565b612a1f565b348015610c8357600080fd5b50601f5461060190600160b81b900460ff1681565b348015610ca457600080fd5b50610507610cb33660046153bd565b6130da565b348015610cc457600080fd5b50610507613432565b348015610cd957600080fd5b50610507610ce83660046153da565b613515565b348015610cf957600080fd5b50610507610d08366004615576565b6135bd565b348015610d1957600080fd5b506104d960215481565b348015610d2f57600080fd5b50601654601754610d4a916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016104ba565b348015610d7657600080fd5b50610507610d85366004615639565b61363d565b348015610d9657600080fd5b5060185461060190610100900460ff1681565b348015610db557600080fd5b50610601610dc43660046153bd565b613743565b348015610dd557600080fd5b506104d960205481565b348015610deb57600080fd5b50610507610dfa3660046153da565b6137d1565b6000546001600160a01b03163314610e525760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610ec057600080fd5b505af1158015610ed4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610ea690859085906004016156af565b6060600d8054610f89906156d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb5906156d3565b80156110025780601f10610fd757610100808354040283529160200191611002565b820191906000526020600020905b815481529060010190602001808311610fe557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461105a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6013805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff0000000019166401000000008583160267ffff000000000000191617660100000000000091841691909102179055816110b88483615723565b6110c29190615723565b6013805469ffff000000000000000019166801000000000000000061ffff938416021790556012546000916111009162010000810482169116615723565b60135461ffff9182169250829161112891808216916801000000000000000090910416615723565b61ffff1611156111a05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e49565b5050505050565b60006111b433848461384a565b5060015b92915050565b600f546000906111d29060ff16600a61582d565b601e546111df9190615852565b905090565b6000546001600160a01b031633146112325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801561137a576001600160a01b0382166000908152600a602052604090205460ff16156112a15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610e49565b6001600160a01b038216600090815260016020526040902054156112fb576001600160a01b0382166000908152600160205260409020546112e190611991565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff191660011790556015549091161461137657600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0384161790555b5050565b80611376576001600160a01b0382166000908152600a602052604090205460ff166113e75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610e49565b6015546001600160a01b039081169083160361146257611405613957565b6001600160a01b0383166000908152600260205260409020546114289190615866565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b5460010361150457611474613957565b6001600160a01b0383166000908152600260205260409020546114979190615866565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b8054806114de576114de615885565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600b5481101561166c57826001600160a01b0316600b828154811061152e5761152e61589b565b6000918252602090912001546001600160a01b03160361165a57600b8054611558906001906158b1565b815481106115685761156861589b565b600091825260209091200154600b80546001600160a01b0390921691839081106115945761159461589b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600290915260408120556115d3613957565b6001600160a01b0384166000908152600260205260409020546115f69190615866565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b80548061163357611633615885565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b80611664816158c8565b915050611507565b505050565b600060105460000361168257600080fd5b5060105490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146116ee576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906116e89084906158b1565b90915550505b6116f9848484613bca565b949350505050565b6000546001600160a01b0316331461174f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b606460105461175e9190615852565b818360105461176d9190615866565b6117779190615852565b10156117eb5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610e49565b80826010546117fa9190615866565b6118049190615852565b601e555050565b6000546001600160a01b031633146118595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b80518251146118aa5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e49565b60005b82518160ff16101561166c57818160ff16815181106118ce576118ce61589b565b60200260200101516118df33612271565b10156118ea57600080fd5b61195033848360ff16815181106119035761190361589b565b6020908102919091010151600f5461191f9060ff16600a61582d565b858560ff16815181106119345761193461589b565b60200260200101516119469190615866565b6000806001614297565b508061195b816158e1565b9150506118ad565b600061196f6000612271565b61197a61dead612271565b6119849190615900565b6010546111df91906158b1565b6000601154821115611a0b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610e49565b6000611a15613957565b9050611a218184615852565b9392505050565b6000601054600003611a3957600080fd5b50600f5460ff1690565b6000546001600160a01b03163314611a915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6107d08361ffff1611158015611aad57506107d08261ffff1611155b8015611abf57506107d08161ffff1611155b611b0b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e49565b610dac611b188385615723565b61ffff161115611b6a5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e49565b6012805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b158015611c5e57600080fd5b505af11580156111a0573d6000803e3d6000fd5b6000546001600160a01b03163314611cc05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d395760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6103e8601054611d499190615852565b8183601054611d589190615866565b611d629190615852565b1015611dd65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e49565b8082601054611de59190615866565b611def9190615852565b601d555050565b6000546001600160a01b03163314611e445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60c8811115611e955760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610e49565b601c55565b6000546001600160a01b03163314611ee85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b038116611f645760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e49565b61deac196001600160a01b03821601611fe55760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e49565b60008054611ffe916001600160a01b0390911690612091565b612009816001612091565b6000805461201f906001600160a01b0316612271565b11156120415760005461203f906001600160a01b03168261194682612271565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146120df5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146121585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b602091909155602155565b6000546001600160a01b031633146121b15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f5460ff16156121c157600080fd5b306001600160a01b038216036122195760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610e49565b601f80546001600160a01b03909216620100000275ffffffffffffffffffffffffffffffffffffffff000019909216919091179055565b600f546000906122649060ff16600a61582d565b601d546111df9190615852565b6001600160a01b0381166000908152600a602052604081205460ff16156122ae57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111b890611991565b6000546001600160a01b0316331461231e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60008054612337916001600160a01b0390911690612091565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146123d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801515600003612448576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610ec057600080fd5b600454156124af576203f4806004544261246291906158b1565b116124af5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610e49565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492516380c581d160e01b8152908101939093526024830152620100009004909116906380c581d190604401610ea6565b600080546001600160a01b031633146125605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60145461257a9030906001600160a01b031660001961384a565b50600190565b6000546001600160a01b031633146125ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f5460ff16156126215760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e49565b601f54610100900460ff166126785760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e49565b601f546201000090046001600160a01b03166126b557601f805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b601f54601554600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561274657600080fd5b505af1925050508015612757575060015b50601f805460ff191660011790556015546127109061277e906001600160a01b0316612271565b61278990600a615866565b6127939190615852565b601955601554612710906127af906001600160a01b0316612271565b6127ba906019615866565b6127c49190615852565b601a55565b6060600e8054610f89906156d3565b6000546001600160a01b031633146128265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f8054911515600160b01b027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600061286c338484613bca565b5060019392505050565b6000546001600160a01b031633146128c45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6018805461ff00191661010084151590810291909117909155601b805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146129715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801561298557601f805460ff60b81b191690555b601f8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b031633146129f15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b03163314612a6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60225460ff1615612ac05760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610e49565b8151835114612b115760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610e49565b601f805475ffffffffffffffffffffffffffffffffffffffff00001916620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612b9a57600080fd5b505af1925050508015612bab575060015b50601f60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612c2057506040513d6000823e601f3d908101601f19168201604052612c1d919081019061597c565b60015b612c6c5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610e49565b8351612c7f90600d9060208701906150ac565b508251612c9390600e9060208601906150ac565b50600c829055600f805460ff191660ff8316908117909155612cb690600a61582d565b600c54612cc39190615866565b6010819055612cd490600019615a02565b612ce0906000196158b1565b60115550505050601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5e9190615a16565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de39190615a16565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e539190615a16565b601580546001600160a01b0319166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556010546103e890612e9d906005615866565b612ea79190615852565b601d55601054606490612ebb906002615866565b612ec59190615852565b601e556022805460ff19166001908117909155601154600080546001600160a01b039081168252602093845260408083209390935581546010549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601454612f4d9030906001600160a01b031660001961384a565b600054601454612f6c916001600160a01b03908116911660001961384a565b60005b835181101561300357600f54600090612f8c9060ff16600a61582d565b848381518110612f9e57612f9e61589b565b6020026020010151612fb09190615866565b9050612fee60008054906101000a90046001600160a01b0316868481518110612fdb57612fdb61589b565b6020026020010151836000806001614297565b50508080612ffb906158c8565b915050612f6f565b5060005461301e906001600160a01b03163061194682612271565b506014546001600160a01b031663f305d719473061303b81612271565b6000805460405160e087901b6001600160e01b03191681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af11580156130aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130cf9190615a33565b50505061166c612580565b6000546001600160a01b031633146131285760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561316d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131919190615a16565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132029190615a16565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561324d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132719190615a16565b90506001600160a01b0381166133ea57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e39190615a16565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133549190615a16565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190615a16565b601580546001600160a01b0319166001600160a01b0392909216919091179055613406565b601580546001600160a01b0319166001600160a01b0383161790555b601480546001600160a01b0319166001600160a01b03841690811790915561166c90309060001961384a565b6000546001600160a01b031633146134805760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f54610100900460ff16156134d85760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e49565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613512573d6000803e3d6000fd5b50565b6000546001600160a01b031633146135635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610ea6565b6000546001600160a01b0316331461360b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b801561361f57601f805460ff60c01b191690555b601f8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b0316331461368b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b828460105461369a9190615866565b6136a49190615852565b60195560105481906136b7908490615866565b6136c19190615852565b601a819055601954111561373d5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e49565b50505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156137ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190615a61565b6000546001600160a01b0316331461381f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610e49565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166138a05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610e49565b6001600160a01b0382166138f65760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610e49565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6011546010546015546001600160a01b03166000908152600a60205260408120549092919060ff1615613a31576015546001600160a01b03166000908152600160205260409020548210806139c557506015546001600160a01b031660009081526002602052604090205481105b156139e1576010546011546139da9190615852565b9250505090565b6015546001600160a01b0316600090815260016020526040902054613a0690836158b1565b6015546001600160a01b0316600090815260026020526040902054909250613a2e90826158b1565b90505b600b5415613b995760005b600b5460ff82161015613b97578260016000600b8460ff1681548110613a6457613a6461589b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613ad257508160026000600b8460ff1681548110613aab57613aab61589b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613aef57601054601154613ae79190615852565b935050505090565b60016000600b8360ff1681548110613b0957613b0961589b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613b3890846158b1565b925060026000600b8360ff1681548110613b5457613b5461589b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613b8390836158b1565b915080613b8f816158e1565b915050613a3c565b505b601054601154613ba99190615852565b821015613bc0576010546011546139da9190615852565b6139da8183615852565b60006001600160a01b038416613c485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e49565b6001600160a01b038316613cc45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e49565b60008211613d3a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e49565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613d685760019250613d96565b6001600160a01b03861660009081526003602052604090205460ff1615613d925760019150613d96565b5060015b613da087876145b0565b15613f9057601f5460ff16613df75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e49565b8280613e005750815b15613ec4576001600160a01b03871660009081526009602052604090205460ff16158015613e4757506001600160a01b03861660009081526009602052604090205460ff16155b15613ec457601d54851115613ec45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e49565b6014546001600160a01b03878116911614801590613ee0575081155b15613f90576001600160a01b03861660009081526009602052604090205460ff16613f9057601e5485613f1288612271565b613f1c9190615900565b1115613f905760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e49565b811561427e5760185460ff1661402057601854610100900460ff1615614020576000613fbb30612271565b9050601954811061401e57601a54601b5460ff161561400857601c546015546127109190613ff1906001600160a01b0316612271565b613ffb9190615866565b6140059190615852565b90505b808210614013578091505b61401c82614684565b505b505b601f54600160b01b900460ff16801561404257506001600160a01b0387163014155b1561427e57604080516002808252606082018352600092602083019080368337019050509050308160008151811061407c5761407c61589b565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156140d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f99190615a16565b8160018151811061410c5761410c61589b565b6001600160a01b0392831660209182029290920101526014546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f90614169908a908690600401615a7e565b600060405180830381865afa158015614186573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141ae9190810190615a97565b6001815181106141c0576141c061589b565b602002602001015190506000602154602054836141dd9190615866565b6141e79190615852565b601f54909150600160b81b900460ff16801561420257504781105b156142105761421081614a17565b601f54600160c01b900460ff161561427a5761422d826002615866565b47101561426757601f80547fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b17905561427a565b61427a614275836002615866565b614a17565b5050505b61428c878787868686614297565b979650505050505050565b601f54600090610100900460ff16614397576142b38787614b83565b601f54610100900460ff161580156142d057506142d087876145b0565b80156142f557506001600160a01b03871660009081526007602052604090205460ff16155b801561431a57506001600160a01b03861660009081526007602052604090205460ff16155b8015614324575081155b156143975760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e49565b6001600160a01b03871660009081526008602052604090205460019060ff16806143d957506001600160a01b03871660009081526008602052604090205460ff165b156143e2575060005b60006143f3898989858a8a8a614cea565b60808101516001600160a01b038b166000908152600160205260408120805493945091926144229084906158b1565b909155505060608101516001600160a01b03891660009081526001602052604081208054909190614454908490615900565b90915550506001600160a01b0389166000908152600a602052604090205460ff16156144b8576001600160a01b03891660009081526002602052604090205461449e9088906158b1565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff16156145185780516001600160a01b0389166000908152600260205260409020546144fe9190615900565b6001600160a01b0389166000908152600260205260409020555b60008160a00151118061452f575060008160200151115b15614550578060a001516011600082825461454a91906158b1565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161459991815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906145dd57506000546001600160a01b03838116911614155b80156145f457506000546001600160a01b03163214155b801561461957506001600160a01b03821660009081526006602052604090205460ff16155b801561463e57506001600160a01b03831660009081526006602052604090205460ff16155b801561465557506001600160a01b03821661dead14155b801561466957506001600160a01b03821615155b8015611a2157506001600160a01b0383163014159392505050565b6018805460ff191660011790556040805160a08101825260135461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000009004909116608082018190526000036146f85750614a0a565b3060009081526005602090815260408083206014546001600160a01b0316845290915290205460001914614751573060009081526005602090815260408083206014546001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106147865761478661589b565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148039190615a16565b816001815181106148165761481661589b565b6001600160a01b0392831660209182029290920101526014546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac94790614879908790600090879030904290600401615b1d565b600060405180830381600087803b15801561489357600080fd5b505af11580156148a7573d6000803e3d6000fd5b50505050600081476148b991906158b1565b9050600080856080015161ffff16866020015161ffff16846148db9190615866565b6148e59190615852565b90506000866080015161ffff16876040015161ffff16856149069190615866565b6149109190615852565b9050600061491e8284615900565b61492890866158b1565b602089015190915061ffff1615614996576017546040516001600160a01b03909116906188b89085906000818181858888f193505050503d806000811461498b576040519150601f19603f3d011682016040523d82523d6000602084013e614990565b606091505b50909450505b606088015161ffff1615614a01576016546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146149f6576040519150601f19603f3d011682016040523d82523d6000602084013e6149fb565b606091505b50909450505b50505050505050505b506018805460ff19169055565b6040805160028082526060820183526000926020830190803683375050601454604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa59190615a16565b81600081518110614ab857614ab861589b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614aec57614aec61589b565b6001600160a01b0392831660209182029290920101526014546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908490614b4d90600090869061dead904290600401615b59565b6000604051808303818588803b158015614b6657600080fd5b505af1158015614b7a573d6000803e3d6000fd5b50505050505050565b601f54610100900460ff1615614c015760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e49565b614c0b82826145b0565b158015614c2557506015546001600160a01b038281169116145b15611376576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601f805461ff001916610100179081905562010000900416614caa57601f805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b6018805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612917565b614d2a6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614d6a6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a08101825260135461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000008104831660608301526801000000000000000090049091166080820152614dca613957565b60c08301819052614ddb9089615866565b6080830152614dea8a8a6145b0565b15614e9d57601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614e86575060408051601f3d908101601f19168201909252614e8391810190615a61565b60015b614e8f57600080fd5b905080614e9b57600080fd5b505b8615614f785760008615614eb8575060125461ffff16614ee2565b8515614ed1575060125462010000900461ffff16614ee2565b50601254640100000000900461ffff165b6000612710614ef1838c615866565b614efb9190615852565b9050600083600001518460800151614f139190615723565b845161ffff91821692508291614f2a911684615866565b614f349190615852565b60208601819052614f4590836158b1565b6040860152614f54828c6158b1565b855260c08501516020860151614f6a9190615866565b60a086015250614f91915050565b6000602083018190526040830181905288835260a08301525b604082015115615068578160c001518260400151614faf9190615866565b3060009081526001602052604081208054909190614fce908490615900565b9091555050306000908152600a602052604090205460ff1615615016576040808301513060009081526002602052918220805491929091615010908490615900565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040015160405161505f91815260200190565b60405180910390a35b8160c00151826040015161507c9190615866565b8260a0015161508b9190615900565b826080015161509a91906158b1565b60608301525098975050505050505050565b8280546150b8906156d3565b90600052602060002090601f0160209004810192826150da5760008555615120565b82601f106150f357805160ff1916838001178555615120565b82800160010185558215615120579182015b82811115615120578251825591602001919060010190615105565b5061512c929150615130565b5090565b5b8082111561512c5760008155600101615131565b801515811461351257600080fd5b6000806040838503121561516657600080fd5b823561517181615145565b9150602083013561518181615145565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151cb576151cb61518c565b604052919050565b600067ffffffffffffffff8211156151ed576151ed61518c565b5060051b60200190565b6001600160a01b038116811461351257600080fd5b600082601f83011261521d57600080fd5b8135602061523261522d836151d3565b6151a2565b82815260059290921b8401810191818101908684111561525157600080fd5b8286015b84811015615275578035615268816151f7565b8352918301918301615255565b509695505050505050565b6000806040838503121561529357600080fd5b823567ffffffffffffffff8111156152aa57600080fd5b6152b68582860161520c565b925050602083013561518181615145565b60005b838110156152e25781810151838201526020016152ca565b8381111561373d5750506000910152565b60208152600082518060208401526153128160408501602087016152c7565b601f01601f19169190910160400192915050565b803561ffff8116811461533857600080fd5b919050565b6000806000806080858703121561535357600080fd5b61535c85615326565b935061536a60208601615326565b925061537860408601615326565b915061538660608601615326565b905092959194509250565b600080604083850312156153a457600080fd5b82356153af816151f7565b946020939093013593505050565b6000602082840312156153cf57600080fd5b8135611a21816151f7565b600080604083850312156153ed57600080fd5b8235615171816151f7565b60008060006060848603121561540d57600080fd5b8335615418816151f7565b92506020840135615428816151f7565b929592945050506040919091013590565b6000806040838503121561544c57600080fd5b50508035926020909101359150565b600082601f83011261546c57600080fd5b8135602061547c61522d836151d3565b82815260059290921b8401810191818101908684111561549b57600080fd5b8286015b84811015615275578035835291830191830161549f565b600080604083850312156154c957600080fd5b823567ffffffffffffffff808211156154e157600080fd5b6154ed8683870161520c565b9350602085013591508082111561550357600080fd5b506155108582860161545b565b9150509250929050565b60006020828403121561552c57600080fd5b5035919050565b60008060006060848603121561554857600080fd5b61555184615326565b925061555f60208501615326565b915061556d60408501615326565b90509250925092565b60006020828403121561558857600080fd5b8135611a2181615145565b600080604083850312156155a657600080fd5b82356155b1816151f7565b91506020830135615181816151f7565b6000806000606084860312156155d657600080fd5b833567ffffffffffffffff808211156155ee57600080fd5b6155fa8783880161520c565b9450602086013591508082111561561057600080fd5b5061561d8682870161545b565b925050604084013561562e816151f7565b809150509250925092565b6000806000806080858703121561564f57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156156a45781516001600160a01b03168752958201959082019060010161567f565b509495945050505050565b6040815260006156c2604083018561566b565b905082151560208301529392505050565b600181811c908216806156e757607f821691505b60208210810361570757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff8083168185168083038211156157405761574061570d565b01949350505050565b600181815b8085111561578457816000190482111561576a5761576a61570d565b8085161561577757918102915b93841c939080029061574e565b509250929050565b60008261579b575060016111b8565b816157a8575060006111b8565b81600181146157be57600281146157c8576157e4565b60019150506111b8565b60ff8411156157d9576157d961570d565b50506001821b6111b8565b5060208310610133831016604e8410600b8410161715615807575081810a6111b8565b6158118383615749565b80600019048211156158255761582561570d565b029392505050565b6000611a2160ff84168361578c565b634e487b7160e01b600052601260045260246000fd5b6000826158615761586161583c565b500490565b60008160001904831182151516156158805761588061570d565b500290565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000828210156158c3576158c361570d565b500390565b6000600182016158da576158da61570d565b5060010190565b600060ff821660ff81036158f7576158f761570d565b60010192915050565b600082198211156159135761591361570d565b500190565b600082601f83011261592957600080fd5b815167ffffffffffffffff8111156159435761594361518c565b615956601f8201601f19166020016151a2565b81815284602083860101111561596b57600080fd5b6116f98260208301602087016152c7565b6000806000806080858703121561599257600080fd5b845167ffffffffffffffff808211156159aa57600080fd5b6159b688838901615918565b955060208701519150808211156159cc57600080fd5b506159d987828801615918565b93505060408501519150606085015160ff811681146159f757600080fd5b939692955090935050565b600082615a1157615a1161583c565b500690565b600060208284031215615a2857600080fd5b8151611a21816151f7565b600080600060608486031215615a4857600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615a7357600080fd5b8151611a2181615145565b8281526040602082015260006116f9604083018461566b565b60006020808385031215615aaa57600080fd5b825167ffffffffffffffff811115615ac157600080fd5b8301601f81018513615ad257600080fd5b8051615ae061522d826151d3565b81815260059190911b82018301908381019087831115615aff57600080fd5b928401925b8284101561428c57835182529284019290840190615b04565b85815284602082015260a060408201526000615b3c60a083018661566b565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000615b72608083018661566b565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220dbdad9846a7f0c784378f580515b83cfe0752b6453e50cbcf66174568f0e678564736f6c634300080d0033

Deployed Bytecode Sourcemap

4416:29481:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6265:73;;;;;;;;;;;;6296:42;6265:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6265:73:0;;;;;;;;6723:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6723:28:0;245:177:1;17446:151:0;;;;;;;;;;-1:-1:-1;17446:151:0;;;;;:::i;:::-;;:::i;:::-;;17017:172;;;;;;;;;;-1:-1:-1;17017:172:0;;;;;:::i;:::-;;:::i;5646:116::-;;;;;;;;;;-1:-1:-1;5646:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;3177:6:1;3210:15;;;3192:34;;3262:15;;;3257:2;3242:18;;3235:43;3314:15;;3294:18;;;3287:43;;;;3155:2;3140:18;5646:116:0;2971:365:1;12829:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18304:502::-;;;;;;;;;;-1:-1:-1;18304:502:0;;;;;:::i;:::-;;:::i;6204:26::-;;;;;;;;;;-1:-1:-1;6204:26:0;;;;-1:-1:-1;;;;;6204:26:0;;;13520:159;;;;;;;;;;-1:-1:-1;13520:159:0;;;;;:::i;:::-;;:::i;:::-;;;5295:14:1;;5288:22;5270:41;;5258:2;5243:18;13520:159:0;5130:187:1;16057:140:0;;;;;;;;;;-1:-1:-1;16057:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;16155:34:0;16131:4;16155:34;;;:25;:34;;;;;;;;;16057:140;19477:112;;;;;;;;;;;;;:::i;27929:1519::-;;;;;;;;;;-1:-1:-1;27929:1519:0;;;;;:::i;:::-;;:::i;7050:26::-;;;;;;;;;;-1:-1:-1;7050:26:0;;;;-1:-1:-1;;;7050:26:0;;;;;;12500:115;;;;;;;;;;;;;:::i;14186:306::-;;;;;;;;;;-1:-1:-1;14186:306:0;;;;;:::i;:::-;;:::i;19091:264::-;;;;;;;;;;-1:-1:-1;19091:264:0;;;;;:::i;:::-;;:::i;27382:411::-;;;;;;;;;;-1:-1:-1;27382:411:0;;;;;:::i;:::-;;:::i;6831:28::-;;;;;;;;;;;;;;;;16651:141;;;;;;;;;;;;;:::i;5948:42::-;;;;;;;;;;;;5986:4;5948:42;;29456:250;;;;;;;;;;-1:-1:-1;29456:250:0;;;;;:::i;:::-;;:::i;6758:25::-;;;;;;;;;;;;;;;;12621:112;;;;;;;;;;;;;:::i;:::-;;;8299:4:1;8287:17;;;8269:36;;8257:2;8242:18;12621:112:0;8127:184:1;17605:488:0;;;;;;;;;;-1:-1:-1;17605:488:0;;;;;:::i;:::-;;:::i;17330:108::-;;;;;;;;;;-1:-1:-1;17330:108:0;;;;;:::i;:::-;;:::i;16205:140::-;;;;;;;;;;-1:-1:-1;16205:140:0;;;;;:::i;:::-;;:::i;18814:269::-;;;;;;;;;;-1:-1:-1;18814:269:0;;;;;:::i;:::-;;:::i;6237:21::-;;;;;;;;;;-1:-1:-1;6237:21:0;;;;-1:-1:-1;;;;;6237:21:0;;;6101:46;;;;;;;;;;;;6143:4;6101:46;;6946:26;;;;;;;;;;-1:-1:-1;6946:26:0;;;;;;;;19978:215;;;;;;;;;;-1:-1:-1;19978:215:0;;;;;:::i;:::-;;:::i;11260:654::-;;;;;;;;;;-1:-1:-1;11260:654:0;;;;;:::i;:::-;;:::i;15922:127::-;;;;;;;;;;-1:-1:-1;15922:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;16013:28:0;15989:4;16013:28;;;:19;:28;;;;;;;;;15922:127;6979:36;;;;;;;;;;-1:-1:-1;6979:36:0;;;;;;;;;;;16353:134;;;;;;;;;;-1:-1:-1;16353:134:0;;;;;:::i;:::-;;:::i;20949:165::-;;;;;;;;;;-1:-1:-1;20949:165:0;;;;;:::i;:::-;;:::i;15556:218::-;;;;;;;;;;-1:-1:-1;15556:218:0;;;;;:::i;:::-;;:::i;15782:132::-;;;;;;;;;;-1:-1:-1;15782:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;15876:30:0;15852:4;15876:30;;;:21;:30;;;;;;;;;15782:132;19363:106;;;;;;;;;;;;;:::i;13141:198::-;;;;;;;;;;-1:-1:-1;13141:198:0;;;;;:::i;:::-;;:::i;11922:225::-;;;;;;;;;;;;;:::i;15048:500::-;;;;;;;;;;-1:-1:-1;15048:500:0;;;;;:::i;:::-;;:::i;27801:120::-;;;;;;;;;;-1:-1:-1;27801:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27893:20:0;27869:4;27893:20;;;:11;:20;;;;;;;;;27801:120;12915:79;;;;;;;;;;-1:-1:-1;12967:7:0;12985:6;-1:-1:-1;;;;;12985:6:0;12915:79;;14005:173;;;;;;;;;;;;;:::i;26640:544::-;;;;;;;;;;;;;:::i;12739:84::-;;;;;;;;;;;;;:::i;20472:103::-;;;;;;;;;;-1:-1:-1;20472:103:0;;;;;:::i;:::-;;:::i;7118:24::-;;;;;;;;;;-1:-1:-1;7118:24:0;;;;-1:-1:-1;;;7118:24:0;;;;;;13347:165;;;;;;;;;;-1:-1:-1;13347:165:0;;;;;:::i;:::-;;:::i;6790:34::-;;;;;;;;;;-1:-1:-1;6790:34:0;;;;;;;;20201:263;;;;;;;;;;-1:-1:-1;20201:263:0;;;;;:::i;:::-;;:::i;20583:173::-;;;;;;;;;;-1:-1:-1;20583:173:0;;;;;:::i;:::-;;:::i;5771:168::-;;;;;;;;;;-1:-1:-1;5771:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9154:6:1;9187:15;;;9169:34;;9239:15;;;9234:2;9219:18;;9212:43;9291:15;;;9271:18;;;9264:43;;;;9343:15;;9338:2;9323:18;;9316:43;9396:15;;;9390:3;9375:19;;9368:44;9131:3;9116:19;5771:168:0;8895:523:1;18101:195:0;;;;;;;;;;-1:-1:-1;18101:195:0;;;;;:::i;:::-;;:::i;13000:133::-;;;;;;;;;;-1:-1:-1;13000:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13102:19:0;;;13084:7;13102:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13000:133;8810:1898;;;;;;;;;;-1:-1:-1;8810:1898:0;;;;;:::i;:::-;;:::i;7083:28::-;;;;;;;;;;-1:-1:-1;7083:28:0;;;;-1:-1:-1;;;7083:28:0;;;;;;14500:540;;;;;;;;;;-1:-1:-1;14500:540:0;;;;;:::i;:::-;;:::i;27192:182::-;;;;;;;;;;;;;:::i;16864:145::-;;;;;;;;;;-1:-1:-1;16864:145:0;;;;;:::i;:::-;;:::i;20764:177::-;;;;;;;;;;-1:-1:-1;20764:177:0;;;;;:::i;:::-;;:::i;7192:37::-;;;;;;;;;;;;;;;;6449:197;;;;;;;;;;-1:-1:-1;6449:197:0;;;;;;-1:-1:-1;;;;;6449:197:0;;;;;;;;;;;-1:-1:-1;;;;;11245:15:1;;;11227:34;;11297:15;;;;11292:2;11277:18;;11270:43;11139:18;6449:197:0;10960:359:1;19597:373:0;;;;;;;;;;-1:-1:-1;19597:373:0;;;;;:::i;:::-;;:::i;6677:39::-;;;;;;;;;;-1:-1:-1;6677:39:0;;;;;;;;;;;17197:125;;;;;;;;;;-1:-1:-1;17197:125:0;;;;;:::i;:::-;;:::i;7149:36::-;;;;;;;;;;;;;;;;16495:148;;;;;;;;;;-1:-1:-1;16495:148:0;;;;;:::i;:::-;;:::i;17446:151::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;;;;;;;;;17541:9:::1;::::0;:48:::1;::::0;;;;12247:14:1;;12240:22;17541:48:0::1;::::0;::::1;12222:41:1::0;12306:14;;12299:22;12279:18;;;12272:50;17541:9:0;;;::::1;-1:-1:-1::0;;;;;17541:9:0::1;::::0;:24:::1;::::0;12195:18:1;;17541:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17446:151:::0;;:::o;17017:172::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;17125:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;17125:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;17163:8;;17173:7;;17125:56:::1;;;:::i;12829:80::-:0;12877:13;12901:5;12894:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:80;:::o;18304:502::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;18422:7:::1;:31:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;18464:21:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;18536:29:0;18496;;;::::1;;-1:-1:-1::0;;18536:29:0;;;;;::::1;::::0;;;::::1;;::::0;;18496;18596:17:::1;18464:21:::0;18536:29;18596:17:::1;:::i;:::-;:29;;;;:::i;:::-;18576:7;:49:::0;;-1:-1:-1;;18576:49:0::1;::::0;::::1;::::0;;::::1;;;::::0;;18671:9:::1;:17:::0;-1:-1:-1;;18652:36:0::1;::::0;18671:17;;::::1;::::0;::::1;::::0;18652:16:::1;:36;:::i;:::-;18727:7;:18:::0;18636:52:::1;::::0;;::::1;::::0;-1:-1:-1;18636:52:0;;18707:38:::1;::::0;18727:18;;::::1;::::0;18707:17;;;::::1;;:38;:::i;:::-;:47;;;;18699:99;;;::::0;-1:-1:-1;;;18699:99:0;;14231:2:1;18699:99:0::1;::::0;::::1;14213:21:1::0;14270:2;14250:18;;;14243:30;14309:34;14289:18;;;14282:62;14380:9;14360:18;;;14353:37;14407:19;;18699:99:0::1;14029:403:1::0;18699:99:0::1;18411:395;18304:502:::0;;;;:::o;13520:159::-;13595:4;13612:37;13621:10;13633:7;13642:6;13612:8;:37::i;:::-;-1:-1:-1;13667:4:0;13520:159;;;;;:::o;19477:112::-;19571:9;;19522:7;;19567:13;;19571:9;;19567:2;:13;:::i;:::-;19549:14;;:32;;;;:::i;:::-;19542:39;;19477:112;:::o;27929:1519::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;28023:7:::1;28019:1422;;;-1:-1:-1::0;;;;;28056:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28055:21;28047:62;;;::::0;-1:-1:-1;;;28047:62:0;;16336:2:1;28047:62:0::1;::::0;::::1;16318:21:1::0;16375:2;16355:18;;;16348:30;16414;16394:18;;;16387:58;16462:18;;28047:62:0::1;16134:352:1::0;28047:62:0::1;-1:-1:-1::0;;;;;28127:16:0;::::1;28146:1;28127:16:::0;;;:7:::1;:16;::::0;;;;;:20;28124:116:::1;;-1:-1:-1::0;;;;;28207:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28187:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28168:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28124:116:::1;-1:-1:-1::0;;;;;28254:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28254:27:0::1;28277:4;28254:27;::::0;;28310:6:::1;::::0;;;::::1;28299:17;28296:79;;28336:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28336:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;28336:23:0::1;-1:-1:-1::0;;;;;28336:23:0;::::1;;::::0;;28296:79:::1;27929:1519:::0;;:::o;28019:1422::-:1;28397:7;28392:1049;;-1:-1:-1::0;;;;;28429:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28421:61;;;::::0;-1:-1:-1;;;28421:61:0;;16693:2:1;28421:61:0::1;::::0;::::1;16675:21:1::0;16732:2;16712:18;;;16705:30;16771;16751:18;;;16744:58;16819:18;;28421:61:0::1;16491:352:1::0;28421:61:0::1;28512:6;::::0;-1:-1:-1;;;;;28512:6:0;;::::1;28501:17:::0;;::::1;::::0;28497:933:::1;;28577:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;28558:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;28539:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;28606:7:::1;:16:::0;;;;;:20;;;28645:11:::1;:20:::0;;;:28;;-1:-1:-1;;28645:28:0::1;::::0;;27929:1519;;:::o;28497:933::-:1;28698:9;:16:::0;28718:1:::1;28698:21:::0;28695:735:::1;;28778:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;28759:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;28740:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;28807:7:::1;:16:::0;;;;;:20;;;28846:11:::1;:20:::0;;;:28;;-1:-1:-1;;28846:28:0::1;::::0;;28893:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28893:15:0;;;;;-1:-1:-1;;;;;;28893:15:0::1;::::0;;;;;27929:1519;;:::o;28695:735::-:1;28954:9;28949:466;28973:9;:16:::0;28969:20;::::1;28949:466;;;29039:7;-1:-1:-1::0;;;;;29023:23:0::1;:9;29033:1;29023:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29023:12:0::1;:23:::0;29019:377:::1;;29090:9;29100:16:::0;;:20:::1;::::0;29119:1:::1;::::0;29100:20:::1;:::i;:::-;29090:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29075:9:::1;:12:::0;;-1:-1:-1;;;;;29090:31:0;;::::1;::::0;29085:1;;29075:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29075:46:0::1;-1:-1:-1::0;;;;;29075:46:0;;::::1;;::::0;;29148:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;29233:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;29214:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29195:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;29270:11:::1;:20:::0;;;:28;;-1:-1:-1;;29270:28:0::1;::::0;;29325:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29325:15:0;;;;;-1:-1:-1;;;;;;29325:15:0::1;::::0;;;;;28949:466:::1;27929:1519:::0;;:::o;29019:377::-:1;28991:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28949:466;;;;27929:1519:::0;;:::o;12500:115::-;12555:7;12570;;12581:1;12570:12;12566:31;;12586:8;;;12566:31;-1:-1:-1;12605:7:0;;;12500:115::o;14186:306::-;-1:-1:-1;;;;;14307:19:0;;14286:4;14307:19;;;:11;:19;;;;;;;;14327:10;14307:31;;;;;;;;-1:-1:-1;;14307:52:0;14303:126;;-1:-1:-1;;;;;14376:19:0;;;;;;:11;:19;;;;;;;;14396:10;14376:31;;;;;;;:41;;14411:6;;14376:19;:41;;14411:6;;14376:41;:::i;:::-;;;;-1:-1:-1;;14303:126:0;14448:36;14458:6;14466:9;14477:6;14448:9;:36::i;:::-;14441:43;14186:306;-1:-1:-1;;;;14186:306:0:o;19091:264::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;19233:3:::1;19223:7;;:13;;;;:::i;:::-;19211:7;19200;19190;;:17;;;;:::i;:::-;19189:29;;;;:::i;:::-;:48;;19181:109;;;::::0;-1:-1:-1;;;19181:109:0;;17871:2:1;19181:109:0::1;::::0;::::1;17853:21:1::0;17910:2;17890:18;;;17883:30;17949:34;17929:18;;;17922:62;18020:18;18000;;;17993:46;18056:19;;19181:109:0::1;17669:412:1::0;19181:109:0::1;19340:7;19329;19319;;:17;;;;:::i;:::-;19318:29;;;;:::i;:::-;19301:14;:46:::0;-1:-1:-1;;19091:264:0:o;27382:411::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;27517:7:::1;:14;27498:8;:15;:33;27490:67;;;::::0;-1:-1:-1;;;27490:67:0;;18288:2:1;27490:67:0::1;::::0;::::1;18270:21:1::0;18327:2;18307:18;;;18300:30;18366:23;18346:18;;;18339:51;18407:18;;27490:67:0::1;18086:345:1::0;27490:67:0::1;27573:7;27568:218;27590:8;:15;27586:1;:19;;;27568:218;;;27660:7;27668:1;27660:10;;;;;;;;;;:::i;:::-;;;;;;;27635:21;27645:10;27635:9;:21::i;:::-;:35;;27627:44;;;::::0;::::1;;27686:88;27704:10;27716:8;27725:1;27716:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;27744:9:::1;::::0;27740:13:::1;::::0;27744:9:::1;;27740:2;:13;:::i;:::-;27729:7;27737:1;27729:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27755:5;27762::::0;27769:4:::1;27686:17;:88::i;:::-;-1:-1:-1::0;27607:3:0;::::1;::::0;::::1;:::i;:::-;;;;27568:218;;16651:141:::0;16704:7;16761:21;16779:1;16761:9;:21::i;:::-;16743:15;6296:42;16743:9;:15::i;:::-;:39;;;;:::i;:::-;16732:7;;:51;;;;:::i;29456:250::-;29522:7;29561;;29550;:18;;29542:73;;;;-1:-1:-1;;;29542:73:0;;18951:2:1;29542:73:0;;;18933:21:1;18990:2;18970:18;;;18963:30;19029:34;19009:18;;;19002:62;19100:12;19080:18;;;19073:40;19130:19;;29542:73:0;18749:406:1;29542:73:0;29626:19;29649:10;:8;:10::i;:::-;29626:33;-1:-1:-1;29677:21:0;29626:33;29677:7;:21;:::i;:::-;29670:28;29456:250;-1:-1:-1;;;29456:250:0:o;12621:112::-;12673:5;12686:7;;12697:1;12686:12;12682:31;;12702:8;;;12682:31;-1:-1:-1;12721:9:0;;;;;12621:112::o;17605:488::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;5986:4:::1;17712:6;:21;;;;:65;;;;;6036:4;17754:7;:23;;;;17712:65;:117;;;;;6090:4;17798:11;:31;;;;17712:117;17704:170;;;::::0;-1:-1:-1;;;17704:170:0;;19362:2:1;17704:170:0::1;::::0;::::1;19344:21:1::0;19401:2;19381:18;;;19374:30;19440:25;19420:18;;;19413:53;19483:18;;17704:170:0::1;19160:347:1::0;17704:170:0::1;6143:4;17893:16;17902:7:::0;17893:6;:16:::1;:::i;:::-;:35;;;;17885:80;;;::::0;-1:-1:-1;;;17885:80:0;;19714:2:1;17885:80:0::1;::::0;::::1;19696:21:1::0;;;19733:18;;;19726:30;19792:34;19772:18;;;19765:62;19844:18;;17885:80:0::1;19512:356:1::0;17885:80:0::1;17976:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;18012:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;18050:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17605:488::o;17330:108::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;17399:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17399:31:0::1;::::0;::::1;160:74:1::0;17399:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17399:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;16205:140:::0;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;-1:-1:-1;;;;;16297:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;16297:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16205:140::o;18814:269::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;18955:4:::1;18945:7;;:14;;;;:::i;:::-;18933:7;18922;18912;;:17;;;;:::i;:::-;18911:29;;;;:::i;:::-;:49;;18903:117;;;::::0;-1:-1:-1;;;18903:117:0;;20075:2:1;18903:117:0::1;::::0;::::1;20057:21:1::0;20114:2;20094:18;;;20087:30;20153:34;20133:18;;;20126:62;20224:25;20204:18;;;20197:53;20267:19;;18903:117:0::1;19873:419:1::0;18903:117:0::1;19068:7;19057;19047;;:17;;;;:::i;:::-;19046:29;;;;:::i;:::-;19031:12;:44:::0;-1:-1:-1;;18814:269:0:o;19978:215::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;20108:3:::1;20082:22;:29;;20074:62;;;::::0;-1:-1:-1;;;20074:62:0;;20499:2:1;20074:62:0::1;::::0;::::1;20481:21:1::0;20538:2;20518:18;;;20511:30;20577:22;20557:18;;;20550:50;20617:18;;20074:62:0::1;20297:344:1::0;20074:62:0::1;20147:13;:38:::0;19978:215::o;11260:654::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;-1:-1:-1;;;;;11339:22:0;::::1;11331:96;;;::::0;-1:-1:-1;;;11331:96:0;;20848:2:1;11331:96:0::1;::::0;::::1;20830:21:1::0;20887:2;20867:18;;;20860:30;20926:34;20906:18;;;20899:62;20997:31;20977:18;;;20970:59;21046:19;;11331:96:0::1;20646:425:1::0;11331:96:0::1;-1:-1:-1::0;;;;;;;11446:16:0;::::1;::::0;11438:90:::1;;;::::0;-1:-1:-1;;;11438:90:0;;20848:2:1;11438:90:0::1;::::0;::::1;20830:21:1::0;20887:2;20867:18;;;20860:30;20926:34;20906:18;;;20899:62;20997:31;20977:18;;;20970:59;21046:19;;11438:90:0::1;20646:425:1::0;11438:90:0::1;11559:6;::::0;;11539:34:::1;::::0;-1:-1:-1;;;;;11559:6:0;;::::1;::::0;11539:19:::1;:34::i;:::-;11584:35;11604:8;11614:4;11584:19;:35::i;:::-;11663:1;11653:6:::0;;11643:17:::1;::::0;-1:-1:-1;;;;;11653:6:0::1;11643:9;:17::i;:::-;:21;11640:127;;;11699:6;::::0;11681:74:::1;::::0;-1:-1:-1;;;;;11699:6:0::1;11707:8:::0;11717:17:::1;11699:6:::0;11717:9:::1;:17::i;11681:74::-;;11640:127;11787:16;11806:6:::0;;-1:-1:-1;;;;;11823:17:0;;::::1;-1:-1:-1::0;;;;;;11823:17:0;::::1;::::0;::::1;::::0;;11856:40:::1;::::0;11806:6;;;::::1;::::0;;;11856:40:::1;::::0;11787:16;11856:40:::1;11320:594;11260:654:::0;:::o;16353:134::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;-1:-1:-1;;;;;16441:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;16441:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16353:134::o;20949:165::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;21043:16:::1;:26:::0;;;;21080:16:::1;:26:::0;20949:165::o;15556:218::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;15640:14:::1;::::0;::::1;;15639:15;15631:24;;;::::0;::::1;;15697:4;-1:-1:-1::0;;;;;15674:28:0;::::1;::::0;15666:55:::1;;;::::0;-1:-1:-1;;;15666:55:0;;21278:2:1;15666:55:0::1;::::0;::::1;21260:21:1::0;21317:2;21297:18;;;21290:30;21356:16;21336:18;;;21329:44;21390:18;;15666:55:0::1;21076:338:1::0;15666:55:0::1;15732:9;:34:::0;;-1:-1:-1;;;;;15732:34:0;;::::1;::::0;::::1;-1:-1:-1::0;;15732:34:0;;::::1;::::0;;;::::1;::::0;;15556:218::o;19363:106::-;19451:9;;19404:7;;19447:13;;19451:9;;19447:2;:13;:::i;:::-;19431:12;;:30;;;;:::i;13141:198::-;-1:-1:-1;;;;;13231:20:0;;13207:7;13231:20;;;:11;:20;;;;;;;;13227:49;;;-1:-1:-1;;;;;;13260:16:0;;;;;:7;:16;;;;;;;13141:198::o;13227:49::-;-1:-1:-1;;;;;13314:16:0;;;;;;:7;:16;;;;;;13294:37;;:19;:37::i;11922:225::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;12001:6:::1;::::0;;11981:34:::1;::::0;-1:-1:-1;;;;;12001:6:0;;::::1;::::0;11981:19:::1;:34::i;:::-;12026:16;12045:6:::0;;-1:-1:-1;;;;;;12062:19:0;::::1;::::0;;12097:42:::1;::::0;-1:-1:-1;;;;;12045:6:0;;::::1;::::0;12026:16;12045:6;;12097:42:::1;::::0;12026:16;;12097:42:::1;11970:177;11922:225::o:0;15048:500::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;15129:16;::::1;;15140:5;15129:16:::0;15125:416:::1;;-1:-1:-1::0;;;;;15162:13:0;;::::1;15178:5;15162:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15162:21:0::1;::::0;;15198:9:::1;::::0;:32;;-1:-1:-1;;;15198:32:0;;::::1;::::0;::::1;21587:74:1::0;;;;21677:18;;;21670:50;;;;15198:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21560:18:1;;15198:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;15125:416;15267:17;::::0;:22;15263:136:::1;;15356:6;15336:17;;15318:15;:35;;;;:::i;:::-;:44;15310:73;;;::::0;-1:-1:-1;;;15310:73:0;;21933:2:1;15310:73:0::1;::::0;::::1;21915:21:1::0;21972:2;21952:18;;;21945:30;22011:18;21991;;;21984:46;22047:18;;15310:73:0::1;21731:340:1::0;15310:73:0::1;-1:-1:-1::0;;;;;15413:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;15413:20:0::1;15429:4;15413:20:::0;;::::1;::::0;;;15468:15:::1;15448:17;:35:::0;;;15498:9:::1;::::0;:31;;-1:-1:-1;;;15498:31:0;;;;::::1;21587:74:1::0;;;;21677:18;;;21670:50;15498:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21560:18:1;;15498:31:0::1;21419:307:1::0;14005:173:0;14069:4;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;14118:9:::1;::::0;14086:62:::1;::::0;14103:4:::1;::::0;-1:-1:-1;;;;;14118:9:0::1;-1:-1:-1::0;;14086:8:0::1;:62::i;:::-;-1:-1:-1::0;14166:4:0::1;14005:173:::0;:::o;26640:544::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;26702:14:::1;::::0;::::1;;26701:15;26693:52;;;::::0;-1:-1:-1;;;26693:52:0;;22278:2:1;26693:52:0::1;::::0;::::1;22260:21:1::0;22317:2;22297:18;;;22290:30;22356:26;22336:18;;;22329:54;22400:18;;26693:52:0::1;22076:348:1::0;26693:52:0::1;26764:16;::::0;::::1;::::0;::::1;;;26756:53;;;::::0;-1:-1:-1;;;26756:53:0;;22631:2:1;26756:53:0::1;::::0;::::1;22613:21:1::0;22670:2;22650:18;;;22643:30;22709:26;22689:18;;;22682:54;22753:18;;26756:53:0::1;22429:348:1::0;26756:53:0::1;26831:9;::::0;;;::::1;-1:-1:-1::0;;;;;26831:9:0::1;26820:99;;26871:9;:36:::0;;-1:-1:-1;;26871:36:0::1;26901:4;26871:36:::0;::::1;;::::0;;26820:99:::1;26933:9;::::0;26953:6:::1;::::0;27008:9:::1;::::0;26933:85:::1;::::0;;;;-1:-1:-1;;;;;26953:6:0;;::::1;26933:85;::::0;::::1;23005:74:1::0;23127:10;26968:12:0::1;23115:23:1::0;23095:18;;;23088:51;23187:18;26990:15:0::1;23175:31:1::0;23155:18;;;23148:59;27008:9:0::1;::::0;;::::1;23223:18:1::0;;;23216:45;26933:9:0;;;::::1;;::::0;:19:::1;::::0;22977::1;;26933:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26929:101:::0;27040:14:::1;:21:::0;;-1:-1:-1;;27040:21:0::1;27057:4;27040:21;::::0;;27099:6:::1;::::0;27115:5:::1;::::0;27089:17:::1;::::0;-1:-1:-1;;;;;27099:6:0::1;27089:9;:17::i;:::-;:22;::::0;27109:2:::1;27089:22;:::i;:::-;27088:32;;;;:::i;:::-;27072:13;:48:::0;27155:6:::1;::::0;27171:5:::1;::::0;27145:17:::1;::::0;-1:-1:-1;;;;;27155:6:0::1;27145:9;:17::i;:::-;:22;::::0;27165:2:::1;27145:22;:::i;:::-;27144:32;;;;:::i;:::-;27131:10;:45:::0;26640:544::o;12739:84::-;12789:13;12813:7;12806:14;;;;;:::i;20472:103::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;20543:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;20543:24:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;20472:103::o;13347:165::-;13425:4;13442:40;13452:10;13464:9;13475:6;13442:9;:40::i;:::-;-1:-1:-1;13500:4:0;;13347:165;-1:-1:-1;;;13347:165:0:o;20201:263::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;20310:19:::1;:33:::0;;-1:-1:-1;;20310:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;20354:22:::1;:47:::0;;-1:-1:-1;;20354:47:0::1;::::0;::::1;;;::::0;;20417:39:::1;::::0;5270:41:1;;;20417:39:0::1;::::0;5258:2:1;5243:18;20417:39:0::1;;;;;;;;20201:263:::0;;:::o;20583:173::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;20656:7:::1;20652:64;;;20680:16;:24:::0;;-1:-1:-1;;;;20680:24:0::1;::::0;;20652:64:::1;20726:12;:22:::0;;;::::1;;-1:-1:-1::0;;;20726:22:0::1;-1:-1:-1::0;;;;20726:22:0;;::::1;::::0;;;::::1;::::0;;20583:173::o;18101:195::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;18201:11:::1;:42:::0;;-1:-1:-1;;;;;18201:42:0;;::::1;-1:-1:-1::0;;;;;;18201:42:0;;::::1;;::::0;;;18254:17;:34;;;;;::::1;::::0;::::1;;::::0;;18101:195::o;8810:1898::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;8949:19:::1;::::0;::::1;;8948:20;8940:34;;;::::0;-1:-1:-1;;;8940:34:0;;23474:2:1;8940:34:0::1;::::0;::::1;23456:21:1::0;23513:1;23493:18;;;23486:29;23551:3;23531:18;;;23524:31;23572:18;;8940:34:0::1;23272:324:1::0;8940:34:0::1;9012:7;:14;8993:8;:15;:33;8985:47;;;::::0;-1:-1:-1;;;8985:47:0;;23803:2:1;8985:47:0::1;::::0;::::1;23785:21:1::0;23842:1;23822:18;;;23815:29;23880:3;23860:18;;;23853:31;23901:18;;8985:47:0::1;23601:324:1::0;8985:47:0::1;9043:9;:33:::0;;-1:-1:-1;;9043:33:0::1;::::0;-1:-1:-1;;;;;9043:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;9091::::1;::::0;;;;9118:4:::1;9091:33;::::0;::::1;160:74:1::0;9091:9:0;::::1;;::::0;:18:::1;::::0;133::1;;9091:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;9087:49:::0;9150:9:::1;;;;;;;;;-1:-1:-1::0;;;;;9150:9:0::1;-1:-1:-1::0;;;;;9150:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;9150:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;9146:454;;9577:11;::::0;-1:-1:-1;;;9577:11:0;;25413:2:1;9577:11:0::1;::::0;::::1;25395:21:1::0;25452:1;25432:18;;;25425:29;25490:3;25470:18;;;25463:31;25511:18;;9577:11:0::1;25211:324:1::0;9146:454:0::1;9300:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9331:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9366:14:0::1;:35:::0;;;9416:9:::1;:24:::0;;-1:-1:-1;;9416:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;9482:13:::1;::::0;:2:::1;:13;:::i;:::-;9465:14;;:30;;;;:::i;:::-;9455:7;:40:::0;;;9528:13:::1;::::0;-1:-1:-1;;9528:13:0::1;:::i;:::-;9521:21;::::0;-1:-1:-1;;9521:21:0::1;:::i;:::-;9510:7;:33:::0;-1:-1:-1;;;;9630:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;9630:9:0::1;-1:-1:-1::0;;;;;9630:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9619:42:0::1;;9662:9;;;;;;;;;-1:-1:-1::0;;;;;9662:9:0::1;-1:-1:-1::0;;;;;9662:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9619:75;::::0;-1:-1:-1;;;;;;9619:75:0::1;::::0;;;;;;-1:-1:-1;;;;;11245:15:1;;;9619:75:0::1;::::0;::::1;11227:34:1::0;9688:4:0::1;11277:18:1::0;;;11270:43;11139:18;;9619:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9610:6;:84:::0;;-1:-1:-1;;;;;;9610:84:0::1;-1:-1:-1::0;;;;;9610:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;9705:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;9705:22:0::1;-1:-1:-1::0;9705:22:0::1;::::0;;9754:7:::1;::::0;9769:4:::1;::::0;9754:11:::1;::::0;9764:1:::1;9754:11;:::i;:::-;9753:20;;;;:::i;:::-;9738:12;:35:::0;9802:7:::1;::::0;9817:3:::1;::::0;9802:11:::1;::::0;9812:1:::1;9802:11;:::i;:::-;9801:19;;;;:::i;:::-;9784:14;:36:::0;9831:19:::1;:26:::0;;-1:-1:-1;;9831:26:0::1;9853:4;9831:26:::0;;::::1;::::0;;;9891:7:::1;::::0;-1:-1:-1;9881:6:0;;-1:-1:-1;;;;;9881:6:0;;::::1;9873:15:::0;;::::1;::::0;;;;;;;:25;;;;9935:6;;9943:7:::1;::::0;9914:37;;391:25:1;;;9935:6:0::1;::::0;-1:-1:-1;;9914:37:0::1;::::0;364:18:1;9914:37:0::1;;;;;;;9996:9;::::0;9964:62:::1;::::0;9981:4:::1;::::0;-1:-1:-1;;;;;9996:9:0::1;-1:-1:-1::0;;9964:8:0::1;:62::i;:::-;10046:6;::::0;10062:9:::1;::::0;10037:55:::1;::::0;-1:-1:-1;;;;;10046:6:0;;::::1;::::0;10062:9:::1;-1:-1:-1::0;;10037:8:0::1;:55::i;:::-;10107:9;10103:195;10126:8;:15;10122:1;:19;10103:195;;;10196:9;::::0;10162:14:::1;::::0;10192:13:::1;::::0;10196:9:::1;;10192:2;:13;:::i;:::-;10179:7;10187:1;10179:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;10162:43;;10220:66;10238:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;10238:6:0::1;10246:8;10255:1;10246:11;;;;;;;;:::i;:::-;;;;;;;10259:6;10267:5;10274::::0;10281:4:::1;10220:17;:66::i;:::-;;10147:151;10143:3;;;;;:::i;:::-;;;;10103:195;;;-1:-1:-1::0;10328:6:0::1;::::0;10310:79:::1;::::0;-1:-1:-1;;;;;10328:6:0::1;10344:4;10351:17;10328:6:::0;10351:9:::1;:17::i;10310:79::-;-1:-1:-1::0;10402:9:0::1;::::0;-1:-1:-1;;;;;10402:9:0::1;:25;10435:21;10480:4;10500:24;10480:4:::0;10500:9:::1;:24::i;:::-;10539:1;10625:6:::0;;10402:270:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;10402:270:0;;;-1:-1:-1;;;;;26627:15:1;;;10402:270:0::1;::::0;::::1;26609:34:1::0;26659:18;;;26652:34;;;;26702:18;;;26695:34;;;26745:18;;;26738:34;;;;10625:6:0;;;::::1;26788:19:1::0;;;26781:44;10646:15:0::1;26841:19:1::0;;;26834:35;26520:19;;10402:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10685:15;:13;:15::i;14500:540::-:0;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;14569:20:::1;14602:9;14569:43;;14623:16;14653:10;-1:-1:-1::0;;;;;14653:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14642:40:0::1;;14691:4;14698:10;-1:-1:-1::0;;;;;14698:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14642:74;::::0;-1:-1:-1;;;;;;14642:74:0::1;::::0;;;;;;-1:-1:-1;;;;;11245:15:1;;;14642:74:0::1;::::0;::::1;11227:34:1::0;11297:15;;11277:18;;;11270:43;11139:18;;14642:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14623:93:::0;-1:-1:-1;;;;;;14731:22:0;::::1;14727:200;;14790:10;-1:-1:-1::0;;;;;14790:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14779:43:0::1;;14831:4;14838:10;-1:-1:-1::0;;;;;14838:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14779:77;::::0;-1:-1:-1;;;;;;14779:77:0::1;::::0;;;;;;-1:-1:-1;;;;;11245:15:1;;;14779:77:0::1;::::0;::::1;11227:34:1::0;11297:15;;11277:18;;;11270:43;11139:18;;14779:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14770:6;:86:::0;;-1:-1:-1;;;;;;14770:86:0::1;-1:-1:-1::0;;;;;14770:86:0;;;::::1;::::0;;;::::1;::::0;;14727:200:::1;;;14898:6;:17:::0;;-1:-1:-1;;;;;;14898:17:0::1;-1:-1:-1::0;;;;;14898:17:0;::::1;;::::0;;14727:200:::1;14937:9;:22:::0;;-1:-1:-1;;;;;;14937:22:0::1;-1:-1:-1::0;;;;;14937:22:0;::::1;::::0;;::::1;::::0;;;14970:62:::1;::::0;14987:4:::1;::::0;-1:-1:-1;;14970:8:0::1;:62::i;27192:182::-:0;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;27259:16:::1;::::0;::::1;::::0;::::1;;;27258:17;27250:58;;;::::0;-1:-1:-1;;;27250:58:0;;27393:2:1;27250:58:0::1;::::0;::::1;27375:21:1::0;27432:2;27412:18;;;27405:30;27471;27451:18;;;27444:58;27519:18;;27250:58:0::1;27191:352:1::0;27250:58:0::1;27327:6;::::0;;27319:47:::1;::::0;-1:-1:-1;;;;;27327:6:0;;::::1;::::0;27344:21:::1;27319:47:::0;::::1;;;::::0;27344:21;;27319:47;27327:6;27319:47;27344:21;27327:6;27319:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27192:182::o:0;16864:145::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;16954:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;21605:55:1;;;16954:47:0::1;::::0;::::1;21587:74:1::0;21704:14;;21697:22;21677:18;;;21670:50;16954:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;21560:18:1;;16954:47:0::1;21419:307:1::0;20764:177:0;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;20841:7:::1;20837:60;;;20865:12;:20:::0;;-1:-1:-1;;;;20865:20:0::1;::::0;;20837:60:::1;20907:16;:26:::0;;;::::1;;-1:-1:-1::0;;;20907:26:0::1;-1:-1:-1::0;;;;20907:26:0;;::::1;::::0;;;::::1;::::0;;20764:177::o;19597:373::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;19797:16:::1;19777;19767:7;;:26;;;;:::i;:::-;19766:47;;;;:::i;:::-;19750:13;:63:::0;19838:7:::1;::::0;19865:13;;19838:23:::1;::::0;19848:13;;19838:23:::1;:::i;:::-;19837:41;;;;:::i;:::-;19824:10;:54:::0;;;19897:13:::1;::::0;:27:::1;;19889:73;;;::::0;-1:-1:-1;;;19889:73:0;;27750:2:1;19889:73:0::1;::::0;::::1;27732:21:1::0;27789:2;27769:18;;;27762:30;27828:34;27808:18;;;27801:62;27899:3;27879:18;;;27872:31;27920:19;;19889:73:0::1;27548:397:1::0;19889:73:0::1;19597:373:::0;;;;:::o;17197:125::-;17282:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17282:32:0;;;160:74:1;17258:4:0;;17282:9;;;;;:23;;133:18:1;;17282:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16495:148::-;7595:6;;-1:-1:-1;;;;;7595:6:0;7605:10;7595:20;7587:50;;;;-1:-1:-1;;;7587:50:0;;11916:2:1;7587:50:0;;;11898:21:1;11955:2;11935:18;;;11928:30;-1:-1:-1;;;11974:18:1;;;11967:47;12031:18;;7587:50:0;11714:341:1;7587:50:0;-1:-1:-1;;;;;16591:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;16591:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16495:148::o;13687:310::-;-1:-1:-1;;;;;13782:20:0;;13774:52;;;;-1:-1:-1;;;13774:52:0;;28402:2:1;13774:52:0;;;28384:21:1;28441:2;28421:18;;;28414:30;28480:21;28460:18;;;28453:49;28519:18;;13774:52:0;28200:343:1;13774:52:0;-1:-1:-1;;;;;13845:21:0;;13837:53;;;;-1:-1:-1;;;13837:53:0;;28402:2:1;13837:53:0;;;28384:21:1;28441:2;28421:18;;;28414:30;28480:21;28460:18;;;28453:49;28519:18;;13837:53:0;28200:343:1;13837:53:0;-1:-1:-1;;;;;13903:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13956:33;;391:25:1;;;13956:33:0;;364:18:1;13956:33:0;;;;;;;13687:310;;;:::o;33076:818::-;33156:7;;33192;;33225:6;;-1:-1:-1;;;;;33225:6:0;33118:7;33213:19;;;:11;:19;;;;;;33118:7;;33156;33192;33213:19;;33210:217;;;33261:6;;-1:-1:-1;;;;;33261:6:0;33253:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33253:25:0;:54;;-1:-1:-1;33290:6:0;;-1:-1:-1;;;;;33290:6:0;33282:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33253:54:0;33249:84;;;33326:7;;33316;;:17;;;;:::i;:::-;33309:24;;;;33076:818;:::o;33249:84::-;33367:6;;-1:-1:-1;;;;;33367:6:0;33359:15;;;;:7;:15;;;;;;33348:26;;;;:::i;:::-;33408:6;;-1:-1:-1;;;;;33408:6:0;33400:15;;;;:7;:15;;;;;;33348:26;;-1:-1:-1;33389:26:0;;;;:::i;:::-;;;33210:217;33440:9;:16;:20;33437:347;;33482:7;33477:296;33499:9;:16;33495:20;;;;33477:296;;;33569:7;33545;:21;33553:9;33563:1;33553:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33553:12:0;33545:21;;;;;;;;;;;;;:31;;:66;;;33604:7;33580;:21;33588:9;33598:1;33588:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33588:12:0;33580:21;;;;;;;;;;;;;:31;33545:66;33541:96;;;33630:7;;33620;;:17;;;;:::i;:::-;33613:24;;;;;33076:818;:::o;33541:96::-;33676:7;:21;33684:9;33694:1;33684:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33684:12:0;33676:21;;;;;;;;;;;;;33666:31;;:7;:31;:::i;:::-;33656:41;;33736:7;:21;33744:9;33754:1;33744:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33744:12:0;33736:21;;;;;;;;;;;;;33726:31;;:7;:31;:::i;:::-;33716:41;-1:-1:-1;33517:3:0;;;;:::i;:::-;;;;33477:296;;;;33437:347;33818:7;;33808;;:17;;;;:::i;:::-;33798:7;:27;33794:57;;;33844:7;;33834;;:17;;;;:::i;33794:57::-;33869:17;33879:7;33869;:17;:::i;21488:2817::-;21567:4;-1:-1:-1;;;;;21592:18:0;;21584:68;;;;-1:-1:-1;;;21584:68:0;;28750:2:1;21584:68:0;;;28732:21:1;28789:2;28769:18;;;28762:30;28828:34;28808:18;;;28801:62;28899:7;28879:18;;;28872:35;28924:19;;21584:68:0;28548:401:1;21584:68:0;-1:-1:-1;;;;;21671:16:0;;21663:64;;;;-1:-1:-1;;;21663:64:0;;29156:2:1;21663:64:0;;;29138:21:1;29195:2;29175:18;;;29168:30;29234:34;29214:18;;;29207:62;29305:5;29285:18;;;29278:33;29328:19;;21663:64:0;28954:399:1;21663:64:0;21755:1;21746:6;:10;21738:64;;;;-1:-1:-1;;;21738:64:0;;29560:2:1;21738:64:0;;;29542:21:1;29599:2;29579:18;;;29572:30;29638:34;29618:18;;;29611:62;29709:11;29689:18;;;29682:39;29738:19;;21738:64:0;29358:405:1;21738:64:0;-1:-1:-1;;;;;21901:13:0;;21813:8;21901:13;;;:7;:13;;;;;;21813:8;;;;21901:13;;21897:162;;;21937:4;21931:10;;21897:162;;;-1:-1:-1;;;;;21963:11:0;;;;;;:7;:11;;;;;;;;21959:100;;;21998:4;21991:11;;21959:100;;;-1:-1:-1;22043:4:0;21959:100;22072:20;22083:4;22089:2;22072:10;:20::i;:::-;22069:641;;;22113:14;;;;22109:89;;22148:34;;-1:-1:-1;;;22148:34:0;;29970:2:1;22148:34:0;;;29952:21:1;30009:2;29989:18;;;29982:30;30048:26;30028:18;;;30021:54;30092:18;;22148:34:0;29768:348:1;22109:89:0;22215:3;:11;;;;22222:4;22215:11;22212:231;;;-1:-1:-1;;;;;22251:27:0;;;;;;:21;:27;;;;;;;;22250:28;:58;;;;-1:-1:-1;;;;;;22283:25:0;;;;;;:21;:25;;;;;;;;22282:26;22250:58;22246:182;;;22351:12;;22341:6;:22;;22333:75;;;;-1:-1:-1;;;22333:75:0;;30323:2:1;22333:75:0;;;30305:21:1;30362:2;30342:18;;;30335:30;30401:34;30381:18;;;30374:62;30472:10;30452:18;;;30445:38;30500:19;;22333:75:0;30121:404:1;22333:75:0;22474:9;;-1:-1:-1;;;;;22460:24:0;;;22474:9;;22460:24;;;;:33;;;22489:4;22488:5;22460:33;22457:242;;;-1:-1:-1;;;;;22519:25:0;;;;;;:21;:25;;;;;;;;22514:170;;22603:14;;22593:6;22577:13;22587:2;22577:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;22569:95;;;;-1:-1:-1;;;22569:95:0;;30732:2:1;22569:95:0;;;30714:21:1;30771:2;30751:18;;;30744:30;30810:34;30790:18;;;30783:62;30881:12;30861:18;;;30854:40;30911:19;;22569:95:0;30530:406:1;22569:95:0;22726:4;22722:1504;;;22752:6;;;;22747:611;;22782:19;;;;;;;22779:564;;;22844:28;22875:24;22893:4;22875:9;:24::i;:::-;22844:55;;22950:13;;22926:20;:37;22922:402;;23010:10;;23050:22;;;;23047:96;;;23107:13;;23097:6;;6190:5;;23107:13;23087:17;;-1:-1:-1;;;;;23097:6:0;23087:9;:17::i;:::-;:33;;;;:::i;:::-;23086:54;;;;:::i;:::-;23076:64;;23047:96;23196:7;23172:20;:31;23169:71;;23230:7;23207:30;;23169:71;23266:34;23279:20;23266:12;:34::i;:::-;22965:359;22922:402;22821:522;22779:564;23378:14;;-1:-1:-1;;;23378:14:0;;;;:39;;;;-1:-1:-1;;;;;;23396:21:0;;23412:4;23396:21;;23378:39;23374:841;;;23462:16;;;23476:1;23462:16;;;;;;;;23438:21;;23462:16;;;;;;;;;;-1:-1:-1;23462:16:0;23438:40;;23515:4;23497;23502:1;23497:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23497:23:0;;;:7;;;;;;;;;;:23;;;;23549:9;;:16;;;-1:-1:-1;;;23549:16:0;;;;:9;;;;;:14;;:16;;;;;23497:7;;23549:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23539:4;23544:1;23539:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23539:26:0;;;:7;;;;;;;;;:26;23605:9;;:37;;;;;23584:18;;23605:9;;;;;:23;;:37;;23629:6;;23637:4;;23605:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23605:37:0;;;;;;;;;;;;:::i;:::-;23643:1;23605:40;;;;;;;;:::i;:::-;;;;;;;23584:61;;23664:13;23714:16;;23694;;23681:10;:29;;;;:::i;:::-;23680:50;;;;:::i;:::-;23753:16;;23664:66;;-1:-1:-1;;;;23753:16:0;;;;:49;;;;;23781:21;23773:5;:29;23753:49;23749:119;;;23827:21;23842:5;23827:14;:21::i;:::-;23892:12;;-1:-1:-1;;;23892:12:0;;;;23888:312;;;23957:14;:10;23970:1;23957:14;:::i;:::-;23933:21;:38;23929:252;;;24000:12;:20;;24047:23;;-1:-1:-1;;;24047:23:0;;;23929:252;;;24127:30;24142:14;:10;24155:1;24142:14;:::i;:::-;24127;:30::i;:::-;23419:796;;;23374:841;24244:53;24262:4;24268:2;24272:6;24280:3;24285:4;24291:5;24244:17;:53::i;:::-;24237:60;21488:2817;-1:-1:-1;;;;;;;21488:2817:0:o;29947:1163::-;30090:16;;30068:4;;30090:16;;;;;30085:298;;30123:28;30142:4;30148:2;30123:18;:28::i;:::-;30171:16;;;;;;;30170:17;:41;;;;;30191:20;30202:4;30208:2;30191:10;:20::i;:::-;30170:77;;;;-1:-1:-1;;;;;;30216:31:0;;;;;;:25;:31;;;;;;;;30215:32;30170:77;:111;;;;-1:-1:-1;;;;;;30252:29:0;;;;;;:25;:29;;;;;;;;30251:30;30170:111;:121;;;;;30286:5;30285:6;30170:121;30166:206;;;30312:44;;-1:-1:-1;;;30312:44:0;;32366:2:1;30312:44:0;;;32348:21:1;32405:2;32385:18;;;32378:30;32444:34;32424:18;;;32417:62;32515:4;32495:18;;;32488:32;32537:19;;30312:44:0;32164:398:1;30166:206:0;-1:-1:-1;;;;;30428:25:0;;30395:12;30428:25;;;:19;:25;;;;;;30410:4;;30428:25;;;:52;;-1:-1:-1;;;;;;30457:23:0;;;;;;:19;:23;;;;;;;;30428:52;30425:98;;;-1:-1:-1;30506:5:0;30425:98;30535:25;30563:55;30573:4;30579:2;30583:7;30592;30601:3;30606:4;30612:5;30563:9;:55::i;:::-;30648:14;;;;-1:-1:-1;;;;;30631:13:0;;;;;;:7;:13;;;;;:31;;30535:83;;-1:-1:-1;30648:14:0;;30631:31;;30648:14;;30631:31;:::i;:::-;;;;-1:-1:-1;;30688:22:0;;;;-1:-1:-1;;;;;30673:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;30688:22;;30673:37;:::i;:::-;;;;-1:-1:-1;;;;;;;30727:17:0;;;;;;:11;:17;;;;;;;;30723:89;;;-1:-1:-1;;;;;30777:13:0;;;;;;:7;:13;;;;;;:23;;30793:7;;30777:23;:::i;:::-;-1:-1:-1;;;;;30761:13:0;;;;;;:7;:13;;;;;:39;30723:89;-1:-1:-1;;;;;30826:15:0;;;;;;:11;:15;;;;;;;;30822:98;;;30886:22;;-1:-1:-1;;;;;30872:11:0;;30886:22;30872:11;;;:7;:11;;;;;;:36;;30886:22;30872:36;:::i;:::-;-1:-1:-1;;;;;30858:11:0;;;;;;:7;:11;;;;;:50;30822:98;30950:1;30936:6;:11;;;:15;:34;;;;30969:1;30955:6;:11;;;:15;30936:34;30932:89;;;30998:6;:11;;;30987:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;30932:89:0;31053:2;-1:-1:-1;;;;;31038:42:0;31047:4;-1:-1:-1;;;;;31038:42:0;;31057:6;:22;;;31038:42;;;;391:25:1;;379:2;364:18;;245:177;31038:42:0;;;;;;;;-1:-1:-1;31098:4:0;;29947:1163;-1:-1:-1;;;;;;;;29947:1163:0:o;21122:358::-;21191:4;21223:6;;-1:-1:-1;;;;;21215:14:0;;;21223:6;;21215:14;;;;:43;;-1:-1:-1;21252:6:0;;-1:-1:-1;;;;;21246:12:0;;;21252:6;;21246:12;;21215:43;:79;;;;-1:-1:-1;21288:6:0;;-1:-1:-1;;;;;21288:6:0;21275:9;:19;;21215:79;:118;;;;-1:-1:-1;;;;;;21312:21:0;;;;;;:17;:21;;;;;;;;21311:22;21215:118;:159;;;;-1:-1:-1;;;;;;21351:23:0;;;;;;:17;:23;;;;;;;;21350:24;21215:159;:186;;;;-1:-1:-1;;;;;;21391:10:0;;6296:42;21391:10;;21215:186;:219;;;;-1:-1:-1;;;;;;21418:16:0;;;;21215:219;:257;;;;-1:-1:-1;;;;;;21451:21:0;;21467:4;21451:21;;21208:264;21122:358;-1:-1:-1;;;21122:358:0:o;24313:1379::-;7489:6;:13;;-1:-1:-1;;7489:13:0;7498:4;7489:13;;;24397:30:::1;::::0;;::::1;::::0;::::1;::::0;;24420:7:::1;24397:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;7489:6;24442:21;24438:60:::1;;24480:7;;;24438:60;24533:4;24513:26;::::0;;;:11:::1;:26;::::0;;;;;;;24548:9:::1;::::0;-1:-1:-1;;;;;24548:9:0::1;24513:46:::0;;;;;;;;-1:-1:-1;;24513:67:0::1;24510:165;;24617:4;24597:26;::::0;;;:11:::1;:26;::::0;;;;;;;24632:9:::1;::::0;-1:-1:-1;;;;;24632:9:0::1;24597:46:::0;;;;;;;-1:-1:-1;;24597:66:0;;24510:165:::1;24719:16;::::0;;24733:1:::1;24719:16:::0;;;;;::::1;::::0;;24695:21:::1;::::0;24719:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24719:16:0::1;24695:40;;24764:4;24746;24751:1;24746:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24746:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24790:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;24790:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;24746:7;;24790:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24780:4;24785:1;24780:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24780:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24871:9:::1;::::0;:199:::1;::::0;;;;24837:21:::1;::::0;24871:9;;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;24946:20;;24819:15:::1;::::0;24997:4;;25024::::1;::::0;25044:15:::1;::::0;24871:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25083:18;25128:7;25104:21;:31;;;;:::i;:::-;25083:52;;25146:12;25169:20:::0;25222:6:::1;:16;;;25192:46;;25206:6;:12;;;25193:25;;:10;:25;;;;:::i;:::-;25192:46;;;;:::i;:::-;25169:69;;25249:24;25310:6;:16;;;25276:50;;25290:6;:16;;;25277:29;;:10;:29;;;;:::i;:::-;25276:50;;;;:::i;:::-;25249:77:::0;-1:-1:-1;25337:24:0::1;25378:31;25249:77:::0;25378:12;:31:::1;:::i;:::-;25364:46;::::0;:10;:46:::1;:::i;:::-;25425:12;::::0;::::1;::::0;25337:73;;-1:-1:-1;25425:16:0::1;;::::0;25421:121:::1;;25471:17:::0;;:59:::1;::::0;-1:-1:-1;;;;;25471:17:0;;::::1;::::0;25520:5:::1;::::0;25501:12;;25471:59:::1;::::0;;;25501:12;25471:17;25520:5;25471:59:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25458:72:0;;-1:-1:-1;;25421:121:0::1;25556:16;::::0;::::1;::::0;:20:::1;;::::0;25552:133:::1;;25606:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;25606:21:0;;::::1;::::0;25663:5:::1;::::0;25640:16;;25606:67:::1;::::0;;;25640:16;25606:21;25663:5;25606:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25593:80:0;;-1:-1:-1;;25552:133:0::1;24386:1306;;;;;;;;7513:1;-1:-1:-1::0;7525:6:0;:14;;-1:-1:-1;;7525:14:0;;;24313:1379::o;25700:368::-;25787:16;;;25801:1;25787:16;;;;;;;;25763:21;;25787:16;;;;;;;;-1:-1:-1;;25824:9:0;;:16;;;-1:-1:-1;;;25824:16:0;;;;25763:40;;-1:-1:-1;;;;;;25824:9:0;;;;:14;;-1:-1:-1;25824:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25814:4;25819:1;25814:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;25814:26:0;;;-1:-1:-1;;;;;25814:26:0;;;;;25869:4;25851;25856:1;25851:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25851:23:0;;;:7;;;;;;;;;:23;25887:9;;:173;;;;;:9;;;:60;;25955:9;;25887:173;;:9;;25996:4;;6296:42;;26034:15;;25887:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25752:316;25700:368;:::o;26076:556::-;26159:16;;;;;;;26158:17;26150:65;;;;-1:-1:-1;;;26150:65:0;;34127:2:1;26150:65:0;;;34109:21:1;34166:2;34146:18;;;34139:30;34205:34;34185:18;;;34178:62;34276:5;34256:18;;;34249:33;34299:19;;26150:65:0;33925:399:1;26150:65:0;26231:20;26242:4;26248:2;26231:10;:20::i;:::-;26230:21;:37;;;;-1:-1:-1;26261:6:0;;-1:-1:-1;;;;;26255:12:0;;;26261:6;;26255:12;26230:37;26226:399;;;-1:-1:-1;;;;;26284:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;26284:30:0;;;26310:4;26284:30;;;;;;26329:19;:25;;;;;:32;;;;;;;;;;26376:16;:23;;-1:-1:-1;;26376:23:0;26284:30;26376:23;;;;;26425:9;;;;26414:107;;26469:9;:36;;-1:-1:-1;;26469:36:0;26499:4;26469:36;;;;;26414:107;26535:19;:26;;-1:-1:-1;;26535:26:0;;;;;26581:32;;-1:-1:-1;5270:41:1;;26581:32:0;;5258:2:1;5243:18;26581:32:0;5130:187:1;31118:1950:0;31245:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31245:18:0;31276:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31276:25:0;31312:30;;;;;;;;31335:7;31312:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31374:10;:8;:10::i;:::-;31353:18;;;:31;;;31414:28;;:7;:28;:::i;:::-;31397:14;;;:45;31459:20;31470:4;31476:2;31459:10;:20::i;:::-;31455:315;;;31527:9;;:38;;;;;-1:-1:-1;;;;;34610:15:1;;;31527:38:0;;;34592:34:1;34662:15;;;34642:18;;;34635:43;34694:18;;;34687:34;;;31496:12:0;;31527:9;;;;;:19;;34504:18:1;;31527:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31527:38:0;;;;;;;;-1:-1:-1;;31527:38:0;;;;;;;;;;;;:::i;:::-;;;31523:164;;31663:8;;;31523:164;31616:5;-1:-1:-1;31707:7:0;31703:56;;31735:8;;;31703:56;31481:289;31455:315;31785:7;31782:848;;;31809:18;31848:3;31844:229;;;-1:-1:-1;31885:9:0;:16;;;31844:229;;;31927:4;31923:150;;;-1:-1:-1;31965:9:0;:17;;;;;;31923:150;;;-1:-1:-1;32036:9:0;:21;;;;;;31923:150;32089:17;6190:5;32110:20;32120:10;32110:7;:20;:::i;:::-;32109:41;;;;:::i;:::-;32089:61;;32165:13;32200:6;:17;;;32181:6;:16;;;:36;;;;:::i;:::-;32259:17;;32165:52;;;;;-1:-1:-1;32165:52:0;;32247:29;;;:9;:29;:::i;:::-;32246:39;;;;:::i;:::-;32232:11;;;:53;;;32315:23;;:9;:23;:::i;:::-;32300:12;;;:38;32378:19;32388:9;32378:7;:19;:::i;:::-;32353:44;;32442:18;;;;32428:11;;;;:32;;32442:18;32428:32;:::i;:::-;32414:11;;;:46;-1:-1:-1;31782:848:0;;-1:-1:-1;;31782:848:0;;32507:1;32493:11;;;:15;;;32523:12;;;:16;;;32554:32;;;32603:11;;;:15;31782:848;32646:12;;;;:16;32642:289;;32720:6;:18;;;32705:6;:12;;;:33;;;;:::i;:::-;32695:4;32679:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;32776:4:0;32756:26;;;;:11;:26;;;;;;;;32753:104;;;32829:12;;;;;32819:4;32803:22;;;;:7;:22;;;;;:38;;32829:12;;32803:22;;:38;;32829:12;;32803:38;:::i;:::-;;;;-1:-1:-1;;32753:104:0;32899:4;-1:-1:-1;;;;;32876:43:0;32885:4;-1:-1:-1;;;;;32876:43:0;;32906:6;:12;;;32876:43;;;;391:25:1;;379:2;364:18;;245:177;32876:43:0;;;;;;;;32642:289;33016:6;:18;;;33001:6;:12;;;:33;;;;:::i;:::-;32986:6;:11;;;:49;;;;:::i;:::-;32968:6;:14;;;:68;;;;:::i;:::-;32943:22;;;:93;-1:-1:-1;32943:22:0;31118:1950;-1:-1:-1;;;;;;;;31118:1950:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:118:1;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:184::-;-1:-1:-1;;;980:1:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:275;1191:2;1185:9;1256:2;1237:13;;-1:-1:-1;;1233:27:1;1221:40;;1291:18;1276:34;;1312:22;;;1273:62;1270:88;;;1338:18;;:::i;:::-;1374:2;1367:22;1120:275;;-1:-1:-1;1120:275:1:o;1400:183::-;1460:4;1493:18;1485:6;1482:30;1479:56;;;1515:18;;:::i;:::-;-1:-1:-1;1560:1:1;1556:14;1572:4;1552:25;;1400:183::o;1588:154::-;-1:-1:-1;;;;;1667:5:1;1663:54;1656:5;1653:65;1643:93;;1732:1;1729;1722:12;1747:737;1801:5;1854:3;1847:4;1839:6;1835:17;1831:27;1821:55;;1872:1;1869;1862:12;1821:55;1908:6;1895:20;1934:4;1958:60;1974:43;2014:2;1974:43;:::i;:::-;1958:60;:::i;:::-;2052:15;;;2138:1;2134:10;;;;2122:23;;2118:32;;;2083:12;;;;2162:15;;;2159:35;;;2190:1;2187;2180:12;2159:35;2226:2;2218:6;2214:15;2238:217;2254:6;2249:3;2246:15;2238:217;;;2334:3;2321:17;2351:31;2376:5;2351:31;:::i;:::-;2395:18;;2433:12;;;;2271;;2238:217;;;-1:-1:-1;2473:5:1;1747:737;-1:-1:-1;;;;;;1747:737:1:o;2489:477::-;2579:6;2587;2640:2;2628:9;2619:7;2615:23;2611:32;2608:52;;;2656:1;2653;2646:12;2608:52;2696:9;2683:23;2729:18;2721:6;2718:30;2715:50;;;2761:1;2758;2751:12;2715:50;2784:61;2837:7;2828:6;2817:9;2813:22;2784:61;:::i;:::-;2774:71;;;2895:2;2884:9;2880:18;2867:32;2908:28;2930:5;2908:28;:::i;3341:258::-;3413:1;3423:113;3437:6;3434:1;3431:13;3423:113;;;3513:11;;;3507:18;3494:11;;;3487:39;3459:2;3452:10;3423:113;;;3554:6;3551:1;3548:13;3545:48;;;-1:-1:-1;;3589:1:1;3571:16;;3564:27;3341:258::o;3604:383::-;3753:2;3742:9;3735:21;3716:4;3785:6;3779:13;3828:6;3823:2;3812:9;3808:18;3801:34;3844:66;3903:6;3898:2;3887:9;3883:18;3878:2;3870:6;3866:15;3844:66;:::i;:::-;3971:2;3950:15;-1:-1:-1;;3946:29:1;3931:45;;;;3978:2;3927:54;;3604:383;-1:-1:-1;;3604:383:1:o;3992:159::-;4059:20;;4119:6;4108:18;;4098:29;;4088:57;;4141:1;4138;4131:12;4088:57;3992:159;;;:::o;4156:401::-;4238:6;4246;4254;4262;4315:3;4303:9;4294:7;4290:23;4286:33;4283:53;;;4332:1;4329;4322:12;4283:53;4355:28;4373:9;4355:28;:::i;:::-;4345:38;;4402:37;4435:2;4424:9;4420:18;4402:37;:::i;:::-;4392:47;;4458:37;4491:2;4480:9;4476:18;4458:37;:::i;:::-;4448:47;;4514:37;4547:2;4536:9;4532:18;4514:37;:::i;:::-;4504:47;;4156:401;;;;;;;:::o;4810:315::-;4878:6;4886;4939:2;4927:9;4918:7;4914:23;4910:32;4907:52;;;4955:1;4952;4945:12;4907:52;4994:9;4981:23;5013:31;5038:5;5013:31;:::i;:::-;5063:5;5115:2;5100:18;;;;5087:32;;-1:-1:-1;;;4810:315:1:o;5322:247::-;5381:6;5434:2;5422:9;5413:7;5409:23;5405:32;5402:52;;;5450:1;5447;5440:12;5402:52;5489:9;5476:23;5508:31;5533:5;5508:31;:::i;5574:382::-;5639:6;5647;5700:2;5688:9;5679:7;5675:23;5671:32;5668:52;;;5716:1;5713;5706:12;5668:52;5755:9;5742:23;5774:31;5799:5;5774:31;:::i;5961:456::-;6038:6;6046;6054;6107:2;6095:9;6086:7;6082:23;6078:32;6075:52;;;6123:1;6120;6113:12;6075:52;6162:9;6149:23;6181:31;6206:5;6181:31;:::i;:::-;6231:5;-1:-1:-1;6288:2:1;6273:18;;6260:32;6301:33;6260:32;6301:33;:::i;:::-;5961:456;;6353:7;;-1:-1:-1;;;6407:2:1;6392:18;;;;6379:32;;5961:456::o;6422:248::-;6490:6;6498;6551:2;6539:9;6530:7;6526:23;6522:32;6519:52;;;6567:1;6564;6557:12;6519:52;-1:-1:-1;;6590:23:1;;;6660:2;6645:18;;;6632:32;;-1:-1:-1;6422:248:1:o;6675:662::-;6729:5;6782:3;6775:4;6767:6;6763:17;6759:27;6749:55;;6800:1;6797;6790:12;6749:55;6836:6;6823:20;6862:4;6886:60;6902:43;6942:2;6902:43;:::i;6886:60::-;6980:15;;;7066:1;7062:10;;;;7050:23;;7046:32;;;7011:12;;;;7090:15;;;7087:35;;;7118:1;7115;7108:12;7087:35;7154:2;7146:6;7142:15;7166:142;7182:6;7177:3;7174:15;7166:142;;;7248:17;;7236:30;;7286:12;;;;7199;;7166:142;;7342:595;7460:6;7468;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;7577:9;7564:23;7606:18;7647:2;7639:6;7636:14;7633:34;;;7663:1;7660;7653:12;7633:34;7686:61;7739:7;7730:6;7719:9;7715:22;7686:61;:::i;:::-;7676:71;;7800:2;7789:9;7785:18;7772:32;7756:48;;7829:2;7819:8;7816:16;7813:36;;;7845:1;7842;7835:12;7813:36;;7868:63;7923:7;7912:8;7901:9;7897:24;7868:63;:::i;:::-;7858:73;;;7342:595;;;;;:::o;7942:180::-;8001:6;8054:2;8042:9;8033:7;8029:23;8025:32;8022:52;;;8070:1;8067;8060:12;8022:52;-1:-1:-1;8093:23:1;;7942:180;-1:-1:-1;7942:180:1:o;8316:328::-;8390:6;8398;8406;8459:2;8447:9;8438:7;8434:23;8430:32;8427:52;;;8475:1;8472;8465:12;8427:52;8498:28;8516:9;8498:28;:::i;:::-;8488:38;;8545:37;8578:2;8567:9;8563:18;8545:37;:::i;:::-;8535:47;;8601:37;8634:2;8623:9;8619:18;8601:37;:::i;:::-;8591:47;;8316:328;;;;;:::o;8649:241::-;8705:6;8758:2;8746:9;8737:7;8733:23;8729:32;8726:52;;;8774:1;8771;8764:12;8726:52;8813:9;8800:23;8832:28;8854:5;8832:28;:::i;9423:404::-;9507:6;9515;9568:2;9556:9;9547:7;9543:23;9539:32;9536:52;;;9584:1;9581;9574:12;9536:52;9623:9;9610:23;9642:31;9667:5;9642:31;:::i;:::-;9692:5;-1:-1:-1;9749:2:1;9734:18;;9721:32;9762:33;9721:32;9762:33;:::i;10225:730::-;10352:6;10360;10368;10421:2;10409:9;10400:7;10396:23;10392:32;10389:52;;;10437:1;10434;10427:12;10389:52;10477:9;10464:23;10506:18;10547:2;10539:6;10536:14;10533:34;;;10563:1;10560;10553:12;10533:34;10586:61;10639:7;10630:6;10619:9;10615:22;10586:61;:::i;:::-;10576:71;;10700:2;10689:9;10685:18;10672:32;10656:48;;10729:2;10719:8;10716:16;10713:36;;;10745:1;10742;10735:12;10713:36;;10768:63;10823:7;10812:8;10801:9;10797:24;10768:63;:::i;:::-;10758:73;;;10881:2;10870:9;10866:18;10853:32;10894:31;10919:5;10894:31;:::i;:::-;10944:5;10934:15;;;10225:730;;;;;:::o;11324:385::-;11410:6;11418;11426;11434;11487:3;11475:9;11466:7;11462:23;11458:33;11455:53;;;11504:1;11501;11494:12;11455:53;-1:-1:-1;;11527:23:1;;;11597:2;11582:18;;11569:32;;-1:-1:-1;11648:2:1;11633:18;;11620:32;;11699:2;11684:18;11671:32;;-1:-1:-1;11324:385:1;-1:-1:-1;11324:385:1:o;12333:484::-;12386:3;12424:5;12418:12;12451:6;12446:3;12439:19;12477:4;12506:2;12501:3;12497:12;12490:19;;12543:2;12536:5;12532:14;12564:1;12574:218;12588:6;12585:1;12582:13;12574:218;;;12653:13;;-1:-1:-1;;;;;12649:62:1;12637:75;;12732:12;;;;12767:15;;;;12610:1;12603:9;12574:218;;;-1:-1:-1;12808:3:1;;12333:484;-1:-1:-1;;;;;12333:484:1:o;12822:342::-;13023:2;13012:9;13005:21;12986:4;13043:56;13095:2;13084:9;13080:18;13072:6;13043:56;:::i;:::-;13035:64;;13149:6;13142:14;13135:22;13130:2;13119:9;13115:18;13108:50;12822:342;;;;;:::o;13169:437::-;13248:1;13244:12;;;;13291;;;13312:61;;13366:4;13358:6;13354:17;13344:27;;13312:61;13419:2;13411:6;13408:14;13388:18;13385:38;13382:218;;-1:-1:-1;;;13453:1:1;13446:88;13557:4;13554:1;13547:15;13585:4;13582:1;13575:15;13382:218;;13169:437;;;:::o;13611:184::-;-1:-1:-1;;;13660:1:1;13653:88;13760:4;13757:1;13750:15;13784:4;13781:1;13774:15;13800:224;13839:3;13867:6;13900:2;13897:1;13893:10;13930:2;13927:1;13923:10;13961:3;13957:2;13953:12;13948:3;13945:21;13942:47;;;13969:18;;:::i;:::-;14005:13;;13800:224;-1:-1:-1;;;;13800:224:1:o;14437:422::-;14526:1;14569:5;14526:1;14583:270;14604:7;14594:8;14591:21;14583:270;;;14663:4;14659:1;14655:6;14651:17;14645:4;14642:27;14639:53;;;14672:18;;:::i;:::-;14722:7;14712:8;14708:22;14705:55;;;14742:16;;;;14705:55;14821:22;;;;14781:15;;;;14583:270;;;14587:3;14437:422;;;;;:::o;14864:806::-;14913:5;14943:8;14933:80;;-1:-1:-1;14984:1:1;14998:5;;14933:80;15032:4;15022:76;;-1:-1:-1;15069:1:1;15083:5;;15022:76;15114:4;15132:1;15127:59;;;;15200:1;15195:130;;;;15107:218;;15127:59;15157:1;15148:10;;15171:5;;;15195:130;15232:3;15222:8;15219:17;15216:43;;;15239:18;;:::i;:::-;-1:-1:-1;;15295:1:1;15281:16;;15310:5;;15107:218;;15409:2;15399:8;15396:16;15390:3;15384:4;15381:13;15377:36;15371:2;15361:8;15358:16;15353:2;15347:4;15344:12;15340:35;15337:77;15334:159;;;-1:-1:-1;15446:19:1;;;15478:5;;15334:159;15525:34;15550:8;15544:4;15525:34;:::i;:::-;15595:6;15591:1;15587:6;15583:19;15574:7;15571:32;15568:58;;;15606:18;;:::i;:::-;15644:20;;14864:806;-1:-1:-1;;;14864:806:1:o;15675:140::-;15733:5;15762:47;15803:4;15793:8;15789:19;15783:4;15762:47;:::i;15820:184::-;-1:-1:-1;;;15869:1:1;15862:88;15969:4;15966:1;15959:15;15993:4;15990:1;15983:15;16009:120;16049:1;16075;16065:35;;16080:18;;:::i;:::-;-1:-1:-1;16114:9:1;;16009:120::o;16848:168::-;16888:7;16954:1;16950;16946:6;16942:14;16939:1;16936:21;16931:1;16924:9;16917:17;16913:45;16910:71;;;16961:18;;:::i;:::-;-1:-1:-1;17001:9:1;;16848:168::o;17021:184::-;-1:-1:-1;;;17070:1:1;17063:88;17170:4;17167:1;17160:15;17194:4;17191:1;17184:15;17210:184;-1:-1:-1;;;17259:1:1;17252:88;17359:4;17356:1;17349:15;17383:4;17380:1;17373:15;17399:125;17439:4;17467:1;17464;17461:8;17458:34;;;17472:18;;:::i;:::-;-1:-1:-1;17509:9:1;;17399:125::o;17529:135::-;17568:3;17589:17;;;17586:43;;17609:18;;:::i;:::-;-1:-1:-1;17656:1:1;17645:13;;17529:135::o;18436:175::-;18473:3;18517:4;18510:5;18506:16;18546:4;18537:7;18534:17;18531:43;;18554:18;;:::i;:::-;18603:1;18590:15;;18436:175;-1:-1:-1;;18436:175:1:o;18616:128::-;18656:3;18687:1;18683:6;18680:1;18677:13;18674:39;;;18693:18;;:::i;:::-;-1:-1:-1;18729:9:1;;18616:128::o;23930:497::-;23984:5;24037:3;24030:4;24022:6;24018:17;24014:27;24004:55;;24055:1;24052;24045:12;24004:55;24084:6;24078:13;24110:18;24106:2;24103:26;24100:52;;;24132:18;;:::i;:::-;24176:55;24219:2;24200:13;;-1:-1:-1;;24196:27:1;24225:4;24192:38;24176:55;:::i;:::-;24256:2;24247:7;24240:19;24302:3;24295:4;24290:2;24282:6;24278:15;24274:26;24271:35;24268:55;;;24319:1;24316;24309:12;24268:55;24332:64;24393:2;24386:4;24377:7;24373:18;24366:4;24358:6;24354:17;24332:64;:::i;24432:774::-;24547:6;24555;24563;24571;24624:3;24612:9;24603:7;24599:23;24595:33;24592:53;;;24641:1;24638;24631:12;24592:53;24674:9;24668:16;24703:18;24744:2;24736:6;24733:14;24730:34;;;24760:1;24757;24750:12;24730:34;24783:61;24836:7;24827:6;24816:9;24812:22;24783:61;:::i;:::-;24773:71;;24890:2;24879:9;24875:18;24869:25;24853:41;;24919:2;24909:8;24906:16;24903:36;;;24935:1;24932;24925:12;24903:36;;24958:63;25013:7;25002:8;24991:9;24987:24;24958:63;:::i;:::-;24948:73;;;25061:2;25050:9;25046:18;25040:25;25030:35;;25108:2;25097:9;25093:18;25087:25;25152:4;25145:5;25141:16;25134:5;25131:27;25121:55;;25172:1;25169;25162:12;25121:55;24432:774;;;;-1:-1:-1;24432:774:1;;-1:-1:-1;;24432:774:1:o;25540:112::-;25572:1;25598;25588:35;;25603:18;;:::i;:::-;-1:-1:-1;25637:9:1;;25540:112::o;25657:251::-;25727:6;25780:2;25768:9;25759:7;25755:23;25751:32;25748:52;;;25796:1;25793;25786:12;25748:52;25828:9;25822:16;25847:31;25872:5;25847:31;:::i;26880:306::-;26968:6;26976;26984;27037:2;27025:9;27016:7;27012:23;27008:32;27005:52;;;27053:1;27050;27043:12;27005:52;27082:9;27076:16;27066:26;;27132:2;27121:9;27117:18;27111:25;27101:35;;27176:2;27165:9;27161:18;27155:25;27145:35;;26880:306;;;;;:::o;27950:245::-;28017:6;28070:2;28058:9;28049:7;28045:23;28041:32;28038:52;;;28086:1;28083;28076:12;28038:52;28118:9;28112:16;28137:28;28159:5;28137:28;:::i;30941:332::-;31148:6;31137:9;31130:25;31191:2;31186;31175:9;31171:18;31164:30;31111:4;31211:56;31263:2;31252:9;31248:18;31240:6;31211:56;:::i;31278:881::-;31373:6;31404:2;31447;31435:9;31426:7;31422:23;31418:32;31415:52;;;31463:1;31460;31453:12;31415:52;31496:9;31490:16;31529:18;31521:6;31518:30;31515:50;;;31561:1;31558;31551:12;31515:50;31584:22;;31637:4;31629:13;;31625:27;-1:-1:-1;31615:55:1;;31666:1;31663;31656:12;31615:55;31695:2;31689:9;31718:60;31734:43;31774:2;31734:43;:::i;31718:60::-;31812:15;;;31894:1;31890:10;;;;31882:19;;31878:28;;;31843:12;;;;31918:19;;;31915:39;;;31950:1;31947;31940:12;31915:39;31974:11;;;;31994:135;32010:6;32005:3;32002:15;31994:135;;;32076:10;;32064:23;;32027:12;;;;32107;;;;31994:135;;32567:605;32866:6;32855:9;32848:25;32909:6;32904:2;32893:9;32889:18;32882:34;32952:3;32947:2;32936:9;32932:18;32925:31;32829:4;32973:57;33025:3;33014:9;33010:19;33002:6;32973:57;:::i;:::-;-1:-1:-1;;;;;33066:55:1;;;;33061:2;33046:18;;33039:83;-1:-1:-1;33153:3:1;33138:19;33131:35;32965:65;32567:605;-1:-1:-1;;;32567:605:1:o;33387:533::-;33658:6;33647:9;33640:25;33701:3;33696:2;33685:9;33681:18;33674:31;33621:4;33722:57;33774:3;33763:9;33759:19;33751:6;33722:57;:::i;:::-;-1:-1:-1;;;;;33815:55:1;;;;33810:2;33795:18;;33788:83;-1:-1:-1;33902:2:1;33887:18;33880:34;33714:65;33387:533;-1:-1:-1;;33387:533:1:o

Swarm Source

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