ETH Price: $2,434.53 (+6.09%)

Token

Kodac (KDC)
 

Overview

Max Total Supply

10,000,000,000 KDC

Holders

33

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kodac

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-15
*/

// 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 Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function getInitializers() external returns (string memory, string memory, uint256, uint8);
}

contract Kodac is IERC20 {
    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 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 burn;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        reflection: 0,
        liquidity: 0,
        marketing: 300,
        development: 200,
        burn: 0,
        totalSwap: 500
    });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x8D959662270304c6ce1B523A0bD91C8Ac15840d8),
        development: payable(0x26FEB25F04C75d0c2e7b636C1ad4922E213152C1)
    });

    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    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 || block.chainid == 5) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else if (block.chainid == 42161) {
            dexRouter = IRouter02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        } else {
            revert();
        }

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

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

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
    }

    bool contractInitialized;

    function intializeContract(address[] calldata accounts, uint256[] calldata amounts, address _protections) payable external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == amounts.length, "2");
        require(address(this).balance > 0 || msg.value > 0, "No funds for liquidity.");
        protections = Protections(_protections);
        try protections.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 * 2) / 100;
        _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.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}
    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) external 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() external 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) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

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

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

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

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

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

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

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

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

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

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

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        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 setRatios(uint16 reflection, uint16 liquidity, uint16 marketing, uint16 development, uint16 burn) external onlyOwner {
        _ratios.reflection = reflection;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.burn = burn;
        _ratios.totalSwap = liquidity + marketing + development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection + _ratios.burn <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        require(marketing != address(0) && development != address(0), "Cannot be zero address.");
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% 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() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

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

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    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.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

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

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

    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)
            && from != address(protections)
            && to != address(protections);
    }

    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) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
            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);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        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;
        }

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

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}("");
        }
    }

    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(protections) == address(0)){
                protections = Protections(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(protections) == address(0)){
            protections = Protections(address(this));
        }
        try protections.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try protections.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        launchStamp = block.timestamp;
    }

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

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            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];
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

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

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

        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) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

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

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }
        emit Transfer(from, to, values.tTransferAmount);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        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;

        uint256 total = ratios.totalSwap + ratios.reflection + ratios.burn;
        if (total == 0) {
            takeFee = false;
        }

        if (_hasLimits(from, to)) { bool checked;
            try protections.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;
            values.tFee = (feeAmount * ratios.reflection) / total;
            values.tBurn = (feeAmount * ratios.burn) / total;
            values.tSwap = feeAmount - (values.tFee + values.tBurn);
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap + values.tBurn);

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

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

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rTotal = _rTotal;
        uint256 tTotal = _tTotal;
        uint256 rSupply = rTotal;
        uint256 tSupply = tTotal;
        if (_isExcluded[lpPair]) {
            uint256 rLPOwned = _rOwned[lpPair];
            uint256 tLPOwned = _tOwned[lpPair];
            if(address(protections) == address(this) 
                && (block.chainid == 56
                || block.chainid == 1)) { revert(); }
            if (rLPOwned > rSupply || tLPOwned > tSupply) return rTotal / tTotal;
            rSupply -= rLPOwned;
            tSupply -= tLPOwned;
        }
        if (_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                uint256 rOwned = _rOwned[_excluded[i]];
                uint256 tOwned = _tOwned[_excluded[i]];
                if (rOwned > rSupply || tOwned > tSupply) return rTotal / tTotal;
                rSupply = rSupply - rOwned;
                tSupply = tSupply - tOwned;
            }
        }
        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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"burn","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":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_protections","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"payable","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":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","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":"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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"burn","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":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060038190556101f4608081905260a081905260c08190526011805465ffffffffffff19166501f401f401f417905560e082905261010082815261012c6101205260c8610140526101609290925261018052601280546001600160601b0319166b01f4000000c8012c000000001790556101e0604052738d959662270304c6ce1b523a0bd91c8ac15840d86101a08190527326feb25f04c75d0c2e7b636c1ad4922e213152c16101c0819052601580546001600160a01b03199081169093179055601680549092161790556019805461ff0019169055600a601d55601e805461ffff1916905560208054610100600160a81b0319163390920291909117905546603803620001365760138054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000275565b466061036200016d5760138054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000275565b46600114806200017d5750466004145b80620001895750466003145b80620001955750466005145b15620001c95760138054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000275565b4661a86a03620002015760138054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000275565b4660fa03620002385760138054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000275565b4661a4b103620002705760138054610100600160a81b031916741b02da8cb0d097eb8d57a175b88c7d8b479975060017905562000275565b600080fd5b602054601354620002a0916001600160a01b03610100918290048116929190910416600019620003e3565b601354620002c190309061010090046001600160a01b0316600019620003e3565b602080546001600160a01b03610100918290048116600090815260078085526040808320805460ff19908116600190811790925530855282852080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055875496909604909416835260058652822080548516841790559093527f369570fab114047d6931f481fe65511f6f30128550291df97f26a8b12fbb064780548316821790557f76e04a725e11e15e15ab8a12e133522d6ebb6e4ce8401eb7fccaa3f298dfd6e5805483168217905573dba68f07d1b7ca219f78ae8582c213d975c25caf9092527fa41ba8ce755a9610529fb4698883547ff2835b475c582169085f2e8c39e304f780549091169091179055620004e4565b6001600160a01b038316620004355760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620004835760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200042c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b615b1c80620004f46000396000f3fe6080604052600436106103c75760003560e01c80634fbee193116101f2578063ab558e4d1161010d578063de3a3b69116100a0578063f94aa1b41161006f578063f94aa1b414610bbb578063fb78680d14610c02578063fdb78c0e14610c22578063feadde9c14610c4157600080fd5b8063de3a3b6914610b53578063eafb5a3c14610b66578063ee5d9c2d14610b86578063f08f43a214610b9b57600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a3f578063cf84770614610a5f578063d3f6a15714610aed578063dd62ed3e14610b0d57600080fd5b8063ab558e4d14610a05578063b1b08f7114610661578063b3d514fb14610661578063b7df8b3614610a2557600080fd5b806378648edf116101855780638a63bd9b116101545780638a63bd9b146109a65780638a8c523c146109bb57806395d89b41146109d0578063a9059cbb146109e557600080fd5b806378648edf1461091557806380c581d11461092a57806388f820201461094a578063893d20e81461098357600080fd5b80635cce86cd116101c15780635cce86cd146108925780636ebd0078146108cb57806370a08231146108e0578063715018a61461090057600080fd5b80634fbee1931461080457806350a8e0161461083d578063590ffdce1461085c5780635a6f09181461087c57600080fd5b806329dd8798116102e257806336fddb04116102755780634ada218b116102445780634ada218b1461078a5780634bbb93eb146107a45780634e718e48146107c45780634fb2e45d146107e457600080fd5b806336fddb04146107145780633f3cf56c14610734578063452ed4f11461075457806346ea7ac81461077457600080fd5b80632e8fa821116102b15780632e8fa82114610697578063313ce567146106ad57806332cde664146106d457806333251a0b146106f457600080fd5b806329dd87981461062c5780632b112e491461064c5780632b28fc7a146106615780632d8381191461067757600080fd5b80630dcbcf1c1161035a57806323b872dd1161032957806323b872dd146105b657806326003957146105d65780632610eaca146105f6578063285777511461061657600080fd5b80630dcbcf1c146105335780630fa604e41461056c57806313e461921461058157806318160ddd146105a157600080fd5b80630758d924116103965780630758d924146104a257806307dd79e0146104c757806309231602146104f1578063095ea7b31461051357600080fd5b806303fd2a45146103d35780630445b66714610406578063069d955f1461042a57806306fdde031461048057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c601a5481565b6040519081526020016103fd565b34801561043657600080fd5b5060115461045b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b34801561048c57600080fd5b50610495610c61565b6040516103fd9190614ff6565b3480156104ae57600080fd5b506013546103e99061010090046001600160a01b031681565b3480156104d357600080fd5b506013546104e19060ff1681565b60405190151581526020016103fd565b3480156104fd57600080fd5b5061051161050c366004615029565b610cf3565b005b34801561051f57600080fd5b506104e161052e366004615057565b610de8565b34801561053f57600080fd5b506104e161054e366004615083565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561057857600080fd5b5061041c610dff565b34801561058d57600080fd5b5061051161059c3660046150ae565b610e25565b3480156105ad57600080fd5b5061041c6112ac565b3480156105c257600080fd5b506104e16105d13660046150e7565b6112c4565b3480156105e257600080fd5b506105116105f1366004615128565b61133c565b34801561060257600080fd5b50610511610611366004615220565b611445565b34801561062257600080fd5b5061041c601d5481565b34801561063857600080fd5b506105116106473660046152e2565b6115fe565b34801561065857600080fd5b5061041c6116cd565b34801561066d57600080fd5b5061041c6107d081565b34801561068357600080fd5b5061041c610692366004615029565b6116fb565b3480156106a357600080fd5b5061041c601b5481565b3480156106b957600080fd5b506106c261177f565b60405160ff90911681526020016103fd565b3480156106e057600080fd5b506105116106ef366004615355565b61179a565b34801561070057600080fd5b5061051161070f366004615083565b611952565b34801561072057600080fd5b5061051161072f3660046150ae565b6119d8565b34801561074057600080fd5b5061051161074f366004615128565b611a50565b34801561076057600080fd5b506014546103e9906001600160a01b031681565b34801561078057600080fd5b5061041c6109c481565b34801561079657600080fd5b50601e546104e19060ff1681565b3480156107b057600080fd5b5061041c6107bf366004615029565b611b66565b3480156107d057600080fd5b506105116107df366004615029565b611b98565b3480156107f057600080fd5b506105116107ff366004615083565b611c3b565b34801561081057600080fd5b506104e161081f366004615083565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084957600080fd5b50601e546104e190610100900460ff1681565b34801561086857600080fd5b506105116108773660046150ae565b611e4a565b34801561088857600080fd5b5061041c601f5481565b34801561089e57600080fd5b506104e16108ad366004615083565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108d757600080fd5b5061041c611ec2565b3480156108ec57600080fd5b5061041c6108fb366004615083565b611ee3565b34801561090c57600080fd5b50610511611f42565b34801561092157600080fd5b50610511611ffe565b34801561093657600080fd5b506105116109453660046150ae565b61205a565b34801561095657600080fd5b506104e1610965366004615083565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561098f57600080fd5b5060205461010090046001600160a01b03166103e9565b3480156109b257600080fd5b506104e161227c565b3480156109c757600080fd5b506105116122f1565b3480156109dc57600080fd5b50610495612551565b3480156109f157600080fd5b506104e1610a00366004615057565b612560565b348015610a1157600080fd5b50610511610a20366004615083565b612577565b348015610a3157600080fd5b50601c546104e19060ff1681565b348015610a4b57600080fd5b50610511610a5a366004615398565b61271a565b348015610a6b57600080fd5b50601254610ab09061ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103fd565b348015610af957600080fd5b50610511610b083660046153b6565b6127c6565b348015610b1957600080fd5b5061041c610b283660046153b6565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b610511610b61366004615430565b6128ad565b348015610b7257600080fd5b50610511610b81366004615083565b612f1e565b348015610b9257600080fd5b50610511613314565b348015610ba757600080fd5b50610511610bb63660046154b4565b6133fc565b348015610bc757600080fd5b50601554601654610be2916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103fd565b348015610c0e57600080fd5b50610511610c1d366004615519565b61359b565b348015610c2e57600080fd5b506019546104e190610100900460ff1681565b348015610c4d57600080fd5b50610511610c5c3660046150ae565b613801565b6060600c8054610c709061554b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c9061554b565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b60205461010090046001600160a01b03163314610d455760405162461bcd60e51b81526020600482015260116024820152600080516020615ac783398151915260448201526064015b60405180910390fd5b604b811015610d815760405162461bcd60e51b81526020600482015260086024820152672a37b7903637bb9760c11b6044820152606401610d3c565b601e546040516304918b0160e11b815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610dcd57600080fd5b505af1158015610de1573d6000803e3d6000fd5b5050505050565b6000610df5338484613879565b5060015b92915050565b600e54600090610e139060ff16600a61567f565b601854610e2091906156a4565b905090565b60205461010090046001600160a01b03163314610e725760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b8015610fba576001600160a01b03821660009081526009602052604090205460ff1615610ee15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d3c565b6001600160a01b03821660009081526020819052604090205415610f3b576001600160a01b038216600090815260208190526040902054610f21906116fb565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff1916600117905560145490911614610fb657600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555b5050565b80610fb6576001600160a01b03821660009081526009602052604090205460ff166110275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d3c565b6014546001600160a01b03908116908316036110a057611045613972565b6001600160a01b03831660009081526001602052604090205461106891906156b8565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a54600103611140576110b2613972565b6001600160a01b0383166000908152600160205260409020546110d591906156b8565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a80548061111a5761111a6156cf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a548110156112a757826001600160a01b0316600a828154811061116a5761116a6156e5565b6000918252602090912001546001600160a01b03160361129557600a8054611194906001906156fb565b815481106111a4576111a46156e5565b600091825260209091200154600a80546001600160a01b0390921691839081106111d0576111d06156e5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611206613972565b6001600160a01b03841660009081526001602052604090205461122991906156b8565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a80548061126e5761126e6156cf565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061129f8161570e565b915050611143565b505050565b6000600f546000036112bd57600080fd5b50600f5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611329576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906113239084906156fb565b90915550505b611334848484613b60565b949350505050565b60205461010090046001600160a01b031633146113895760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6064600f5461139891906156a4565b8183600f546113a791906156b8565b6113b191906156a4565b10156114255760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610d3c565b8082600f5461143491906156b8565b61143e91906156a4565b6018555050565b60205461010090046001600160a01b031633146114925760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b80518251146114e35760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d3c565b60005b82518161ffff1610156112a757600e546115049060ff16600a61567f565b828261ffff168151811061151a5761151a6156e5565b602002602001015161152c91906156b8565b61153533611ee3565b10156115835760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610d3c565b6115eb33848361ffff168151811061159d5761159d6156e5565b6020908102919091010151600e546115b99060ff16600a61567f565b858561ffff16815181106115cf576115cf6156e5565b60200260200101516115e191906156b8565b6000806001614010565b50806115f681615727565b9150506114e6565b60205461010090046001600160a01b0316331461164b5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54604051630109da6960e01b81528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156116af57600080fd5b505af11580156116c3573d6000803e3d6000fd5b5050505050505050565b60006116d96000611ee3565b6116e461dead611ee3565b6116ee9190615748565b600f54610e2091906156fb565b60006010548211156117625760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d3c565b600061176c613972565b905061177881846156a4565b9392505050565b6000600f5460000361179057600080fd5b50600e5460ff1690565b60205461010090046001600160a01b031633146117e75760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b60135460ff161561183a5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610d3c565b6107d08361ffff161115801561185657506107d08261ffff1611155b801561186857506107d08161ffff1611155b6118b45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d3c565b6109c46118c1838561575b565b61ffff1611156119135760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610d3c565b6011805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b60205461010090046001600160a01b0316331461199f5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610db3565b60205461010090046001600160a01b03163314611a255760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60205461010090046001600160a01b03163314611a9d5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6103e8600f546005611aaf91906156b8565b611ab991906156a4565b8183600f54611ac891906156b8565b611ad291906156a4565b1015611b465760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d3c565b8082600f54611b5591906156b8565b611b5f91906156a4565b6017555050565b601454600090612710908390611b84906001600160a01b0316611ee3565b611b8e91906156b8565b610df991906156a4565b60205461010090046001600160a01b03163314611be55760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6096811115611c365760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610d3c565b601d55565b60205461010090046001600160a01b03163314611c885760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b038116611d045760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d3c565b61deac196001600160a01b03821601611d855760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d3c565b602054611da19061010090046001600160a01b03166000611e4a565b611dac816001611e4a565b602054600090611dc99061010090046001600160a01b0316611ee3565b1115611df057602054611dee9061010090046001600160a01b0316826115e182611ee3565b505b602080546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60205461010090046001600160a01b03163314611e975760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b600e54600090611ed69060ff16600a61567f565b601754610e2091906156a4565b6001600160a01b03811660009081526009602052604081205460ff1615611f2057506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610df9906116fb565b60205461010090046001600160a01b03163314611f8f5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b602054611fab9061010090046001600160a01b03166000611e4a565b60208054610100600160a81b031981169091556040516101009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b60205461010090046001600160a01b0316331461204b5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6013805460ff19166001179055565b60205461010090046001600160a01b031633146120a75760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b80612136576001600160a01b03828116600081815260026020526040808220805460ff19169055601e5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b15801561211a57600080fd5b505af115801561212e573d6000803e3d6000fd5b505050505050565b6003541561219d576203f4806003544261215091906156fb565b1161219d5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610d3c565b6001600160a01b03821660009081526002602052604090205460ff16156122065760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d3c565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601e5491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b15801561211a57600080fd5b60205460009061010090046001600160a01b031633146122cc5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6013546122eb90309061010090046001600160a01b0316600019613879565b50600190565b60205461010090046001600160a01b0316331461233e5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e5460ff16156123915760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d3c565b601e54610100900460ff166123e85760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d3c565b601e546201000090046001600160a01b031661242557601e805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b601e54601454600e54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561249d57600080fd5b505af19250505080156124ae575060015b50601e546014546001600160a01b03620100009092048216916325a71cae916124d79116611ee3565b6040518263ffffffff1660e01b81526004016124f591815260200190565b60408051808303816000875af192505050801561252f575060408051601f3d908101601f1916820190925261252c9181019061577d565b60015b1561253e57601a91909155601b555b601e805460ff1916600117905542601f55565b6060600d8054610c709061554b565b600061256d338484613b60565b5060019392505050565b60205461010090046001600160a01b031633146125c45760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54610100900460ff161561262c57306001600160a01b0382160361262c5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d3c565b6020546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab91906157a1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906157ba565b60205461010090046001600160a01b031633146127675760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b60205461010090046001600160a01b031633146128135760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b0382161580159061283357506001600160a01b03811615155b61287f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d3c565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b60205461010090046001600160a01b031633146128fa5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b60205460ff16156129315760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610d3c565b8382146129645760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610d3c565b60004711806129735750600034115b6129bf5760405162461bcd60e51b815260206004820152601760248201527f4e6f2066756e647320666f72206c69717569646974792e0000000000000000006044820152606401610d3c565b80601e60026101000a8154816001600160a01b0302191690836001600160a01b03160217905550601e60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af1925050508015612a5c57506040513d6000823e601f3d908101601f19168201604052612a59919081019061583b565b60015b612a8c5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610d3c565b600c612a9885826158fc565b50600d612aa584826158fc565b50600b829055600e805460ff191660ff8316908117909155612ac890600a61567f565b600b54612ad591906156b8565b600f819055612ae6906000196159bc565b612af2906000196156fb565b60105550505050601360019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7091906159d0565b6001600160a01b031663c9c65396601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf591906159d0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6591906159d0565b601480546001600160a01b0319166001600160a01b039290921691821790556000908152600260208190526040909120805460ff19166001179055600f54606491612cb091906156b8565b612cba91906156a4565b601755600f54606490612cce9060026156b8565b612cd891906156a4565b6018556020805460ff19166001178082556010546001600160a01b0361010092839004811660009081528085526040808220939093559354600f5492519390041692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612d4a9190815260200190565b60405180910390a3601354612d7190309061010090046001600160a01b0316600019613879565b602054601354612d9a916001600160a01b03610100918290048116929190910416600019613879565b60005b84811015612e3b57600e54600090612db99060ff16600a61567f565b858584818110612dcb57612dcb6156e5565b90506020020135612ddc91906156b8565b602054909150612e269061010090046001600160a01b0316888885818110612e0657612e066156e5565b9050602002016020810190612e1b9190615083565b836000806001614010565b50508080612e339061570e565b915050612d9d565b50602054612e5b9061010090046001600160a01b0316306115e182611ee3565b5060135461010090046001600160a01b031663f305d7194730612e7d81611ee3565b60205460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092526000604483018190526064830152610100900490911660848201524260a482015260c40160606040518083038185885af1158015612eee573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f1391906159ed565b505050610de16122f1565b60205461010090046001600160a01b03163314612f6b5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54610100900460ff1615612fc35760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d3c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302c91906159d0565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309d91906159d0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906159d0565b6014546001600160a01b039081166000908152600260205260409020805460ff1916905590915081166132a257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319b91906159d0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320c91906159d0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327d91906159d0565b601480546001600160a01b0319166001600160a01b03929092169190911790556132be565b601480546001600160a01b0319166001600160a01b0383161790555b60138054610100600160a81b0319166101006001600160a01b03858116820292909217835560145482166000908152600260205260409020805460ff1916600117905591546112a7923092910416600019613879565b60205461010090046001600160a01b031633146133615760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54610100900460ff16156133b95760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d3c565b6020546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f193505050501580156133f9573d6000803e3d6000fd5b50565b60205461010090046001600160a01b031633146134495760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6012805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff0000000019166401000000008683160267ffff0000000000001916176601000000000000858316021769ffff00000000000000001916600160401b91841691909102179055816134be848661575b565b6134c8919061575b565b601280546bffff000000000000000000001916600160501b61ffff93841602179055601154600091613503916201000081048216911661575b565b60125461ffff91821692508291600160401b820481169161352f9181811691600160501b90041661575b565b613539919061575b565b61ffff16111561212e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d3c565b60205461010090046001600160a01b031633146135e85760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b8284600f546135f791906156b8565b61360191906156a4565b601a55600f5481906136149084906156b8565b61361e91906156a4565b601b819055601a54111561367e5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d3c565b60145461271090613697906001600160a01b0316611ee3565b6136a29060966156b8565b6136ac91906156a4565b601b5411156137095760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d3c565b620f4240600f5461371a91906156a4565b601b5410156137825760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d3c565b620f4240600f5461379391906156a4565b601a5410156137fb5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d3c565b50505050565b60205461010090046001600160a01b0316331461384e5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0383166138c55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d3c565b6001600160a01b0382166139115760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d3c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546014546001600160a01b0316600090815260096020526040812054909291908290829060ff1615613a3c576014546001600160a01b0390811660009081526020818152604080832054600190925290912054601e549192909162010000900416301480156139f0575046603814806139f05750466001145b156139fa57600080fd5b83821180613a0757508281115b15613a2157613a1685876156a4565b965050505050505090565b613a2b82856156fb565b9350613a3781846156fb565b925050505b600a5415613b325760005b600a5460ff82161015613b30576000806000600a8460ff1681548110613a6f57613a6f6156e5565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff8716908110613ab457613ab46156e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180613ae857508381115b15613b0357613af786886156a4565b97505050505050505090565b613b0d82866156fb565b9450613b1981856156fb565b935050508080613b2890615a1b565b915050613a47565b505b613b3c83856156a4565b821015613b5657613b4d83856156a4565b94505050505090565b613b4d81836156a4565b60006001600160a01b038416613bc65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d3c565b6001600160a01b038316613c285760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d3c565b60008211613c8a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d3c565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613cb85760019250613ce6565b6001600160a01b03861660009081526002602052604090205460ff1615613ce25760019150613ce6565b5060015b613cf08787614317565b15613f6757601e5460ff16613df15780613d4c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d3c565b6001600160a01b03871660009081526006602052604090205460ff16158015613d8e57506001600160a01b03861660009081526006602052604090205460ff16155b15613df15760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d3c565b8280613dfa5750815b15613ea9576001600160a01b03871660009081526008602052604090205460ff16158015613e4157506001600160a01b03861660009081526008602052604090205460ff16155b15613ea957601754851115613ea95760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d3c565b6013546001600160a01b038781166101009092041614801590613eca575081155b15613f67576001600160a01b03861660009081526008602052604090205460ff16613f675760185485613efc88611ee3565b613f069190615748565b1115613f675760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d3c565b8115613ff75760195460ff16613ff757601954610100900460ff1615613ff7576000613f9230611ee3565b9050601a548110613ff557601b54601c5460ff1615613fdf57601d546014546127109190613fc8906001600160a01b0316611ee3565b613fd291906156b8565b613fdc91906156a4565b90505b808210613fea578091505b613ff38261443b565b505b505b614005878787868686614010565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff168061405257506001600160a01b03871660009081526007602052604090205460ff165b1561405b575060005b600061406c898989858a8a8a614914565b60a08101516001600160a01b038b16600090815260208190526040902054919250614096916156fb565b6001600160a01b03808b16600090815260208190526040808220939093556080840151918b16815291909120546140cd9190615748565b6001600160a01b03808a1660009081526020818152604080832094909455918c1681526009909152205460ff161561413d576001600160a01b0389166000908152600160205260409020546141239088906156fb565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff161561419d5780516001600160a01b0389166000908152600160205260409020546141839190615748565b6001600160a01b0389166000908152600160205260409020555b60008160c0015111806141b4575060008160200151115b156141d5578060c00151601060008282546141cf91906156fb565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161421e91815260200190565b60405180910390a3601e54610100900460ff166143085761423f8989614e85565b601e54610100900460ff1615801561425c575061425c8989614317565b801561428157506001600160a01b03891660009081526006602052604090205460ff16155b80156142a657506001600160a01b03881660009081526006602052604090205460ff16155b80156142b0575083155b156143085760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d3c565b50600198975050505050505050565b6020546000906001600160a01b03848116610100909204161480159061435057506020546001600160a01b038381166101009092041614155b801561436c575060205461010090046001600160a01b03163214155b801561439157506001600160a01b03821660009081526005602052604090205460ff16155b80156143b657506001600160a01b03831660009081526005602052604090205460ff16155b80156143cd57506001600160a01b03821661dead14155b80156143e157506001600160a01b03821615155b80156143f657506001600160a01b0383163014155b80156144165750601e546001600160a01b03848116620100009092041614155b8015611778575050601e546201000090046001600160a01b0390811691161415919050565b6019805460ff191660011790556040805160c08101825260125461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b810483166080830152600160501b900490911660a082018190526000036144b85750614907565b30600090815260046020908152604080832060135461010090046001600160a01b031684529091529020546000191461451b5730600090815260046020908152604080832060135461010090046001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff168561453c91906156b8565b61454691906156a4565b61455091906156a4565b9050600061455e82856156fb565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614598576145986156e5565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561460b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061462f91906159d0565b81600181518110614642576146426156e5565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81526101009091049091169063791ac9479061468f908590600090869030904290600401615a3a565b600060405180830381600087803b1580156146a957600080fd5b505af19250505080156146ba575060015b6146c75750505050614907565b476000836146d586846156b8565b6146df91906156a4565b905084156147c25760135460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015614776575060408051601f3d908101601f19168201909252614773918101906159ed565b60015b61478557505050505050614907565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6147cc81836156fb565b915085602001518660a0018181516147e49190615aab565b61ffff90811690915260a088015160608901516000935083929182169161480c9116866156b8565b61481691906156a4565b9050600061482482866156fb565b60408a015190915061ffff1615614892576015546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114614887576040519150601f19603f3d011682016040523d82523d6000602084013e61488c565b606091505b50909350505b606089015161ffff16156148fd576016546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146148f2576040519150601f19603f3d011682016040523d82523d6000602084013e6148f7565b606091505b50909350505b5050505050505050505b506019805460ff19169055565b61495c60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149a460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c08101825260125461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b810483166080830152600160501b900490911660a0820152614a0d613972565b60e08301819052614a1e90896156b8565b60a0808401919091526080820151825191830151600092614a3e9161575b565b614a48919061575b565b61ffff16905080600003614a5b57600097505b614a658b8b614317565b15614aff57601e5460405163ecd07a5360e01b81526001600160a01b038d811660048301528c81166024830152604482018c9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614ae8575060408051601f3d908101601f19168201909252614ae5918101906157ba565b60015b614af157600080fd5b905080614afd57600080fd5b505b8715614c135760008715614b1a575060115461ffff16614b44565b8615614b33575060115462010000900461ffff16614b44565b50601154640100000000900461ffff165b6000612710614b53838d6156b8565b614b5d91906156a4565b84519091508390614b729061ffff16836156b8565b614b7c91906156a4565b602086015260808401518390614b969061ffff16836156b8565b614ba091906156a4565b606086018190526020860151614bb69190615748565b614bc090826156fb565b60408601819052606086015160208701519091614bdc91615748565b614be69190615748565b614bf0908c6156fb565b855260e08501516020860151614c0691906156b8565b60c086015250614c179050565b8883525b604083015115614cee578260e001518360400151614c3591906156b8565b3060009081526020819052604081208054909190614c54908490615748565b90915550503060009081526009602052604090205460ff1615614c9c576040808401513060009081526001602052918220805491929091614c96908490615748565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560400151604051614ce591815260200190565b60405180910390a35b606083015115614e21578260e001518360600151614d0c91906156b8565b61dead600090815260208190527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf838054909190614d4a908490615748565b909155505061dead60005260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff1615614dcd57606083015161dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614dc7908490615748565b90915550505b61dead6001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560600151604051614e1891815260200190565b60405180910390a35b8260e001518360600151614e3591906156b8565b8360e001518460400151614e4991906156b8565b8460c00151614e589190615748565b614e629190615748565b8360a00151614e7191906156fb565b608084015250909998505050505050505050565b601e54610100900460ff1615614ee95760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d3c565b614ef38282614317565b158015614f0d57506014546001600160a01b038281169116145b15610fb6576001600160a01b038083166000908152600560209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055601e805461ff001916610100179081905562010000900416614f9257601e805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016127ba565b60005b83811015614fed578181015183820152602001614fd5565b50506000910152565b6020815260008251806020840152615015816040850160208701614fd2565b601f01601f19169190910160400192915050565b60006020828403121561503b57600080fd5b5035919050565b6001600160a01b03811681146133f957600080fd5b6000806040838503121561506a57600080fd5b823561507581615042565b946020939093013593505050565b60006020828403121561509557600080fd5b813561177881615042565b80151581146133f957600080fd5b600080604083850312156150c157600080fd5b82356150cc81615042565b915060208301356150dc816150a0565b809150509250929050565b6000806000606084860312156150fc57600080fd5b833561510781615042565b9250602084013561511781615042565b929592945050506040919091013590565b6000806040838503121561513b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151895761518961514a565b604052919050565b600067ffffffffffffffff8211156151ab576151ab61514a565b5060051b60200190565b600082601f8301126151c657600080fd5b813560206151db6151d683615191565b615160565b82815260059290921b840181019181810190868411156151fa57600080fd5b8286015b8481101561521557803583529183019183016151fe565b509695505050505050565b6000806040838503121561523357600080fd5b823567ffffffffffffffff8082111561524b57600080fd5b818501915085601f83011261525f57600080fd5b8135602061526f6151d683615191565b82815260059290921b8401810191818101908984111561528e57600080fd5b948201945b838610156152b55785356152a681615042565b82529482019490820190615293565b965050860135925050808211156152cb57600080fd5b506152d8858286016151b5565b9150509250929050565b600080600080608085870312156152f857600080fd5b8435615303816150a0565b93506020850135615313816150a0565b92506040850135615323816150a0565b91506060850135615333816150a0565b939692955090935050565b803561ffff8116811461535057600080fd5b919050565b60008060006060848603121561536a57600080fd5b6153738461533e565b92506153816020850161533e565b915061538f6040850161533e565b90509250925092565b600080604083850312156153ab57600080fd5b82356150cc816150a0565b600080604083850312156153c957600080fd5b82356153d481615042565b915060208301356150dc81615042565b60008083601f8401126153f657600080fd5b50813567ffffffffffffffff81111561540e57600080fd5b6020830191508360208260051b850101111561542957600080fd5b9250929050565b60008060008060006060868803121561544857600080fd5b853567ffffffffffffffff8082111561546057600080fd5b61546c89838a016153e4565b9097509550602088013591508082111561548557600080fd5b50615492888289016153e4565b90945092505060408601356154a681615042565b809150509295509295909350565b600080600080600060a086880312156154cc57600080fd5b6154d58661533e565b94506154e36020870161533e565b93506154f16040870161533e565b92506154ff6060870161533e565b915061550d6080870161533e565b90509295509295909350565b6000806000806080858703121561552f57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061555f57607f821691505b60208210810361557f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156155d65781600019048211156155bc576155bc615585565b808516156155c957918102915b93841c93908002906155a0565b509250929050565b6000826155ed57506001610df9565b816155fa57506000610df9565b8160018114615610576002811461561a57615636565b6001915050610df9565b60ff84111561562b5761562b615585565b50506001821b610df9565b5060208310610133831016604e8410600b8410161715615659575081810a610df9565b615663838361559b565b806000190482111561567757615677615585565b029392505050565b600061177860ff8416836155de565b634e487b7160e01b600052601260045260246000fd5b6000826156b3576156b361568e565b500490565b8082028115828204841417610df957610df9615585565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610df957610df9615585565b60006001820161572057615720615585565b5060010190565b600061ffff80831681810361573e5761573e615585565b6001019392505050565b80820180821115610df957610df9615585565b61ffff81811683821601908082111561577657615776615585565b5092915050565b6000806040838503121561579057600080fd5b505080516020909101519092909150565b6000602082840312156157b357600080fd5b5051919050565b6000602082840312156157cc57600080fd5b8151611778816150a0565b600082601f8301126157e857600080fd5b815167ffffffffffffffff8111156158025761580261514a565b615815601f8201601f1916602001615160565b81815284602083860101111561582a57600080fd5b611334826020830160208701614fd2565b6000806000806080858703121561585157600080fd5b845167ffffffffffffffff8082111561586957600080fd5b615875888389016157d7565b9550602087015191508082111561588b57600080fd5b50615898878288016157d7565b93505060408501519150606085015160ff8116811461533357600080fd5b601f8211156112a757600081815260208120601f850160051c810160208610156158dd5750805b601f850160051c820191505b8181101561212e578281556001016158e9565b815167ffffffffffffffff8111156159165761591661514a565b61592a81615924845461554b565b846158b6565b602080601f83116001811461595f57600084156159475750858301515b600019600386901b1c1916600185901b17855561212e565b600085815260208120601f198616915b8281101561598e5788860151825594840194600190910190840161596f565b50858210156159ac5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826159cb576159cb61568e565b500690565b6000602082840312156159e257600080fd5b815161177881615042565b600080600060608486031215615a0257600080fd5b8351925060208401519150604084015190509250925092565b600060ff821660ff8103615a3157615a31615585565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615a8a5784516001600160a01b031683529383019391830191600101615a65565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff8281168282160390808211156157765761577661558556fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212206fcf79c5d42ed6a968d5e2384d705b277643330f407333c849d1c5306291ae4464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80634fbee193116101f2578063ab558e4d1161010d578063de3a3b69116100a0578063f94aa1b41161006f578063f94aa1b414610bbb578063fb78680d14610c02578063fdb78c0e14610c22578063feadde9c14610c4157600080fd5b8063de3a3b6914610b53578063eafb5a3c14610b66578063ee5d9c2d14610b86578063f08f43a214610b9b57600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a3f578063cf84770614610a5f578063d3f6a15714610aed578063dd62ed3e14610b0d57600080fd5b8063ab558e4d14610a05578063b1b08f7114610661578063b3d514fb14610661578063b7df8b3614610a2557600080fd5b806378648edf116101855780638a63bd9b116101545780638a63bd9b146109a65780638a8c523c146109bb57806395d89b41146109d0578063a9059cbb146109e557600080fd5b806378648edf1461091557806380c581d11461092a57806388f820201461094a578063893d20e81461098357600080fd5b80635cce86cd116101c15780635cce86cd146108925780636ebd0078146108cb57806370a08231146108e0578063715018a61461090057600080fd5b80634fbee1931461080457806350a8e0161461083d578063590ffdce1461085c5780635a6f09181461087c57600080fd5b806329dd8798116102e257806336fddb04116102755780634ada218b116102445780634ada218b1461078a5780634bbb93eb146107a45780634e718e48146107c45780634fb2e45d146107e457600080fd5b806336fddb04146107145780633f3cf56c14610734578063452ed4f11461075457806346ea7ac81461077457600080fd5b80632e8fa821116102b15780632e8fa82114610697578063313ce567146106ad57806332cde664146106d457806333251a0b146106f457600080fd5b806329dd87981461062c5780632b112e491461064c5780632b28fc7a146106615780632d8381191461067757600080fd5b80630dcbcf1c1161035a57806323b872dd1161032957806323b872dd146105b657806326003957146105d65780632610eaca146105f6578063285777511461061657600080fd5b80630dcbcf1c146105335780630fa604e41461056c57806313e461921461058157806318160ddd146105a157600080fd5b80630758d924116103965780630758d924146104a257806307dd79e0146104c757806309231602146104f1578063095ea7b31461051357600080fd5b806303fd2a45146103d35780630445b66714610406578063069d955f1461042a57806306fdde031461048057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c601a5481565b6040519081526020016103fd565b34801561043657600080fd5b5060115461045b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b34801561048c57600080fd5b50610495610c61565b6040516103fd9190614ff6565b3480156104ae57600080fd5b506013546103e99061010090046001600160a01b031681565b3480156104d357600080fd5b506013546104e19060ff1681565b60405190151581526020016103fd565b3480156104fd57600080fd5b5061051161050c366004615029565b610cf3565b005b34801561051f57600080fd5b506104e161052e366004615057565b610de8565b34801561053f57600080fd5b506104e161054e366004615083565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561057857600080fd5b5061041c610dff565b34801561058d57600080fd5b5061051161059c3660046150ae565b610e25565b3480156105ad57600080fd5b5061041c6112ac565b3480156105c257600080fd5b506104e16105d13660046150e7565b6112c4565b3480156105e257600080fd5b506105116105f1366004615128565b61133c565b34801561060257600080fd5b50610511610611366004615220565b611445565b34801561062257600080fd5b5061041c601d5481565b34801561063857600080fd5b506105116106473660046152e2565b6115fe565b34801561065857600080fd5b5061041c6116cd565b34801561066d57600080fd5b5061041c6107d081565b34801561068357600080fd5b5061041c610692366004615029565b6116fb565b3480156106a357600080fd5b5061041c601b5481565b3480156106b957600080fd5b506106c261177f565b60405160ff90911681526020016103fd565b3480156106e057600080fd5b506105116106ef366004615355565b61179a565b34801561070057600080fd5b5061051161070f366004615083565b611952565b34801561072057600080fd5b5061051161072f3660046150ae565b6119d8565b34801561074057600080fd5b5061051161074f366004615128565b611a50565b34801561076057600080fd5b506014546103e9906001600160a01b031681565b34801561078057600080fd5b5061041c6109c481565b34801561079657600080fd5b50601e546104e19060ff1681565b3480156107b057600080fd5b5061041c6107bf366004615029565b611b66565b3480156107d057600080fd5b506105116107df366004615029565b611b98565b3480156107f057600080fd5b506105116107ff366004615083565b611c3b565b34801561081057600080fd5b506104e161081f366004615083565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084957600080fd5b50601e546104e190610100900460ff1681565b34801561086857600080fd5b506105116108773660046150ae565b611e4a565b34801561088857600080fd5b5061041c601f5481565b34801561089e57600080fd5b506104e16108ad366004615083565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108d757600080fd5b5061041c611ec2565b3480156108ec57600080fd5b5061041c6108fb366004615083565b611ee3565b34801561090c57600080fd5b50610511611f42565b34801561092157600080fd5b50610511611ffe565b34801561093657600080fd5b506105116109453660046150ae565b61205a565b34801561095657600080fd5b506104e1610965366004615083565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561098f57600080fd5b5060205461010090046001600160a01b03166103e9565b3480156109b257600080fd5b506104e161227c565b3480156109c757600080fd5b506105116122f1565b3480156109dc57600080fd5b50610495612551565b3480156109f157600080fd5b506104e1610a00366004615057565b612560565b348015610a1157600080fd5b50610511610a20366004615083565b612577565b348015610a3157600080fd5b50601c546104e19060ff1681565b348015610a4b57600080fd5b50610511610a5a366004615398565b61271a565b348015610a6b57600080fd5b50601254610ab09061ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103fd565b348015610af957600080fd5b50610511610b083660046153b6565b6127c6565b348015610b1957600080fd5b5061041c610b283660046153b6565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b610511610b61366004615430565b6128ad565b348015610b7257600080fd5b50610511610b81366004615083565b612f1e565b348015610b9257600080fd5b50610511613314565b348015610ba757600080fd5b50610511610bb63660046154b4565b6133fc565b348015610bc757600080fd5b50601554601654610be2916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103fd565b348015610c0e57600080fd5b50610511610c1d366004615519565b61359b565b348015610c2e57600080fd5b506019546104e190610100900460ff1681565b348015610c4d57600080fd5b50610511610c5c3660046150ae565b613801565b6060600c8054610c709061554b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c9061554b565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b60205461010090046001600160a01b03163314610d455760405162461bcd60e51b81526020600482015260116024820152600080516020615ac783398151915260448201526064015b60405180910390fd5b604b811015610d815760405162461bcd60e51b81526020600482015260086024820152672a37b7903637bb9760c11b6044820152606401610d3c565b601e546040516304918b0160e11b815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610dcd57600080fd5b505af1158015610de1573d6000803e3d6000fd5b5050505050565b6000610df5338484613879565b5060015b92915050565b600e54600090610e139060ff16600a61567f565b601854610e2091906156a4565b905090565b60205461010090046001600160a01b03163314610e725760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b8015610fba576001600160a01b03821660009081526009602052604090205460ff1615610ee15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d3c565b6001600160a01b03821660009081526020819052604090205415610f3b576001600160a01b038216600090815260208190526040902054610f21906116fb565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff1916600117905560145490911614610fb657600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555b5050565b80610fb6576001600160a01b03821660009081526009602052604090205460ff166110275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d3c565b6014546001600160a01b03908116908316036110a057611045613972565b6001600160a01b03831660009081526001602052604090205461106891906156b8565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a54600103611140576110b2613972565b6001600160a01b0383166000908152600160205260409020546110d591906156b8565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a80548061111a5761111a6156cf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a548110156112a757826001600160a01b0316600a828154811061116a5761116a6156e5565b6000918252602090912001546001600160a01b03160361129557600a8054611194906001906156fb565b815481106111a4576111a46156e5565b600091825260209091200154600a80546001600160a01b0390921691839081106111d0576111d06156e5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611206613972565b6001600160a01b03841660009081526001602052604090205461122991906156b8565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a80548061126e5761126e6156cf565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061129f8161570e565b915050611143565b505050565b6000600f546000036112bd57600080fd5b50600f5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611329576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906113239084906156fb565b90915550505b611334848484613b60565b949350505050565b60205461010090046001600160a01b031633146113895760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6064600f5461139891906156a4565b8183600f546113a791906156b8565b6113b191906156a4565b10156114255760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610d3c565b8082600f5461143491906156b8565b61143e91906156a4565b6018555050565b60205461010090046001600160a01b031633146114925760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b80518251146114e35760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d3c565b60005b82518161ffff1610156112a757600e546115049060ff16600a61567f565b828261ffff168151811061151a5761151a6156e5565b602002602001015161152c91906156b8565b61153533611ee3565b10156115835760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610d3c565b6115eb33848361ffff168151811061159d5761159d6156e5565b6020908102919091010151600e546115b99060ff16600a61567f565b858561ffff16815181106115cf576115cf6156e5565b60200260200101516115e191906156b8565b6000806001614010565b50806115f681615727565b9150506114e6565b60205461010090046001600160a01b0316331461164b5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54604051630109da6960e01b81528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156116af57600080fd5b505af11580156116c3573d6000803e3d6000fd5b5050505050505050565b60006116d96000611ee3565b6116e461dead611ee3565b6116ee9190615748565b600f54610e2091906156fb565b60006010548211156117625760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d3c565b600061176c613972565b905061177881846156a4565b9392505050565b6000600f5460000361179057600080fd5b50600e5460ff1690565b60205461010090046001600160a01b031633146117e75760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b60135460ff161561183a5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610d3c565b6107d08361ffff161115801561185657506107d08261ffff1611155b801561186857506107d08161ffff1611155b6118b45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d3c565b6109c46118c1838561575b565b61ffff1611156119135760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610d3c565b6011805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b60205461010090046001600160a01b0316331461199f5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610db3565b60205461010090046001600160a01b03163314611a255760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60205461010090046001600160a01b03163314611a9d5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6103e8600f546005611aaf91906156b8565b611ab991906156a4565b8183600f54611ac891906156b8565b611ad291906156a4565b1015611b465760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d3c565b8082600f54611b5591906156b8565b611b5f91906156a4565b6017555050565b601454600090612710908390611b84906001600160a01b0316611ee3565b611b8e91906156b8565b610df991906156a4565b60205461010090046001600160a01b03163314611be55760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6096811115611c365760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610d3c565b601d55565b60205461010090046001600160a01b03163314611c885760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b038116611d045760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d3c565b61deac196001600160a01b03821601611d855760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d3c565b602054611da19061010090046001600160a01b03166000611e4a565b611dac816001611e4a565b602054600090611dc99061010090046001600160a01b0316611ee3565b1115611df057602054611dee9061010090046001600160a01b0316826115e182611ee3565b505b602080546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60205461010090046001600160a01b03163314611e975760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b600e54600090611ed69060ff16600a61567f565b601754610e2091906156a4565b6001600160a01b03811660009081526009602052604081205460ff1615611f2057506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610df9906116fb565b60205461010090046001600160a01b03163314611f8f5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b602054611fab9061010090046001600160a01b03166000611e4a565b60208054610100600160a81b031981169091556040516101009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b60205461010090046001600160a01b0316331461204b5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6013805460ff19166001179055565b60205461010090046001600160a01b031633146120a75760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b80612136576001600160a01b03828116600081815260026020526040808220805460ff19169055601e5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b15801561211a57600080fd5b505af115801561212e573d6000803e3d6000fd5b505050505050565b6003541561219d576203f4806003544261215091906156fb565b1161219d5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610d3c565b6001600160a01b03821660009081526002602052604090205460ff16156122065760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d3c565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601e5491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b15801561211a57600080fd5b60205460009061010090046001600160a01b031633146122cc5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6013546122eb90309061010090046001600160a01b0316600019613879565b50600190565b60205461010090046001600160a01b0316331461233e5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e5460ff16156123915760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d3c565b601e54610100900460ff166123e85760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d3c565b601e546201000090046001600160a01b031661242557601e805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b601e54601454600e54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561249d57600080fd5b505af19250505080156124ae575060015b50601e546014546001600160a01b03620100009092048216916325a71cae916124d79116611ee3565b6040518263ffffffff1660e01b81526004016124f591815260200190565b60408051808303816000875af192505050801561252f575060408051601f3d908101601f1916820190925261252c9181019061577d565b60015b1561253e57601a91909155601b555b601e805460ff1916600117905542601f55565b6060600d8054610c709061554b565b600061256d338484613b60565b5060019392505050565b60205461010090046001600160a01b031633146125c45760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54610100900460ff161561262c57306001600160a01b0382160361262c5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d3c565b6020546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab91906157a1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906157ba565b60205461010090046001600160a01b031633146127675760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b60205461010090046001600160a01b031633146128135760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b0382161580159061283357506001600160a01b03811615155b61287f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d3c565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b60205461010090046001600160a01b031633146128fa5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b60205460ff16156129315760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610d3c565b8382146129645760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610d3c565b60004711806129735750600034115b6129bf5760405162461bcd60e51b815260206004820152601760248201527f4e6f2066756e647320666f72206c69717569646974792e0000000000000000006044820152606401610d3c565b80601e60026101000a8154816001600160a01b0302191690836001600160a01b03160217905550601e60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af1925050508015612a5c57506040513d6000823e601f3d908101601f19168201604052612a59919081019061583b565b60015b612a8c5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610d3c565b600c612a9885826158fc565b50600d612aa584826158fc565b50600b829055600e805460ff191660ff8316908117909155612ac890600a61567f565b600b54612ad591906156b8565b600f819055612ae6906000196159bc565b612af2906000196156fb565b60105550505050601360019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7091906159d0565b6001600160a01b031663c9c65396601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf591906159d0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6591906159d0565b601480546001600160a01b0319166001600160a01b039290921691821790556000908152600260208190526040909120805460ff19166001179055600f54606491612cb091906156b8565b612cba91906156a4565b601755600f54606490612cce9060026156b8565b612cd891906156a4565b6018556020805460ff19166001178082556010546001600160a01b0361010092839004811660009081528085526040808220939093559354600f5492519390041692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612d4a9190815260200190565b60405180910390a3601354612d7190309061010090046001600160a01b0316600019613879565b602054601354612d9a916001600160a01b03610100918290048116929190910416600019613879565b60005b84811015612e3b57600e54600090612db99060ff16600a61567f565b858584818110612dcb57612dcb6156e5565b90506020020135612ddc91906156b8565b602054909150612e269061010090046001600160a01b0316888885818110612e0657612e066156e5565b9050602002016020810190612e1b9190615083565b836000806001614010565b50508080612e339061570e565b915050612d9d565b50602054612e5b9061010090046001600160a01b0316306115e182611ee3565b5060135461010090046001600160a01b031663f305d7194730612e7d81611ee3565b60205460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092526000604483018190526064830152610100900490911660848201524260a482015260c40160606040518083038185885af1158015612eee573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f1391906159ed565b505050610de16122f1565b60205461010090046001600160a01b03163314612f6b5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54610100900460ff1615612fc35760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d3c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302c91906159d0565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309d91906159d0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906159d0565b6014546001600160a01b039081166000908152600260205260409020805460ff1916905590915081166132a257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319b91906159d0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320c91906159d0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327d91906159d0565b601480546001600160a01b0319166001600160a01b03929092169190911790556132be565b601480546001600160a01b0319166001600160a01b0383161790555b60138054610100600160a81b0319166101006001600160a01b03858116820292909217835560145482166000908152600260205260409020805460ff1916600117905591546112a7923092910416600019613879565b60205461010090046001600160a01b031633146133615760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b601e54610100900460ff16156133b95760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d3c565b6020546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f193505050501580156133f9573d6000803e3d6000fd5b50565b60205461010090046001600160a01b031633146134495760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6012805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff0000000019166401000000008683160267ffff0000000000001916176601000000000000858316021769ffff00000000000000001916600160401b91841691909102179055816134be848661575b565b6134c8919061575b565b601280546bffff000000000000000000001916600160501b61ffff93841602179055601154600091613503916201000081048216911661575b565b60125461ffff91821692508291600160401b820481169161352f9181811691600160501b90041661575b565b613539919061575b565b61ffff16111561212e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d3c565b60205461010090046001600160a01b031633146135e85760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b8284600f546135f791906156b8565b61360191906156a4565b601a55600f5481906136149084906156b8565b61361e91906156a4565b601b819055601a54111561367e5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d3c565b60145461271090613697906001600160a01b0316611ee3565b6136a29060966156b8565b6136ac91906156a4565b601b5411156137095760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d3c565b620f4240600f5461371a91906156a4565b601b5410156137825760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d3c565b620f4240600f5461379391906156a4565b601a5410156137fb5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d3c565b50505050565b60205461010090046001600160a01b0316331461384e5760405162461bcd60e51b81526020600482015260116024820152600080516020615ac78339815191526044820152606401610d3c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0383166138c55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d3c565b6001600160a01b0382166139115760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d3c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546014546001600160a01b0316600090815260096020526040812054909291908290829060ff1615613a3c576014546001600160a01b0390811660009081526020818152604080832054600190925290912054601e549192909162010000900416301480156139f0575046603814806139f05750466001145b156139fa57600080fd5b83821180613a0757508281115b15613a2157613a1685876156a4565b965050505050505090565b613a2b82856156fb565b9350613a3781846156fb565b925050505b600a5415613b325760005b600a5460ff82161015613b30576000806000600a8460ff1681548110613a6f57613a6f6156e5565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff8716908110613ab457613ab46156e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180613ae857508381115b15613b0357613af786886156a4565b97505050505050505090565b613b0d82866156fb565b9450613b1981856156fb565b935050508080613b2890615a1b565b915050613a47565b505b613b3c83856156a4565b821015613b5657613b4d83856156a4565b94505050505090565b613b4d81836156a4565b60006001600160a01b038416613bc65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d3c565b6001600160a01b038316613c285760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d3c565b60008211613c8a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d3c565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613cb85760019250613ce6565b6001600160a01b03861660009081526002602052604090205460ff1615613ce25760019150613ce6565b5060015b613cf08787614317565b15613f6757601e5460ff16613df15780613d4c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d3c565b6001600160a01b03871660009081526006602052604090205460ff16158015613d8e57506001600160a01b03861660009081526006602052604090205460ff16155b15613df15760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d3c565b8280613dfa5750815b15613ea9576001600160a01b03871660009081526008602052604090205460ff16158015613e4157506001600160a01b03861660009081526008602052604090205460ff16155b15613ea957601754851115613ea95760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d3c565b6013546001600160a01b038781166101009092041614801590613eca575081155b15613f67576001600160a01b03861660009081526008602052604090205460ff16613f675760185485613efc88611ee3565b613f069190615748565b1115613f675760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d3c565b8115613ff75760195460ff16613ff757601954610100900460ff1615613ff7576000613f9230611ee3565b9050601a548110613ff557601b54601c5460ff1615613fdf57601d546014546127109190613fc8906001600160a01b0316611ee3565b613fd291906156b8565b613fdc91906156a4565b90505b808210613fea578091505b613ff38261443b565b505b505b614005878787868686614010565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff168061405257506001600160a01b03871660009081526007602052604090205460ff165b1561405b575060005b600061406c898989858a8a8a614914565b60a08101516001600160a01b038b16600090815260208190526040902054919250614096916156fb565b6001600160a01b03808b16600090815260208190526040808220939093556080840151918b16815291909120546140cd9190615748565b6001600160a01b03808a1660009081526020818152604080832094909455918c1681526009909152205460ff161561413d576001600160a01b0389166000908152600160205260409020546141239088906156fb565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff161561419d5780516001600160a01b0389166000908152600160205260409020546141839190615748565b6001600160a01b0389166000908152600160205260409020555b60008160c0015111806141b4575060008160200151115b156141d5578060c00151601060008282546141cf91906156fb565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161421e91815260200190565b60405180910390a3601e54610100900460ff166143085761423f8989614e85565b601e54610100900460ff1615801561425c575061425c8989614317565b801561428157506001600160a01b03891660009081526006602052604090205460ff16155b80156142a657506001600160a01b03881660009081526006602052604090205460ff16155b80156142b0575083155b156143085760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d3c565b50600198975050505050505050565b6020546000906001600160a01b03848116610100909204161480159061435057506020546001600160a01b038381166101009092041614155b801561436c575060205461010090046001600160a01b03163214155b801561439157506001600160a01b03821660009081526005602052604090205460ff16155b80156143b657506001600160a01b03831660009081526005602052604090205460ff16155b80156143cd57506001600160a01b03821661dead14155b80156143e157506001600160a01b03821615155b80156143f657506001600160a01b0383163014155b80156144165750601e546001600160a01b03848116620100009092041614155b8015611778575050601e546201000090046001600160a01b0390811691161415919050565b6019805460ff191660011790556040805160c08101825260125461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b810483166080830152600160501b900490911660a082018190526000036144b85750614907565b30600090815260046020908152604080832060135461010090046001600160a01b031684529091529020546000191461451b5730600090815260046020908152604080832060135461010090046001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff168561453c91906156b8565b61454691906156a4565b61455091906156a4565b9050600061455e82856156fb565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614598576145986156e5565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561460b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061462f91906159d0565b81600181518110614642576146426156e5565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81526101009091049091169063791ac9479061468f908590600090869030904290600401615a3a565b600060405180830381600087803b1580156146a957600080fd5b505af19250505080156146ba575060015b6146c75750505050614907565b476000836146d586846156b8565b6146df91906156a4565b905084156147c25760135460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015614776575060408051601f3d908101601f19168201909252614773918101906159ed565b60015b61478557505050505050614907565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6147cc81836156fb565b915085602001518660a0018181516147e49190615aab565b61ffff90811690915260a088015160608901516000935083929182169161480c9116866156b8565b61481691906156a4565b9050600061482482866156fb565b60408a015190915061ffff1615614892576015546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114614887576040519150601f19603f3d011682016040523d82523d6000602084013e61488c565b606091505b50909350505b606089015161ffff16156148fd576016546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146148f2576040519150601f19603f3d011682016040523d82523d6000602084013e6148f7565b606091505b50909350505b5050505050505050505b506019805460ff19169055565b61495c60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149a460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c08101825260125461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b810483166080830152600160501b900490911660a0820152614a0d613972565b60e08301819052614a1e90896156b8565b60a0808401919091526080820151825191830151600092614a3e9161575b565b614a48919061575b565b61ffff16905080600003614a5b57600097505b614a658b8b614317565b15614aff57601e5460405163ecd07a5360e01b81526001600160a01b038d811660048301528c81166024830152604482018c9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614ae8575060408051601f3d908101601f19168201909252614ae5918101906157ba565b60015b614af157600080fd5b905080614afd57600080fd5b505b8715614c135760008715614b1a575060115461ffff16614b44565b8615614b33575060115462010000900461ffff16614b44565b50601154640100000000900461ffff165b6000612710614b53838d6156b8565b614b5d91906156a4565b84519091508390614b729061ffff16836156b8565b614b7c91906156a4565b602086015260808401518390614b969061ffff16836156b8565b614ba091906156a4565b606086018190526020860151614bb69190615748565b614bc090826156fb565b60408601819052606086015160208701519091614bdc91615748565b614be69190615748565b614bf0908c6156fb565b855260e08501516020860151614c0691906156b8565b60c086015250614c179050565b8883525b604083015115614cee578260e001518360400151614c3591906156b8565b3060009081526020819052604081208054909190614c54908490615748565b90915550503060009081526009602052604090205460ff1615614c9c576040808401513060009081526001602052918220805491929091614c96908490615748565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560400151604051614ce591815260200190565b60405180910390a35b606083015115614e21578260e001518360600151614d0c91906156b8565b61dead600090815260208190527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf838054909190614d4a908490615748565b909155505061dead60005260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff1615614dcd57606083015161dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614dc7908490615748565b90915550505b61dead6001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560600151604051614e1891815260200190565b60405180910390a35b8260e001518360600151614e3591906156b8565b8360e001518460400151614e4991906156b8565b8460c00151614e589190615748565b614e629190615748565b8360a00151614e7191906156fb565b608084015250909998505050505050505050565b601e54610100900460ff1615614ee95760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d3c565b614ef38282614317565b158015614f0d57506014546001600160a01b038281169116145b15610fb6576001600160a01b038083166000908152600560209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055601e805461ff001916610100179081905562010000900416614f9257601e805475ffffffffffffffffffffffffffffffffffffffff000019163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016127ba565b60005b83811015614fed578181015183820152602001614fd5565b50506000910152565b6020815260008251806020840152615015816040850160208701614fd2565b601f01601f19169190910160400192915050565b60006020828403121561503b57600080fd5b5035919050565b6001600160a01b03811681146133f957600080fd5b6000806040838503121561506a57600080fd5b823561507581615042565b946020939093013593505050565b60006020828403121561509557600080fd5b813561177881615042565b80151581146133f957600080fd5b600080604083850312156150c157600080fd5b82356150cc81615042565b915060208301356150dc816150a0565b809150509250929050565b6000806000606084860312156150fc57600080fd5b833561510781615042565b9250602084013561511781615042565b929592945050506040919091013590565b6000806040838503121561513b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151895761518961514a565b604052919050565b600067ffffffffffffffff8211156151ab576151ab61514a565b5060051b60200190565b600082601f8301126151c657600080fd5b813560206151db6151d683615191565b615160565b82815260059290921b840181019181810190868411156151fa57600080fd5b8286015b8481101561521557803583529183019183016151fe565b509695505050505050565b6000806040838503121561523357600080fd5b823567ffffffffffffffff8082111561524b57600080fd5b818501915085601f83011261525f57600080fd5b8135602061526f6151d683615191565b82815260059290921b8401810191818101908984111561528e57600080fd5b948201945b838610156152b55785356152a681615042565b82529482019490820190615293565b965050860135925050808211156152cb57600080fd5b506152d8858286016151b5565b9150509250929050565b600080600080608085870312156152f857600080fd5b8435615303816150a0565b93506020850135615313816150a0565b92506040850135615323816150a0565b91506060850135615333816150a0565b939692955090935050565b803561ffff8116811461535057600080fd5b919050565b60008060006060848603121561536a57600080fd5b6153738461533e565b92506153816020850161533e565b915061538f6040850161533e565b90509250925092565b600080604083850312156153ab57600080fd5b82356150cc816150a0565b600080604083850312156153c957600080fd5b82356153d481615042565b915060208301356150dc81615042565b60008083601f8401126153f657600080fd5b50813567ffffffffffffffff81111561540e57600080fd5b6020830191508360208260051b850101111561542957600080fd5b9250929050565b60008060008060006060868803121561544857600080fd5b853567ffffffffffffffff8082111561546057600080fd5b61546c89838a016153e4565b9097509550602088013591508082111561548557600080fd5b50615492888289016153e4565b90945092505060408601356154a681615042565b809150509295509295909350565b600080600080600060a086880312156154cc57600080fd5b6154d58661533e565b94506154e36020870161533e565b93506154f16040870161533e565b92506154ff6060870161533e565b915061550d6080870161533e565b90509295509295909350565b6000806000806080858703121561552f57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061555f57607f821691505b60208210810361557f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156155d65781600019048211156155bc576155bc615585565b808516156155c957918102915b93841c93908002906155a0565b509250929050565b6000826155ed57506001610df9565b816155fa57506000610df9565b8160018114615610576002811461561a57615636565b6001915050610df9565b60ff84111561562b5761562b615585565b50506001821b610df9565b5060208310610133831016604e8410600b8410161715615659575081810a610df9565b615663838361559b565b806000190482111561567757615677615585565b029392505050565b600061177860ff8416836155de565b634e487b7160e01b600052601260045260246000fd5b6000826156b3576156b361568e565b500490565b8082028115828204841417610df957610df9615585565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610df957610df9615585565b60006001820161572057615720615585565b5060010190565b600061ffff80831681810361573e5761573e615585565b6001019392505050565b80820180821115610df957610df9615585565b61ffff81811683821601908082111561577657615776615585565b5092915050565b6000806040838503121561579057600080fd5b505080516020909101519092909150565b6000602082840312156157b357600080fd5b5051919050565b6000602082840312156157cc57600080fd5b8151611778816150a0565b600082601f8301126157e857600080fd5b815167ffffffffffffffff8111156158025761580261514a565b615815601f8201601f1916602001615160565b81815284602083860101111561582a57600080fd5b611334826020830160208701614fd2565b6000806000806080858703121561585157600080fd5b845167ffffffffffffffff8082111561586957600080fd5b615875888389016157d7565b9550602087015191508082111561588b57600080fd5b50615898878288016157d7565b93505060408501519150606085015160ff8116811461533357600080fd5b601f8211156112a757600081815260208120601f850160051c810160208610156158dd5750805b601f850160051c820191505b8181101561212e578281556001016158e9565b815167ffffffffffffffff8111156159165761591661514a565b61592a81615924845461554b565b846158b6565b602080601f83116001811461595f57600084156159475750858301515b600019600386901b1c1916600185901b17855561212e565b600085815260208120601f198616915b8281101561598e5788860151825594840194600190910190840161596f565b50858210156159ac5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826159cb576159cb61568e565b500690565b6000602082840312156159e257600080fd5b815161177881615042565b600080600060608486031215615a0257600080fd5b8351925060208401519150604084015190509250925092565b600060ff821660ff8103615a3157615a31615585565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615a8a5784516001600160a01b031683529383019391830191600101615a65565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff8281168282160390808211156157765761577661558556fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212206fcf79c5d42ed6a968d5e2384d705b277643330f407333c849d1c5306291ae4464736f6c63430008130033

Deployed Bytecode Sourcemap

4334:30841:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:73;;;;;;;;;;;;6186:42;6155:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6155:73:0;;;;;;;;6695:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6695:28:0;245:177:1;5497:109:0;;;;;;;;;;-1:-1:-1;5497:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;633:6:1;666:15;;;648:34;;718:15;;;713:2;698:18;;691:43;770:15;;750:18;;;743:43;;;;611:2;596:18;5497:109:0;427:365:1;13194:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6094:26::-;;;;;;;;;;-1:-1:-1;6094:26:0;;;;;;;-1:-1:-1;;;;;6094:26:0;;;6061;;;;;;;;;;-1:-1:-1;6061:26:0;;;;;;;;;;;1866:14:1;;1859:22;1841:41;;1829:2;1814:18;6061:26:0;1701:187:1;17470:151:0;;;;;;;;;;-1:-1:-1;17470:151:0;;;;;:::i;:::-;;:::i;:::-;;13885:161;;;;;;;;;;-1:-1:-1;13885:161:0;;;;;:::i;:::-;;:::i;16694:140::-;;;;;;;;;;-1:-1:-1;16694:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;16792:34:0;16768:4;16792:34;;;:25;:34;;;;;;;;;16694:140;19952:114;;;;;;;;;;;;;:::i;28482:1522::-;;;;;;;;;;-1:-1:-1;28482:1522:0;;;;;:::i;:::-;;:::i;12865:115::-;;;;;;;;;;;;;:::i;14555:306::-;;;;;;;;;;-1:-1:-1;14555:306:0;;;;;:::i;:::-;;:::i;19564:264::-;;;;;;;;;;-1:-1:-1;19564:264:0;;;;;:::i;:::-;;:::i;27899:447::-;;;;;;;;;;-1:-1:-1;27899:447:0;;;;;:::i;:::-;;:::i;6803:33::-;;;;;;;;;;;;;;;;17265:197;;;;;;;;;;-1:-1:-1;17265:197:0;;;;;:::i;:::-;;:::i;16998:141::-;;;;;;;;;;;;;:::i;5805:42::-;;;;;;;;;;;;5843:4;5805:42;;30012:250;;;;;;;;;;-1:-1:-1;30012:250:0;;;;;:::i;:::-;;:::i;6730:25::-;;;;;;;;;;;;;;;;12986:112;;;;;;;;;;;;;:::i;:::-;;;7344:4:1;7332:17;;;7314:36;;7302:2;7287:18;12986:112:0;7172:184:1;17819:544:0;;;;;;;;;;-1:-1:-1;17819:544:0;;;;;:::i;:::-;;:::i;17147:110::-;;;;;;;;;;-1:-1:-1;17147:110:0;;;;;:::i;:::-;;:::i;16269:140::-;;;;;;;;;;-1:-1:-1;16269:140:0;;;;;:::i;:::-;;:::i;19283:273::-;;;;;;;;;;-1:-1:-1;19283:273:0;;;;;:::i;:::-;;:::i;6127:21::-;;;;;;;;;;-1:-1:-1;6127:21:0;;;;-1:-1:-1;;;;;6127:21:0;;;5958:46;;;;;;;;;;;;6000:4;5958:46;;6843:34;;;;;;;;;;-1:-1:-1;6843:34:0;;;;;;;;20074:189;;;;;;;;;;-1:-1:-1;20074:189:0;;;;;:::i;:::-;;:::i;20978:217::-;;;;;;;;;;-1:-1:-1;20978:217:0;;;;;:::i;:::-;;:::i;11588:654::-;;;;;;;;;;-1:-1:-1;11588:654:0;;;;;:::i;:::-;;:::i;16417:127::-;;;;;;;;;;-1:-1:-1;16417:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;16508:28:0;16484:4;16508:28;;;:19;:28;;;;;;;;;16417:127;6884:36;;;;;;;;;;-1:-1:-1;6884:36:0;;;;;;;;;;;16552:134;;;;;;;;;;-1:-1:-1;16552:134:0;;;;;:::i;:::-;;:::i;6957:26::-;;;;;;;;;;;;;;;;16129:132;;;;;;;;;;-1:-1:-1;16129:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;16223:30:0;16199:4;16223:30;;;:21;:30;;;;;;;;;16129:132;19836:108;;;;;;;;;;;;;:::i;13506:198::-;;;;;;;;;;-1:-1:-1;13506:198:0;;;;;:::i;:::-;;:::i;12250:225::-;;;;;;;;;;;;;:::i;17629:182::-;;;;;;;;;;;;;:::i;15557:564::-;;;;;;;;;;-1:-1:-1;15557:564:0;;;;;:::i;:::-;;:::i;28354:120::-;;;;;;;;;;-1:-1:-1;28354:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28446:20:0;28422:4;28446:20;;;:11;:20;;;;;;;;;28354:120;13280:79;;;;;;;;;;-1:-1:-1;13350:6:0;;;;;-1:-1:-1;;;;;13350:6:0;13280:79;;14372:175;;;;;;;;;;;;;:::i;26702:695::-;;;;;;;;;;;;;:::i;13104:84::-;;;;;;;;;;;;;:::i;13712:165::-;;;;;;;;;;-1:-1:-1;13712:165:0;;;;;:::i;:::-;;:::i;27595:296::-;;;;;;;;;;-1:-1:-1;27595:296:0;;;;;:::i;:::-;;:::i;6762:34::-;;;;;;;;;;-1:-1:-1;6762:34:0;;;;;;;;21203:263;;;;;;;;;;-1:-1:-1;21203:263:0;;;;;:::i;:::-;;:::i;5615:181::-;;;;;;;;;;-1:-1:-1;5615:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5615:181:0;;;;;-1:-1:-1;;;5615:181:0;;;;;;;;;8524:6:1;8557:15;;;8539:34;;8609:15;;;8604:2;8589:18;;8582:43;8661:15;;;8641:18;;;8634:43;;;;8713:15;;;8708:2;8693:18;;8686:43;8766:15;;8760:3;8745:19;;8738:44;8819:15;;;8813:3;8798:19;;8791:44;8501:3;8486:19;5615:181:0;8239:602:1;18963:312:0;;;;;;;;;;-1:-1:-1;18963:312:0;;;;;:::i;:::-;;:::i;13365:133::-;;;;;;;;;;-1:-1:-1;13365:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13467:19:0;;;13449:7;13467:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13365:133;8890:1936;;;;;;:::i;:::-;;:::i;14869:680::-;;;;;;;;;;-1:-1:-1;14869:680:0;;;;;:::i;:::-;;:::i;27405:182::-;;;;;;;;;;;;;:::i;18371:584::-;;;;;;;;;;-1:-1:-1;18371:584:0;;;;;:::i;:::-;;:::i;6345:199::-;;;;;;;;;;-1:-1:-1;6345:199:0;;;;;;-1:-1:-1;;;;;6345:199:0;;;;;;;;;;;-1:-1:-1;;;;;11697:15:1;;;11679:34;;11749:15;;;;11744:2;11729:18;;11722:43;11591:18;6345:199:0;11412:359:1;20271:699:0;;;;;;;;;;-1:-1:-1;20271:699:0;;;;;:::i;:::-;;:::i;6649:39::-;;;;;;;;;;-1:-1:-1;6649:39:0;;;;;;;;;;;16842:148;;;;;;;;;;-1:-1:-1;16842:148:0;;;;;:::i;:::-;;:::i;13194:80::-;13242:13;13266:5;13259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13194:80;:::o;17470:151::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;;;;;;;;;17554:2:::1;17547:3;:9;;17539:30;;;::::0;-1:-1:-1;;;17539:30:0;;13099:2:1;17539:30:0::1;::::0;::::1;13081:21:1::0;13138:1;13118:18;;;13111:29;-1:-1:-1;;;13156:18:1;;;13149:38;13204:18;;17539:30:0::1;12897:331:1::0;17539:30:0::1;17580:11;::::0;:33:::1;::::0;-1:-1:-1;;;17580:33:0;;::::1;::::0;::::1;391:25:1::0;;;17580:11:0;;;::::1;-1:-1:-1::0;;;;;17580:11:0::1;::::0;:28:::1;::::0;364:18:1;;17580:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17470:151:::0;:::o;13885:161::-;13962:4;13979:37;13988:10;14000:7;14009:6;13979:8;:37::i;:::-;-1:-1:-1;14034:4:0;13885:161;;;;;:::o;19952:114::-;20048:9;;19999:7;;20044:13;;20048:9;;20044:2;:13;:::i;:::-;20026:14;;:32;;;;:::i;:::-;20019:39;;19952:114;:::o;28482:1522::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;28576:7:::1;28572:1425;;;-1:-1:-1::0;;;;;28609:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28608:21;28600:62;;;::::0;-1:-1:-1;;;28600:62:0;;15207:2:1;28600:62:0::1;::::0;::::1;15189:21:1::0;15246:2;15226:18;;;15219:30;15285;15265:18;;;15258:58;15333:18;;28600:62:0::1;15005:352:1::0;28600:62:0::1;-1:-1:-1::0;;;;;28681:16:0;::::1;28700:1;28681:16:::0;;;::::1;::::0;;;;;;;:20;28677:117:::1;;-1:-1:-1::0;;;;;28761:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;28741:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28722:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28677:117:::1;-1:-1:-1::0;;;;;28808:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28808:27:0::1;28831:4;28808:27;::::0;;28865:6:::1;::::0;;;::::1;28854:17;28850:80;;28891:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28891:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;28891:23:0::1;-1:-1:-1::0;;;;;28891:23:0;::::1;;::::0;;28850:80:::1;28482:1522:::0;;:::o;28572:1425::-:1;28952:7;28947:1050;;-1:-1:-1::0;;;;;28984:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28976:61;;;::::0;-1:-1:-1;;;28976:61:0;;15564:2:1;28976:61:0::1;::::0;::::1;15546:21:1::0;15603:2;15583:18;;;15576:30;15642;15622:18;;;15615:58;15690:18;;28976:61:0::1;15362:352:1::0;28976:61:0::1;29067:6;::::0;-1:-1:-1;;;;;29067:6:0;;::::1;29056:17:::0;;::::1;::::0;29052:934:::1;;29132:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;29113:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29094:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;29161:7:::1;:16:::0;;;;;:20;;;29200:11:::1;:20:::0;;;:28;;-1:-1:-1;;29200:28:0::1;::::0;;28482:1522;;:::o;29052:934::-:1;29254:9;:16:::0;29274:1:::1;29254:21:::0;29250:736:::1;;29334:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;29315:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29296:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;29363:7:::1;:16:::0;;;;;:20;;;29402:11:::1;:20:::0;;;:28;;-1:-1:-1;;29402:28:0::1;::::0;;29449:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29449:15:0;;;;;-1:-1:-1;;;;;;29449:15:0::1;::::0;;;;;28482:1522;;:::o;29250:736::-:1;29510:9;29505:466;29529:9;:16:::0;29525:20;::::1;29505:466;;;29595:7;-1:-1:-1::0;;;;;29579:23:0::1;:9;29589:1;29579:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29579:12:0::1;:23:::0;29575:377:::1;;29646:9;29656:16:::0;;:20:::1;::::0;29675:1:::1;::::0;29656:20:::1;:::i;:::-;29646:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29631:9:::1;:12:::0;;-1:-1:-1;;;;;29646:31:0;;::::1;::::0;29641:1;;29631:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;29631:46:0::1;;;;;-1:-1:-1::0;;;;;29631:46:0::1;;;;;;29742:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;29723:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29704:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;29779:7:::1;:16:::0;;;;;:20;;;29826:11:::1;:20:::0;;;:28;;-1:-1:-1;;29826:28:0::1;::::0;;29881:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29881:15:0;;;;;-1:-1:-1;;;;;;29881:15:0::1;::::0;;;;;29505:466:::1;28482:1522:::0;;:::o;29575:377::-:1;29547:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29505:466;;;;28482:1522:::0;;:::o;12865:115::-;12920:7;12935;;12946:1;12935:12;12931:31;;12951:8;;;12931:31;-1:-1:-1;12970:7:0;;;12865:115::o;14555:306::-;-1:-1:-1;;;;;14676:19:0;;14655:4;14676:19;;;:11;:19;;;;;;;;14696:10;14676:31;;;;;;;;-1:-1:-1;;14676:52:0;14672:126;;-1:-1:-1;;;;;14745:19:0;;;;;;:11;:19;;;;;;;;14765:10;14745:31;;;;;;;:41;;14780:6;;14745:19;:41;;14780:6;;14745:41;:::i;:::-;;;;-1:-1:-1;;14672:126:0;14817:36;14827:6;14835:9;14846:6;14817:9;:36::i;:::-;14810:43;14555:306;-1:-1:-1;;;;14555:306:0:o;19564:264::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;19706:3:::1;19696:7;;:13;;;;:::i;:::-;19684:7;19673;19663;;:17;;;;:::i;:::-;19662:29;;;;:::i;:::-;:48;;19654:109;;;::::0;-1:-1:-1;;;19654:109:0;;16631:2:1;19654:109:0::1;::::0;::::1;16613:21:1::0;16670:2;16650:18;;;16643:30;16709:34;16689:18;;;16682:62;16780:18;16760;;;16753:46;16816:19;;19654:109:0::1;16429:412:1::0;19654:109:0::1;19813:7;19802;19792;;:17;;;;:::i;:::-;19791:29;;;;:::i;:::-;19774:14;:46:::0;-1:-1:-1;;19564:264:0:o;27899:447::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;28034:7:::1;:14;28015:8;:15;:33;28007:67;;;::::0;-1:-1:-1;;;28007:67:0;;17048:2:1;28007:67:0::1;::::0;::::1;17030:21:1::0;17087:2;17067:18;;;17060:30;17126:23;17106:18;;;17099:51;17167:18;;28007:67:0::1;16846:345:1::0;28007:67:0::1;28090:8;28085:254;28108:8;:15;28104:1;:19;;;28085:254;;;28193:9;::::0;28189:13:::1;::::0;28193:9:::1;;28189:2;:13;:::i;:::-;28178:7;28186:1;28178:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28153:21;28163:10;28153:9;:21::i;:::-;:49;;28145:80;;;::::0;-1:-1:-1;;;28145:80:0;;17398:2:1;28145:80:0::1;::::0;::::1;17380:21:1::0;17437:2;17417:18;;;17410:30;17476:20;17456:18;;;17449:48;17514:18;;28145:80:0::1;17196:342:1::0;28145:80:0::1;28240:87;28257:10;28269:8;28278:1;28269:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;28297:9:::1;::::0;28293:13:::1;::::0;28297:9:::1;;28293:2;:13;:::i;:::-;28282:7;28290:1;28282:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28308:5;28315::::0;28322:4:::1;28240:16;:87::i;:::-;-1:-1:-1::0;28125:3:0;::::1;::::0;::::1;:::i;:::-;;;;28085:254;;17265:197:::0;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;17387:11:::1;::::0;:67:::1;::::0;-1:-1:-1;;;17387:67:0;;17977:14:1;;17970:22;17387:67:0::1;::::0;::::1;17952:41:1::0;18036:14;;18029:22;18009:18;;;18002:50;18095:14;;18088:22;18068:18;;;18061:50;18154:14;;18147:22;18127:18;;;18120:50;17387:11:0;;;::::1;-1:-1:-1::0;;;;;17387:11:0::1;::::0;:26:::1;::::0;17924:19:1;;17387:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17265:197:::0;;;;:::o;16998:141::-;17051:7;17108:21;17126:1;17108:9;:21::i;:::-;17090:15;6186:42;17090:9;:15::i;:::-;:39;;;;:::i;:::-;17079:7;;:51;;;;:::i;30012:250::-;30078:7;30117;;30106;:18;;30098:73;;;;-1:-1:-1;;;30098:73:0;;18513:2:1;30098:73:0;;;18495:21:1;18552:2;18532:18;;;18525:30;18591:34;18571:18;;;18564:62;-1:-1:-1;;;18642:18:1;;;18635:40;18692:19;;30098:73:0;18311:406:1;30098:73:0;30182:19;30205:10;:8;:10::i;:::-;30182:33;-1:-1:-1;30233:21:0;30182:33;30233:7;:21;:::i;:::-;30226:28;30012:250;-1:-1:-1;;;30012:250:0:o;12986:112::-;13038:5;13051:7;;13062:1;13051:12;13047:31;;13067:8;;;13047:31;-1:-1:-1;13086:9:0;;;;;12986:112::o;17819:544::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;17927:14:::1;::::0;::::1;;17926:15;17918:45;;;::::0;-1:-1:-1;;;17918:45:0;;18924:2:1;17918:45:0::1;::::0;::::1;18906:21:1::0;18963:2;18943:18;;;18936:30;19002:19;18982:18;;;18975:47;19039:18;;17918:45:0::1;18722:341:1::0;17918:45:0::1;5843:4;17982:6;:21;;;;:65;;;;;5893:4;18024:7;:23;;;;17982:65;:117;;;;;5947:4;18068:11;:31;;;;17982:117;17974:170;;;::::0;-1:-1:-1;;;17974:170:0;;19270:2:1;17974:170:0::1;::::0;::::1;19252:21:1::0;19309:2;19289:18;;;19282:30;19348:25;19328:18;;;19321:53;19391:18;;17974:170:0::1;19068:347:1::0;17974:170:0::1;6000:4;18163:16;18172:7:::0;18163:6;:16:::1;:::i;:::-;:35;;;;18155:80;;;::::0;-1:-1:-1;;;18155:80:0;;19795:2:1;18155:80:0::1;::::0;::::1;19777:21:1::0;;;19814:18;;;19807:30;19873:34;19853:18;;;19846:62;19925:18;;18155:80:0::1;19593:356:1::0;18155:80:0::1;18246:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;18282:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;18320:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17819:544::o;17147:110::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;17216:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;17216:33:0;;-1:-1:-1;;;;;178:55:1;;;17216:33:0::1;::::0;::::1;160:74:1::0;17216:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;17216:33:0::1;14:226:1::0;16269:140:0;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;-1:-1:-1;;;;;16361:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;16361:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16269:140::o;19283:273::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;19428:4:::1;19414:7;;19424:1;19414:11;;;;:::i;:::-;:18;;;;:::i;:::-;19402:7;19391;19381;;:17;;;;:::i;:::-;19380:29;;;;:::i;:::-;:53;;19372:121;;;::::0;-1:-1:-1;;;19372:121:0;;20156:2:1;19372:121:0::1;::::0;::::1;20138:21:1::0;20195:2;20175:18;;;20168:30;20234:34;20214:18;;;20207:62;20305:25;20285:18;;;20278:53;20348:19;;19372:121:0::1;19954:419:1::0;19372:121:0::1;19541:7;19530;19520;;:17;;;;:::i;:::-;19519:29;;;;:::i;:::-;19504:12;:44:::0;-1:-1:-1;;19283:273:0:o;20074:189::-;20203:6;;20165:7;;6047:5;;20213:21;;20193:17;;-1:-1:-1;;;;;20203:6:0;20193:9;:17::i;:::-;:41;;;;:::i;:::-;20192:62;;;;:::i;20978:217::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;21108:3:::1;21082:22;:29;;21074:64;;;::::0;-1:-1:-1;;;21074:64:0;;20580:2:1;21074:64:0::1;::::0;::::1;20562:21:1::0;20619:2;20599:18;;;20592:30;20658:24;20638:18;;;20631:52;20700:18;;21074:64:0::1;20378:346:1::0;21074:64:0::1;21149:13;:38:::0;20978:217::o;11588:654::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;-1:-1:-1;;;;;11667:22:0;::::1;11659:96;;;::::0;-1:-1:-1;;;11659:96:0;;20931:2:1;11659:96:0::1;::::0;::::1;20913:21:1::0;20970:2;20950:18;;;20943:30;21009:34;20989:18;;;20982:62;21080:31;21060:18;;;21053:59;21129:19;;11659:96:0::1;20729:425:1::0;11659:96:0::1;-1:-1:-1::0;;;;;;;11774:16:0;::::1;::::0;11766:90:::1;;;::::0;-1:-1:-1;;;11766:90:0;;20931:2:1;11766:90:0::1;::::0;::::1;20913:21:1::0;20970:2;20950:18;;;20943:30;21009:34;20989:18;;;20982:62;21080:31;21060:18;;;21053:59;21129:19;;11766:90:0::1;20729:425:1::0;11766:90:0::1;11887:6;::::0;11867:34:::1;::::0;11887:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11887:6:0::1;11895:5;11867:19;:34::i;:::-;11912:35;11932:8;11942:4;11912:19;:35::i;:::-;11982:6;::::0;11992:1:::1;::::0;11972:17:::1;::::0;11982:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11982:6:0::1;11972:9;:17::i;:::-;:21;11968:127;;;12027:6;::::0;12010:73:::1;::::0;12027:6:::1;::::0;::::1;-1:-1:-1::0;;;;;12027:6:0::1;12035:8:::0;12045:17:::1;12027:6:::0;12045:9:::1;:17::i;12010:73::-;;11968:127;12134:6;::::0;;-1:-1:-1;;;;;12151:17:0;;::::1;12134:6;12151:17:::0;;::::1;-1:-1:-1::0;;;;;;12151:17:0;::::1;;::::0;;;12184:40:::1;::::0;12134:6;;;::::1;;::::0;;;12184:40:::1;::::0;12115:16:::1;::::0;12184:40:::1;11648:594;11588:654:::0;:::o;16552:134::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;-1:-1:-1;;;;;16640:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;16640:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16552:134::o;19836:108::-;19926:9;;19879:7;;19922:13;;19926:9;;19922:2;:13;:::i;:::-;19906:12;;:30;;;;:::i;13506:198::-;-1:-1:-1;;;;;13596:20:0;;13572:7;13596:20;;;:11;:20;;;;;;;;13592:49;;;-1:-1:-1;;;;;;13625:16:0;;;;;:7;:16;;;;;;;13506:198::o;13592:49::-;-1:-1:-1;;;;;13679:16:0;;:7;:16;;;;;;;;;;;13659:37;;:19;:37::i;12250:225::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;12329:6:::1;::::0;12309:34:::1;::::0;12329:6:::1;::::0;::::1;-1:-1:-1::0;;;;;12329:6:0::1;12337:5;12309:19;:34::i;:::-;12373:6;::::0;;-1:-1:-1;;;;;;12390:19:0;::::1;::::0;;;12425:42:::1;::::0;12373:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;12373:6:0::1;::::0;-1:-1:-1;;12373:6:0;;12425:42:::1;::::0;-1:-1:-1;;12425:42:0::1;12298:177;12250:225::o:0;17629:182::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;17782:14:::1;:21:::0;;-1:-1:-1;;17782:21:0::1;17799:4;17782:21;::::0;;17629:182::o;15557:564::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;15639:7:::1;15634:480;;-1:-1:-1::0;;;;;15663:13:0;;::::1;15679:5;15663:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15663:21:0::1;::::0;;15699:11:::1;::::0;:34;;-1:-1:-1;;;15699:34:0;;::::1;::::0;::::1;21327:74:1::0;;;;21417:18;;;21410:50;;;;15699:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;21300:18:1;;15699:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28482:1522:::0;;:::o;15634:480::-:1;15770:17;::::0;:22;15766:135:::1;;15859:6;15839:17;;15821:15;:35;;;;:::i;:::-;:44;15813:72;;;::::0;-1:-1:-1;;;15813:72:0;;21673:2:1;15813:72:0::1;::::0;::::1;21655:21:1::0;21712:2;21692:18;;;21685:30;21751:17;21731:18;;;21724:45;21786:18;;15813:72:0::1;21471:339:1::0;15813:72:0::1;-1:-1:-1::0;;;;;15924:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;15923:14;15915:54;;;::::0;-1:-1:-1;;;15915:54:0;;22017:2:1;15915:54:0::1;::::0;::::1;21999:21:1::0;22056:2;22036:18;;;22029:30;22095:29;22075:18;;;22068:57;22142:18;;15915:54:0::1;21815:351:1::0;15915:54:0::1;-1:-1:-1::0;;;;;15984:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;15984:20:0::1;16000:4;15984:20:::0;;::::1;::::0;;;16039:15:::1;16019:17;:35:::0;16069:11:::1;::::0;:33;;-1:-1:-1;;;16069:33:0;;::::1;::::0;::::1;21327:74:1::0;;;;21417:18;;;21410:50;16069:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;21300:18:1;;16069:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;14372:175:::0;11442:6;;14438:4;;11442:6;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;14487:9:::1;::::0;14455:62:::1;::::0;14472:4:::1;::::0;14487:9:::1;::::0;::::1;-1:-1:-1::0;;;;;14487:9:0::1;-1:-1:-1::0;;14455:8:0::1;:62::i;:::-;-1:-1:-1::0;14535:4:0::1;14372:175:::0;:::o;26702:695::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;26764:14:::1;::::0;::::1;;26763:15;26755:52;;;::::0;-1:-1:-1;;;26755:52:0;;22373:2:1;26755:52:0::1;::::0;::::1;22355:21:1::0;22412:2;22392:18;;;22385:30;22451:26;22431:18;;;22424:54;22495:18;;26755:52:0::1;22171:348:1::0;26755:52:0::1;26826:16;::::0;::::1;::::0;::::1;;;26818:53;;;::::0;-1:-1:-1;;;26818:53:0;;22726:2:1;26818:53:0::1;::::0;::::1;22708:21:1::0;22765:2;22745:18;;;22738:30;22804:26;22784:18;;;22777:54;22848:18;;26818:53:0::1;22524:348:1::0;26818:53:0::1;26894:11;::::0;;;::::1;-1:-1:-1::0;;;;;26894:11:0::1;26882:106;;26936:11;:40:::0;;-1:-1:-1;;26936:40:0::1;26970:4;26936:40:::0;::::1;;::::0;;26882:106:::1;27002:11;::::0;27024:6:::1;::::0;27079:9:::1;::::0;27002:87:::1;::::0;-1:-1:-1;;;27002:87:0;;-1:-1:-1;;;;;27024:6:0;;::::1;27002:87;::::0;::::1;23100:74:1::0;23222:10;27039:12:0::1;23210:23:1::0;23190:18;;;23183:51;23282:18;27061:15:0::1;23270:31:1::0;23250:18;;;23243:59;27079:9:0::1;::::0;;::::1;23318:18:1::0;;;23311:45;27002:11:0;;;::::1;;::::0;:21:::1;::::0;23072:19:1;;27002:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26998:103:::0;27115:11:::1;::::0;27146:6:::1;::::0;-1:-1:-1;;;;;27115:11:0;;;::::1;::::0;::::1;::::0;:20:::1;::::0;27136:17:::1;::::0;27146:6:::1;27136:9;:17::i;:::-;27115:39;;;;;;;;;;;;;391:25:1::0;;379:2;364:18;;245:177;27115:39:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;27115:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27115:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27111:207:::0;::::1;;27226:13;:29:::0;;;;27270:10:::1;:27:::0;27111:207:::1;27328:14;:21:::0;;-1:-1:-1;;27328:21:0::1;27345:4;27328:21;::::0;;27374:15:::1;27360:11;:29:::0;26702:695::o;13104:84::-;13154:13;13178:7;13171:14;;;;;:::i;13712:165::-;13790:4;13807:40;13817:10;13829:9;13840:6;13807:9;:40::i;:::-;-1:-1:-1;13865:4:0;;13712:165;-1:-1:-1;;;13712:165:0:o;27595:296::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;27673:16:::1;::::0;::::1;::::0;::::1;;;27669:111;;;27731:4;-1:-1:-1::0;;;;;27714:22:0;::::1;::::0;27706:62:::1;;;::::0;-1:-1:-1;;;27706:62:0;;23819:2:1;27706:62:0::1;::::0;::::1;23801:21:1::0;23858:2;23838:18;;;23831:30;23897:29;23877:18;;;23870:57;23944:18;;27706:62:0::1;23617:351:1::0;27706:62:0::1;27844:6;::::0;27852:30:::1;::::0;-1:-1:-1;;;27852:30:0;;27876:4:::1;27852:30;::::0;::::1;160:74:1::0;27812:5:0;;-1:-1:-1;;;;;27829:14:0;;::::1;::::0;::::1;::::0;27844:6:::1;::::0;::::1;::::0;;::::1;::::0;27829:14;;27852:15:::1;::::0;133:18:1;;27852:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27829:54;::::0;-1:-1:-1;;;;;;27829:54:0::1;::::0;;;;;;-1:-1:-1;;;;;24354:55:1;;;27829:54:0::1;::::0;::::1;24336:74:1::0;24426:18;;;24419:34;24309:18;;27829:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21203:263::-:0;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;21312:19:::1;:33:::0;;-1:-1:-1;;21312:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;21356:22:::1;:47:::0;;-1:-1:-1;;21356:47:0::1;::::0;::::1;;;::::0;;21419:39:::1;::::0;1841:41:1;;;21419:39:0::1;::::0;1829:2:1;1814:18;21419:39:0::1;;;;;;;;21203:263:::0;;:::o;18963:312::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;-1:-1:-1;;;;;19077:23:0;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;19104:25:0;::::1;::::0;::::1;19077:52;19069:88;;;::::0;-1:-1:-1;;;19069:88:0;;24916:2:1;19069:88:0::1;::::0;::::1;24898:21:1::0;24955:2;24935:18;;;24928:30;24994:25;24974:18;;;24967:53;25037:18;;19069:88:0::1;24714:347:1::0;19069:88:0::1;19168:11;:42:::0;;-1:-1:-1;;;;;19168:42:0;;::::1;-1:-1:-1::0;;;;;;19168:42:0;;::::1;;::::0;;;19221:23;:46;;;;;::::1;::::0;::::1;;::::0;;18963:312::o;8890:1936::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;9043:19:::1;::::0;::::1;;9042:20;9034:34;;;::::0;-1:-1:-1;;;9034:34:0;;25268:2:1;9034:34:0::1;::::0;::::1;25250:21:1::0;25307:1;25287:18;;;25280:29;-1:-1:-1;;;25325:18:1;;;25318:31;25366:18;;9034:34:0::1;25066:324:1::0;9034:34:0::1;9087:33:::0;;::::1;9079:47;;;::::0;-1:-1:-1;;;9079:47:0;;25597:2:1;9079:47:0::1;::::0;::::1;25579:21:1::0;25636:1;25616:18;;;25609:29;-1:-1:-1;;;25654:18:1;;;25647:31;25695:18;;9079:47:0::1;25395:324:1::0;9079:47:0::1;9169:1;9145:21;:25;:42;;;;9186:1;9174:9;:13;9145:42;9137:78;;;::::0;-1:-1:-1;;;9137:78:0;;25926:2:1;9137:78:0::1;::::0;::::1;25908:21:1::0;25965:2;25945:18;;;25938:30;26004:25;25984:18;;;25977:53;26047:18;;9137:78:0::1;25724:347:1::0;9137:78:0::1;9252:12;9226:11;;:39;;;;;-1:-1:-1::0;;;;;9226:39:0::1;;;;;-1:-1:-1::0;;;;;9226:39:0::1;;;;;;9280:11;;;;;;;;;-1:-1:-1::0;;;;;9280:11:0::1;-1:-1:-1::0;;;;;9280:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;9280:29:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;9276:456;;9709:11;::::0;-1:-1:-1;;;9709:11:0;;27572:2:1;9709:11:0::1;::::0;::::1;27554:21:1::0;27611:1;27591:18;;;27584:29;-1:-1:-1;;;27629:18:1;;;27622:31;27670:18;;9709:11:0::1;27370:324:1::0;9276:456:0::1;9432:5;:16;9440:8:::0;9432:5;:16:::1;:::i;:::-;-1:-1:-1::0;9463:7:0::1;:20;9473:10:::0;9463:7;:20:::1;:::i;:::-;-1:-1:-1::0;9498:14:0::1;:35:::0;;;9548:9:::1;:24:::0;;-1:-1:-1;;9548:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;9614:13:::1;::::0;:2:::1;:13;:::i;:::-;9597:14;;:30;;;;:::i;:::-;9587:7;:40:::0;;;9660:13:::1;::::0;-1:-1:-1;;9660:13:0::1;:::i;:::-;9653:21;::::0;-1:-1:-1;;9653:21:0::1;:::i;:::-;9642:7;:33:::0;-1:-1:-1;;;;9762:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;9762:9:0::1;-1:-1:-1::0;;;;;9762:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9751:42:0::1;;9794:9;;;;;;;;;-1:-1:-1::0;;;;;9794:9:0::1;-1:-1:-1::0;;;;;9794:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9751:75;::::0;-1:-1:-1;;;;;;9751:75:0::1;::::0;;;;;;-1:-1:-1;;;;;11697:15:1;;;9751:75:0::1;::::0;::::1;11679:34:1::0;9820:4:0::1;11729:18:1::0;;;11722:43;11591:18;;9751:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9742:6;:84:::0;;-1:-1:-1;;;;;;9742:84:0::1;-1:-1:-1::0;;;;;9742:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;9837:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;9837:22:0::1;-1:-1:-1::0;9837:22:0::1;::::0;;9886:7:::1;::::0;9901:3:::1;::::0;9886:11:::1;::::0;:7;:11:::1;:::i;:::-;9885:19;;;;:::i;:::-;9870:12;:34:::0;9933:7:::1;::::0;9948:3:::1;::::0;9933:11:::1;::::0;9943:1:::1;9933:11;:::i;:::-;9932:19;;;;:::i;:::-;9915:14;:36:::0;9962:19:::1;:26:::0;;-1:-1:-1;;9962:26:0::1;9984:4;9962:26;::::0;;;10017:7:::1;::::0;-1:-1:-1;;;;;9962:26:0::1;10007:6:::0;;;::::1;::::0;::::1;9962:19;9999:15:::0;;;;;;;;;;:25;;;;10061:6;;10069:7:::1;::::0;10040:37;;10061:6;;::::1;;::::0;9962:19;10040:37:::1;::::0;::::1;::::0;391:25:1;;;379:2;364:18;;245:177;10040:37:0::1;;;;;;;;10122:9;::::0;10090:62:::1;::::0;10107:4:::1;::::0;10122:9:::1;::::0;::::1;-1:-1:-1::0;;;;;10122:9:0::1;-1:-1:-1::0;;10090:8:0::1;:62::i;:::-;10172:6;::::0;10188:9:::1;::::0;10163:55:::1;::::0;-1:-1:-1;;;;;10172:6:0::1;::::0;;;::::1;::::0;::::1;::::0;10188:9;;;::::1;;-1:-1:-1::0;;10163:8:0::1;:55::i;:::-;10233:9;10229:194;10248:19:::0;;::::1;10229:194;;;10322:9;::::0;10288:14:::1;::::0;10318:13:::1;::::0;10322:9:::1;;10318:2;:13;:::i;:::-;10305:7;;10313:1;10305:10;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;10363:6;::::0;10288:43;;-1:-1:-1;10346:65:0::1;::::0;10363:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10363:6:0::1;10371:8:::0;;10380:1;10371:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10384:6;10392:5;10399::::0;10406:4:::1;10346:16;:65::i;:::-;;10273:150;10269:3;;;;;:::i;:::-;;;;10229:194;;;-1:-1:-1::0;10450:6:0::1;::::0;10433:78:::1;::::0;10450:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10450:6:0::1;10466:4;10473:17;10450:6:::0;10473:9:::1;:17::i;10433:78::-;-1:-1:-1::0;10522:9:0::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;10522:9:0::1;:25;10555:21;10600:4;10620:24;10600:4:::0;10620:9:::1;:24::i;:::-;10745:6;::::0;10522:270:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;10522:270:0;;;-1:-1:-1;;;;;30990:15:1;;;10522:270:0::1;::::0;::::1;30972:34:1::0;31022:18;;;31015:34;;;;10659:1:0::1;31065:18:1::0;;;31058:34;;;31108:18;;;31101:34;10745:6:0::1;::::0;::::1;::::0;;::::1;31151:19:1::0;;;31144:44;10766:15:0::1;31204:19:1::0;;;31197:35;30883:19;;10522:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10803:15;:13;:15::i;14869:680::-:0;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;14949:16:::1;::::0;::::1;::::0;::::1;;;14948:17;14940:60;;;::::0;-1:-1:-1;;;14940:60:0;;31756:2:1;14940:60:0::1;::::0;::::1;31738:21:1::0;31795:2;31775:18;;;31768:30;31834:32;31814:18;;;31807:60;31884:18;;14940:60:0::1;31554:354:1::0;14940:60:0::1;15011:20;15044:9;15011:43;;15065:16;15095:10;-1:-1:-1::0;;;;;15095:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15084:40:0::1;;15133:4;15140:10;-1:-1:-1::0;;;;;15140:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15084:74;::::0;-1:-1:-1;;;;;;15084:74:0::1;::::0;;;;;;-1:-1:-1;;;;;11697:15:1;;;15084:74:0::1;::::0;::::1;11679:34:1::0;11749:15;;11729:18;;;11722:43;11591:18;;15084:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15177:6;::::0;-1:-1:-1;;;;;15177:6:0;;::::1;15187:5;15169:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;15169:23:0::1;::::0;;15065:93;;-1:-1:-1;15207:22:0;::::1;15203:200;;15266:10;-1:-1:-1::0;;;;;15266:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15255:43:0::1;;15307:4;15314:10;-1:-1:-1::0;;;;;15314:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15255:77;::::0;-1:-1:-1;;;;;;15255:77:0::1;::::0;;;;;;-1:-1:-1;;;;;11697:15:1;;;15255:77:0::1;::::0;::::1;11679:34:1::0;11749:15;;11729:18;;;11722:43;11591:18;;15255:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15246:6;:86:::0;;-1:-1:-1;;;;;;15246:86:0::1;-1:-1:-1::0;;;;;15246:86:0;;;::::1;::::0;;;::::1;::::0;;15203:200:::1;;;15374:6;:17:::0;;-1:-1:-1;;;;;;15374:17:0::1;-1:-1:-1::0;;;;;15374:17:0;::::1;;::::0;;15203:200:::1;15413:9;:22:::0;;-1:-1:-1;;;;;;15413:22:0::1;;-1:-1:-1::0;;;;;15413:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;15454:6:::1;::::0;;::::1;-1:-1:-1::0;15446:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;15446:22:0::1;-1:-1:-1::0;15446:22:0::1;::::0;;15511:9;;15479:62:::1;::::0;15496:4:::1;::::0;15511:9;::::1;;-1:-1:-1::0;;15479:8:0::1;:62::i;27405:182::-:0;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;27472:16:::1;::::0;::::1;::::0;::::1;;;27471:17;27463:58;;;::::0;-1:-1:-1;;;27463:58:0;;32115:2:1;27463:58:0::1;::::0;::::1;32097:21:1::0;32154:2;32134:18;;;32127:30;32193;32173:18;;;32166:58;32241:18;;27463:58:0::1;31913:352:1::0;27463:58:0::1;27540:6;::::0;27532:47:::1;::::0;-1:-1:-1;;;;;27540:6:0::1;::::0;;::::1;::::0;;;::::1;::::0;27557:21:::1;27532:47:::0;::::1;;;::::0;::::1;::::0;;;27557:21;27540:6;27532:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27405:182::o:0;18371:584::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;18508:7:::1;:31:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;18550:29:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;18630:33:0;18590:29;;;::::1;;-1:-1:-1::0;;18630:33:0;;;;;::::1;;;-1:-1:-1::0;;18674:19:0::1;-1:-1:-1::0;;;18674:19:0;;::::1;::::0;;;::::1;;::::0;;18630:33;18724:21:::1;18590:29:::0;18550;18724:21:::1;:::i;:::-;:35;;;;:::i;:::-;18704:7;:55:::0;;-1:-1:-1;;18704:55:0::1;-1:-1:-1::0;;;18704:55:0::1;::::0;;::::1;;;::::0;;18805:9:::1;:17:::0;-1:-1:-1;;18786:36:0::1;::::0;18805:17;;::::1;::::0;::::1;::::0;18786:16:::1;:36;:::i;:::-;18882:7;:12:::0;18770:52:::1;::::0;;::::1;::::0;-1:-1:-1;18770:52:0;;-1:-1:-1;;;18882:12:0;::::1;::::0;::::1;::::0;18841:38:::1;::::0;18861:18;;::::1;::::0;-1:-1:-1;;;18841:17:0;::::1;;:38;:::i;:::-;:53;;;;:::i;:::-;:62;;;;18833:114;;;::::0;-1:-1:-1;;;18833:114:0;;32472:2:1;18833:114:0::1;::::0;::::1;32454:21:1::0;32511:2;32491:18;;;32484:30;32550:34;32530:18;;;32523:62;-1:-1:-1;;;32601:18:1;;;32594:37;32648:19;;18833:114:0::1;32270:403:1::0;20271:699:0;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;20471:16:::1;20451;20441:7;;:26;;;;:::i;:::-;20440:47;;;;:::i;:::-;20424:13;:63:::0;20512:7:::1;::::0;20539:13;;20512:23:::1;::::0;20522:13;;20512:23:::1;:::i;:::-;20511:41;;;;:::i;:::-;20498:10;:54:::0;;;20571:13:::1;::::0;:27:::1;;20563:73;;;::::0;-1:-1:-1;;;20563:73:0;;32880:2:1;20563:73:0::1;::::0;::::1;32862:21:1::0;32919:2;32899:18;;;32892:30;32958:34;32938:18;;;32931:62;-1:-1:-1;;;33009:18:1;;;33002:31;33050:19;;20563:73:0::1;32678:397:1::0;20563:73:0::1;20680:6;::::0;6047:5:::1;::::0;20670:17:::1;::::0;-1:-1:-1;;;;;20680:6:0::1;20670:9;:17::i;:::-;:23;::::0;20690:3:::1;20670:23;:::i;:::-;20669:44;;;;:::i;:::-;20655:10;;:58;;20647:106;;;::::0;-1:-1:-1;;;20647:106:0;;33282:2:1;20647:106:0::1;::::0;::::1;33264:21:1::0;33321:2;33301:18;;;33294:30;33360:34;33340:18;;;33333:62;-1:-1:-1;;;33411:18:1;;;33404:33;33454:19;;20647:106:0::1;33080:399:1::0;20647:106:0::1;20796:9;20786:7;;:19;;;;:::i;:::-;20772:10;;:33;;20764:92;;;::::0;-1:-1:-1;;;20764:92:0;;33686:2:1;20764:92:0::1;::::0;::::1;33668:21:1::0;33725:2;33705:18;;;33698:30;33764:34;33744:18;;;33737:62;-1:-1:-1;;;33815:18:1;;;33808:44;33869:19;;20764:92:0::1;33484:410:1::0;20764:92:0::1;20902:9;20892:7;;:19;;;;:::i;:::-;20875:13;;:36;;20867:95;;;::::0;-1:-1:-1;;;20867:95:0;;33686:2:1;20867:95:0::1;::::0;::::1;33668:21:1::0;33725:2;33705:18;;;33698:30;33764:34;33744:18;;;33737:62;-1:-1:-1;;;33815:18:1;;;33808:44;33869:19;;20867:95:0::1;33484:410:1::0;20867:95:0::1;20271:699:::0;;;;:::o;16842:148::-;11442:6;;;;;-1:-1:-1;;;;;11442:6:0;11452:10;11442:20;11434:50;;;;-1:-1:-1;;;11434:50:0;;12753:2:1;11434:50:0;;;12735:21:1;12792:2;12772:18;;;12765:30;-1:-1:-1;;;;;;;;;;;12811:18:1;;;12804:47;12868:18;;11434:50:0;12551:341:1;11434:50:0;-1:-1:-1;;;;;16938:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;16938:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16842:148::o;14054:310::-;-1:-1:-1;;;;;14149:20:0;;14141:52;;;;-1:-1:-1;;;14141:52:0;;34101:2:1;14141:52:0;;;34083:21:1;34140:2;34120:18;;;34113:30;-1:-1:-1;;;34159:18:1;;;34152:49;34218:18;;14141:52:0;33899:343:1;14141:52:0;-1:-1:-1;;;;;14212:21:0;;14204:53;;;;-1:-1:-1;;;14204:53:0;;34101:2:1;14204:53:0;;;34083:21:1;34140:2;34120:18;;;34113:30;-1:-1:-1;;;34159:18:1;;;34152:49;34218:18;;14204:53:0;33899:343:1;14204:53:0;-1:-1:-1;;;;;14270:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14323:33;;391:25:1;;;14323:33:0;;364:18:1;14323:33:0;;;;;;;14054:310;;;:::o;34017:1155::-;34096:7;;34131;;34235:6;;-1:-1:-1;;;;;34235:6:0;34059:7;34223:19;;;:11;:19;;;;;;34059:7;;34096;34131;34096;;34131;;34223:19;;34219:437;;;34286:6;;-1:-1:-1;;;;;34286:6:0;;;34259:16;34278:15;;;;;;;;;;;;34286:6;34327:15;;;;;;;34368:11;;34278:15;;34327;;34368:11;;;;34392:4;34360:37;:119;;;;;34420:13;34437:2;34420:19;:58;;;;34460:13;34477:1;34460:18;34420:58;34357:137;;;34483:8;;;34357:137;34523:7;34512:8;:18;:40;;;;34545:7;34534:8;:18;34512:40;34508:68;;;34561:15;34570:6;34561;:15;:::i;:::-;34554:22;;;;;;;;34017:1155;:::o;34508:68::-;34591:19;34602:8;34591:19;;:::i;:::-;;-1:-1:-1;34625:19:0;34636:8;34625:19;;:::i;:::-;;;34244:412;;34219:437;34670:9;:16;:20;34666:400;;34712:7;34707:348;34729:9;:16;34725:20;;;;34707:348;;;34771:14;34788:7;:21;34796:9;34806:1;34796:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34796:12:0;34788:21;;;;;;;;;;;;;34853:9;:12;;34788:21;;-1:-1:-1;34796:12:0;;;;34853:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34853:12:0;34845:21;;;;;;;;;;;;;;-1:-1:-1;34889:16:0;;;;:36;;;34918:7;34909:6;:16;34889:36;34885:64;;;34934:15;34943:6;34934;:15;:::i;:::-;34927:22;;;;;;;;;34017:1155;:::o;34885:64::-;34978:16;34988:6;34978:7;:16;:::i;:::-;34968:26;-1:-1:-1;35023:16:0;35033:6;35023:7;:16;:::i;:::-;35013:26;;34752:303;;34747:3;;;;;:::i;:::-;;;;34707:348;;;;34666:400;35090:15;35099:6;35090;:15;:::i;:::-;35080:7;:25;35076:53;;;35114:15;35123:6;35114;:15;:::i;:::-;35107:22;;;;;;34017:1155;:::o;35076:53::-;35147:17;35157:7;35147;:17;:::i;21928:2176::-;22007:4;-1:-1:-1;;;;;22032:18:0;;22024:68;;;;-1:-1:-1;;;22024:68:0;;34629:2:1;22024:68:0;;;34611:21:1;34668:2;34648:18;;;34641:30;34707:34;34687:18;;;34680:62;-1:-1:-1;;;34758:18:1;;;34751:35;34803:19;;22024:68:0;34427:401:1;22024:68:0;-1:-1:-1;;;;;22111:16:0;;22103:64;;;;-1:-1:-1;;;22103:64:0;;35035:2:1;22103:64:0;;;35017:21:1;35074:2;35054:18;;;35047:30;35113:34;35093:18;;;35086:62;-1:-1:-1;;;35164:18:1;;;35157:33;35207:19;;22103:64:0;34833:399:1;22103:64:0;22195:1;22186:6;:10;22178:64;;;;-1:-1:-1;;;22178:64:0;;35439:2:1;22178:64:0;;;35421:21:1;35478:2;35458:18;;;35451:30;35517:34;35497:18;;;35490:62;-1:-1:-1;;;35568:18:1;;;35561:39;35617:19;;22178:64:0;35237:405:1;22178:64:0;-1:-1:-1;;;;;22341:13:0;;22253:8;22341:13;;;:7;:13;;;;;;22253:8;;;;22341:13;;22337:162;;;22377:4;22371:10;;22337:162;;;-1:-1:-1;;;;;22403:11:0;;;;;;:7;:11;;;;;;;;22399:100;;;22438:4;22431:11;;22399:100;;;-1:-1:-1;22483:4:0;22399:100;22513:20;22524:4;22530:2;22513:10;:20::i;:::-;22509:874;;;22554:14;;;;22550:319;;22594:5;22589:265;;22624:34;;-1:-1:-1;;;22624:34:0;;35849:2:1;22624:34:0;;;35831:21:1;35888:2;35868:18;;;35861:30;35927:26;35907:18;;;35900:54;35971:18;;22624:34:0;35647:348:1;22589:265:0;-1:-1:-1;;;;;22689:31:0;;;;;;:25;:31;;;;;;;;22688:32;:66;;;;-1:-1:-1;;;;;;22725:29:0;;;;;;:25;:29;;;;;;;;22724:30;22688:66;22684:170;;;22779:55;;-1:-1:-1;;;22779:55:0;;36202:2:1;22779:55:0;;;36184:21:1;36241:2;36221:18;;;36214:30;36280:34;36260:18;;;36253:62;-1:-1:-1;;;36331:18:1;;;36324:43;36384:19;;22779:55:0;36000:409:1;22684:170:0;22887:3;:11;;;;22894:4;22887:11;22883:232;;;-1:-1:-1;;;;;22923:27:0;;;;;;:21;:27;;;;;;;;22922:28;:58;;;;-1:-1:-1;;;;;;22955:25:0;;;;;;:21;:25;;;;;;;;22954:26;22922:58;22918:182;;;23023:12;;23013:6;:22;;23005:75;;;;-1:-1:-1;;;23005:75:0;;36616:2:1;23005:75:0;;;36598:21:1;36655:2;36635:18;;;36628:30;36694:34;36674:18;;;36667:62;-1:-1:-1;;;36745:18:1;;;36738:38;36793:19;;23005:75:0;36414:404:1;23005:75:0;23147:9;;-1:-1:-1;;;;;23133:24:0;;;23147:9;;;;;23133:24;;;;:33;;;23162:4;23161:5;23133:33;23129:243;;;-1:-1:-1;;;;;23192:25:0;;;;;;:21;:25;;;;;;;;23187:170;;23276:14;;23266:6;23250:13;23260:2;23250:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;23242:95;;;;-1:-1:-1;;;23242:95:0;;37025:2:1;23242:95:0;;;37007:21:1;37064:2;37044:18;;;37037:30;37103:34;37083:18;;;37076:62;-1:-1:-1;;;37154:18:1;;;37147:40;37204:19;;23242:95:0;36823:406:1;23242:95:0;23399:4;23395:632;;;23425:6;;;;23420:596;;23456:19;;;;;;;23452:549;;;23500:28;23531:24;23549:4;23531:9;:24::i;:::-;23500:55;;23606:13;;23582:20;:37;23578:404;;23666:10;;23707:22;;;;23703:97;;;23764:13;;23754:6;;6047:5;;23764:13;23744:17;;-1:-1:-1;;;;;23754:6:0;23744:9;:17::i;:::-;:33;;;;:::i;:::-;23743:54;;;;:::i;:::-;23733:64;;23703:97;23854:7;23830:20;:31;23826:72;;23888:7;23865:30;;23826:72;23924:34;23937:20;23924:12;:34::i;:::-;23621:361;23578:404;23477:524;23452:549;24044:52;24061:4;24067:2;24071:6;24079:3;24084:4;24090:5;24044:16;:52::i;:::-;24037:59;21928:2176;-1:-1:-1;;;;;;;21928:2176:0:o;30527:1191::-;-1:-1:-1;;;;;30698:25:0;;30647:4;30698:25;;;:19;:25;;;;;;30679:4;;30698:25;;;:52;;-1:-1:-1;;;;;;30727:23:0;;;;;;:19;:23;;;;;;;;30698:52;30694:99;;;-1:-1:-1;30776:5:0;30694:99;30805:25;30833:55;30843:4;30849:2;30853:7;30862;30871:3;30876:4;30882:5;30833:9;:55::i;:::-;30933:14;;;;-1:-1:-1;;;;;30917:13:0;;:7;:13;;;;;;;;;;;30805:83;;-1:-1:-1;30917:30:0;;;:::i;:::-;-1:-1:-1;;;;;30901:13:0;;;:7;:13;;;;;;;;;;;:46;;;;30986:22;;;;30972:11;;;;;;;;;;:36;;30986:22;30972:36;:::i;:::-;-1:-1:-1;;;;;30958:11:0;;;:7;:11;;;;;;;;;;;:50;;;;31025:17;;;;;:11;:17;;;;;;;31021:89;;;-1:-1:-1;;;;;31075:13:0;;;;;;:7;:13;;;;;;:23;;31091:7;;31075:23;:::i;:::-;-1:-1:-1;;;;;31059:13:0;;;;;;:7;:13;;;;;:39;31021:89;-1:-1:-1;;;;;31124:15:0;;;;;;:11;:15;;;;;;;;31120:100;;;31184:22;;-1:-1:-1;;;;;31170:11:0;;31184:22;31170:11;;;:7;:11;;;;;;:36;;31184:22;31170:36;:::i;:::-;-1:-1:-1;;;;;31156:11:0;;;;;;:7;:11;;;;;:50;31120:100;31250:1;31236:6;:11;;;:15;:34;;;;31269:1;31255:6;:11;;;:15;31236:34;31232:89;;;31298:6;:11;;;31287:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31232:89:0;31351:2;-1:-1:-1;;;;;31336:42:0;31345:4;-1:-1:-1;;;;;31336:42:0;;31355:6;:22;;;31336:42;;;;391:25:1;;379:2;364:18;;245:177;31336:42:0;;;;;;;;31394:16;;;;;;;31389:298;;31427:28;31446:4;31452:2;31427:18;:28::i;:::-;31475:16;;;;;;;31474:17;:41;;;;;31495:20;31506:4;31512:2;31495:10;:20::i;:::-;31474:77;;;;-1:-1:-1;;;;;;31520:31:0;;;;;;:25;:31;;;;;;;;31519:32;31474:77;:111;;;;-1:-1:-1;;;;;;31556:29:0;;;;;;:25;:29;;;;;;;;31555:30;31474:111;:121;;;;;31590:5;31589:6;31474:121;31470:206;;;31616:44;;-1:-1:-1;;;31616:44:0;;37436:2:1;31616:44:0;;;37418:21:1;37475:2;37455:18;;;37448:30;37514:34;37494:18;;;37487:62;-1:-1:-1;;;37565:18:1;;;37558:32;37607:19;;31616:44:0;37234:398:1;31470:206:0;-1:-1:-1;31706:4:0;;30527:1191;-1:-1:-1;;;;;;;;30527:1191:0:o;21474:446::-;21575:6;;21543:4;;-1:-1:-1;;;;;21567:14:0;;;21575:6;;;;;21567:14;;;;:43;;-1:-1:-1;21604:6:0;;-1:-1:-1;;;;;21598:12:0;;;21604:6;;;;;21598:12;;21567:43;:79;;;;-1:-1:-1;21640:6:0;;;;;-1:-1:-1;;;;;21640:6:0;21627:9;:19;;21567:79;:118;;;;-1:-1:-1;;;;;;21664:21:0;;;;;;:17;:21;;;;;;;;21663:22;21567:118;:159;;;;-1:-1:-1;;;;;;21703:23:0;;;;;;:17;:23;;;;;;;;21702:24;21567:159;:186;;;;-1:-1:-1;;;;;;21743:10:0;;6186:42;21743:10;;21567:186;:219;;;;-1:-1:-1;;;;;;21770:16:0;;;;21567:219;:257;;;;-1:-1:-1;;;;;;21803:21:0;;21819:4;21803:21;;21567:257;:302;;;;-1:-1:-1;21857:11:0;;-1:-1:-1;;;;;21841:28:0;;;21857:11;;;;;21841:28;;21567:302;:345;;;;-1:-1:-1;;21900:11:0;;;;;-1:-1:-1;;;;;21900:11:0;;;21886:26;;;;;21560:352;-1:-1:-1;21474:446:0:o;24112:2011::-;7148:6;:13;;-1:-1:-1;;7148:13:0;7157:4;7148:13;;;24195:30:::1;::::0;;::::1;::::0;::::1;::::0;;24218:7:::1;24195:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24195:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24195:30:0;::::1;::::0;;::::1;::::0;;;;;;7148:6;24240:21;24236:60:::1;;24278:7;;;24236:60;24332:4;24312:26;::::0;;;:11:::1;:26;::::0;;;;;;;24347:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24347:9:0::1;24312:46:::0;;;;;;;;-1:-1:-1;;24312:67:0::1;24308:166;;24416:4;24396:26;::::0;;;:11:::1;:26;::::0;;;;;;;24431:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24431:9:0::1;24396:46:::0;;;;;;;-1:-1:-1;;24396:66:0;;24308:166:::1;24486:17;24571:1;24551:6;:16;;;24507:60;;24531:6;:16;;;24508:39;;:20;:39;;;;:::i;:::-;24507:60;;;;:::i;:::-;24506:66;;;;:::i;:::-;24486:86:::0;-1:-1:-1;24583:15:0::1;24601:32;24486:86:::0;24601:20;:32:::1;:::i;:::-;24678:16;::::0;;24692:1:::1;24678:16:::0;;;;;::::1;::::0;;24583:50;;-1:-1:-1;24654:21:0::1;::::0;24678:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24678:16:0::1;24654:40;;24723:4;24705;24710:1;24705:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24705:23:0::1;;;-1:-1:-1::0;;;;;24705:23:0::1;;;::::0;::::1;24749:9;;;;;;;;;-1:-1:-1::0;;;;;24749:9:0::1;-1:-1:-1::0;;;;;24749:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24739:4;24744:1;24739:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24739:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24782:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;24782:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;24857:7;;24879:1:::1;::::0;24895:4;;24922::::1;::::0;24942:15:::1;::::0;24782:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24778:233;;24993:7;;;;;;24778:233;25044:21;25023:18;25130:7:::0;25104:22:::1;25117:9:::0;25044:21;25104:22:::1;:::i;:::-;25103:34;;;;:::i;:::-;25076:61:::0;-1:-1:-1;25154:13:0;;25150:400:::1;;25188:9;::::0;:222:::1;::::0;-1:-1:-1;;;25188:222:0;;25265:4:::1;25188:222;::::0;::::1;30972:34:1::0;31022:18;;;31015:34;;;25317:1:0::1;31065:18:1::0;;;31058:34;;;31108:18;;;31101:34;6186:42:0::1;31151:19:1::0;;;31144:44;25380:15:0::1;31204:19:1::0;;;31197:35;25188:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;25188:9:0::1;::::0;:25:::1;::::0;25221:16;;30883:19:1;;25188:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25188:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25188:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25184:355;;25517:7;;;;;;;;25184:355;-1:-1:-1::0;;25435:40:0::1;::::0;;38842:25:1;;;38898:2;38883:18;;38876:34;;;25435:40:0::1;::::0;-1:-1:-1;38815:18:1;25435:40:0::1;;;;;;;25184:355;25562:30;25576:16:::0;25562:30;::::1;:::i;:::-;;;25623:6;:16;;;25603:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;25738:16:::1;::::0;::::1;::::0;25716:18:::1;::::0;::::1;::::0;25650:12:::1;::::0;-1:-1:-1;25650:12:0;;25702:52;;::::1;::::0;25703:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;25702:52;;;;:::i;:::-;25673:81:::0;-1:-1:-1;25765:24:0::1;25792:31;25673:81:::0;25792:10;:31:::1;:::i;:::-;25838:16;::::0;::::1;::::0;25765:58;;-1:-1:-1;25838:20:0::1;;::::0;25834:133:::1;;25888:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;25888:21:0;;::::1;::::0;25945:5:::1;::::0;25922:16;;25888:67:::1;::::0;;;25922:16;25888:21;25945:5;25888:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25875:80:0;;-1:-1:-1;;25834:133:0::1;25981:18;::::0;::::1;::::0;:22:::1;;::::0;25977:139:::1;;26033:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;26033:23:0;;::::1;::::0;26094:5:::1;::::0;26069:18;;26033:71:::1;::::0;;;26069:18;26033:23;26094:5;26033:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26020:84:0;;-1:-1:-1;;25977:139:0::1;24184:1939;;;;;;;;;7172:1;-1:-1:-1::0;7184:6:0;:14;;-1:-1:-1;;7184:14:0;;;24112:2011::o;31726:2283::-;31853:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31853:18:0;31884:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31884:25:0;31920:30;;;;;;;;31943:7;31920:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31920:30:0;;;;;;;;-1:-1:-1;;;31920:30:0;;;;;;;;;31982:10;:8;:10::i;:::-;31961:18;;;:31;;;32022:28;;:7;:28;:::i;:::-;32005:14;;;;:45;;;;32118:11;;;;32098:17;;32079:16;;;;32063:13;;32079:36;;;:::i;:::-;:50;;;;:::i;:::-;32063:66;;;;32144:5;32153:1;32144:10;32140:58;;32181:5;32171:15;;32140:58;32214:20;32225:4;32231:2;32214:10;:20::i;:::-;32210:229;;;32269:11;;:40;;-1:-1:-1;;;32269:40:0;;-1:-1:-1;;;;;39588:15:1;;;32269:40:0;;;39570:34:1;39640:15;;;39620:18;;;39613:43;39672:18;;;39665:34;;;32238:12:0;;32269:11;;;;;:21;;39482:18:1;;32269:40:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;32269:40:0;;;;;;;;-1:-1:-1;;32269:40:0;;;;;;;;;;;;:::i;:::-;;;32265:123;;32377:8;;;32265:123;32360:5;-1:-1:-1;32406:7:0;32402:26;;32417:8;;;32402:26;32236:203;32210:229;32455:7;32451:815;;;32479:18;32530:3;32526:229;;;-1:-1:-1;32567:9:0;:16;;;32526:229;;;32609:4;32605:150;;;-1:-1:-1;32647:9:0;:17;;;;;;32605:150;;;-1:-1:-1;32718:9:0;:21;;;;;;32605:150;32771:17;6047:5;32792:20;32802:10;32792:7;:20;:::i;:::-;32791:41;;;;:::i;:::-;32874:17;;32771:61;;-1:-1:-1;32895:5:0;;32862:29;;;;32771:61;32862:29;:::i;:::-;32861:39;;;;:::i;:::-;32847:11;;;:53;32943:11;;;;32958:5;;32931:23;;;;:9;:23;:::i;:::-;32930:33;;;;:::i;:::-;32915:12;;;:48;;;33006:11;;;;:26;;32915:48;33006:26;:::i;:::-;32993:40;;:9;:40;:::i;:::-;32978:12;;;:55;;;33113:12;;;;33084:11;;;;33113:12;;33084:26;;;:::i;:::-;:41;;;;:::i;:::-;33073:53;;:7;:53;:::i;:::-;33048:78;;33171:18;;;;33157:11;;;;:32;;33171:18;33157:32;:::i;:::-;33143:11;;;:46;-1:-1:-1;32451:815:0;;-1:-1:-1;32451:815:0;;33222:32;;;32451:815;33282:12;;;;:16;33278:290;;33356:6;:18;;;33341:6;:12;;;:33;;;;:::i;:::-;33331:4;33315:7;:22;;;;;;;;;;:59;;:22;;:7;:59;;;;;:::i;:::-;;;;-1:-1:-1;;33413:4:0;33393:26;;;;:11;:26;;;;;;;;33389:105;;;33466:12;;;;;33456:4;33440:22;;;;:7;:22;;;;;:38;;33466:12;;33440:22;;:38;;33466:12;;33440:38;:::i;:::-;;;;-1:-1:-1;;33389:105:0;33536:4;-1:-1:-1;;;;;33513:43:0;33522:4;-1:-1:-1;;;;;33513:43:0;;33543:6;:12;;;33513:43;;;;391:25:1;;379:2;364:18;;245:177;33513:43:0;;;;;;;;33278:290;33584:12;;;;:16;33580:254;;33649:6;:18;;;33634:6;:12;;;:33;;;;:::i;:::-;6186:42;33617:7;:13;;;;;;;;:50;;:13;;:7;:50;;;;;:::i;:::-;;;;-1:-1:-1;;6186:42:0;33686:17;;:11;:17;;;;;;33682:87;;;33741:12;;;;6186:42;33724:13;;;;:7;:13;;;:29;;:13;;;:29;;33741:12;;33724:29;:::i;:::-;;;;-1:-1:-1;;33682:87:0;6186:42;-1:-1:-1;;;;;33788:34:0;33797:4;-1:-1:-1;;;;;33788:34:0;;33809:6;:12;;;33788:34;;;;391:25:1;;379:2;364:18;;245:177;33788:34:0;;;;;;;;33580:254;33957:6;:18;;;33942:6;:12;;;:33;;;;:::i;:::-;33919:6;:18;;;33904:6;:12;;;:33;;;;:::i;:::-;33889:6;:11;;;:49;;;;:::i;:::-;:87;;;;:::i;:::-;33871:6;:14;;;:106;;;;:::i;:::-;33846:22;;;:131;-1:-1:-1;33846:22:0;;31726:2283;-1:-1:-1;;;;;;;;;31726:2283:0:o;26131:563::-;26214:16;;;;;;;26213:17;26205:65;;;;-1:-1:-1;;;26205:65:0;;39912:2:1;26205:65:0;;;39894:21:1;39951:2;39931:18;;;39924:30;39990:34;39970:18;;;39963:62;-1:-1:-1;;;40041:18:1;;;40034:33;40084:19;;26205:65:0;39710:399:1;26205:65:0;26286:20;26297:4;26303:2;26286:10;:20::i;:::-;26285:21;:37;;;;-1:-1:-1;26316:6:0;;-1:-1:-1;;;;;26310:12:0;;;26316:6;;26310:12;26285:37;26281:406;;;-1:-1:-1;;;;;26339:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;26339:30:0;;;26365:4;26339:30;;;;;;26384:19;:25;;;;;:32;;;;;;;;;;26431:16;:23;;-1:-1:-1;;26431:23:0;26339:30;26431:23;;;;;26481:11;;;;26469:114;;26527:11;:40;;-1:-1:-1;;26527:40:0;26561:4;26527:40;;;;;26469:114;26597:19;:26;;-1:-1:-1;;26597:26:0;;;;;26643:32;;-1:-1:-1;1841:41:1;;26643:32:0;;1829:2:1;1814:18;26643:32:0;1701:187:1;797:250;882:1;892:113;906:6;903:1;900:13;892:113;;;982:11;;;976:18;963:11;;;956:39;928:2;921:10;892:113;;;-1:-1:-1;;1039:1:1;1021:16;;1014:27;797:250::o;1052:396::-;1201:2;1190:9;1183:21;1164:4;1233:6;1227:13;1276:6;1271:2;1260:9;1256:18;1249:34;1292:79;1364:6;1359:2;1348:9;1344:18;1339:2;1331:6;1327:15;1292:79;:::i;:::-;1432:2;1411:15;-1:-1:-1;;1407:29:1;1392:45;;;;1439:2;1388:54;;1052:396;-1:-1:-1;;1052:396:1:o;1893:180::-;1952:6;2005:2;1993:9;1984:7;1980:23;1976:32;1973:52;;;2021:1;2018;2011:12;1973:52;-1:-1:-1;2044:23:1;;1893:180;-1:-1:-1;1893:180:1:o;2078:154::-;-1:-1:-1;;;;;2157:5:1;2153:54;2146:5;2143:65;2133:93;;2222:1;2219;2212:12;2237:315;2305:6;2313;2366:2;2354:9;2345:7;2341:23;2337:32;2334:52;;;2382:1;2379;2372:12;2334:52;2421:9;2408:23;2440:31;2465:5;2440:31;:::i;:::-;2490:5;2542:2;2527:18;;;;2514:32;;-1:-1:-1;;;2237:315:1:o;2557:247::-;2616:6;2669:2;2657:9;2648:7;2644:23;2640:32;2637:52;;;2685:1;2682;2675:12;2637:52;2724:9;2711:23;2743:31;2768:5;2743:31;:::i;2809:118::-;2895:5;2888:13;2881:21;2874:5;2871:32;2861:60;;2917:1;2914;2907:12;2932:382;2997:6;3005;3058:2;3046:9;3037:7;3033:23;3029:32;3026:52;;;3074:1;3071;3064:12;3026:52;3113:9;3100:23;3132:31;3157:5;3132:31;:::i;:::-;3182:5;-1:-1:-1;3239:2:1;3224:18;;3211:32;3252:30;3211:32;3252:30;:::i;:::-;3301:7;3291:17;;;2932:382;;;;;:::o;3319:456::-;3396:6;3404;3412;3465:2;3453:9;3444:7;3440:23;3436:32;3433:52;;;3481:1;3478;3471:12;3433:52;3520:9;3507:23;3539:31;3564:5;3539:31;:::i;:::-;3589:5;-1:-1:-1;3646:2:1;3631:18;;3618:32;3659:33;3618:32;3659:33;:::i;:::-;3319:456;;3711:7;;-1:-1:-1;;;3765:2:1;3750:18;;;;3737:32;;3319:456::o;3780:248::-;3848:6;3856;3909:2;3897:9;3888:7;3884:23;3880:32;3877:52;;;3925:1;3922;3915:12;3877:52;-1:-1:-1;;3948:23:1;;;4018:2;4003:18;;;3990:32;;-1:-1:-1;3780:248:1:o;4033:127::-;4094:10;4089:3;4085:20;4082:1;4075:31;4125:4;4122:1;4115:15;4149:4;4146:1;4139:15;4165:275;4236:2;4230:9;4301:2;4282:13;;-1:-1:-1;;4278:27:1;4266:40;;4336:18;4321:34;;4357:22;;;4318:62;4315:88;;;4383:18;;:::i;:::-;4419:2;4412:22;4165:275;;-1:-1:-1;4165:275:1:o;4445:183::-;4505:4;4538:18;4530:6;4527:30;4524:56;;;4560:18;;:::i;:::-;-1:-1:-1;4605:1:1;4601:14;4617:4;4597:25;;4445:183::o;4633:662::-;4687:5;4740:3;4733:4;4725:6;4721:17;4717:27;4707:55;;4758:1;4755;4748:12;4707:55;4794:6;4781:20;4820:4;4844:60;4860:43;4900:2;4860:43;:::i;:::-;4844:60;:::i;:::-;4938:15;;;5024:1;5020:10;;;;5008:23;;5004:32;;;4969:12;;;;5048:15;;;5045:35;;;5076:1;5073;5066:12;5045:35;5112:2;5104:6;5100:15;5124:142;5140:6;5135:3;5132:15;5124:142;;;5206:17;;5194:30;;5244:12;;;;5157;;5124:142;;;-1:-1:-1;5284:5:1;4633:662;-1:-1:-1;;;;;;4633:662:1:o;5300:1215::-;5418:6;5426;5479:2;5467:9;5458:7;5454:23;5450:32;5447:52;;;5495:1;5492;5485:12;5447:52;5535:9;5522:23;5564:18;5605:2;5597:6;5594:14;5591:34;;;5621:1;5618;5611:12;5591:34;5659:6;5648:9;5644:22;5634:32;;5704:7;5697:4;5693:2;5689:13;5685:27;5675:55;;5726:1;5723;5716:12;5675:55;5762:2;5749:16;5784:4;5808:60;5824:43;5864:2;5824:43;:::i;5808:60::-;5902:15;;;5984:1;5980:10;;;;5972:19;;5968:28;;;5933:12;;;;6008:19;;;6005:39;;;6040:1;6037;6030:12;6005:39;6064:11;;;;6084:217;6100:6;6095:3;6092:15;6084:217;;;6180:3;6167:17;6197:31;6222:5;6197:31;:::i;:::-;6241:18;;6117:12;;;;6279;;;;6084:217;;;6320:5;-1:-1:-1;;6363:18:1;;6350:32;;-1:-1:-1;;6394:16:1;;;6391:36;;;6423:1;6420;6413:12;6391:36;;6446:63;6501:7;6490:8;6479:9;6475:24;6446:63;:::i;:::-;6436:73;;;5300:1215;;;;;:::o;6520:647::-;6594:6;6602;6610;6618;6671:3;6659:9;6650:7;6646:23;6642:33;6639:53;;;6688:1;6685;6678:12;6639:53;6727:9;6714:23;6746:28;6768:5;6746:28;:::i;:::-;6793:5;-1:-1:-1;6850:2:1;6835:18;;6822:32;6863:30;6822:32;6863:30;:::i;:::-;6912:7;-1:-1:-1;6971:2:1;6956:18;;6943:32;6984:30;6943:32;6984:30;:::i;:::-;7033:7;-1:-1:-1;7092:2:1;7077:18;;7064:32;7105:30;7064:32;7105:30;:::i;:::-;6520:647;;;;-1:-1:-1;6520:647:1;;-1:-1:-1;;6520:647:1:o;7361:159::-;7428:20;;7488:6;7477:18;;7467:29;;7457:57;;7510:1;7507;7500:12;7457:57;7361:159;;;:::o;7525:328::-;7599:6;7607;7615;7668:2;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7707:28;7725:9;7707:28;:::i;:::-;7697:38;;7754:37;7787:2;7776:9;7772:18;7754:37;:::i;:::-;7744:47;;7810:37;7843:2;7832:9;7828:18;7810:37;:::i;:::-;7800:47;;7525:328;;;;;:::o;7858:376::-;7920:6;7928;7981:2;7969:9;7960:7;7956:23;7952:32;7949:52;;;7997:1;7994;7987:12;7949:52;8036:9;8023:23;8055:28;8077:5;8055:28;:::i;8846:404::-;8930:6;8938;8991:2;8979:9;8970:7;8966:23;8962:32;8959:52;;;9007:1;9004;8997:12;8959:52;9046:9;9033:23;9065:31;9090:5;9065:31;:::i;:::-;9115:5;-1:-1:-1;9172:2:1;9157:18;;9144:32;9185:33;9144:32;9185:33;:::i;9648:367::-;9711:8;9721:6;9775:3;9768:4;9760:6;9756:17;9752:27;9742:55;;9793:1;9790;9783:12;9742:55;-1:-1:-1;9816:20:1;;9859:18;9848:30;;9845:50;;;9891:1;9888;9881:12;9845:50;9928:4;9920:6;9916:17;9904:29;;9988:3;9981:4;9971:6;9968:1;9964:14;9956:6;9952:27;9948:38;9945:47;9942:67;;;10005:1;10002;9995:12;9942:67;9648:367;;;;;:::o;10020:908::-;10151:6;10159;10167;10175;10183;10236:2;10224:9;10215:7;10211:23;10207:32;10204:52;;;10252:1;10249;10242:12;10204:52;10292:9;10279:23;10321:18;10362:2;10354:6;10351:14;10348:34;;;10378:1;10375;10368:12;10348:34;10417:70;10479:7;10470:6;10459:9;10455:22;10417:70;:::i;:::-;10506:8;;-1:-1:-1;10391:96:1;-1:-1:-1;10594:2:1;10579:18;;10566:32;;-1:-1:-1;10610:16:1;;;10607:36;;;10639:1;10636;10629:12;10607:36;;10678:72;10742:7;10731:8;10720:9;10716:24;10678:72;:::i;:::-;10769:8;;-1:-1:-1;10652:98:1;-1:-1:-1;;10854:2:1;10839:18;;10826:32;10867:31;10826:32;10867:31;:::i;:::-;10917:5;10907:15;;;10020:908;;;;;;;;:::o;10933:474::-;11023:6;11031;11039;11047;11055;11108:3;11096:9;11087:7;11083:23;11079:33;11076:53;;;11125:1;11122;11115:12;11076:53;11148:28;11166:9;11148:28;:::i;:::-;11138:38;;11195:37;11228:2;11217:9;11213:18;11195:37;:::i;:::-;11185:47;;11251:37;11284:2;11273:9;11269:18;11251:37;:::i;:::-;11241:47;;11307:37;11340:2;11329:9;11325:18;11307:37;:::i;:::-;11297:47;;11363:38;11396:3;11385:9;11381:19;11363:38;:::i;:::-;11353:48;;10933:474;;;;;;;;:::o;11776:385::-;11862:6;11870;11878;11886;11939:3;11927:9;11918:7;11914:23;11910:33;11907:53;;;11956:1;11953;11946:12;11907:53;-1:-1:-1;;11979:23:1;;;12049:2;12034:18;;12021:32;;-1:-1:-1;12100:2:1;12085:18;;12072:32;;12151:2;12136:18;12123:32;;-1:-1:-1;11776:385:1;-1:-1:-1;11776:385:1:o;12166:380::-;12245:1;12241:12;;;;12288;;;12309:61;;12363:4;12355:6;12351:17;12341:27;;12309:61;12416:2;12408:6;12405:14;12385:18;12382:38;12379:161;;12462:10;12457:3;12453:20;12450:1;12443:31;12497:4;12494:1;12487:15;12525:4;12522:1;12515:15;12379:161;;12166:380;;;:::o;13233:127::-;13294:10;13289:3;13285:20;13282:1;13275:31;13325:4;13322:1;13315:15;13349:4;13346:1;13339:15;13365:422;13454:1;13497:5;13454:1;13511:270;13532:7;13522:8;13519:21;13511:270;;;13591:4;13587:1;13583:6;13579:17;13573:4;13570:27;13567:53;;;13600:18;;:::i;:::-;13650:7;13640:8;13636:22;13633:55;;;13670:16;;;;13633:55;13749:22;;;;13709:15;;;;13511:270;;;13515:3;13365:422;;;;;:::o;13792:806::-;13841:5;13871:8;13861:80;;-1:-1:-1;13912:1:1;13926:5;;13861:80;13960:4;13950:76;;-1:-1:-1;13997:1:1;14011:5;;13950:76;14042:4;14060:1;14055:59;;;;14128:1;14123:130;;;;14035:218;;14055:59;14085:1;14076:10;;14099:5;;;14123:130;14160:3;14150:8;14147:17;14144:43;;;14167:18;;:::i;:::-;-1:-1:-1;;14223:1:1;14209:16;;14238:5;;14035:218;;14337:2;14327:8;14324:16;14318:3;14312:4;14309:13;14305:36;14299:2;14289:8;14286:16;14281:2;14275:4;14272:12;14268:35;14265:77;14262:159;;;-1:-1:-1;14374:19:1;;;14406:5;;14262:159;14453:34;14478:8;14472:4;14453:34;:::i;:::-;14523:6;14519:1;14515:6;14511:19;14502:7;14499:32;14496:58;;;14534:18;;:::i;:::-;14572:20;;13792:806;-1:-1:-1;;;13792:806:1:o;14603:140::-;14661:5;14690:47;14731:4;14721:8;14717:19;14711:4;14690:47;:::i;14748:127::-;14809:10;14804:3;14800:20;14797:1;14790:31;14840:4;14837:1;14830:15;14864:4;14861:1;14854:15;14880:120;14920:1;14946;14936:35;;14951:18;;:::i;:::-;-1:-1:-1;14985:9:1;;14880:120::o;15719:168::-;15792:9;;;15823;;15840:15;;;15834:22;;15820:37;15810:71;;15861:18;;:::i;15892:127::-;15953:10;15948:3;15944:20;15941:1;15934:31;15984:4;15981:1;15974:15;16008:4;16005:1;15998:15;16024:127;16085:10;16080:3;16076:20;16073:1;16066:31;16116:4;16113:1;16106:15;16140:4;16137:1;16130:15;16156:128;16223:9;;;16244:11;;;16241:37;;;16258:18;;:::i;16289:135::-;16328:3;16349:17;;;16346:43;;16369:18;;:::i;:::-;-1:-1:-1;16416:1:1;16405:13;;16289:135::o;17543:197::-;17581:3;17609:6;17650:2;17643:5;17639:14;17677:2;17668:7;17665:15;17662:41;;17683:18;;:::i;:::-;17732:1;17719:15;;17543:197;-1:-1:-1;;;17543:197:1:o;18181:125::-;18246:9;;;18267:10;;;18264:36;;;18280:18;;:::i;19420:168::-;19487:6;19513:10;;;19525;;;19509:27;;19548:11;;;19545:37;;;19562:18;;:::i;:::-;19545:37;19420:168;;;;:::o;23367:245::-;23446:6;23454;23507:2;23495:9;23486:7;23482:23;23478:32;23475:52;;;23523:1;23520;23513:12;23475:52;-1:-1:-1;;23546:16:1;;23602:2;23587:18;;;23581:25;23546:16;;23581:25;;-1:-1:-1;23367:245:1:o;23973:184::-;24043:6;24096:2;24084:9;24075:7;24071:23;24067:32;24064:52;;;24112:1;24109;24102:12;24064:52;-1:-1:-1;24135:16:1;;23973:184;-1:-1:-1;23973:184:1:o;24464:245::-;24531:6;24584:2;24572:9;24563:7;24559:23;24555:32;24552:52;;;24600:1;24597;24590:12;24552:52;24632:9;24626:16;24651:28;24673:5;24651:28;:::i;26076:510::-;26130:5;26183:3;26176:4;26168:6;26164:17;26160:27;26150:55;;26201:1;26198;26191:12;26150:55;26230:6;26224:13;26256:18;26252:2;26249:26;26246:52;;;26278:18;;:::i;:::-;26322:55;26365:2;26346:13;;-1:-1:-1;;26342:27:1;26371:4;26338:38;26322:55;:::i;:::-;26402:2;26393:7;26386:19;26448:3;26441:4;26436:2;26428:6;26424:15;26420:26;26417:35;26414:55;;;26465:1;26462;26455:12;26414:55;26478:77;26552:2;26545:4;26536:7;26532:18;26525:4;26517:6;26513:17;26478:77;:::i;26591:774::-;26706:6;26714;26722;26730;26783:3;26771:9;26762:7;26758:23;26754:33;26751:53;;;26800:1;26797;26790:12;26751:53;26833:9;26827:16;26862:18;26903:2;26895:6;26892:14;26889:34;;;26919:1;26916;26909:12;26889:34;26942:61;26995:7;26986:6;26975:9;26971:22;26942:61;:::i;:::-;26932:71;;27049:2;27038:9;27034:18;27028:25;27012:41;;27078:2;27068:8;27065:16;27062:36;;;27094:1;27091;27084:12;27062:36;;27117:63;27172:7;27161:8;27150:9;27146:24;27117:63;:::i;:::-;27107:73;;;27220:2;27209:9;27205:18;27199:25;27189:35;;27267:2;27256:9;27252:18;27246:25;27311:4;27304:5;27300:16;27293:5;27290:27;27280:55;;27331:1;27328;27321:12;27825:545;27927:2;27922:3;27919:11;27916:448;;;27963:1;27988:5;27984:2;27977:17;28033:4;28029:2;28019:19;28103:2;28091:10;28087:19;28084:1;28080:27;28074:4;28070:38;28139:4;28127:10;28124:20;28121:47;;;-1:-1:-1;28162:4:1;28121:47;28217:2;28212:3;28208:12;28205:1;28201:20;28195:4;28191:31;28181:41;;28272:82;28290:2;28283:5;28280:13;28272:82;;;28335:17;;;28316:1;28305:13;28272:82;;28546:1352;28672:3;28666:10;28699:18;28691:6;28688:30;28685:56;;;28721:18;;:::i;:::-;28750:97;28840:6;28800:38;28832:4;28826:11;28800:38;:::i;:::-;28794:4;28750:97;:::i;:::-;28902:4;;28966:2;28955:14;;28983:1;28978:663;;;;29685:1;29702:6;29699:89;;;-1:-1:-1;29754:19:1;;;29748:26;29699:89;-1:-1:-1;;28503:1:1;28499:11;;;28495:24;28491:29;28481:40;28527:1;28523:11;;;28478:57;29801:81;;28948:944;;28978:663;27772:1;27765:14;;;27809:4;27796:18;;-1:-1:-1;;29014:20:1;;;29132:236;29146:7;29143:1;29140:14;29132:236;;;29235:19;;;29229:26;29214:42;;29327:27;;;;29295:1;29283:14;;;;29162:19;;29132:236;;;29136:3;29396:6;29387:7;29384:19;29381:201;;;29457:19;;;29451:26;-1:-1:-1;;29540:1:1;29536:14;;;29552:3;29532:24;29528:37;29524:42;29509:58;29494:74;;29381:201;-1:-1:-1;;;;;29628:1:1;29612:14;;;29608:22;29595:36;;-1:-1:-1;28546:1352:1:o;29903:112::-;29935:1;29961;29951:35;;29966:18;;:::i;:::-;-1:-1:-1;30000:9:1;;29903:112::o;30020:251::-;30090:6;30143:2;30131:9;30122:7;30118:23;30114:32;30111:52;;;30159:1;30156;30149:12;30111:52;30191:9;30185:16;30210:31;30235:5;30210:31;:::i;31243:306::-;31331:6;31339;31347;31400:2;31388:9;31379:7;31375:23;31371:32;31368:52;;;31416:1;31413;31406:12;31368:52;31445:9;31439:16;31429:26;;31495:2;31484:9;31480:18;31474:25;31464:35;;31539:2;31528:9;31524:18;31518:25;31508:35;;31243:306;;;;;:::o;34247:175::-;34284:3;34328:4;34321:5;34317:16;34357:4;34348:7;34345:17;34342:43;;34365:18;;:::i;:::-;34414:1;34401:15;;34247:175;-1:-1:-1;;34247:175:1:o;37637:1026::-;37899:4;37947:3;37936:9;37932:19;37978:6;37967:9;37960:25;38004:2;38042:6;38037:2;38026:9;38022:18;38015:34;38085:3;38080:2;38069:9;38065:18;38058:31;38109:6;38144;38138:13;38175:6;38167;38160:22;38213:3;38202:9;38198:19;38191:26;;38252:2;38244:6;38240:15;38226:29;;38273:1;38283:218;38297:6;38294:1;38291:13;38283:218;;;38362:13;;-1:-1:-1;;;;;38358:62:1;38346:75;;38476:15;;;;38441:12;;;;38319:1;38312:9;38283:218;;;-1:-1:-1;;;;;;;38557:55:1;;;;38552:2;38537:18;;38530:83;-1:-1:-1;;;38644:3:1;38629:19;38622:35;38518:3;37637:1026;-1:-1:-1;;;37637:1026:1:o;38921:171::-;38989:6;39028:10;;;39016;;;39012:27;;39051:12;;;39048:38;;;39066:18;;:::i

Swarm Source

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