ETH Price: $3,419.28 (-0.57%)
Gas: 2 Gwei

Token

YoHunt (YoKen)
 

Overview

Max Total Supply

1,000,000,000 YoKen

Holders

312 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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

OVERVIEW

YoHunt is the first augmented reality mobile game, that combines NFT zombie killing in a play-to-earn format.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
YoHunt

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function lockProtections() external;
    function getMaximumTxAmt() external view returns (uint256);
    function setMaximumTxAmt(uint256 amount) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function disableProtectionsImmutable() external;
    function getProtectionStatus() external view returns (bool, bool, bool);
}

contract YoHunt is IERC20 {
    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 presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "YoHunt";
    string constant private _symbol = "YoKen";
    uint8 constant private _decimals = 9;
    uint256 private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
        bool buyLocked;
        bool sellLocked;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 totalSwap;
        bool liquidityLocked;
        bool marketingLocked;
        bool developmentLocked;
    }

    Fees public _taxRates = Fees({
        buyFee: 150,
        sellFee: 150,
        transferFee: 0,
        buyLocked: false,
        sellLocked: false
    });

    Ratios public _ratios = Ratios({
        liquidity: 50,
        marketing: 50,
        development: 50,
        totalSwap: 150,
        liquidityLocked: false,
        marketingLocked: false,
        developmentLocked: false
    });

    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 liquidity;
        address payable development;
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        liquidity: payable(0xD6bB26e393a7131AF8f267Bd52568d95325AA648),
        development: payable(0x8bE79A2ae35B4C92e46D7836F1964fe249AB3e03),
        marketing: payable(0xD035fd641c1e58b59881f74839907F2415F25e1A)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 5) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 5) / 1000;

    bool public transactionLimitDisabled = false;
    bool public walletLimitDisabled = false;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    uint256 public launchStamp;

    bool public protectionsDisabled = false;

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

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

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

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

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

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

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

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

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

    function approve(address spender, uint256 amount) 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 setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        protections = Protections(initializer);
    }

    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 {
        require (protectionsDisabled == false, "Cannot change once disabled.");
        protections.setProtections(_antiSnipe, _antiGas, _antiBlock, _algo);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        if (block.chainid == 1) {
            require(gas >= 150, "Too low.");
        } else {
            require(gas >= 75, "Too low.");
        }
        protections.setGasPriceLimit(gas);
    }

    function disableProtectionsImmutable() external onlyOwner {
        // WARNING: This will PERMANATELY disable protections. You cannot enable them ever again.
        require (protectionsDisabled == false, "Protections already disabled.");
        protectionsDisabled = true;
        protections.disableProtectionsImmutable();
    }

    function getProtectionStatus() external view returns (bool, bool, bool) {
        return protections.getProtectionStatus();
    }

    function lockBuyTaxes() external onlyOwner {
        require(!_taxRates.buyLocked, "Already locked.");
        // This will lock buy taxes at their current value forever, do not call this unless you're sure.
        _taxRates.buyLocked = true;
    }

    function lockSellTaxes() external onlyOwner {
        require(!_taxRates.sellLocked, "Already locked.");
        // This will lock buy taxes at their current value forever, do not call this unless you're sure.
        _taxRates.sellLocked = true;
    }

    function lockLiquidityRatio() external onlyOwner {
        require(!_ratios.liquidityLocked, "Already locked.");
        // This will lock buy taxes at their current value forever, do not call this unless you're sure.
        _ratios.liquidityLocked = true;
    }

    function lockMarketingRatio() external onlyOwner {
        require(!_ratios.marketingLocked, "Already locked.");
        // This will lock buy taxes at their current value forever, do not call this unless you're sure.
        _ratios.marketingLocked = true;
    }

    function lockDevelopmentRatio() external onlyOwner {
        require(!_ratios.developmentLocked, "Already locked.");
        // This will lock buy taxes at their current value forever, do not call this unless you're sure.
        _ratios.developmentLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        if (buyFee != _taxRates.buyFee) {
            require(!_taxRates.buyLocked, "Buy taxes cannot be changed, they are locked.");
        }
        if (sellFee != _taxRates.sellFee) {
            require(!_taxRates.sellLocked, "Sell taxes cannot be changed, they are locked.");
        }
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        if (_ratios.liquidity != liquidity) {
            require(!_ratios.liquidityLocked, "Cannot change, value is locked.");
        }
        if (_ratios.marketing != marketing) {
            require(!_ratios.marketingLocked, "Cannot change, value is locked.");
        }
        if (_ratios.development != development) {
            require(!_ratios.developmentLocked, "Cannot change, value is locked.");
        }
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.totalSwap = liquidity + marketing;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.development <= total, "Cannot exceed sum of buy and sell fees.");
    }

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

    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.");
        require(transactionLimitDisabled == false, "Cannot change once disabled.");
        _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.");
        require(walletLimitDisabled == false, "Cannot change once disabled.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function disableTransactionLimits() external onlyOwner {
        require(transactionLimitDisabled == false, "Cannot change once disabled.");
        _maxTxAmount = _tTotal;
        transactionLimitDisabled = true;
    }

    function disableWalletLimits() external onlyOwner {
        require(walletLimitDisabled == false, "Cannot change once disabled.");
        _maxWalletSize = _tTotal;
        walletLimitDisabled = true;
    }

    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(to != DEAD, "Use burn function to burn tokens.");
        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
                   && !presaleAddresses[to]
                   && !presaleAddresses[from]
                ) {
                    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,
                _taxWallets.liquidity,
                block.timestamp
            ) {
                emit AutoLiquify(liquidityBalance, toLiquify);
            } catch {
                return;
            }
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        (success,) = _taxWallets.marketing.call{value: address(this).balance, 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 {}
        tradingEnabled = true;
        allowedPresaleExclusion = false;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
        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 {
        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 finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try protections.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        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, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(protections) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }

    function burn(uint256 amountTokens) external {
        address sender = msg.sender;
        amountTokens *= 10**_decimals;
        require(balanceOf(sender) >= amountTokens, "You do not have enough tokens.");
        _tOwned[sender] -= amountTokens;
        _tTotal -= amountTokens;
        emit Transfer(sender, address(0), amountTokens);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"},{"internalType":"bool","name":"liquidityLocked","type":"bool"},{"internalType":"bool","name":"marketingLocked","type":"bool"},{"internalType":"bool","name":"developmentLocked","type":"bool"}],"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"},{"internalType":"bool","name":"buyLocked","type":"bool"},{"internalType":"bool","name":"sellLocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"liquidity","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtectionsImmutable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimits","outputs":[],"stateMutability":"nonpayable","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":[],"name":"getProtectionStatus","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"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":"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":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockDevelopmentRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockLiquidityRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockMarketingRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockSellTaxes","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":"pure","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":[],"name":"protectionsDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"liquidity","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":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transactionLimitDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLimitDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006002556009805460ff191660011781556200002390600a620007d8565b6200003390633b9aca00620007f0565b600a8181556040805160a0808201835260968083526020808401829052600084860181905260608086018290526080958601829052600b80546001600160401b03191662960096179055865160e0810188526032808252818501819052818901528082019490945294830181905292820183905260c090910191909152600c80546001600160581b03191666960032003200321790558251918201835273d6bb26e393a7131af8f267bd52568d95325aa648808352738be79a2ae35b4c92e46d7836f1964fe249ab3e0391830182905273d035fd641c1e58b59881f74839907f2415f25e1a92909301829052600f80546001600160a01b031990811690941790556010805484169091179055601180549092161790556012805461ff00191690556016556103e89062000168906005620007f0565b6200017491906200080a565b6017556103e8600a5460056200018b9190620007f0565b6200019791906200080a565b6018556019805463ffffffff19169055601b80546001600160a81b03191661010033810291909117808355600a546001600160a01b03918390048216600090815260208181526040808320849055955495519283529390940490911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3466038036200025757600d8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000389565b466061036200028e57600d8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000389565b46600114806200029e5750466004145b80620002aa5750466003145b15620002de57600d8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000389565b466005036200031557600d8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000389565b4661a86a036200034d57600d8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000389565b4660fa036200038457600d8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000389565b600080fd5b600d60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040391906200082d565b6001600160a01b031663c9c65396600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048b91906200082d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fe91906200082d565b600e80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601b54600d546200055b92610100928390048116929091041660001962000607565b600d546200057c90309061010090046001600160a01b031660001962000607565b601b80546001600160a01b036101009182900481166000908152600660209081526040808320805460ff19908116600190811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559654959095049093168252600490522080549092161790556200088f565b6001600160a01b038316620006395760405162461bcd60e51b8152600401620006309062000858565b60405180910390fd5b6001600160a01b038216620006625760405162461bcd60e51b8152600401620006309062000858565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200071a578160001904821115620006fe57620006fe620006c3565b808516156200070c57918102915b93841c9390800290620006de565b509250929050565b6000826200073357506001620007d2565b816200074257506000620007d2565b81600181146200075b5760028114620007665762000786565b6001915050620007d2565b60ff8411156200077a576200077a620006c3565b50506001821b620007d2565b5060208310610133831016604e8410600b8410161715620007ab575081810a620007d2565b620007b78383620006d9565b8060001904821115620007ce57620007ce620006c3565b0290505b92915050565b6000620007e960ff84168362000722565b9392505050565b8082028115828204841417620007d257620007d2620006c3565b6000826200082857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200084057600080fd5b81516001600160a01b0381168114620007e957600080fd5b60208082526013908201527f45524332303a205a65726f204164647265737300000000000000000000000000604082015260600190565b6149ed806200089f6000396000f3fe60806040526004361061033a5760003560e01c806303fd2a45146103465780630445b66714610372578063069d955f1461039657806306fdde03146104105780630758d9241461044857806307dd79e01461046d5780630923160214610497578063095ea7b3146104b95780630cc7506b146104d95780630dcbcf1c146104ee5780630fa604e414610527578063147cee6c1461053c57806318160ddd1461055157806323b872dd1461056657806326003957146105865780632610eaca146105a657806328577751146105c657806329dd8798146105dc5780632b112e49146105fc5780632b28fc7a146106115780632c7b1ff7146106275780632e8fa8211461065b578063313ce56714610671578063326616a11461068d57806333251a0b146106ac57806336fddb04146106cc5780633f3cf56c146106ec57806342966c681461070c578063452ed4f11461072c57806346ea7ac81461074c57806347ad363f1461076257806348c217d01461077c5780634ada218b146107915780634bbb93eb146107b15780634e0acf59146107d15780634e718e48146107e65780634fb2e45d146108065780634fbee1931461082657806350a8e0161461085f578063590ffdce146108805780635a6f0918146108a05780635c24b074146108b65780635cce86cd146108d65780635d4765681461090f5780636cf7c7dd146109245780636ebd00781461093e578063705285141461095357806370a0823114610973578063715018a61461099357806375cb1bd1146109a857806380c581d1146109c8578063893d20e8146109e85780638a63bd9b14610a0b5780638a8c523c14610a2057806395d89b4114610a35578063a9059cbb14610a63578063aa22b17214610a83578063ab558e4d14610aa3578063b1b08f7114610611578063b3d514fb14610611578063b7df8b3614610ac3578063bfc2fc3514610add578063c42e2f7314610afd578063cf84770614610b12578063d5a086a714610bb3578063dd62ed3e14610bc8578063e2dae07414610c0e578063eafb5a3c14610c23578063ee5d9c2d14610c43578063f94aa1b414610c58578063fb78680d14610caf578063fdb78c0e14610ccf578063feadde9c14610cee57600080fd5b3661034157005b600080fd5b34801561035257600080fd5b5061035c61dead81565b6040516103699190613f8d565b60405180910390f35b34801561037e57600080fd5b5061038860135481565b604051908152602001610369565b3480156103a257600080fd5b50600b546103da9061ffff80821691620100008104821691600160201b8204169060ff600160301b8204811691600160381b90041685565b6040805161ffff96871681529486166020860152929094169183019190915215156060820152901515608082015260a001610369565b34801561041c57600080fd5b50604080518082019091526006815265165bd21d5b9d60d21b60208201525b6040516103699190613fa1565b34801561045457600080fd5b50600d5461035c9061010090046001600160a01b031681565b34801561047957600080fd5b50600d546104879060ff1681565b6040519015158152602001610369565b3480156104a357600080fd5b506104b76104b2366004613fef565b610d0e565b005b3480156104c557600080fd5b506104876104d436600461401d565b610dfd565b3480156104e557600080fd5b506104b7610e14565b3480156104fa57600080fd5b50610487610509366004614049565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561053357600080fd5b50610388610e82565b34801561054857600080fd5b506104b7610ea2565b34801561055d57600080fd5b50600a54610388565b34801561057257600080fd5b50610487610581366004614066565b610f10565b34801561059257600080fd5b506104b76105a13660046140a7565b610f88565b3480156105b257600080fd5b506104b76105c136600461419d565b61108e565b3480156105d257600080fd5b5061038860165481565b3480156105e857600080fd5b506104b76105f736600461426c565b611210565b34801561060857600080fd5b506103886112e5565b34801561061d57600080fd5b506103886107d081565b34801561063357600080fd5b5061063c611313565b6040805193151584529115156020840152151590820152606001610369565b34801561066757600080fd5b5061038860145481565b34801561067d57600080fd5b5060405160098152602001610369565b34801561069957600080fd5b5060195461048790610100900460ff1681565b3480156106b857600080fd5b506104b76106c7366004614049565b61139a565b3480156106d857600080fd5b506104b76106e73660046142c8565b6113ff565b3480156106f857600080fd5b506104b76107073660046140a7565b611459565b34801561071857600080fd5b506104b7610727366004613fef565b61156e565b34801561073857600080fd5b50600e5461035c906001600160a01b031681565b34801561075857600080fd5b506103886109c481565b34801561076e57600080fd5b506019546104879060ff1681565b34801561078857600080fd5b506104b7611658565b34801561079d57600080fd5b506019546104879062010000900460ff1681565b3480156107bd57600080fd5b506103886107cc366004613fef565b61174f565b3480156107dd57600080fd5b506104b7611781565b3480156107f257600080fd5b506104b7610801366004613fef565b6117ef565b34801561081257600080fd5b506104b7610821366004614049565b61186d565b34801561083257600080fd5b50610487610841366004614049565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561086b57600080fd5b50601954610487906301000000900460ff1681565b34801561088c57600080fd5b506104b761089b3660046142c8565b6119a0565b3480156108ac57600080fd5b50610388601a5481565b3480156108c257600080fd5b506104b76108d1366004614049565b6119fa565b3480156108e257600080fd5b506104876108f1366004614049565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561091b57600080fd5b506104b7611ab4565b34801561093057600080fd5b50601b546104879060ff1681565b34801561094a57600080fd5b50610388611b22565b34801561095f57600080fd5b506104b761096e366004614318565b611b3d565b34801561097f57600080fd5b5061038861098e366004614049565b611da3565b34801561099f57600080fd5b506104b7611dbe565b3480156109b457600080fd5b506104b76109c336600461434b565b611e4a565b3480156109d457600080fd5b506104b76109e33660046142c8565b611f32565b3480156109f457600080fd5b50601b5461010090046001600160a01b031661035c565b348015610a1757600080fd5b5061048761210c565b348015610a2c57600080fd5b506104b7612163565b348015610a4157600080fd5b506040805180820190915260058152642cb7a5b2b760d91b602082015261043b565b348015610a6f57600080fd5b50610487610a7e36600461401d565b612374565b348015610a8f57600080fd5b506104b7610a9e366004614396565b61238b565b348015610aaf57600080fd5b506104b7610abe366004614049565b612575565b348015610acf57600080fd5b506015546104879060ff1681565b348015610ae957600080fd5b506104b7610af83660046143d9565b6126ed565b348015610b0957600080fd5b506104b7612769565b348015610b1e57600080fd5b50600c54610b6d9061ffff80821691620100008104821691600160201b8204811691600160301b81049091169060ff600160401b8204811691600160481b8104821691600160501b9091041687565b6040805161ffff98891681529688166020880152948716948601949094529490911660608401521515608083015291151560a082015290151560c082015260e001610369565b348015610bbf57600080fd5b506104b76127d7565b348015610bd457600080fd5b50610388610be33660046143f7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c1a57600080fd5b506104b7612845565b348015610c2f57600080fd5b506104b7610c3e366004614049565b6128ac565b348015610c4f57600080fd5b506104b7612c67565b348015610c6457600080fd5b50600f54601054601154610c85926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610369565b348015610cbb57600080fd5b506104b7610cca366004614425565b612d32565b348015610cdb57600080fd5b5060125461048790610100900460ff1681565b348015610cfa57600080fd5b506104b7610d093660046142c8565b612ee6565b601b5461010090046001600160a01b03163314610d465760405162461bcd60e51b8152600401610d3d90614457565b60405180910390fd5b46600103610d74576096811015610d6f5760405162461bcd60e51b8152600401610d3d90614482565b610d95565b604b811015610d955760405162461bcd60e51b8152600401610d3d90614482565b6019546040516304918b0160e11b815260048101839052600160201b9091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b5050505050565b6000610e0a338484612f40565b5060015b92915050565b601b5461010090046001600160a01b03163314610e435760405162461bcd60e51b8152600401610d3d90614457565b600b54600160381b900460ff1615610e6d5760405162461bcd60e51b8152600401610d3d906144a4565b600b805460ff60381b1916600160381b179055565b6000610e906009600a6145c7565b601854610e9d91906145d6565b905090565b601b5461010090046001600160a01b03163314610ed15760405162461bcd60e51b8152600401610d3d90614457565b600b54600160301b900460ff1615610efb5760405162461bcd60e51b8152600401610d3d906144a4565b600b805460ff60301b1916600160301b179055565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610f75576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610f6f9084906145f8565b90915550505b610f80848484612fed565b949350505050565b601b5461010090046001600160a01b03163314610fb75760405162461bcd60e51b8152600401610d3d90614457565b6064600a54610fc691906145d6565b8183600a54610fd5919061460b565b610fdf91906145d6565b10156110465760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610d3d565b601954610100900460ff161561106e5760405162461bcd60e51b8152600401610d3d90614622565b8082600a5461107d919061460b565b61108791906145d6565b6018555050565b601b5461010090046001600160a01b031633146110bd5760405162461bcd60e51b8152600401610d3d90614457565b80518251146111065760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d3d565b60005b82518161ffff16101561120b576111226009600a6145c7565b828261ffff168151811061113857611138614658565b602002602001015161114a919061460b565b61115333611da3565b10156111965760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d3d565b6111f833848361ffff16815181106111b0576111b0614658565b60200260200101516009600a6111c691906145c7565b858561ffff16815181106111dc576111dc614658565b60200260200101516111ee919061460b565b600080600161354d565b50806112038161466e565b915050611109565b505050565b601b5461010090046001600160a01b0316331461123f5760405162461bcd60e51b8152600401610d3d90614457565b601b5460ff16156112625760405162461bcd60e51b8152600401610d3d90614622565b601954604051630109da6960e01b81528515156004820152841515602482015283151560448201528215156064820152600160201b9091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156112c757600080fd5b505af11580156112db573d6000803e3d6000fd5b5050505050505050565b60006112f16000611da3565b6112fc61dead611da3565b611306919061468f565b600a54610e9d91906145f8565b6000806000601960049054906101000a90046001600160a01b03166001600160a01b0316632c7b1ff76040518163ffffffff1660e01b8152600401606060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f91906146a2565b925092509250909192565b601b5461010090046001600160a01b031633146113c95760405162461bcd60e51b8152600401610d3d90614457565b6019546040516333251a0b60e01b8152600160201b9091046001600160a01b0316906333251a0b90610dc8908490600401613f8d565b601b5461010090046001600160a01b0316331461142e5760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b5461010090046001600160a01b031633146114885760405162461bcd60e51b8152600401610d3d90614457565b6103e8600a54600561149a919061460b565b6114a491906145d6565b8183600a546114b3919061460b565b6114bd91906145d6565b101561152b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f76604482015276329018171a929037b3103a37ba30b61039bab838363c9760491b6064820152608401610d3d565b60195460ff161561154e5760405162461bcd60e51b8152600401610d3d90614622565b8082600a5461155d919061460b565b61156791906145d6565b6017555050565b3361157b6009600a6145c7565b611585908361460b565b91508161159182611da3565b10156115df5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610d3d565b6001600160a01b038116600090815260208190526040812080548492906116079084906145f8565b9250508190555081600a600082825461162091906145f8565b90915550506040518281526000906001600160a01b038316906000805160206149988339815191529060200160405180910390a35050565b601b5461010090046001600160a01b031633146116875760405162461bcd60e51b8152600401610d3d90614457565b601b5460ff16156116da5760405162461bcd60e51b815260206004820152601d60248201527f50726f74656374696f6e7320616c72656164792064697361626c65642e0000006044820152606401610d3d565b601b8054600160ff199091161790556019546040805163048c217d60e41b81529051600160201b9092046001600160a01b0316916348c217d09160048082019260009290919082900301818387803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b50505050565b600e5460009061271090839061176d906001600160a01b0316611da3565b611777919061460b565b610e0e91906145d6565b601b5461010090046001600160a01b031633146117b05760405162461bcd60e51b8152600401610d3d90614457565b600c54600160481b900460ff16156117da5760405162461bcd60e51b8152600401610d3d906144a4565b600c805460ff60481b1916600160481b179055565b601b5461010090046001600160a01b0316331461181e5760405162461bcd60e51b8152600401610d3d90614457565b60968111156118685760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d3d565b601655565b601b5461010090046001600160a01b0316331461189c5760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b0381166118c25760405162461bcd60e51b8152600401610d3d906146e4565b61deac196001600160a01b038216016118ed5760405162461bcd60e51b8152600401610d3d906146e4565b601b546119099061010090046001600160a01b031660006119a0565b6119148160016119a0565b601b546000906119319061010090046001600160a01b0316611da3565b111561195857601b546119569061010090046001600160a01b0316826111ee82611da3565b505b601b80546001600160a01b03838116610100818102610100600160a81b0319851617909455604051939092041691829060008051602061497883398151915290600090a35050565b601b5461010090046001600160a01b031633146119cf5760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601b5461010090046001600160a01b03163314611a295760405162461bcd60e51b8152600401610d3d90614457565b60195462010000900460ff1615611a3f57600080fd5b306001600160a01b03821603611a885760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d3d565b601980546001600160a01b03909216600160201b02600160201b600160c01b0319909216919091179055565b601b5461010090046001600160a01b03163314611ae35760405162461bcd60e51b8152600401610d3d90614457565b600c54600160501b900460ff1615611b0d5760405162461bcd60e51b8152600401610d3d906144a4565b600c805460ff60501b1916600160501b179055565b6000611b306009600a6145c7565b601754610e9d91906145d6565b601b5461010090046001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610d3d90614457565b600d5460ff1615611bb35760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d3d565b6107d08261ffff1611158015611bcf57506107d08161ffff1611155b611c155760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba1032bc31b2b2b21036b0bc34b6bab6b99760491b6044820152606401610d3d565b6109c4611c228284614741565b61ffff161115611c745760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610d3d565b600b5461ffff838116911614611cf457600b54600160301b900460ff1615611cf45760405162461bcd60e51b815260206004820152602d60248201527f4275792074617865732063616e6e6f74206265206368616e6765642c2074686560448201526c3c9030b932903637b1b5b2b21760991b6064820152608401610d3d565b600b5461ffff828116620100009092041614611d7b57600b54600160381b900460ff1615611d7b5760405162461bcd60e51b815260206004820152602e60248201527f53656c6c2074617865732063616e6e6f74206265206368616e6765642c20746860448201526d32bc9030b932903637b1b5b2b21760911b6064820152608401610d3d565b600b805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6001600160a01b031660009081526020819052604090205490565b601b5461010090046001600160a01b03163314611ded5760405162461bcd60e51b8152600401610d3d90614457565b601b54611e099061010090046001600160a01b031660006119a0565b601b8054610100600160a81b031981169091556040516101009091046001600160a01b0316906000908290600080516020614978833981519152908390a350565b601b5461010090046001600160a01b03163314611e795760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03831615801590611e9957506001600160a01b03821615155b8015611ead57506001600160a01b03811615155b611ef35760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610d3d565b601180546001600160a01b039485166001600160a01b0319918216179091556010805493851693821693909317909255600f8054919093169116179055565b601b5461010090046001600160a01b03163314611f615760405162461bcd60e51b8152600401610d3d90614457565b80611fee576001600160a01b03808316600090815260016020526040808220805460ff1916905560195490516380c581d160e01b8152600160201b909104909216916380c581d191611fb891869190600401614763565b600060405180830381600087803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b505050505050565b60025415612047576203f4806002544261200891906145f8565b116120475760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d3d565b6001600160a01b03821660009081526001602052604090205460ff16156120ae5760405162461bcd60e51b815260206004820152601b60248201527a2830b4b91030b63932b0b23c9030b23232b2103a37903634b9ba1760291b6044820152606401610d3d565b6001600160a01b03808316600090815260016020819052604091829020805460ff1916821790554260025560195491516380c581d160e01b8152600160201b909204909216916380c581d191611fb8918691600401614763565b5050565b601b5460009061010090046001600160a01b0316331461213e5760405162461bcd60e51b8152600401610d3d90614457565b600d5461215d90309061010090046001600160a01b0316600019612f40565b50600190565b601b5461010090046001600160a01b031633146121925760405162461bcd60e51b8152600401610d3d90614457565b60195462010000900460ff16156121e65760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610d3d565b6019546301000000900460ff1661223a5760405162461bcd60e51b81526020600482015260186024820152772634b8bab4b234ba3c9036bab9ba1031329030b23232b21760411b6044820152606401610d3d565b601954600160201b90046001600160a01b031661226d5760198054600160201b600160c01b03191630600160201b021790555b601954600e54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff431660248201526001600160401b034216604482015260096064820152600160201b9092041690636c115c3490608401600060405180830381600087803b1580156122df57600080fd5b505af19250505080156122f0575060015b506019805462ff00001916620100001790556009805460ff19169055600e5461271090612325906001600160a01b0316611da3565b61233090600a61460b565b61233a91906145d6565b601355600e5461271090612356906001600160a01b0316611da3565b61236190601e61460b565b61236b91906145d6565b60145542601a55565b6000612381338484612fed565b5060019392505050565b601b5461010090046001600160a01b031633146123ba5760405162461bcd60e51b8152600401610d3d90614457565b600c5461ffff8481169116146123f457600c54600160401b900460ff16156123f45760405162461bcd60e51b8152600401610d3d9061477e565b600c5461ffff83811662010000909204161461243457600c54600160481b900460ff16156124345760405162461bcd60e51b8152600401610d3d9061477e565b600c5461ffff828116600160201b909204161461247557600c54600160501b900460ff16156124755760405162461bcd60e51b8152600401610d3d9061477e565b600c805461ffff838116600160201b0261ffff60201b19868316620100000263ffffffff199094169288169290921792909217161790556124b68284614741565b600c805461ffff60301b1916600160301b61ffff93841602179055600b546000916124ea9162010000810482169116614741565b600c5461ffff9182169250829161251391600160201b8104821691600160301b90910416614741565b61ffff1611156117495760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d3d565b601b5461010090046001600160a01b031633146125a45760405162461bcd60e51b8152600401610d3d90614457565b306001600160a01b038216036125fa5760405162461bcd60e51b815260206004820152601b60248201527a21b0b73737ba1039bbb2b2b8103730ba34bb32903a37b5b2b7399760291b6044820152606401610d3d565b601b546040516370a0823160e01b815282916001600160a01b038084169263a9059cbb9261010090049091169083906370a082319061263d903090600401613f8d565b602060405180830381865afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267e91906147b5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156126c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120b91906147ce565b601b5461010090046001600160a01b0316331461271c5760405162461bcd60e51b8152600401610d3d90614457565b6012805461ff001916610100841515908102919091179091556015805460ff1916831515179055604051908152600080516020614958833981519152906020015b60405180910390a15050565b601b5461010090046001600160a01b031633146127985760405162461bcd60e51b8152600401610d3d90614457565b601954610100900460ff16156127c05760405162461bcd60e51b8152600401610d3d90614622565b600a546018556019805461ff001916610100179055565b601b5461010090046001600160a01b031633146128065760405162461bcd60e51b8152600401610d3d90614457565b600c54600160401b900460ff16156128305760405162461bcd60e51b8152600401610d3d906144a4565b600c805460ff60401b1916600160401b179055565b601b5461010090046001600160a01b031633146128745760405162461bcd60e51b8152600401610d3d90614457565b60195460ff16156128975760405162461bcd60e51b8152600401610d3d90614622565b600a546017556019805460ff19166001179055565b601b5461010090046001600160a01b031633146128db5760405162461bcd60e51b8152600401610d3d90614457565b6019546301000000900460ff16156129355760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d3d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e91906147eb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0f91906147eb565b6040518363ffffffff1660e01b8152600401612a2c929190614808565b602060405180830381865afa158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d91906147eb565b600e546001600160a01b039081166000908152600160205260409020805460ff191690559091508116612bf257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc91906147eb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6d91906147eb565b6040518363ffffffff1660e01b8152600401612b8a929190614808565b6020604051808303816000875af1158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd91906147eb565b600e80546001600160a01b0319166001600160a01b0392909216919091179055612c0e565b600e80546001600160a01b0319166001600160a01b0383161790555b600d8054610100600160a81b0319166101006001600160a01b038581168202929092178355600e5482166000908152600160208190526040909120805460ff19169091179055915461120b923092910416600019612f40565b601b5461010090046001600160a01b03163314612c965760405162461bcd60e51b8152600401610d3d90614457565b6019546301000000900460ff1615612cef5760405162461bcd60e51b815260206004820152601c60248201527b21b0b73737ba1031b0b6361030b33a32b9103634b8bab4b234ba3c9760211b6044820152606401610d3d565b601b546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015612d2f573d6000803e3d6000fd5b50565b601b5461010090046001600160a01b03163314612d615760405162461bcd60e51b8152600401610d3d90614457565b8284600a54612d70919061460b565b612d7a91906145d6565b601355600a548190612d8d90849061460b565b612d9791906145d6565b60148190556013541115612df75760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d3d565b600e5461271090612e10906001600160a01b0316611da3565b612e1b90609661460b565b612e2591906145d6565b6014541115612e825760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d3d565b620f4240600a54612e9391906145d6565b6014541015612eb45760405162461bcd60e51b8152600401610d3d90614822565b620f4240600a54612ec591906145d6565b60135410156117495760405162461bcd60e51b8152600401610d3d90614822565b601b5461010090046001600160a01b03163314612f155760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612f665760405162461bcd60e51b8152600401610d3d90614870565b6001600160a01b038216612f8c5760405162461bcd60e51b8152600401610d3d90614870565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d3d565b6001600160a01b0383166130b55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d3d565b61deac196001600160a01b0384160161311a5760405162461bcd60e51b815260206004820152602160248201527f557365206275726e2066756e6374696f6e20746f206275726e20746f6b656e736044820152601760f91b6064820152608401610d3d565b6000821161317c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d3d565b6001600160a01b0384166000908152600160205260408120548190819060ff16156131aa57600192506131d8565b6001600160a01b03861660009081526001602052604090205460ff16156131d457600191506131d8565b5060015b6131e287876137f3565b1561345a5760195462010000900460ff166132e4578061323f5760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610d3d565b6001600160a01b03871660009081526005602052604090205460ff1615801561328157506001600160a01b03861660009081526005602052604090205460ff16155b156132e45760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d3d565b82806132ed5750815b1561339c576001600160a01b03871660009081526007602052604090205460ff1615801561333457506001600160a01b03861660009081526007602052604090205460ff16155b1561339c5760175485111561339c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d3d565b600d546001600160a01b0387811661010090920416148015906133bd575081155b1561345a576001600160a01b03861660009081526007602052604090205460ff1661345a57601854856133ef88611da3565b6133f9919061468f565b111561345a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d3d565b81156135345760125460ff1661353457601254610100900460ff16801561349a57506001600160a01b03861660009081526008602052604090205460ff16155b80156134bf57506001600160a01b03871660009081526008602052604090205460ff16155b156135345760006134cf30611da3565b905060135481106135325760145460155460ff161561351c57601654600e546127109190613505906001600160a01b0316611da3565b61350f919061460b565b61351991906145d6565b90505b808210613527578091505b6135308261391b565b505b505b61354287878786868661354d565b979650505050505050565b600061355987876137f3565b156135f45760195460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092600160201b9004169063ecd07a53906064016020604051808303816000875af19250505080156135dd575060408051601f3d908101601f191682019092526135da918101906147ce565b60015b6135e657600080fd5b9050806135f257600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061363657506001600160a01b03871660009081526006602052604090205460ff165b1561363f575060005b6001600160a01b038816600090815260208190526040812080548892906136679084906145f8565b90915550600090508161367a5786613686565b6136868987878a613d53565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546136bc919061468f565b92505081905550876001600160a01b0316896001600160a01b0316600080516020614998833981519152836040516136f691815260200190565b60405180910390a36019546301000000900460ff166137e4576137198989613e56565b6019546301000000900460ff16158015613738575061373889896137f3565b801561375d57506001600160a01b03891660009081526005602052604090205460ff16155b801561378257506001600160a01b03881660009081526005602052604090205460ff16155b801561378c575083155b156137e45760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d3d565b50600198975050505050505050565b601b546000906001600160a01b03848116610100909204161480159061382c5750601b546001600160a01b038381166101009092041614155b80156138485750601b5461010090046001600160a01b03163214155b801561386d57506001600160a01b03821660009081526004602052604090205460ff16155b801561389257506001600160a01b03831660009081526004602052604090205460ff16155b80156138a957506001600160a01b03821661dead14155b80156138bd57506001600160a01b03821615155b80156138d257506001600160a01b0383163014155b80156138f357506019546001600160a01b03848116600160201b9092041614155b801561391457506019546001600160a01b03838116600160201b9092041614155b9392505050565b6012805460ff191660011790556040805160e081018252600c5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810490921660608201819052600160401b830460ff90811615156080840152600160481b84048116151560a0840152600160501b909304909216151560c0820152906000036139ae5750613d46565b306000908152600360209081526040808320600d5461010090046001600160a01b0316845290915290205460001914613a1157306000908152600360209081526040808320600d5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685613a32919061460b565b613a3c91906145d6565b613a4691906145d6565b90506000613a5482856145f8565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a8e57613a8e614658565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2591906147eb565b81600181518110613b3857613b38614658565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b81526101009091049091169063791ac94790613b8590859060009086903090429060040161489d565b600060405180830381600087803b158015613b9f57600080fd5b505af1925050508015613bb0575060015b613bbd5750505050613d46565b47600083613bcb868461460b565b613bd591906145d6565b90508415613cbb57600d54600f5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af193505050508015613c6f575060408051601f3d908101601f19168201909252613c6c9181019061490e565b60015b613c7e57505050505050613d46565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613cc581836145f8565b9150856000015186606001818151613cdd919061493c565b61ffff169052506011546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613d36576040519150601f19603f3d011682016040523d82523d6000602084013e613d3b565b606091505b505050505050505050505b506012805460ff19169055565b6000808415613d695750600b5461ffff16613d92565b8315613d825750600b5462010000900461ffff16613d92565b50600b54600160201b900461ffff165b80600003613da35782915050610f80565b601954600160201b90046001600160a01b031630148015613dce57504660011480613dce5750466038145b15613dd857506111945b6000612710613de7838661460b565b613df191906145d6565b90508015613e4c573060009081526020819052604081208054839290613e1890849061468f565b909155505060405181815230906001600160a01b038916906000805160206149988339815191529060200160405180910390a35b61354281856145f8565b6019546301000000900460ff1615613ebc5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d3d565b613ec682826137f3565b158015613ee05750600e546001600160a01b038281169116145b15612108576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556019805463ff000000191663010000001790819055600160201b900416613f5f5760198054600160201b600160c01b03191630600160201b021790555b6012805461ff001916610100179055604051600181526000805160206149588339815191529060200161275d565b6001600160a01b0391909116815260200190565b600060208083528351808285015260005b81811015613fce57858101830151858201604001528201613fb2565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561400157600080fd5b5035919050565b6001600160a01b0381168114612d2f57600080fd5b6000806040838503121561403057600080fd5b823561403b81614008565b946020939093013593505050565b60006020828403121561405b57600080fd5b813561391481614008565b60008060006060848603121561407b57600080fd5b833561408681614008565b9250602084013561409681614008565b929592945050506040919091013590565b600080604083850312156140ba57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614107576141076140c9565b604052919050565b60006001600160401b03821115614128576141286140c9565b5060051b60200190565b600082601f83011261414357600080fd5b813560206141586141538361410f565b6140df565b82815260059290921b8401810191818101908684111561417757600080fd5b8286015b84811015614192578035835291830191830161417b565b509695505050505050565b600080604083850312156141b057600080fd5b82356001600160401b03808211156141c757600080fd5b818501915085601f8301126141db57600080fd5b813560206141eb6141538361410f565b82815260059290921b8401810191818101908984111561420a57600080fd5b948201945b8386101561423157853561422281614008565b8252948201949082019061420f565b9650508601359250508082111561424757600080fd5b5061425485828601614132565b9150509250929050565b8015158114612d2f57600080fd5b6000806000806080858703121561428257600080fd5b843561428d8161425e565b9350602085013561429d8161425e565b925060408501356142ad8161425e565b915060608501356142bd8161425e565b939692955090935050565b600080604083850312156142db57600080fd5b82356142e681614008565b915060208301356142f68161425e565b809150509250929050565b803561ffff8116811461431357600080fd5b919050565b6000806040838503121561432b57600080fd5b61433483614301565b915061434260208401614301565b90509250929050565b60008060006060848603121561436057600080fd5b833561436b81614008565b9250602084013561437b81614008565b9150604084013561438b81614008565b809150509250925092565b6000806000606084860312156143ab57600080fd5b6143b484614301565b92506143c260208501614301565b91506143d060408501614301565b90509250925092565b600080604083850312156143ec57600080fd5b82356142e68161425e565b6000806040838503121561440a57600080fd5b823561441581614008565b915060208301356142f681614008565b6000806000806080858703121561443b57600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252600890820152672a37b7903637bb9760c11b604082015260600190565b6020808252600f908201526e20b63932b0b23c903637b1b5b2b21760891b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561451e578160001904821115614504576145046144cd565b8085161561451157918102915b93841c93908002906144e8565b509250929050565b60008261453557506001610e0e565b8161454257506000610e0e565b816001811461455857600281146145625761457e565b6001915050610e0e565b60ff841115614573576145736144cd565b50506001821b610e0e565b5060208310610133831016604e8410600b84101617156145a1575081810a610e0e565b6145ab83836144e3565b80600019048211156145bf576145bf6144cd565b029392505050565b600061391460ff841683614526565b6000826145f357634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610e0e57610e0e6144cd565b8082028115828204841417610e0e57610e0e6144cd565b6020808252601c908201527b21b0b73737ba1031b430b733b29037b731b2903234b9b0b13632b21760211b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103614685576146856144cd565b6001019392505050565b80820180821115610e0e57610e0e6144cd565b6000806000606084860312156146b757600080fd5b83516146c28161425e565b60208501519093506146d38161425e565b604085015190925061438b8161425e565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b61ffff81811683821601908082111561475c5761475c6144cd565b5092915050565b6001600160a01b039290921682521515602082015260400190565b6020808252601f908201527f43616e6e6f74206368616e67652c2076616c7565206973206c6f636b65642e00604082015260600190565b6000602082840312156147c757600080fd5b5051919050565b6000602082840312156147e057600080fd5b81516139148161425e565b6000602082840312156147fd57600080fd5b815161391481614008565b6001600160a01b0392831681529116602082015260400190565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156148ed5784516001600160a01b0316835293830193918301916001016148c8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561492357600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111561475c5761475c6144cd56fe7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532578be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122074c21154b76a379d491b34ad181d1017f770a3b4c2c4f656fbdac7d5adb361ad64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061033a5760003560e01c806303fd2a45146103465780630445b66714610372578063069d955f1461039657806306fdde03146104105780630758d9241461044857806307dd79e01461046d5780630923160214610497578063095ea7b3146104b95780630cc7506b146104d95780630dcbcf1c146104ee5780630fa604e414610527578063147cee6c1461053c57806318160ddd1461055157806323b872dd1461056657806326003957146105865780632610eaca146105a657806328577751146105c657806329dd8798146105dc5780632b112e49146105fc5780632b28fc7a146106115780632c7b1ff7146106275780632e8fa8211461065b578063313ce56714610671578063326616a11461068d57806333251a0b146106ac57806336fddb04146106cc5780633f3cf56c146106ec57806342966c681461070c578063452ed4f11461072c57806346ea7ac81461074c57806347ad363f1461076257806348c217d01461077c5780634ada218b146107915780634bbb93eb146107b15780634e0acf59146107d15780634e718e48146107e65780634fb2e45d146108065780634fbee1931461082657806350a8e0161461085f578063590ffdce146108805780635a6f0918146108a05780635c24b074146108b65780635cce86cd146108d65780635d4765681461090f5780636cf7c7dd146109245780636ebd00781461093e578063705285141461095357806370a0823114610973578063715018a61461099357806375cb1bd1146109a857806380c581d1146109c8578063893d20e8146109e85780638a63bd9b14610a0b5780638a8c523c14610a2057806395d89b4114610a35578063a9059cbb14610a63578063aa22b17214610a83578063ab558e4d14610aa3578063b1b08f7114610611578063b3d514fb14610611578063b7df8b3614610ac3578063bfc2fc3514610add578063c42e2f7314610afd578063cf84770614610b12578063d5a086a714610bb3578063dd62ed3e14610bc8578063e2dae07414610c0e578063eafb5a3c14610c23578063ee5d9c2d14610c43578063f94aa1b414610c58578063fb78680d14610caf578063fdb78c0e14610ccf578063feadde9c14610cee57600080fd5b3661034157005b600080fd5b34801561035257600080fd5b5061035c61dead81565b6040516103699190613f8d565b60405180910390f35b34801561037e57600080fd5b5061038860135481565b604051908152602001610369565b3480156103a257600080fd5b50600b546103da9061ffff80821691620100008104821691600160201b8204169060ff600160301b8204811691600160381b90041685565b6040805161ffff96871681529486166020860152929094169183019190915215156060820152901515608082015260a001610369565b34801561041c57600080fd5b50604080518082019091526006815265165bd21d5b9d60d21b60208201525b6040516103699190613fa1565b34801561045457600080fd5b50600d5461035c9061010090046001600160a01b031681565b34801561047957600080fd5b50600d546104879060ff1681565b6040519015158152602001610369565b3480156104a357600080fd5b506104b76104b2366004613fef565b610d0e565b005b3480156104c557600080fd5b506104876104d436600461401d565b610dfd565b3480156104e557600080fd5b506104b7610e14565b3480156104fa57600080fd5b50610487610509366004614049565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561053357600080fd5b50610388610e82565b34801561054857600080fd5b506104b7610ea2565b34801561055d57600080fd5b50600a54610388565b34801561057257600080fd5b50610487610581366004614066565b610f10565b34801561059257600080fd5b506104b76105a13660046140a7565b610f88565b3480156105b257600080fd5b506104b76105c136600461419d565b61108e565b3480156105d257600080fd5b5061038860165481565b3480156105e857600080fd5b506104b76105f736600461426c565b611210565b34801561060857600080fd5b506103886112e5565b34801561061d57600080fd5b506103886107d081565b34801561063357600080fd5b5061063c611313565b6040805193151584529115156020840152151590820152606001610369565b34801561066757600080fd5b5061038860145481565b34801561067d57600080fd5b5060405160098152602001610369565b34801561069957600080fd5b5060195461048790610100900460ff1681565b3480156106b857600080fd5b506104b76106c7366004614049565b61139a565b3480156106d857600080fd5b506104b76106e73660046142c8565b6113ff565b3480156106f857600080fd5b506104b76107073660046140a7565b611459565b34801561071857600080fd5b506104b7610727366004613fef565b61156e565b34801561073857600080fd5b50600e5461035c906001600160a01b031681565b34801561075857600080fd5b506103886109c481565b34801561076e57600080fd5b506019546104879060ff1681565b34801561078857600080fd5b506104b7611658565b34801561079d57600080fd5b506019546104879062010000900460ff1681565b3480156107bd57600080fd5b506103886107cc366004613fef565b61174f565b3480156107dd57600080fd5b506104b7611781565b3480156107f257600080fd5b506104b7610801366004613fef565b6117ef565b34801561081257600080fd5b506104b7610821366004614049565b61186d565b34801561083257600080fd5b50610487610841366004614049565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561086b57600080fd5b50601954610487906301000000900460ff1681565b34801561088c57600080fd5b506104b761089b3660046142c8565b6119a0565b3480156108ac57600080fd5b50610388601a5481565b3480156108c257600080fd5b506104b76108d1366004614049565b6119fa565b3480156108e257600080fd5b506104876108f1366004614049565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561091b57600080fd5b506104b7611ab4565b34801561093057600080fd5b50601b546104879060ff1681565b34801561094a57600080fd5b50610388611b22565b34801561095f57600080fd5b506104b761096e366004614318565b611b3d565b34801561097f57600080fd5b5061038861098e366004614049565b611da3565b34801561099f57600080fd5b506104b7611dbe565b3480156109b457600080fd5b506104b76109c336600461434b565b611e4a565b3480156109d457600080fd5b506104b76109e33660046142c8565b611f32565b3480156109f457600080fd5b50601b5461010090046001600160a01b031661035c565b348015610a1757600080fd5b5061048761210c565b348015610a2c57600080fd5b506104b7612163565b348015610a4157600080fd5b506040805180820190915260058152642cb7a5b2b760d91b602082015261043b565b348015610a6f57600080fd5b50610487610a7e36600461401d565b612374565b348015610a8f57600080fd5b506104b7610a9e366004614396565b61238b565b348015610aaf57600080fd5b506104b7610abe366004614049565b612575565b348015610acf57600080fd5b506015546104879060ff1681565b348015610ae957600080fd5b506104b7610af83660046143d9565b6126ed565b348015610b0957600080fd5b506104b7612769565b348015610b1e57600080fd5b50600c54610b6d9061ffff80821691620100008104821691600160201b8204811691600160301b81049091169060ff600160401b8204811691600160481b8104821691600160501b9091041687565b6040805161ffff98891681529688166020880152948716948601949094529490911660608401521515608083015291151560a082015290151560c082015260e001610369565b348015610bbf57600080fd5b506104b76127d7565b348015610bd457600080fd5b50610388610be33660046143f7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c1a57600080fd5b506104b7612845565b348015610c2f57600080fd5b506104b7610c3e366004614049565b6128ac565b348015610c4f57600080fd5b506104b7612c67565b348015610c6457600080fd5b50600f54601054601154610c85926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610369565b348015610cbb57600080fd5b506104b7610cca366004614425565b612d32565b348015610cdb57600080fd5b5060125461048790610100900460ff1681565b348015610cfa57600080fd5b506104b7610d093660046142c8565b612ee6565b601b5461010090046001600160a01b03163314610d465760405162461bcd60e51b8152600401610d3d90614457565b60405180910390fd5b46600103610d74576096811015610d6f5760405162461bcd60e51b8152600401610d3d90614482565b610d95565b604b811015610d955760405162461bcd60e51b8152600401610d3d90614482565b6019546040516304918b0160e11b815260048101839052600160201b9091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b5050505050565b6000610e0a338484612f40565b5060015b92915050565b601b5461010090046001600160a01b03163314610e435760405162461bcd60e51b8152600401610d3d90614457565b600b54600160381b900460ff1615610e6d5760405162461bcd60e51b8152600401610d3d906144a4565b600b805460ff60381b1916600160381b179055565b6000610e906009600a6145c7565b601854610e9d91906145d6565b905090565b601b5461010090046001600160a01b03163314610ed15760405162461bcd60e51b8152600401610d3d90614457565b600b54600160301b900460ff1615610efb5760405162461bcd60e51b8152600401610d3d906144a4565b600b805460ff60301b1916600160301b179055565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610f75576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610f6f9084906145f8565b90915550505b610f80848484612fed565b949350505050565b601b5461010090046001600160a01b03163314610fb75760405162461bcd60e51b8152600401610d3d90614457565b6064600a54610fc691906145d6565b8183600a54610fd5919061460b565b610fdf91906145d6565b10156110465760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610d3d565b601954610100900460ff161561106e5760405162461bcd60e51b8152600401610d3d90614622565b8082600a5461107d919061460b565b61108791906145d6565b6018555050565b601b5461010090046001600160a01b031633146110bd5760405162461bcd60e51b8152600401610d3d90614457565b80518251146111065760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d3d565b60005b82518161ffff16101561120b576111226009600a6145c7565b828261ffff168151811061113857611138614658565b602002602001015161114a919061460b565b61115333611da3565b10156111965760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d3d565b6111f833848361ffff16815181106111b0576111b0614658565b60200260200101516009600a6111c691906145c7565b858561ffff16815181106111dc576111dc614658565b60200260200101516111ee919061460b565b600080600161354d565b50806112038161466e565b915050611109565b505050565b601b5461010090046001600160a01b0316331461123f5760405162461bcd60e51b8152600401610d3d90614457565b601b5460ff16156112625760405162461bcd60e51b8152600401610d3d90614622565b601954604051630109da6960e01b81528515156004820152841515602482015283151560448201528215156064820152600160201b9091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156112c757600080fd5b505af11580156112db573d6000803e3d6000fd5b5050505050505050565b60006112f16000611da3565b6112fc61dead611da3565b611306919061468f565b600a54610e9d91906145f8565b6000806000601960049054906101000a90046001600160a01b03166001600160a01b0316632c7b1ff76040518163ffffffff1660e01b8152600401606060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f91906146a2565b925092509250909192565b601b5461010090046001600160a01b031633146113c95760405162461bcd60e51b8152600401610d3d90614457565b6019546040516333251a0b60e01b8152600160201b9091046001600160a01b0316906333251a0b90610dc8908490600401613f8d565b601b5461010090046001600160a01b0316331461142e5760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b5461010090046001600160a01b031633146114885760405162461bcd60e51b8152600401610d3d90614457565b6103e8600a54600561149a919061460b565b6114a491906145d6565b8183600a546114b3919061460b565b6114bd91906145d6565b101561152b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f76604482015276329018171a929037b3103a37ba30b61039bab838363c9760491b6064820152608401610d3d565b60195460ff161561154e5760405162461bcd60e51b8152600401610d3d90614622565b8082600a5461155d919061460b565b61156791906145d6565b6017555050565b3361157b6009600a6145c7565b611585908361460b565b91508161159182611da3565b10156115df5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610d3d565b6001600160a01b038116600090815260208190526040812080548492906116079084906145f8565b9250508190555081600a600082825461162091906145f8565b90915550506040518281526000906001600160a01b038316906000805160206149988339815191529060200160405180910390a35050565b601b5461010090046001600160a01b031633146116875760405162461bcd60e51b8152600401610d3d90614457565b601b5460ff16156116da5760405162461bcd60e51b815260206004820152601d60248201527f50726f74656374696f6e7320616c72656164792064697361626c65642e0000006044820152606401610d3d565b601b8054600160ff199091161790556019546040805163048c217d60e41b81529051600160201b9092046001600160a01b0316916348c217d09160048082019260009290919082900301818387803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b50505050565b600e5460009061271090839061176d906001600160a01b0316611da3565b611777919061460b565b610e0e91906145d6565b601b5461010090046001600160a01b031633146117b05760405162461bcd60e51b8152600401610d3d90614457565b600c54600160481b900460ff16156117da5760405162461bcd60e51b8152600401610d3d906144a4565b600c805460ff60481b1916600160481b179055565b601b5461010090046001600160a01b0316331461181e5760405162461bcd60e51b8152600401610d3d90614457565b60968111156118685760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d3d565b601655565b601b5461010090046001600160a01b0316331461189c5760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b0381166118c25760405162461bcd60e51b8152600401610d3d906146e4565b61deac196001600160a01b038216016118ed5760405162461bcd60e51b8152600401610d3d906146e4565b601b546119099061010090046001600160a01b031660006119a0565b6119148160016119a0565b601b546000906119319061010090046001600160a01b0316611da3565b111561195857601b546119569061010090046001600160a01b0316826111ee82611da3565b505b601b80546001600160a01b03838116610100818102610100600160a81b0319851617909455604051939092041691829060008051602061497883398151915290600090a35050565b601b5461010090046001600160a01b031633146119cf5760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601b5461010090046001600160a01b03163314611a295760405162461bcd60e51b8152600401610d3d90614457565b60195462010000900460ff1615611a3f57600080fd5b306001600160a01b03821603611a885760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d3d565b601980546001600160a01b03909216600160201b02600160201b600160c01b0319909216919091179055565b601b5461010090046001600160a01b03163314611ae35760405162461bcd60e51b8152600401610d3d90614457565b600c54600160501b900460ff1615611b0d5760405162461bcd60e51b8152600401610d3d906144a4565b600c805460ff60501b1916600160501b179055565b6000611b306009600a6145c7565b601754610e9d91906145d6565b601b5461010090046001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610d3d90614457565b600d5460ff1615611bb35760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d3d565b6107d08261ffff1611158015611bcf57506107d08161ffff1611155b611c155760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba1032bc31b2b2b21036b0bc34b6bab6b99760491b6044820152606401610d3d565b6109c4611c228284614741565b61ffff161115611c745760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610d3d565b600b5461ffff838116911614611cf457600b54600160301b900460ff1615611cf45760405162461bcd60e51b815260206004820152602d60248201527f4275792074617865732063616e6e6f74206265206368616e6765642c2074686560448201526c3c9030b932903637b1b5b2b21760991b6064820152608401610d3d565b600b5461ffff828116620100009092041614611d7b57600b54600160381b900460ff1615611d7b5760405162461bcd60e51b815260206004820152602e60248201527f53656c6c2074617865732063616e6e6f74206265206368616e6765642c20746860448201526d32bc9030b932903637b1b5b2b21760911b6064820152608401610d3d565b600b805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6001600160a01b031660009081526020819052604090205490565b601b5461010090046001600160a01b03163314611ded5760405162461bcd60e51b8152600401610d3d90614457565b601b54611e099061010090046001600160a01b031660006119a0565b601b8054610100600160a81b031981169091556040516101009091046001600160a01b0316906000908290600080516020614978833981519152908390a350565b601b5461010090046001600160a01b03163314611e795760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03831615801590611e9957506001600160a01b03821615155b8015611ead57506001600160a01b03811615155b611ef35760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610d3d565b601180546001600160a01b039485166001600160a01b0319918216179091556010805493851693821693909317909255600f8054919093169116179055565b601b5461010090046001600160a01b03163314611f615760405162461bcd60e51b8152600401610d3d90614457565b80611fee576001600160a01b03808316600090815260016020526040808220805460ff1916905560195490516380c581d160e01b8152600160201b909104909216916380c581d191611fb891869190600401614763565b600060405180830381600087803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b505050505050565b60025415612047576203f4806002544261200891906145f8565b116120475760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d3d565b6001600160a01b03821660009081526001602052604090205460ff16156120ae5760405162461bcd60e51b815260206004820152601b60248201527a2830b4b91030b63932b0b23c9030b23232b2103a37903634b9ba1760291b6044820152606401610d3d565b6001600160a01b03808316600090815260016020819052604091829020805460ff1916821790554260025560195491516380c581d160e01b8152600160201b909204909216916380c581d191611fb8918691600401614763565b5050565b601b5460009061010090046001600160a01b0316331461213e5760405162461bcd60e51b8152600401610d3d90614457565b600d5461215d90309061010090046001600160a01b0316600019612f40565b50600190565b601b5461010090046001600160a01b031633146121925760405162461bcd60e51b8152600401610d3d90614457565b60195462010000900460ff16156121e65760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610d3d565b6019546301000000900460ff1661223a5760405162461bcd60e51b81526020600482015260186024820152772634b8bab4b234ba3c9036bab9ba1031329030b23232b21760411b6044820152606401610d3d565b601954600160201b90046001600160a01b031661226d5760198054600160201b600160c01b03191630600160201b021790555b601954600e54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff431660248201526001600160401b034216604482015260096064820152600160201b9092041690636c115c3490608401600060405180830381600087803b1580156122df57600080fd5b505af19250505080156122f0575060015b506019805462ff00001916620100001790556009805460ff19169055600e5461271090612325906001600160a01b0316611da3565b61233090600a61460b565b61233a91906145d6565b601355600e5461271090612356906001600160a01b0316611da3565b61236190601e61460b565b61236b91906145d6565b60145542601a55565b6000612381338484612fed565b5060019392505050565b601b5461010090046001600160a01b031633146123ba5760405162461bcd60e51b8152600401610d3d90614457565b600c5461ffff8481169116146123f457600c54600160401b900460ff16156123f45760405162461bcd60e51b8152600401610d3d9061477e565b600c5461ffff83811662010000909204161461243457600c54600160481b900460ff16156124345760405162461bcd60e51b8152600401610d3d9061477e565b600c5461ffff828116600160201b909204161461247557600c54600160501b900460ff16156124755760405162461bcd60e51b8152600401610d3d9061477e565b600c805461ffff838116600160201b0261ffff60201b19868316620100000263ffffffff199094169288169290921792909217161790556124b68284614741565b600c805461ffff60301b1916600160301b61ffff93841602179055600b546000916124ea9162010000810482169116614741565b600c5461ffff9182169250829161251391600160201b8104821691600160301b90910416614741565b61ffff1611156117495760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d3d565b601b5461010090046001600160a01b031633146125a45760405162461bcd60e51b8152600401610d3d90614457565b306001600160a01b038216036125fa5760405162461bcd60e51b815260206004820152601b60248201527a21b0b73737ba1039bbb2b2b8103730ba34bb32903a37b5b2b7399760291b6044820152606401610d3d565b601b546040516370a0823160e01b815282916001600160a01b038084169263a9059cbb9261010090049091169083906370a082319061263d903090600401613f8d565b602060405180830381865afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267e91906147b5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156126c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120b91906147ce565b601b5461010090046001600160a01b0316331461271c5760405162461bcd60e51b8152600401610d3d90614457565b6012805461ff001916610100841515908102919091179091556015805460ff1916831515179055604051908152600080516020614958833981519152906020015b60405180910390a15050565b601b5461010090046001600160a01b031633146127985760405162461bcd60e51b8152600401610d3d90614457565b601954610100900460ff16156127c05760405162461bcd60e51b8152600401610d3d90614622565b600a546018556019805461ff001916610100179055565b601b5461010090046001600160a01b031633146128065760405162461bcd60e51b8152600401610d3d90614457565b600c54600160401b900460ff16156128305760405162461bcd60e51b8152600401610d3d906144a4565b600c805460ff60401b1916600160401b179055565b601b5461010090046001600160a01b031633146128745760405162461bcd60e51b8152600401610d3d90614457565b60195460ff16156128975760405162461bcd60e51b8152600401610d3d90614622565b600a546017556019805460ff19166001179055565b601b5461010090046001600160a01b031633146128db5760405162461bcd60e51b8152600401610d3d90614457565b6019546301000000900460ff16156129355760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d3d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e91906147eb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0f91906147eb565b6040518363ffffffff1660e01b8152600401612a2c929190614808565b602060405180830381865afa158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d91906147eb565b600e546001600160a01b039081166000908152600160205260409020805460ff191690559091508116612bf257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc91906147eb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6d91906147eb565b6040518363ffffffff1660e01b8152600401612b8a929190614808565b6020604051808303816000875af1158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd91906147eb565b600e80546001600160a01b0319166001600160a01b0392909216919091179055612c0e565b600e80546001600160a01b0319166001600160a01b0383161790555b600d8054610100600160a81b0319166101006001600160a01b038581168202929092178355600e5482166000908152600160208190526040909120805460ff19169091179055915461120b923092910416600019612f40565b601b5461010090046001600160a01b03163314612c965760405162461bcd60e51b8152600401610d3d90614457565b6019546301000000900460ff1615612cef5760405162461bcd60e51b815260206004820152601c60248201527b21b0b73737ba1031b0b6361030b33a32b9103634b8bab4b234ba3c9760211b6044820152606401610d3d565b601b546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015612d2f573d6000803e3d6000fd5b50565b601b5461010090046001600160a01b03163314612d615760405162461bcd60e51b8152600401610d3d90614457565b8284600a54612d70919061460b565b612d7a91906145d6565b601355600a548190612d8d90849061460b565b612d9791906145d6565b60148190556013541115612df75760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d3d565b600e5461271090612e10906001600160a01b0316611da3565b612e1b90609661460b565b612e2591906145d6565b6014541115612e825760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d3d565b620f4240600a54612e9391906145d6565b6014541015612eb45760405162461bcd60e51b8152600401610d3d90614822565b620f4240600a54612ec591906145d6565b60135410156117495760405162461bcd60e51b8152600401610d3d90614822565b601b5461010090046001600160a01b03163314612f155760405162461bcd60e51b8152600401610d3d90614457565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612f665760405162461bcd60e51b8152600401610d3d90614870565b6001600160a01b038216612f8c5760405162461bcd60e51b8152600401610d3d90614870565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d3d565b6001600160a01b0383166130b55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d3d565b61deac196001600160a01b0384160161311a5760405162461bcd60e51b815260206004820152602160248201527f557365206275726e2066756e6374696f6e20746f206275726e20746f6b656e736044820152601760f91b6064820152608401610d3d565b6000821161317c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d3d565b6001600160a01b0384166000908152600160205260408120548190819060ff16156131aa57600192506131d8565b6001600160a01b03861660009081526001602052604090205460ff16156131d457600191506131d8565b5060015b6131e287876137f3565b1561345a5760195462010000900460ff166132e4578061323f5760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610d3d565b6001600160a01b03871660009081526005602052604090205460ff1615801561328157506001600160a01b03861660009081526005602052604090205460ff16155b156132e45760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d3d565b82806132ed5750815b1561339c576001600160a01b03871660009081526007602052604090205460ff1615801561333457506001600160a01b03861660009081526007602052604090205460ff16155b1561339c5760175485111561339c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d3d565b600d546001600160a01b0387811661010090920416148015906133bd575081155b1561345a576001600160a01b03861660009081526007602052604090205460ff1661345a57601854856133ef88611da3565b6133f9919061468f565b111561345a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d3d565b81156135345760125460ff1661353457601254610100900460ff16801561349a57506001600160a01b03861660009081526008602052604090205460ff16155b80156134bf57506001600160a01b03871660009081526008602052604090205460ff16155b156135345760006134cf30611da3565b905060135481106135325760145460155460ff161561351c57601654600e546127109190613505906001600160a01b0316611da3565b61350f919061460b565b61351991906145d6565b90505b808210613527578091505b6135308261391b565b505b505b61354287878786868661354d565b979650505050505050565b600061355987876137f3565b156135f45760195460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092600160201b9004169063ecd07a53906064016020604051808303816000875af19250505080156135dd575060408051601f3d908101601f191682019092526135da918101906147ce565b60015b6135e657600080fd5b9050806135f257600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061363657506001600160a01b03871660009081526006602052604090205460ff165b1561363f575060005b6001600160a01b038816600090815260208190526040812080548892906136679084906145f8565b90915550600090508161367a5786613686565b6136868987878a613d53565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546136bc919061468f565b92505081905550876001600160a01b0316896001600160a01b0316600080516020614998833981519152836040516136f691815260200190565b60405180910390a36019546301000000900460ff166137e4576137198989613e56565b6019546301000000900460ff16158015613738575061373889896137f3565b801561375d57506001600160a01b03891660009081526005602052604090205460ff16155b801561378257506001600160a01b03881660009081526005602052604090205460ff16155b801561378c575083155b156137e45760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d3d565b50600198975050505050505050565b601b546000906001600160a01b03848116610100909204161480159061382c5750601b546001600160a01b038381166101009092041614155b80156138485750601b5461010090046001600160a01b03163214155b801561386d57506001600160a01b03821660009081526004602052604090205460ff16155b801561389257506001600160a01b03831660009081526004602052604090205460ff16155b80156138a957506001600160a01b03821661dead14155b80156138bd57506001600160a01b03821615155b80156138d257506001600160a01b0383163014155b80156138f357506019546001600160a01b03848116600160201b9092041614155b801561391457506019546001600160a01b03838116600160201b9092041614155b9392505050565b6012805460ff191660011790556040805160e081018252600c5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810490921660608201819052600160401b830460ff90811615156080840152600160481b84048116151560a0840152600160501b909304909216151560c0820152906000036139ae5750613d46565b306000908152600360209081526040808320600d5461010090046001600160a01b0316845290915290205460001914613a1157306000908152600360209081526040808320600d5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685613a32919061460b565b613a3c91906145d6565b613a4691906145d6565b90506000613a5482856145f8565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a8e57613a8e614658565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2591906147eb565b81600181518110613b3857613b38614658565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b81526101009091049091169063791ac94790613b8590859060009086903090429060040161489d565b600060405180830381600087803b158015613b9f57600080fd5b505af1925050508015613bb0575060015b613bbd5750505050613d46565b47600083613bcb868461460b565b613bd591906145d6565b90508415613cbb57600d54600f5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af193505050508015613c6f575060408051601f3d908101601f19168201909252613c6c9181019061490e565b60015b613c7e57505050505050613d46565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613cc581836145f8565b9150856000015186606001818151613cdd919061493c565b61ffff169052506011546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613d36576040519150601f19603f3d011682016040523d82523d6000602084013e613d3b565b606091505b505050505050505050505b506012805460ff19169055565b6000808415613d695750600b5461ffff16613d92565b8315613d825750600b5462010000900461ffff16613d92565b50600b54600160201b900461ffff165b80600003613da35782915050610f80565b601954600160201b90046001600160a01b031630148015613dce57504660011480613dce5750466038145b15613dd857506111945b6000612710613de7838661460b565b613df191906145d6565b90508015613e4c573060009081526020819052604081208054839290613e1890849061468f565b909155505060405181815230906001600160a01b038916906000805160206149988339815191529060200160405180910390a35b61354281856145f8565b6019546301000000900460ff1615613ebc5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d3d565b613ec682826137f3565b158015613ee05750600e546001600160a01b038281169116145b15612108576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556019805463ff000000191663010000001790819055600160201b900416613f5f5760198054600160201b600160c01b03191630600160201b021790555b6012805461ff001916610100179055604051600181526000805160206149588339815191529060200161275d565b6001600160a01b0391909116815260200190565b600060208083528351808285015260005b81811015613fce57858101830151858201604001528201613fb2565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561400157600080fd5b5035919050565b6001600160a01b0381168114612d2f57600080fd5b6000806040838503121561403057600080fd5b823561403b81614008565b946020939093013593505050565b60006020828403121561405b57600080fd5b813561391481614008565b60008060006060848603121561407b57600080fd5b833561408681614008565b9250602084013561409681614008565b929592945050506040919091013590565b600080604083850312156140ba57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614107576141076140c9565b604052919050565b60006001600160401b03821115614128576141286140c9565b5060051b60200190565b600082601f83011261414357600080fd5b813560206141586141538361410f565b6140df565b82815260059290921b8401810191818101908684111561417757600080fd5b8286015b84811015614192578035835291830191830161417b565b509695505050505050565b600080604083850312156141b057600080fd5b82356001600160401b03808211156141c757600080fd5b818501915085601f8301126141db57600080fd5b813560206141eb6141538361410f565b82815260059290921b8401810191818101908984111561420a57600080fd5b948201945b8386101561423157853561422281614008565b8252948201949082019061420f565b9650508601359250508082111561424757600080fd5b5061425485828601614132565b9150509250929050565b8015158114612d2f57600080fd5b6000806000806080858703121561428257600080fd5b843561428d8161425e565b9350602085013561429d8161425e565b925060408501356142ad8161425e565b915060608501356142bd8161425e565b939692955090935050565b600080604083850312156142db57600080fd5b82356142e681614008565b915060208301356142f68161425e565b809150509250929050565b803561ffff8116811461431357600080fd5b919050565b6000806040838503121561432b57600080fd5b61433483614301565b915061434260208401614301565b90509250929050565b60008060006060848603121561436057600080fd5b833561436b81614008565b9250602084013561437b81614008565b9150604084013561438b81614008565b809150509250925092565b6000806000606084860312156143ab57600080fd5b6143b484614301565b92506143c260208501614301565b91506143d060408501614301565b90509250925092565b600080604083850312156143ec57600080fd5b82356142e68161425e565b6000806040838503121561440a57600080fd5b823561441581614008565b915060208301356142f681614008565b6000806000806080858703121561443b57600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252600890820152672a37b7903637bb9760c11b604082015260600190565b6020808252600f908201526e20b63932b0b23c903637b1b5b2b21760891b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561451e578160001904821115614504576145046144cd565b8085161561451157918102915b93841c93908002906144e8565b509250929050565b60008261453557506001610e0e565b8161454257506000610e0e565b816001811461455857600281146145625761457e565b6001915050610e0e565b60ff841115614573576145736144cd565b50506001821b610e0e565b5060208310610133831016604e8410600b84101617156145a1575081810a610e0e565b6145ab83836144e3565b80600019048211156145bf576145bf6144cd565b029392505050565b600061391460ff841683614526565b6000826145f357634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610e0e57610e0e6144cd565b8082028115828204841417610e0e57610e0e6144cd565b6020808252601c908201527b21b0b73737ba1031b430b733b29037b731b2903234b9b0b13632b21760211b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103614685576146856144cd565b6001019392505050565b80820180821115610e0e57610e0e6144cd565b6000806000606084860312156146b757600080fd5b83516146c28161425e565b60208501519093506146d38161425e565b604085015190925061438b8161425e565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b61ffff81811683821601908082111561475c5761475c6144cd565b5092915050565b6001600160a01b039290921682521515602082015260400190565b6020808252601f908201527f43616e6e6f74206368616e67652c2076616c7565206973206c6f636b65642e00604082015260600190565b6000602082840312156147c757600080fd5b5051919050565b6000602082840312156147e057600080fd5b81516139148161425e565b6000602082840312156147fd57600080fd5b815161391481614008565b6001600160a01b0392831681529116602082015260400190565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156148ed5784516001600160a01b0316835293830193918301916001016148c8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561492357600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111561475c5761475c6144cd56fe7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532578be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122074c21154b76a379d491b34ad181d1017f770a3b4c2c4f656fbdac7d5adb361ad64736f6c63430008110033

Deployed Bytecode Sourcemap

4322:27548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6350:73;;;;;;;;;;;;6381:42;6350:73;;;;;;;;;:::i;:::-;;;;;;;;6925:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;6925:28:0;222:177:1;5581:162:0;;;;;;;;;;-1:-1:-1;5581:162:0;;;;;;;;;;;;;;;-1:-1:-1;;;5581:162:0;;;;;-1:-1:-1;;;5581:162:0;;;;;-1:-1:-1;;;5581:162:0;;;;;;;;;655:6:1;688:15;;;670:34;;740:15;;;735:2;720:18;;713:43;792:15;;;;772:18;;;765:43;;;;851:14;844:22;839:2;824:18;;817:50;911:14;;904:22;898:3;883:19;;876:51;632:3;617:19;5581:162:0;404:529:1;11560:80:0;;;;;;;;;;-1:-1:-1;11632:5:0;;;;;;;;;;;;-1:-1:-1;;;11632:5:0;;;;11560:80;;;;;;;:::i;6289:26::-;;;;;;;;;;-1:-1:-1;6289:26:0;;;;;;;-1:-1:-1;;;;;6289:26:0;;;6256;;;;;;;;;;-1:-1:-1;6256:26:0;;;;;;;;;;;1881:14:1;;1874:22;1856:41;;1844:2;1829:18;6256:26:0;1716:187:1;16064:265:0;;;;;;;;;;-1:-1:-1;16064:265:0;;;;;:::i;:::-;;:::i;:::-;;12168:161;;;;;;;;;;-1:-1:-1;12168:161:0;;;;;:::i;:::-;;:::i;17081:256::-;;;;;;;;;;;;;:::i;15207:140::-;;;;;;;;;;-1:-1:-1;15207:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15305:34:0;15281:4;15305:34;;;:25;:34;;;;;;;;;15207:140;21507:114;;;;;;;;;;;;;:::i;16820:253::-;;;;;;;;;;;;;:::i;11295:83::-;;;;;;;;;;-1:-1:-1;11368:7:0;;11295:83;;12838:306;;;;;;;;;;-1:-1:-1;12838:306:0;;;;;:::i;:::-;;:::i;20590:344::-;;;;;;;;;;-1:-1:-1;20590:344:0;;;;;:::i;:::-;;:::i;29183:447::-;;;;;;;;;;-1:-1:-1;29183:447:0;;;;;:::i;:::-;;:::i;7033:33::-;;;;;;;;;;;;;;;;15778:278;;;;;;;;;;-1:-1:-1;15778:278:0;;;;;:::i;:::-;;:::i;15511:141::-;;;;;;;;;;;;;:::i;6000:42::-;;;;;;;;;;;;6038:4;6000:42;;16681:131;;;;;;;;;;;;;:::i;:::-;;;;6986:14:1;;6979:22;6961:41;;7045:14;;7038:22;7033:2;7018:18;;7011:50;7104:14;7097:22;7077:18;;;7070:50;6949:2;6934:18;16681:131:0;6777:349:1;6960:25:0;;;;;;;;;;;;;;;;11384:80;;;;;;;;;;-1:-1:-1;11384:80:0;;5116:1;7273:36:1;;7261:2;7246:18;11384:80:0;7131:184:1;7250:39:0;;;;;;;;;;-1:-1:-1;7250:39:0;;;;;;;;;;;15660:110;;;;;;;;;;-1:-1:-1;15660:110:0;;;;;:::i;:::-;;:::i;14782:140::-;;;;;;;;;;-1:-1:-1;14782:140:0;;;;;:::i;:::-;;:::i;20224:358::-;;;;;;;;;;-1:-1:-1;20224:358:0;;;;;:::i;:::-;;:::i;31515:352::-;;;;;;;;;;-1:-1:-1;31515:352:0;;;;;:::i;:::-;;:::i;6322:21::-;;;;;;;;;;-1:-1:-1;6322:21:0;;;;-1:-1:-1;;;;;6322:21:0;;;6153:46;;;;;;;;;;;;6195:4;6153:46;;7199:44;;;;;;;;;;-1:-1:-1;7199:44:0;;;;;;;;16337:336;;;;;;;;;;;;;:::i;7298:34::-;;;;;;;;;;-1:-1:-1;7298:34:0;;;;;;;;;;;21629:189;;;;;;;;;;-1:-1:-1;21629:189:0;;;;;:::i;:::-;;:::i;17620:267::-;;;;;;;;;;;;;:::i;22533:217::-;;;;;;;;;;-1:-1:-1;22533:217:0;;;;;:::i;:::-;;:::i;10053:654::-;;;;;;;;;;-1:-1:-1;10053:654:0;;;;;:::i;:::-;;:::i;14930:127::-;;;;;;;;;;-1:-1:-1;14930:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15021:28:0;14997:4;15021:28;;;:19;:28;;;;;;;;;14930:127;7339:36;;;;;;;;;;-1:-1:-1;7339:36:0;;;;;;;;;;;15065:134;;;;;;;;;;-1:-1:-1;15065:134:0;;;;;:::i;:::-;;:::i;7412:26::-;;;;;;;;;;;;;;;;14412:222;;;;;;;;;;-1:-1:-1;14412:222:0;;;;;:::i;:::-;;:::i;14642:132::-;;;;;;;;;;-1:-1:-1;14642:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14736:30:0;14712:4;14736:30;;;:21;:30;;;;;;;;;14642:132;17895:273;;;;;;;;;;;;;:::i;7447:39::-;;;;;;;;;;-1:-1:-1;7447:39:0;;;;;;;;21391:108;;;;;;;;;;;;;:::i;18176:724::-;;;;;;;;;;-1:-1:-1;18176:724:0;;;;;:::i;:::-;;:::i;11870:117::-;;;;;;;;;;-1:-1:-1;11870:117:0;;;;;:::i;:::-;;:::i;10715:225::-;;;;;;;;;;;;;:::i;19797:419::-;;;;;;;;;;-1:-1:-1;19797:419:0;;;;;:::i;:::-;;:::i;13840:564::-;;;;;;;;;;-1:-1:-1;13840:564:0;;;;;:::i;:::-;;:::i;11646:79::-;;;;;;;;;;-1:-1:-1;11716:6:0;;;;;-1:-1:-1;;;;;11716:6:0;11646:79;;12655:175;;;;;;;;;;;;;:::i;28094:635::-;;;;;;;;;;;;;:::i;11470:84::-;;;;;;;;;;-1:-1:-1;11544:7:0;;;;;;;;;;;;-1:-1:-1;;;11544:7:0;;;;11470:84;;11995:165;;;;;;;;;;-1:-1:-1;11995:165:0;;;;;:::i;:::-;;:::i;18908:881::-;;;;;;;;;;-1:-1:-1;18908:881:0;;;;;:::i;:::-;;:::i;28927:248::-;;;;;;;;;;-1:-1:-1;28927:248:0;;;;;:::i;:::-;;:::i;6992:34::-;;;;;;;;;;-1:-1:-1;6992:34:0;;;;;;;;22758:263;;;;;;;;;;-1:-1:-1;22758:263:0;;;;;:::i;:::-;;:::i;21173:210::-;;;;;;;;;;;;;:::i;5752:239::-;;;;;;;;;;-1:-1:-1;5752:239:0;;;;;;;;;;;;;;;-1:-1:-1;;;5752:239:0;;;;;-1:-1:-1;;;5752:239:0;;;;;;;-1:-1:-1;;;5752:239:0;;;;;-1:-1:-1;;;5752:239:0;;;;;-1:-1:-1;;;5752:239:0;;;;;;;;;;9703:6:1;9736:15;;;9718:34;;9788:15;;;9783:2;9768:18;;9761:43;9840:15;;;9820:18;;;9813:43;;;;9892:15;;;;9887:2;9872:18;;9865:43;9952:14;9945:22;9939:3;9924:19;;9917:51;10012:14;;10005:22;9999:3;9984:19;;9977:51;10072:14;;10065:22;10059:3;10044:19;;10037:51;9680:3;9665:19;5752:239:0;9404:690:1;17345:267:0;;;;;;;;;;;;;:::i;11731:133::-;;;;;;;;;;-1:-1:-1;11731:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11833:19:0;;;11815:7;11833:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11731:133;20942:223;;;;;;;;;;;;;:::i;13152:680::-;;;;;;;;;;-1:-1:-1;13152:680:0;;;;;:::i;:::-;;:::i;28737:182::-;;;;;;;;;;;;;:::i;6576:272::-;;;;;;;;;;-1:-1:-1;6576:272:0;;;;;;;;-1:-1:-1;;;;;6576:272:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10798:15:1;;;10780:34;;10850:15;;;10845:2;10830:18;;10823:43;10902:15;;10882:18;;;10875:43;;;;10730:2;10715:18;6576:272:0;10492:432:1;21826:699:0;;;;;;;;;;-1:-1:-1;21826:699:0;;;;;:::i;:::-;;:::i;6879:39::-;;;;;;;;;;-1:-1:-1;6879:39:0;;;;;;;;;;;15355:148;;;;;;;;;;-1:-1:-1;15355:148:0;;;;;:::i;:::-;;:::i;16064:265::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;;;;;;;;;16137:13:::1;16154:1;16137:18:::0;16133:145:::1;;16187:3;16180;:10;;16172:31;;;;-1:-1:-1::0;;;16172:31:0::1;;;;;;;:::i;:::-;16133:145;;;16251:2;16244:3;:9;;16236:30;;;;-1:-1:-1::0;;;16236:30:0::1;;;;;;;:::i;:::-;16288:11;::::0;:33:::1;::::0;-1:-1:-1;;;16288:33:0;;:11:::1;:33:::0;::::1;368:25:1::0;;;-1:-1:-1;;;16288:11:0;;::::1;-1:-1:-1::0;;;;;16288:11:0::1;::::0;:28:::1;::::0;341:18:1;;16288:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16064:265:::0;:::o;12168:161::-;12245:4;12262:37;12271:10;12283:7;12292:6;12262:8;:37::i;:::-;-1:-1:-1;12317:4:0;12168:161;;;;;:::o;17081:256::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;17145:9:::1;:20:::0;-1:-1:-1;;;17145:20:0;::::1;;;17144:21;17136:49;;;;-1:-1:-1::0;;;17136:49:0::1;;;;;;;:::i;:::-;17302:9;:27:::0;;-1:-1:-1;;;;17302:27:0::1;-1:-1:-1::0;;;17302:27:0::1;::::0;;17081:256::o;21507:114::-;21554:7;21599:13;5116:1;21599:2;:13;:::i;:::-;21581:14;;:32;;;;:::i;:::-;21574:39;;21507:114;:::o;16820:253::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;16883:9:::1;:19:::0;-1:-1:-1;;;16883:19:0;::::1;;;16882:20;16874:48;;;;-1:-1:-1::0;;;16874:48:0::1;;;;;;;:::i;:::-;17039:9;:26:::0;;-1:-1:-1;;;;17039:26:0::1;-1:-1:-1::0;;;17039:26:0::1;::::0;;16820:253::o;12838:306::-;-1:-1:-1;;;;;12959:19:0;;12938:4;12959:19;;;:11;:19;;;;;;;;12979:10;12959:31;;;;;;;;-1:-1:-1;;12959:52:0;12955:126;;-1:-1:-1;;;;;13028:19:0;;;;;;:11;:19;;;;;;;;13048:10;13028:31;;;;;;;:41;;13063:6;;13028:19;:41;;13063:6;;13028:41;:::i;:::-;;;;-1:-1:-1;;12955:126:0;13100:36;13110:6;13118:9;13129:6;13100:9;:36::i;:::-;13093:43;12838:306;-1:-1:-1;;;;12838:306:0:o;20590:344::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;20732:3:::1;20722:7;;:13;;;;:::i;:::-;20710:7;20699;20689;;:17;;;;:::i;:::-;20688:29;;;;:::i;:::-;:48;;20680:109;;;::::0;-1:-1:-1;;;20680:109:0;;14590:2:1;20680:109:0::1;::::0;::::1;14572:21:1::0;14629:2;14609:18;;;14602:30;14668:34;14648:18;;;14641:62;-1:-1:-1;;;14719:18:1;;;14712:46;14775:19;;20680:109:0::1;14388:412:1::0;20680:109:0::1;20808:19;::::0;::::1;::::0;::::1;;;:28;20800:69;;;;-1:-1:-1::0;;;20800:69:0::1;;;;;;;:::i;:::-;20919:7;20908;20898;;:17;;;;:::i;:::-;20897:29;;;;:::i;:::-;20880:14;:46:::0;-1:-1:-1;;20590:344:0:o;29183:447::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;29318:7:::1;:14;29299:8;:15;:33;29291:67;;;::::0;-1:-1:-1;;;29291:67:0;;15364:2:1;29291:67:0::1;::::0;::::1;15346:21:1::0;15403:2;15383:18;;;15376:30;-1:-1:-1;;;15422:18:1;;;15415:51;15483:18;;29291:67:0::1;15162:345:1::0;29291:67:0::1;29374:8;29369:254;29392:8;:15;29388:1;:19;;;29369:254;;;29473:13;5116:1;29473:2;:13;:::i;:::-;29462:7;29470:1;29462:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29437:21;29447:10;29437:9;:21::i;:::-;:49;;29429:80;;;::::0;-1:-1:-1;;;29429:80:0;;15846:2:1;29429:80:0::1;::::0;::::1;15828:21:1::0;15885:2;15865:18;;;15858:30;-1:-1:-1;;;15904:18:1;;;15897:48;15962:18;;29429:80:0::1;15644:342:1::0;29429:80:0::1;29524:87;29541:10;29553:8;29562:1;29553:11;;;;;;;;;;:::i;:::-;;;;;;;5116:1;29577:2;:13;;;;:::i;:::-;29566:7;29574:1;29566:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29592:5;29599::::0;29606:4:::1;29524:16;:87::i;:::-;-1:-1:-1::0;29409:3:0;::::1;::::0;::::1;:::i;:::-;;;;29369:254;;;;29183:447:::0;;:::o;15778:278::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;15909:19:::1;::::0;::::1;;:28;15900:70;;;;-1:-1:-1::0;;;15900:70:0::1;;;;;;;:::i;:::-;15981:11;::::0;:67:::1;::::0;-1:-1:-1;;;15981:67:0;;16425:14:1;;16418:22;15981:11:0::1;:67:::0;::::1;16400:41:1::0;16484:14;;16477:22;16457:18;;;16450:50;16543:14;;16536:22;16516:18;;;16509:50;16602:14;;16595:22;16575:18;;;16568:50;-1:-1:-1;;;15981:11:0;;::::1;-1:-1:-1::0;;;;;15981:11:0::1;::::0;:26:::1;::::0;16372:19:1;;15981:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15778:278:::0;;;;:::o;15511:141::-;15564:7;15621:21;15639:1;15621:9;:21::i;:::-;15603:15;6381:42;15603:9;:15::i;:::-;:39;;;;:::i;:::-;15592:7;;:51;;;;:::i;16681:131::-;16735:4;16741;16747;16771:11;;;;;;;;;-1:-1:-1;;;;;16771:11:0;-1:-1:-1;;;;;16771:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16764:40;;;;;;16681:131;;;:::o;15660:110::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;15729:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;15729:33:0;;-1:-1:-1;;;15729:11:0;;::::1;-1:-1:-1::0;;;;;15729:11:0::1;::::0;:24:::1;::::0;:33:::1;::::0;15754:7;;15729:11:::1;:33;;:::i;14782:140::-:0;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14874:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14874:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14782:140::o;20224:358::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;20369:4:::1;20355:7;;20365:1;20355:11;;;;:::i;:::-;:18;;;;:::i;:::-;20343:7;20332;20322;;:17;;;;:::i;:::-;20321:29;;;;:::i;:::-;:53;;20313:121;;;::::0;-1:-1:-1;;;20313:121:0;;17467:2:1;20313:121:0::1;::::0;::::1;17449:21:1::0;17506:2;17486:18;;;17479:30;17545:34;17525:18;;;17518:62;-1:-1:-1;;;17596:18:1;;;17589:53;17659:19;;20313:121:0::1;17265:419:1::0;20313:121:0::1;20453:24;::::0;::::1;;:33;20445:74;;;;-1:-1:-1::0;;;20445:74:0::1;;;;;;;:::i;:::-;20567:7;20556;20546;;:17;;;;:::i;:::-;20545:29;;;;:::i;:::-;20530:12;:44:::0;-1:-1:-1;;20224:358:0:o;31515:352::-;31588:10;31625:13;5116:1;31625:2;:13;:::i;:::-;31609:29;;;;:::i;:::-;;;31678:12;31657:17;31667:6;31657:9;:17::i;:::-;:33;;31649:76;;;;-1:-1:-1;;;31649:76:0;;17891:2:1;31649:76:0;;;17873:21:1;17930:2;17910:18;;;17903:30;17969:32;17949:18;;;17942:60;18019:18;;31649:76:0;17689:354:1;31649:76:0;-1:-1:-1;;;;;31736:15:0;;:7;:15;;;;;;;;;;:31;;31755:12;;31736:7;:31;;31755:12;;31736:31;:::i;:::-;;;;;;;;31789:12;31778:7;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;31817:42:0;;368:25:1;;;31842:1:0;;-1:-1:-1;;;;;31817:42:0;;;-1:-1:-1;;;;;;;;;;;31817:42:0;356:2:1;341:18;31817:42:0;;;;;;;31560:307;31515:352;:::o;16337:336::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;16514:19:::1;::::0;::::1;;:28;16505:71;;;::::0;-1:-1:-1;;;16505:71:0;;18250:2:1;16505:71:0::1;::::0;::::1;18232:21:1::0;18289:2;18269:18;;;18262:30;18328:31;18308:18;;;18301:59;18377:18;;16505:71:0::1;18048:353:1::0;16505:71:0::1;16587:19;:26:::0;;16609:4:::1;-1:-1:-1::0;;16587:26:0;;::::1;;::::0;;16624:11:::1;::::0;:41:::1;::::0;;-1:-1:-1;;;16624:41:0;;;;-1:-1:-1;;;16624:11:0;;::::1;-1:-1:-1::0;;;;;16624:11:0::1;::::0;:39:::1;::::0;:11:::1;:41:::0;;::::1;::::0;-1:-1:-1;;16624:41:0;;;;;;;;-1:-1:-1;16624:11:0;:41;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16337:336::o:0;21629:189::-;21758:6;;21720:7;;6242:5;;21768:21;;21748:17;;-1:-1:-1;;;;;21758:6:0;21748:9;:17::i;:::-;:41;;;;:::i;:::-;21747:62;;;;:::i;17620:267::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;17689:7:::1;:23:::0;-1:-1:-1;;;17689:23:0;::::1;;;17688:24;17680:52;;;;-1:-1:-1::0;;;17680:52:0::1;;;;;;;:::i;:::-;17849:7;:30:::0;;-1:-1:-1;;;;17849:30:0::1;-1:-1:-1::0;;;17849:30:0::1;::::0;;17620:267::o;22533:217::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;22663:3:::1;22637:22;:29;;22629:64;;;::::0;-1:-1:-1;;;22629:64:0;;18608:2:1;22629:64:0::1;::::0;::::1;18590:21:1::0;18647:2;18627:18;;;18620:30;-1:-1:-1;;;18666:18:1;;;18659:52;18728:18;;22629:64:0::1;18406:346:1::0;22629:64:0::1;22704:13;:38:::0;22533:217::o;10053:654::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10132:22:0;::::1;10124:96;;;;-1:-1:-1::0;;;10124:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;10239:16:0;::::1;::::0;10231:90:::1;;;;-1:-1:-1::0;;;10231:90:0::1;;;;;;;:::i;:::-;10352:6;::::0;10332:34:::1;::::0;10352:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10352:6:0::1;10360:5;10332:19;:34::i;:::-;10377:35;10397:8;10407:4;10377:19;:35::i;:::-;10447:6;::::0;10457:1:::1;::::0;10437:17:::1;::::0;10447:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10447:6:0::1;10437:9;:17::i;:::-;:21;10433:127;;;10492:6;::::0;10475:73:::1;::::0;10492:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10492:6:0::1;10500:8:::0;10510:17:::1;10492:6:::0;10510:9:::1;:17::i;10475:73::-;;10433:127;10599:6;::::0;;-1:-1:-1;;;;;10616:17:0;;::::1;10599:6;10616:17:::0;;::::1;-1:-1:-1::0;;;;;;10616:17:0;::::1;;::::0;;;10649:40:::1;::::0;10599:6;;;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;10649:40:0;10580:16:::1;::::0;10649:40:::1;10113:594;10053:654:::0;:::o;15065:134::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15153:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15153:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15065:134::o;14412:222::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;14496:14:::1;::::0;;;::::1;;;14495:15;14487:24;;;::::0;::::1;;14553:4;-1:-1:-1::0;;;;;14530:28:0;::::1;::::0;14522:55:::1;;;::::0;-1:-1:-1;;;14522:55:0;;19389:2:1;14522:55:0::1;::::0;::::1;19371:21:1::0;19428:2;19408:18;;;19401:30;-1:-1:-1;;;19447:18:1;;;19440:44;19501:18;;14522:55:0::1;19187:338:1::0;14522:55:0::1;14588:11;:38:::0;;-1:-1:-1;;;;;14588:38:0;;::::1;-1:-1:-1::0;;;14588:38:0::1;-1:-1:-1::0;;;;;;;;14588:38:0;;::::1;::::0;;;::::1;::::0;;14412:222::o;17895:273::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;17966:7:::1;:25:::0;-1:-1:-1;;;17966:25:0;::::1;;;17965:26;17957:54;;;;-1:-1:-1::0;;;17957:54:0::1;;;;;;;:::i;:::-;18128:7;:32:::0;;-1:-1:-1;;;;18128:32:0::1;-1:-1:-1::0;;;18128:32:0::1;::::0;;17895:273::o;21391:108::-;21434:7;21477:13;5116:1;21477:2;:13;:::i;:::-;21461:12;;:30;;;;:::i;18176:724::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;18264:14:::1;::::0;::::1;;18263:15;18255:45;;;::::0;-1:-1:-1;;;18255:45:0;;19732:2:1;18255:45:0::1;::::0;::::1;19714:21:1::0;19771:2;19751:18;;;19744:30;-1:-1:-1;;;19790:18:1;;;19783:47;19847:18;;18255:45:0::1;19530:341:1::0;18255:45:0::1;6038:4;18319:6;:21;;;;:65;;;;;6088:4;18361:7;:23;;;;18319:65;18311:118;;;::::0;-1:-1:-1;;;18311:118:0;;20078:2:1;18311:118:0::1;::::0;::::1;20060:21:1::0;20117:2;20097:18;;;20090:30;-1:-1:-1;;;20136:18:1;;;20129:53;20199:18;;18311:118:0::1;19876:347:1::0;18311:118:0::1;6195:4;18448:16;18457:7:::0;18448:6;:16:::1;:::i;:::-;:35;;;;18440:80;;;::::0;-1:-1:-1;;;18440:80:0;;20603:2:1;18440:80:0::1;::::0;::::1;20585:21:1::0;;;20622:18;;;20615:30;20681:34;20661:18;;;20654:62;20733:18;;18440:80:0::1;20401:356:1::0;18440:80:0::1;18545:9;:16:::0;::::1;18535:26:::0;;::::1;18545:16:::0;::::1;18535:26;18531:137;;18587:9;:19:::0;-1:-1:-1;;;18587:19:0;::::1;;;18586:20;18578:78;;;::::0;-1:-1:-1;;;18578:78:0;;20964:2:1;18578:78:0::1;::::0;::::1;20946:21:1::0;21003:2;20983:18;;;20976:30;21042:34;21022:18;;;21015:62;-1:-1:-1;;;21093:18:1;;;21086:43;21146:19;;18578:78:0::1;20762:409:1::0;18578:78:0::1;18693:9;:17:::0;::::1;18682:28:::0;;::::1;18693:17:::0;;;::::1;;18682:28;18678:141;;18736:9;:20:::0;-1:-1:-1;;;18736:20:0;::::1;;;18735:21;18727:80;;;::::0;-1:-1:-1;;;18727:80:0;;21378:2:1;18727:80:0::1;::::0;::::1;21360:21:1::0;21417:2;21397:18;;;21390:30;21456:34;21436:18;;;21429:62;-1:-1:-1;;;21507:18:1;;;21500:44;21561:19;;18727:80:0::1;21176:410:1::0;18727:80:0::1;18829:9;:25:::0;;::::1;18865:27:::0;;::::1;::::0;::::1;-1:-1:-1::0;;18865:27:0;;;18829:25;;;::::1;18865:27:::0;;;;;;;::::1;::::0;;18176:724::o;11870:117::-;-1:-1:-1;;;;;11963:16:0;11936:7;11963:16;;;;;;;;;;;;11870:117::o;10715:225::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;10794:6:::1;::::0;10774:34:::1;::::0;10794:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10794:6:0::1;10802:5;10774:19;:34::i;:::-;10838:6;::::0;;-1:-1:-1;;;;;;10855:19:0;::::1;::::0;;;10890:42:::1;::::0;10838:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;10838:6:0::1;::::0;-1:-1:-1;;10838:6:0;;-1:-1:-1;;;;;;;;;;;10890:42:0;-1:-1:-1;;10890:42:0::1;10763:177;10715:225::o:0;19797:419::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19938:23:0;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;19965:25:0;::::1;::::0;::::1;19938:52;:79;;;;-1:-1:-1::0;;;;;;19994:23:0;::::1;::::0;::::1;19938:79;19930:115;;;::::0;-1:-1:-1;;;19930:115:0;;21793:2:1;19930:115:0::1;::::0;::::1;21775:21:1::0;21832:2;21812:18;;;21805:30;-1:-1:-1;;;21851:18:1;;;21844:53;21914:18;;19930:115:0::1;21591:347:1::0;19930:115:0::1;20056:21:::0;:42;;-1:-1:-1;;;;;20056:42:0;;::::1;-1:-1:-1::0;;;;;;20056:42:0;;::::1;;::::0;;;20109:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20056:11:::1;20166:42:::0;;;;;::::1;::::0;::::1;;::::0;;19797:419::o;13840:564::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;13922:7:::1;13917:480;;-1:-1:-1::0;;;;;13946:13:0;;::::1;13962:5;13946:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13946:21:0::1;::::0;;13982:11:::1;::::0;:34;;-1:-1:-1;;;13982:34:0;;-1:-1:-1;;;13982:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:34:::1;::::0;13954:4;;13962:5;13982:11:::1;:34;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13840:564:::0;;:::o;13917:480::-:1;14053:17;::::0;:22;14049:135:::1;;14142:6;14122:17;;14104:15;:35;;;;:::i;:::-;:44;14096:72;;;::::0;-1:-1:-1;;;14096:72:0;;22434:2:1;14096:72:0::1;::::0;::::1;22416:21:1::0;22473:2;22453:18;;;22446:30;-1:-1:-1;;;22492:18:1;;;22485:45;22547:18;;14096:72:0::1;22232:339:1::0;14096:72:0::1;-1:-1:-1::0;;;;;14207:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;14206:14;14198:54;;;::::0;-1:-1:-1;;;14198:54:0;;22778:2:1;14198:54:0::1;::::0;::::1;22760:21:1::0;22817:2;22797:18;;;22790:30;-1:-1:-1;;;22836:18:1;;;22829:57;22903:18;;14198:54:0::1;22576:351:1::0;14198:54:0::1;-1:-1:-1::0;;;;;14267:13:0;;::::1;;::::0;;;14283:4:::1;14267:13;::::0;;;;;;;;:20;;-1:-1:-1;;14267:20:0::1;::::0;::::1;::::0;;14322:15:::1;14302:17;:35:::0;14352:11:::1;::::0;:33;;-1:-1:-1;;;14352:33:0;;-1:-1:-1;;;14352:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:33:::1;::::0;14275:4;;14352:11:::1;:33;;:::i;13917:480::-;13840:564:::0;;:::o;12655:175::-;9907:6;;12721:4;;9907:6;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;12770:9:::1;::::0;12738:62:::1;::::0;12755:4:::1;::::0;12770:9:::1;::::0;::::1;-1:-1:-1::0;;;;;12770:9:0::1;-1:-1:-1::0;;12738:8:0::1;:62::i;:::-;-1:-1:-1::0;12818:4:0::1;12655:175:::0;:::o;28094:635::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;28156:14:::1;::::0;;;::::1;;;28155:15;28147:52;;;::::0;-1:-1:-1;;;28147:52:0;;23134:2:1;28147:52:0::1;::::0;::::1;23116:21:1::0;23173:2;23153:18;;;23146:30;-1:-1:-1;;;23192:18:1;;;23185:54;23256:18;;28147:52:0::1;22932:348:1::0;28147:52:0::1;28218:16;::::0;;;::::1;;;28210:53;;;::::0;-1:-1:-1;;;28210:53:0;;23487:2:1;28210:53:0::1;::::0;::::1;23469:21:1::0;23526:2;23506:18;;;23499:30;-1:-1:-1;;;23545:18:1;;;23538:54;23609:18;;28210:53:0::1;23285:348:1::0;28210:53:0::1;28286:11;::::0;-1:-1:-1;;;28286:11:0;::::1;-1:-1:-1::0;;;;;28286:11:0::1;28274:106;;28328:11;:40:::0;;-1:-1:-1;;;;;;;;28328:40:0::1;28362:4;-1:-1:-1::0;;;28328:40:0::1;;::::0;;28274:106:::1;28394:11;::::0;28416:6:::1;::::0;28394:87:::1;::::0;-1:-1:-1;;;28394:87:0;;-1:-1:-1;;;;;28416:6:0;;::::1;28394:11;:87:::0;::::1;23861:51:1::0;23960:10;28431:12:0::1;23948:23:1::0;23928:18;;;23921:51;-1:-1:-1;;;;;28453:15:0::1;24008:31:1::0;23988:18;;;23981:59;5116:1:0::1;24056:18:1::0;;;24049:45;-1:-1:-1;;;28394:11:0;;::::1;;::::0;:21:::1;::::0;23833:19:1;;28394:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28390:103:::0;28503:14:::1;:21:::0;;-1:-1:-1;;28503:21:0::1;::::0;::::1;::::0;;28535:23:::1;:31:::0;;-1:-1:-1;;28535:31:0::1;::::0;;28604:6:::1;::::0;28620:5:::1;::::0;28594:17:::1;::::0;-1:-1:-1;;;;;28604:6:0::1;28594:9;:17::i;:::-;:22;::::0;28614:2:::1;28594:22;:::i;:::-;28593:32;;;;:::i;:::-;28577:13;:48:::0;28660:6:::1;::::0;28676:5:::1;::::0;28650:17:::1;::::0;-1:-1:-1;;;;;28660:6:0::1;28650:9;:17::i;:::-;:22;::::0;28670:2:::1;28650:22;:::i;:::-;28649:32;;;;:::i;:::-;28636:10;:45:::0;28706:15:::1;28692:11;:29:::0;28094:635::o;11995:165::-;12073:4;12090:40;12100:10;12112:9;12123:6;12090:9;:40::i;:::-;-1:-1:-1;12148:4:0;;11995:165;-1:-1:-1;;;11995:165:0:o;18908:881::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;19017:7:::1;:17:::0;:30:::1;::::0;;::::1;:17:::0;::::1;:30;19013:131;;19073:7;:23:::0;-1:-1:-1;;;19073:23:0;::::1;;;19072:24;19064:68;;;;-1:-1:-1::0;;;19064:68:0::1;;;;;;;:::i;:::-;19158:7;:17:::0;:30:::1;::::0;;::::1;:17:::0;;;::::1;;:30;19154:131;;19214:7;:23:::0;-1:-1:-1;;;19214:23:0;::::1;;;19213:24;19205:68;;;;-1:-1:-1::0;;;19205:68:0::1;;;;;;;:::i;:::-;19299:7;:19:::0;:34:::1;::::0;;::::1;-1:-1:-1::0;;;19299:19:0;;::::1;;:34;19295:137;;19359:7;:25:::0;-1:-1:-1;;;19359:25:0;::::1;;;19358:26;19350:70;;;;-1:-1:-1::0;;;19350:70:0::1;;;;;;;:::i;:::-;19442:7;:29:::0;;::::1;19522:33:::0;;::::1;-1:-1:-1::0;;;19522:33:0::1;-1:-1:-1::0;;;;19482:29:0;;::::1;::::0;::::1;-1:-1:-1::0;;19482:29:0;;;19442;;::::1;19482::::0;;;;;;;::::1;19522:33;;::::0;;19586:21:::1;19502:9:::0;19462;19586:21:::1;:::i;:::-;19566:7;:41:::0;;-1:-1:-1;;;;19566:41:0::1;-1:-1:-1::0;;;19566:41:0::1;::::0;;::::1;;;::::0;;19653:9:::1;:17:::0;-1:-1:-1;;19634:36:0::1;::::0;19653:17;;::::1;::::0;::::1;::::0;19634:16:::1;:36;:::i;:::-;19709:7;:19:::0;19618:52:::1;::::0;;::::1;::::0;-1:-1:-1;19618:52:0;;19689:39:::1;::::0;-1:-1:-1;;;19709:19:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;19689:17:0;;::::1;;:39;:::i;:::-;:48;;;;19681:100;;;::::0;-1:-1:-1;;;19681:100:0;;24667:2:1;19681:100:0::1;::::0;::::1;24649:21:1::0;24706:2;24686:18;;;24679:30;24745:34;24725:18;;;24718:62;-1:-1:-1;;;24796:18:1;;;24789:37;24843:19;;19681:100:0::1;24465:403:1::0;28927:248:0;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;29026:4:::1;-1:-1:-1::0;;;;;29009:22:0;::::1;::::0;29001:62:::1;;;::::0;-1:-1:-1;;;29001:62:0;;25075:2:1;29001:62:0::1;::::0;::::1;25057:21:1::0;25114:2;25094:18;;;25087:30;-1:-1:-1;;;25133:18:1;;;25126:57;25200:18;;29001:62:0::1;24873:351:1::0;29001:62:0::1;29128:6;::::0;29136:30:::1;::::0;-1:-1:-1;;;29136:30:0;;29096:5;;-1:-1:-1;;;;;29113:14:0;;::::1;::::0;::::1;::::0;29128:6:::1;::::0;::::1;::::0;;::::1;::::0;29113:14;;29136:15:::1;::::0;:30:::1;::::0;29160:4:::1;::::0;29136:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29113:54;::::0;-1:-1:-1;;;;;;29113:54:0::1;::::0;;;;;;-1:-1:-1;;;;;25610:32:1;;;29113:54:0::1;::::0;::::1;25592:51:1::0;25659:18;;;25652:34;25565:18;;29113:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22758:263::-:0;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;22867:19:::1;:33:::0;;-1:-1:-1;;22867:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;22911:22:::1;:47:::0;;-1:-1:-1;;22911:47:0::1;::::0;::::1;;;::::0;;22974:39:::1;::::0;1856:41:1;;;-1:-1:-1;;;;;;;;;;;22974:39:0;1844:2:1;1829:18;22974:39:0::1;;;;;;;;22758:263:::0;;:::o;21173:210::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;21242:19:::1;::::0;::::1;::::0;::::1;;;:28;21234:69;;;;-1:-1:-1::0;;;21234:69:0::1;;;;;;;:::i;:::-;21331:7;::::0;21314:14:::1;:24:::0;21349:19:::1;:26:::0;;-1:-1:-1;;21349:26:0::1;;;::::0;;21173:210::o;17345:267::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;17414:7:::1;:23:::0;-1:-1:-1;;;17414:23:0;::::1;;;17413:24;17405:52;;;;-1:-1:-1::0;;;17405:52:0::1;;;;;;;:::i;:::-;17574:7;:30:::0;;-1:-1:-1;;;;17574:30:0::1;-1:-1:-1::0;;;17574:30:0::1;::::0;;17345:267::o;20942:223::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;21016:24:::1;::::0;::::1;;:33;21008:74;;;;-1:-1:-1::0;;;21008:74:0::1;;;;;;;:::i;:::-;21108:7;::::0;21093:12:::1;:22:::0;21126:24:::1;:31:::0;;-1:-1:-1;;21126:31:0::1;21153:4;21126:31;::::0;;20942:223::o;13152:680::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;13232:16:::1;::::0;;;::::1;;;13231:17;13223:60;;;::::0;-1:-1:-1;;;13223:60:0;;26149:2:1;13223:60:0::1;::::0;::::1;26131:21:1::0;26188:2;26168:18;;;26161:30;26227:32;26207:18;;;26200:60;26277:18;;13223:60:0::1;25947:354:1::0;13223:60:0::1;13294:20;13327:9;13294:43;;13348:16;13378:10;-1:-1:-1::0;;;;;13378:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13367:40:0::1;;13416:4;13423:10;-1:-1:-1::0;;;;;13423:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13367:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13460:6;::::0;-1:-1:-1;;;;;13460:6:0;;::::1;13470:5;13452:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;13452:23:0::1;::::0;;13348:93;;-1:-1:-1;13490:22:0;::::1;13486:200;;13549:10;-1:-1:-1::0;;;;;13549:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13538:43:0::1;;13590:4;13597:10;-1:-1:-1::0;;;;;13597:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13538:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13529:6;:86:::0;;-1:-1:-1;;;;;;13529:86:0::1;-1:-1:-1::0;;;;;13529:86:0;;;::::1;::::0;;;::::1;::::0;;13486:200:::1;;;13657:6;:17:::0;;-1:-1:-1;;;;;;13657:17:0::1;-1:-1:-1::0;;;;;13657:17:0;::::1;;::::0;;13486:200:::1;13696:9;:22:::0;;-1:-1:-1;;;;;;13696:22:0::1;;-1:-1:-1::0;;;;;13696:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13737:6:::1;::::0;;::::1;-1:-1:-1::0;13729:15:0;;;-1:-1:-1;13729:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13729:22:0::1;::::0;;::::1;::::0;;13794:9;;13762:62:::1;::::0;13779:4:::1;::::0;13794:9;::::1;;-1:-1:-1::0;;13762:8:0::1;:62::i;28737:182::-:0;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;28804:16:::1;::::0;;;::::1;;;28803:17;28795:58;;;::::0;-1:-1:-1;;;28795:58:0;;27073:2:1;28795:58:0::1;::::0;::::1;27055:21:1::0;27112:2;27092:18;;;27085:30;-1:-1:-1;;;27131:18:1;;;27124:58;27199:18;;28795:58:0::1;26871:352:1::0;28795:58:0::1;28872:6;::::0;28864:47:::1;::::0;-1:-1:-1;;;;;28872:6:0::1;::::0;;::::1;::::0;;;::::1;::::0;28889:21:::1;28864:47:::0;::::1;;;::::0;::::1;::::0;;;28889:21;28872:6;28864:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28737:182::o:0;21826:699::-;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;22026:16:::1;22006;21996:7;;:26;;;;:::i;:::-;21995:47;;;;:::i;:::-;21979:13;:63:::0;22067:7:::1;::::0;22094:13;;22067:23:::1;::::0;22077:13;;22067:23:::1;:::i;:::-;22066:41;;;;:::i;:::-;22053:10;:54:::0;;;22126:13:::1;::::0;:27:::1;;22118:73;;;::::0;-1:-1:-1;;;22118:73:0;;27430:2:1;22118:73:0::1;::::0;::::1;27412:21:1::0;27469:2;27449:18;;;27442:30;27508:34;27488:18;;;27481:62;-1:-1:-1;;;27559:18:1;;;27552:31;27600:19;;22118:73:0::1;27228:397:1::0;22118:73:0::1;22235:6;::::0;6242:5:::1;::::0;22225:17:::1;::::0;-1:-1:-1;;;;;22235:6:0::1;22225:9;:17::i;:::-;:23;::::0;22245:3:::1;22225:23;:::i;:::-;22224:44;;;;:::i;:::-;22210:10;;:58;;22202:106;;;::::0;-1:-1:-1;;;22202:106:0;;27832:2:1;22202:106:0::1;::::0;::::1;27814:21:1::0;27871:2;27851:18;;;27844:30;27910:34;27890:18;;;27883:62;-1:-1:-1;;;27961:18:1;;;27954:33;28004:19;;22202:106:0::1;27630:399:1::0;22202:106:0::1;22351:9;22341:7;;:19;;;;:::i;:::-;22327:10;;:33;;22319:92;;;;-1:-1:-1::0;;;22319:92:0::1;;;;;;;:::i;:::-;22457:9;22447:7;;:19;;;;:::i;:::-;22430:13;;:36;;22422:95;;;;-1:-1:-1::0;;;22422:95:0::1;;;;;;;:::i;15355:148::-:0;9907:6;;;;;-1:-1:-1;;;;;9907:6:0;9917:10;9907:20;9899:50;;;;-1:-1:-1;;;9899:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15451:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15451:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15355:148::o;12337:310::-;-1:-1:-1;;;;;12432:20:0;;12424:52;;;;-1:-1:-1;;;12424:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12495:21:0;;12487:53;;;;-1:-1:-1;;;12487:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12553:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12606:33;;368:25:1;;;12606:33:0;;341:18:1;12606:33:0;;;;;;;12337:310;;;:::o;23483:2353::-;23562:4;-1:-1:-1;;;;;23587:18:0;;23579:68;;;;-1:-1:-1;;;23579:68:0;;28999:2:1;23579:68:0;;;28981:21:1;29038:2;29018:18;;;29011:30;29077:34;29057:18;;;29050:62;-1:-1:-1;;;29128:18:1;;;29121:35;29173:19;;23579:68:0;28797:401:1;23579:68:0;-1:-1:-1;;;;;23666:16:0;;23658:64;;;;-1:-1:-1;;;23658:64:0;;29405:2:1;23658:64:0;;;29387:21:1;29444:2;29424:18;;;29417:30;29483:34;29463:18;;;29456:62;-1:-1:-1;;;29534:18:1;;;29527:33;29577:19;;23658:64:0;29203:399:1;23658:64:0;-1:-1:-1;;;;;;;23741:10:0;;;23733:56;;;;-1:-1:-1;;;23733:56:0;;29809:2:1;23733:56:0;;;29791:21:1;29848:2;29828:18;;;29821:30;29887:34;29867:18;;;29860:62;-1:-1:-1;;;29938:18:1;;;29931:31;29979:19;;23733:56:0;29607:397:1;23733:56:0;23817:1;23808:6;:10;23800:64;;;;-1:-1:-1;;;23800:64:0;;30211:2:1;23800:64:0;;;30193:21:1;30250:2;30230:18;;;30223:30;30289:34;30269:18;;;30262:62;-1:-1:-1;;;30340:18:1;;;30333:39;30389:19;;23800:64:0;30009:405:1;23800:64:0;-1:-1:-1;;;;;23963:13:0;;23875:8;23963:13;;;:7;:13;;;;;;23875:8;;;;23963:13;;23959:162;;;23999:4;23993:10;;23959:162;;;-1:-1:-1;;;;;24025:11:0;;;;;;:7;:11;;;;;;;;24021:100;;;24060:4;24053:11;;24021:100;;;-1:-1:-1;24105:4:0;24021:100;24135:20;24146:4;24152:2;24135:10;:20::i;:::-;24131:874;;;24176:14;;;;;;;24172:319;;24216:5;24211:265;;24246:34;;-1:-1:-1;;;24246:34:0;;30621:2:1;24246:34:0;;;30603:21:1;30660:2;30640:18;;;30633:30;-1:-1:-1;;;30679:18:1;;;30672:54;30743:18;;24246:34:0;30419:348:1;24211:265:0;-1:-1:-1;;;;;24311:31:0;;;;;;:25;:31;;;;;;;;24310:32;:66;;;;-1:-1:-1;;;;;;24347:29:0;;;;;;:25;:29;;;;;;;;24346:30;24310:66;24306:170;;;24401:55;;-1:-1:-1;;;24401:55:0;;30974:2:1;24401:55:0;;;30956:21:1;31013:2;30993:18;;;30986:30;31052:34;31032:18;;;31025:62;-1:-1:-1;;;31103:18:1;;;31096:43;31156:19;;24401:55:0;30772:409:1;24306:170:0;24509:3;:11;;;;24516:4;24509:11;24505:232;;;-1:-1:-1;;;;;24545:27:0;;;;;;:21;:27;;;;;;;;24544:28;:58;;;;-1:-1:-1;;;;;;24577:25:0;;;;;;:21;:25;;;;;;;;24576:26;24544:58;24540:182;;;24645:12;;24635:6;:22;;24627:75;;;;-1:-1:-1;;;24627:75:0;;31388:2:1;24627:75:0;;;31370:21:1;31427:2;31407:18;;;31400:30;31466:34;31446:18;;;31439:62;-1:-1:-1;;;31517:18:1;;;31510:38;31565:19;;24627:75:0;31186:404:1;24627:75:0;24769:9;;-1:-1:-1;;;;;24755:24:0;;;24769:9;;;;;24755:24;;;;:33;;;24784:4;24783:5;24755:33;24751:243;;;-1:-1:-1;;;;;24814:25:0;;;;;;:21;:25;;;;;;;;24809:170;;24898:14;;24888:6;24872:13;24882:2;24872:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24864:95;;;;-1:-1:-1;;;24864:95:0;;31797:2:1;24864:95:0;;;31779:21:1;31836:2;31816:18;;;31809:30;31875:34;31855:18;;;31848:62;-1:-1:-1;;;31926:18:1;;;31919:40;31976:19;;24864:95:0;31595:406:1;24864:95:0;25021:4;25017:742;;;25047:6;;;;25042:706;;25078:19;;;;;;;:64;;;;-1:-1:-1;;;;;;25122:20:0;;;;;;:16;:20;;;;;;;;25121:21;25078:64;:111;;;;-1:-1:-1;;;;;;25167:22:0;;;;;;:16;:22;;;;;;;;25166:23;25078:111;25074:659;;;25232:28;25263:24;25281:4;25263:9;:24::i;:::-;25232:55;;25338:13;;25314:20;:37;25310:404;;25398:10;;25439:22;;;;25435:97;;;25496:13;;25486:6;;6242:5;;25496:13;25476:17;;-1:-1:-1;;;;;25486:6:0;25476:9;:17::i;:::-;:33;;;;:::i;:::-;25475:54;;;;:::i;:::-;25465:64;;25435:97;25586:7;25562:20;:31;25558:72;;25620:7;25597:30;;25558:72;25656:34;25669:20;25656:12;:34::i;:::-;25353:361;25310:404;25209:524;25074:659;25776:52;25793:4;25799:2;25803:6;25811:3;25816:4;25822:5;25776:16;:52::i;:::-;25769:59;23483:2353;-1:-1:-1;;;;;;;23483:2353:0:o;29640:1055::-;29759:4;29780:20;29791:4;29797:2;29780:10;:20::i;:::-;29776:228;;;29835:11;;:39;;-1:-1:-1;;;29835:39:0;;-1:-1:-1;;;;;32264:15:1;;;29835:11:0;:39;;32246:34:1;32316:15;;;32296:18;;;32289:43;32348:18;;;32341:34;;;29804:12:0;;-1:-1:-1;;;29835:11:0;;;;:21;;32181:18:1;;29835:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;29835:39:0;;;;;;;;-1:-1:-1;;29835:39:0;;;;;;;;;;;;:::i;:::-;;;29831:122;;29942:8;;;29831:122;29925:5;-1:-1:-1;29971:7:0;29967:26;;29982:8;;;29967:26;29802:202;29776:228;-1:-1:-1;;;;;30048:25:0;;30014:12;30048:25;;;:19;:25;;;;;;30029:4;;30048:25;;;:52;;-1:-1:-1;;;;;;30077:23:0;;;;;;:19;:23;;;;;;;;30048:52;30044:99;;;-1:-1:-1;30126:5:0;30044:99;-1:-1:-1;;;;;30153:13:0;;:7;:13;;;;;;;;;;:23;;30170:6;;30153:7;:23;;30170:6;;30153:23;:::i;:::-;;;;-1:-1:-1;30187:22:0;;-1:-1:-1;30213:7:0;30212:55;;30261:6;30212:55;;;30224:34;30234:4;30240:3;30245:4;30251:6;30224:9;:34::i;:::-;30187:80;;30293:14;30278:7;:11;30286:2;-1:-1:-1;;;;;30278:11:0;-1:-1:-1;;;;;30278:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;30338:2;-1:-1:-1;;;;;30323:34:0;30332:4;-1:-1:-1;;;;;30323:34:0;-1:-1:-1;;;;;;;;;;;30342:14:0;30323:34;;;;368:25:1;;356:2;341:18;;222:177;30323:34:0;;;;;;;;30373:16;;;;;;;30368:298;;30406:28;30425:4;30431:2;30406:18;:28::i;:::-;30454:16;;;;;;;30453:17;:41;;;;;30474:20;30485:4;30491:2;30474:10;:20::i;:::-;30453:77;;;;-1:-1:-1;;;;;;30499:31:0;;;;;;:25;:31;;;;;;;;30498:32;30453:77;:111;;;;-1:-1:-1;;;;;;30535:29:0;;;;;;:25;:29;;;;;;;;30534:30;30453:111;:121;;;;;30569:5;30568:6;30453:121;30449:206;;;30595:44;;-1:-1:-1;;;30595:44:0;;32588:2:1;30595:44:0;;;32570:21:1;32627:2;32607:18;;;32600:30;32666:34;32646:18;;;32639:62;-1:-1:-1;;;32717:18:1;;;32710:32;32759:19;;30595:44:0;32386:398:1;30449:206:0;-1:-1:-1;30683:4:0;;29640:1055;-1:-1:-1;;;;;;;;29640:1055:0:o;23029:446::-;23130:6;;23098:4;;-1:-1:-1;;;;;23122:14:0;;;23130:6;;;;;23122:14;;;;:43;;-1:-1:-1;23159:6:0;;-1:-1:-1;;;;;23153:12:0;;;23159:6;;;;;23153:12;;23122:43;:79;;;;-1:-1:-1;23195:6:0;;;;;-1:-1:-1;;;;;23195:6:0;23182:9;:19;;23122:79;:118;;;;-1:-1:-1;;;;;;23219:21:0;;;;;;:17;:21;;;;;;;;23218:22;23122:118;:159;;;;-1:-1:-1;;;;;;23258:23:0;;;;;;:17;:23;;;;;;;;23257:24;23122:159;:186;;;;-1:-1:-1;;;;;;23298:10:0;;6381:42;23298:10;;23122:186;:219;;;;-1:-1:-1;;;;;;23325:16:0;;;;23122:219;:257;;;;-1:-1:-1;;;;;;23358:21:0;;23374:4;23358:21;;23122:257;:302;;;;-1:-1:-1;23412:11:0;;-1:-1:-1;;;;;23396:28:0;;;-1:-1:-1;;;23412:11:0;;;;23396:28;;23122:302;:345;;;;-1:-1:-1;23455:11:0;;-1:-1:-1;;;;;23441:26:0;;;-1:-1:-1;;;23455:11:0;;;;23441:26;;23122:345;23115:352;23029:446;-1:-1:-1;;;23029:446:0:o;25844:1671::-;7651:6;:13;;-1:-1:-1;;7651:13:0;7660:4;7651:13;;;25927:30:::1;::::0;;::::1;::::0;::::1;::::0;;25950:7:::1;25927:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;25927:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;25927:30:0;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;25927:30:0;::::1;7651:13:::0;25927:30;;::::1;;;::::0;;;;-1:-1:-1;;;25927:30:0;::::1;::::0;::::1;;;::::0;;;;-1:-1:-1;;;25927:30:0;;::::1;::::0;;::::1;;;::::0;;;;;7651:6;25972:21;25968:60:::1;;26010:7;;;25968:60;26064:4;26044:26;::::0;;;:11:::1;:26;::::0;;;;;;;26079:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;26079:9:0::1;26044:46:::0;;;;;;;;-1:-1:-1;;26044:67:0::1;26040:166;;26148:4;26128:26;::::0;;;:11:::1;:26;::::0;;;;;;;26163:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;26163:9:0::1;26128:46:::0;;;;;;;-1:-1:-1;;26128:66:0;;26040:166:::1;26218:17;26303:1;26283:6;:16;;;26239:60;;26263:6;:16;;;26240:39;;:20;:39;;;;:::i;:::-;26239:60;;;;:::i;:::-;26238:66;;;;:::i;:::-;26218:86:::0;-1:-1:-1;26315:15:0::1;26333:32;26218:86:::0;26333:20;:32:::1;:::i;:::-;26410:16;::::0;;26424:1:::1;26410:16:::0;;;;;::::1;::::0;;26315:50;;-1:-1:-1;26386:21:0::1;::::0;26410:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26410:16:0::1;26386:40;;26455:4;26437;26442:1;26437:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;26437:23:0::1;;;-1:-1:-1::0;;;;;26437:23:0::1;;;::::0;::::1;26481:9;;;;;;;;;-1:-1:-1::0;;;;;26481:9:0::1;-1:-1:-1::0;;;;;26481:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26471:4;26476:1;26471:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26471:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26514:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;26514:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;26589:7;;26611:1:::1;::::0;26627:4;;26654::::1;::::0;26674:15:::1;::::0;26514:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26510:233;;26725:7;;;;;;26510:233;26776:21;26755:18;26862:7:::0;26836:22:::1;26849:9:::0;26776:21;26836:22:::1;:::i;:::-;26835:34;;;;:::i;:::-;26808:61:::0;-1:-1:-1;26886:13:0;;26882:417:::1;;26920:9;::::0;27089:11:::1;:21:::0;26920:239:::1;::::0;-1:-1:-1;;;26920:239:0;;26997:4:::1;26920:239;::::0;::::1;34123:34:1::0;34173:18;;;34166:34;;;27049:1:0::1;34216:18:1::0;;;34209:34;;;34259:18;;;34252:34;-1:-1:-1;;;;;27089:21:0;;::::1;34302:19:1::0;;;34295:44;27129:15:0::1;34355:19:1::0;;;34348:35;26920:9:0::1;::::0;;::::1;;::::0;:25:::1;::::0;26953:16;;34057:19:1;;26920:239:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26920:239:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;26920:239:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;26916:372;;27266:7;;;;;;;;26916:372;-1:-1:-1::0;;27184:40:0::1;::::0;;34879:25:1;;;34935:2;34920:18;;34913:34;;;27184:40:0::1;::::0;-1:-1:-1;34852:18:1;27184:40:0::1;;;;;;;26916:372;27311:30;27325:16:::0;27311:30;::::1;:::i;:::-;;;27372:6;:16;;;27352:6;:16;;:36;;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;27435:21:0;;:72:::1;::::0;27399:12:::1;::::0;-1:-1:-1;;;;;27435:21:0::1;::::0;27497:5:::1;::::0;27469:21:::1;::::0;27399:12;27435:72;27399:12;27435:72;27469:21;27435;27497:5;27435:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;7675:1:0::1;-1:-1:-1::0;7687:6:0;:14;;-1:-1:-1;;7687:14:0;;;25844:1671::o;30703:804::-;30791:7;30811:18;30844:3;30840:205;;;-1:-1:-1;30877:9:0;:16;;;30840:205;;;30915:4;30911:134;;;-1:-1:-1;30949:9:0;:17;;;;;;30911:134;;;-1:-1:-1;31012:9:0;:21;-1:-1:-1;;;31012:21:0;;;;30911:134;31059:10;31073:1;31059:15;31055:39;;31085:6;31078:13;;;;;31055:39;31116:11;;-1:-1:-1;;;31116:11:0;;-1:-1:-1;;;;;31116:11:0;31140:4;31108:37;:110;;;;;31163:13;31180:1;31163:18;:54;;;;31198:13;31215:2;31198:19;31163:54;31104:138;;;-1:-1:-1;31235:4:0;31104:138;31252:17;6242:5;31272:19;31281:10;31272:6;:19;:::i;:::-;:38;;;;:::i;:::-;31252:58;-1:-1:-1;31325:13:0;;31321:141;;31371:4;31355:7;:22;;;;;;;;;;:35;;31381:9;;31355:7;:35;;31381:9;;31355:35;:::i;:::-;;;;-1:-1:-1;;31410:40:0;;368:25:1;;;31433:4:0;;-1:-1:-1;;;;;31410:40:0;;;-1:-1:-1;;;;;;;;;;;31410:40:0;356:2:1;341:18;31410:40:0;;;;;;;31321:141;31481:18;31490:9;31481:6;:18;:::i;27523:563::-;27606:16;;;;;;;27605:17;27597:65;;;;-1:-1:-1;;;27597:65:0;;35546:2:1;27597:65:0;;;35528:21:1;35585:2;35565:18;;;35558:30;35624:34;35604:18;;;35597:62;-1:-1:-1;;;35675:18:1;;;35668:33;35718:19;;27597:65:0;35344:399:1;27597:65:0;27678:20;27689:4;27695:2;27678:10;:20::i;:::-;27677:21;:37;;;;-1:-1:-1;27708:6:0;;-1:-1:-1;;;;;27702:12:0;;;27708:6;;27702:12;27677:37;27673:406;;;-1:-1:-1;;;;;27731:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;27731:30:0;;;27757:4;27731:30;;;;;;27776:19;:25;;;;;:32;;;;;;;;;;27823:16;:23;;-1:-1:-1;;27823:23:0;;;;;;;-1:-1:-1;;;27873:11:0;;;27861:114;;27919:11;:40;;-1:-1:-1;;;;;;;;27919:40:0;27953:4;-1:-1:-1;;;27919:40:0;;;;27861:114;27989:19;:26;;-1:-1:-1;;27989:26:0;;;;;28035:32;;-1:-1:-1;1856:41:1;;-1:-1:-1;;;;;;;;;;;28035:32:0;1844:2:1;1829:18;28035:32:0;1716:187:1;14:203;-1:-1:-1;;;;;178:32:1;;;;160:51;;148:2;133:18;;14:203::o;938:548::-;1050:4;1079:2;1108;1097:9;1090:21;1140:6;1134:13;1183:6;1178:2;1167:9;1163:18;1156:34;1208:1;1218:140;1232:6;1229:1;1226:13;1218:140;;;1327:14;;;1323:23;;1317:30;1293:17;;;1312:2;1289:26;1282:66;1247:10;;1218:140;;;1222:3;1407:1;1402:2;1393:6;1382:9;1378:22;1374:31;1367:42;1477:2;1470;1466:7;1461:2;1453:6;1449:15;1445:29;1434:9;1430:45;1426:54;1418:62;;;;938:548;;;;:::o;1908:180::-;1967:6;2020:2;2008:9;1999:7;1995:23;1991:32;1988:52;;;2036:1;2033;2026:12;1988:52;-1:-1:-1;2059:23:1;;1908:180;-1:-1:-1;1908:180:1:o;2093:131::-;-1:-1:-1;;;;;2168:31:1;;2158:42;;2148:70;;2214:1;2211;2204:12;2229:315;2297:6;2305;2358:2;2346:9;2337:7;2333:23;2329:32;2326:52;;;2374:1;2371;2364:12;2326:52;2413:9;2400:23;2432:31;2457:5;2432:31;:::i;:::-;2482:5;2534:2;2519:18;;;;2506:32;;-1:-1:-1;;;2229:315:1:o;2549:247::-;2608:6;2661:2;2649:9;2640:7;2636:23;2632:32;2629:52;;;2677:1;2674;2667:12;2629:52;2716:9;2703:23;2735:31;2760:5;2735:31;:::i;2801:456::-;2878:6;2886;2894;2947:2;2935:9;2926:7;2922:23;2918:32;2915:52;;;2963:1;2960;2953:12;2915:52;3002:9;2989:23;3021:31;3046:5;3021:31;:::i;:::-;3071:5;-1:-1:-1;3128:2:1;3113:18;;3100:32;3141:33;3100:32;3141:33;:::i;:::-;2801:456;;3193:7;;-1:-1:-1;;;3247:2:1;3232:18;;;;3219:32;;2801:456::o;3262:248::-;3330:6;3338;3391:2;3379:9;3370:7;3366:23;3362:32;3359:52;;;3407:1;3404;3397:12;3359:52;-1:-1:-1;;3430:23:1;;;3500:2;3485:18;;;3472:32;;-1:-1:-1;3262:248:1:o;3515:127::-;3576:10;3571:3;3567:20;3564:1;3557:31;3607:4;3604:1;3597:15;3631:4;3628:1;3621:15;3647:275;3718:2;3712:9;3783:2;3764:13;;-1:-1:-1;;3760:27:1;3748:40;;-1:-1:-1;;;;;3803:34:1;;3839:22;;;3800:62;3797:88;;;3865:18;;:::i;:::-;3901:2;3894:22;3647:275;;-1:-1:-1;3647:275:1:o;3927:183::-;3987:4;-1:-1:-1;;;;;4009:30:1;;4006:56;;;4042:18;;:::i;:::-;-1:-1:-1;4087:1:1;4083:14;4099:4;4079:25;;3927:183::o;4115:662::-;4169:5;4222:3;4215:4;4207:6;4203:17;4199:27;4189:55;;4240:1;4237;4230:12;4189:55;4276:6;4263:20;4302:4;4326:60;4342:43;4382:2;4342:43;:::i;:::-;4326:60;:::i;:::-;4420:15;;;4506:1;4502:10;;;;4490:23;;4486:32;;;4451:12;;;;4530:15;;;4527:35;;;4558:1;4555;4548:12;4527:35;4594:2;4586:6;4582:15;4606:142;4622:6;4617:3;4614:15;4606:142;;;4688:17;;4676:30;;4726:12;;;;4639;;4606:142;;;-1:-1:-1;4766:5:1;4115:662;-1:-1:-1;;;;;;4115:662:1:o;4782:1215::-;4900:6;4908;4961:2;4949:9;4940:7;4936:23;4932:32;4929:52;;;4977:1;4974;4967:12;4929:52;5004:23;;-1:-1:-1;;;;;5076:14:1;;;5073:34;;;5103:1;5100;5093:12;5073:34;5141:6;5130:9;5126:22;5116:32;;5186:7;5179:4;5175:2;5171:13;5167:27;5157:55;;5208:1;5205;5198:12;5157:55;5244:2;5231:16;5266:4;5290:60;5306:43;5346:2;5306:43;:::i;5290:60::-;5384:15;;;5466:1;5462:10;;;;5454:19;;5450:28;;;5415:12;;;;5490:19;;;5487:39;;;5522:1;5519;5512:12;5487:39;5546:11;;;;5566:217;5582:6;5577:3;5574:15;5566:217;;;5662:3;5649:17;5679:31;5704:5;5679:31;:::i;:::-;5723:18;;5599:12;;;;5761;;;;5566:217;;;5802:5;-1:-1:-1;;5845:18:1;;5832:32;;-1:-1:-1;;5876:16:1;;;5873:36;;;5905:1;5902;5895:12;5873:36;;5928:63;5983:7;5972:8;5961:9;5957:24;5928:63;:::i;:::-;5918:73;;;4782:1215;;;;;:::o;6002:118::-;6088:5;6081:13;6074:21;6067:5;6064:32;6054:60;;6110:1;6107;6100:12;6125:647;6199:6;6207;6215;6223;6276:3;6264:9;6255:7;6251:23;6247:33;6244:53;;;6293:1;6290;6283:12;6244:53;6332:9;6319:23;6351:28;6373:5;6351:28;:::i;:::-;6398:5;-1:-1:-1;6455:2:1;6440:18;;6427:32;6468:30;6427:32;6468:30;:::i;:::-;6517:7;-1:-1:-1;6576:2:1;6561:18;;6548:32;6589:30;6548:32;6589:30;:::i;:::-;6638:7;-1:-1:-1;6697:2:1;6682:18;;6669:32;6710:30;6669:32;6710:30;:::i;:::-;6125:647;;;;-1:-1:-1;6125:647:1;;-1:-1:-1;;6125:647:1:o;7320:382::-;7385:6;7393;7446:2;7434:9;7425:7;7421:23;7417:32;7414:52;;;7462:1;7459;7452:12;7414:52;7501:9;7488:23;7520:31;7545:5;7520:31;:::i;:::-;7570:5;-1:-1:-1;7627:2:1;7612:18;;7599:32;7640:30;7599:32;7640:30;:::i;:::-;7689:7;7679:17;;;7320:382;;;;;:::o;7707:159::-;7774:20;;7834:6;7823:18;;7813:29;;7803:57;;7856:1;7853;7846:12;7803:57;7707:159;;;:::o;7871:256::-;7937:6;7945;7998:2;7986:9;7977:7;7973:23;7969:32;7966:52;;;8014:1;8011;8004:12;7966:52;8037:28;8055:9;8037:28;:::i;:::-;8027:38;;8084:37;8117:2;8106:9;8102:18;8084:37;:::i;:::-;8074:47;;7871:256;;;;;:::o;8132:553::-;8233:6;8241;8249;8302:2;8290:9;8281:7;8277:23;8273:32;8270:52;;;8318:1;8315;8308:12;8270:52;8357:9;8344:23;8376:31;8401:5;8376:31;:::i;:::-;8426:5;-1:-1:-1;8483:2:1;8468:18;;8455:32;8496:33;8455:32;8496:33;:::i;:::-;8548:7;-1:-1:-1;8607:2:1;8592:18;;8579:32;8620:33;8579:32;8620:33;:::i;:::-;8672:7;8662:17;;;8132:553;;;;;:::o;8690:328::-;8764:6;8772;8780;8833:2;8821:9;8812:7;8808:23;8804:32;8801:52;;;8849:1;8846;8839:12;8801:52;8872:28;8890:9;8872:28;:::i;:::-;8862:38;;8919:37;8952:2;8941:9;8937:18;8919:37;:::i;:::-;8909:47;;8975:37;9008:2;8997:9;8993:18;8975:37;:::i;:::-;8965:47;;8690:328;;;;;:::o;9023:376::-;9085:6;9093;9146:2;9134:9;9125:7;9121:23;9117:32;9114:52;;;9162:1;9159;9152:12;9114:52;9201:9;9188:23;9220:28;9242:5;9220:28;:::i;10099:388::-;10167:6;10175;10228:2;10216:9;10207:7;10203:23;10199:32;10196:52;;;10244:1;10241;10234:12;10196:52;10283:9;10270:23;10302:31;10327:5;10302:31;:::i;:::-;10352:5;-1:-1:-1;10409:2:1;10394:18;;10381:32;10422:33;10381:32;10422:33;:::i;10929:385::-;11015:6;11023;11031;11039;11092:3;11080:9;11071:7;11067:23;11063:33;11060:53;;;11109:1;11106;11099:12;11060:53;-1:-1:-1;;11132:23:1;;;11202:2;11187:18;;11174:32;;-1:-1:-1;11253:2:1;11238:18;;11225:32;;11304:2;11289:18;11276:32;;-1:-1:-1;10929:385:1;-1:-1:-1;10929:385:1:o;11319:341::-;11521:2;11503:21;;;11560:2;11540:18;;;11533:30;-1:-1:-1;;;11594:2:1;11579:18;;11572:47;11651:2;11636:18;;11319:341::o;11665:331::-;11867:2;11849:21;;;11906:1;11886:18;;;11879:29;-1:-1:-1;;;11939:2:1;11924:18;;11917:38;11987:2;11972:18;;11665:331::o;12001:339::-;12203:2;12185:21;;;12242:2;12222:18;;;12215:30;-1:-1:-1;;;12276:2:1;12261:18;;12254:45;12331:2;12316:18;;12001:339::o;12345:127::-;12406:10;12401:3;12397:20;12394:1;12387:31;12437:4;12434:1;12427:15;12461:4;12458:1;12451:15;12477:422;12566:1;12609:5;12566:1;12623:270;12644:7;12634:8;12631:21;12623:270;;;12703:4;12699:1;12695:6;12691:17;12685:4;12682:27;12679:53;;;12712:18;;:::i;:::-;12762:7;12752:8;12748:22;12745:55;;;12782:16;;;;12745:55;12861:22;;;;12821:15;;;;12623:270;;;12627:3;12477:422;;;;;:::o;12904:806::-;12953:5;12983:8;12973:80;;-1:-1:-1;13024:1:1;13038:5;;12973:80;13072:4;13062:76;;-1:-1:-1;13109:1:1;13123:5;;13062:76;13154:4;13172:1;13167:59;;;;13240:1;13235:130;;;;13147:218;;13167:59;13197:1;13188:10;;13211:5;;;13235:130;13272:3;13262:8;13259:17;13256:43;;;13279:18;;:::i;:::-;-1:-1:-1;;13335:1:1;13321:16;;13350:5;;13147:218;;13449:2;13439:8;13436:16;13430:3;13424:4;13421:13;13417:36;13411:2;13401:8;13398:16;13393:2;13387:4;13384:12;13380:35;13377:77;13374:159;;;-1:-1:-1;13486:19:1;;;13518:5;;13374:159;13565:34;13590:8;13584:4;13565:34;:::i;:::-;13635:6;13631:1;13627:6;13623:19;13614:7;13611:32;13608:58;;;13646:18;;:::i;:::-;13684:20;;12904:806;-1:-1:-1;;;12904:806:1:o;13715:140::-;13773:5;13802:47;13843:4;13833:8;13829:19;13823:4;13802:47;:::i;13860:217::-;13900:1;13926;13916:132;;13970:10;13965:3;13961:20;13958:1;13951:31;14005:4;14002:1;13995:15;14033:4;14030:1;14023:15;13916:132;-1:-1:-1;14062:9:1;;13860:217::o;14082:128::-;14149:9;;;14170:11;;;14167:37;;;14184:18;;:::i;14215:168::-;14288:9;;;14319;;14336:15;;;14330:22;;14316:37;14306:71;;14357:18;;:::i;14805:352::-;15007:2;14989:21;;;15046:2;15026:18;;;15019:30;-1:-1:-1;;;15080:2:1;15065:18;;15058:58;15148:2;15133:18;;14805:352::o;15512:127::-;15573:10;15568:3;15564:20;15561:1;15554:31;15604:4;15601:1;15594:15;15628:4;15625:1;15618:15;15991:197;16029:3;16057:6;16098:2;16091:5;16087:14;16125:2;16116:7;16113:15;16110:41;;16131:18;;:::i;:::-;16180:1;16167:15;;15991:197;-1:-1:-1;;;15991:197:1:o;16629:125::-;16694:9;;;16715:10;;;16712:36;;;16728:18;;:::i;16759:501::-;16838:6;16846;16854;16907:2;16895:9;16886:7;16882:23;16878:32;16875:52;;;16923:1;16920;16913:12;16875:52;16955:9;16949:16;16974:28;16996:5;16974:28;:::i;:::-;17071:2;17056:18;;17050:25;17021:5;;-1:-1:-1;17084:30:1;17050:25;17084:30;:::i;:::-;17185:2;17170:18;;17164:25;17133:7;;-1:-1:-1;17198:30:1;17164:25;17198:30;:::i;18757:425::-;18959:2;18941:21;;;18998:2;18978:18;;;18971:30;19037:34;19032:2;19017:18;;19010:62;19108:31;19103:2;19088:18;;19081:59;19172:3;19157:19;;18757:425::o;20228:168::-;20295:6;20321:10;;;20333;;;20317:27;;20356:11;;;20353:37;;;20370:18;;:::i;:::-;20353:37;20228:168;;;;:::o;21943:284::-;-1:-1:-1;;;;;22129:32:1;;;;22111:51;;22205:14;22198:22;22193:2;22178:18;;22171:50;22099:2;22084:18;;21943:284::o;24105:355::-;24307:2;24289:21;;;24346:2;24326:18;;;24319:30;24385:33;24380:2;24365:18;;24358:61;24451:2;24436:18;;24105:355::o;25229:184::-;25299:6;25352:2;25340:9;25331:7;25327:23;25323:32;25320:52;;;25368:1;25365;25358:12;25320:52;-1:-1:-1;25391:16:1;;25229:184;-1:-1:-1;25229:184:1:o;25697:245::-;25764:6;25817:2;25805:9;25796:7;25792:23;25788:32;25785:52;;;25833:1;25830;25823:12;25785:52;25865:9;25859:16;25884:28;25906:5;25884:28;:::i;26306:251::-;26376:6;26429:2;26417:9;26408:7;26404:23;26400:32;26397:52;;;26445:1;26442;26435:12;26397:52;26477:9;26471:16;26496:31;26521:5;26496:31;:::i;26562:304::-;-1:-1:-1;;;;;26792:15:1;;;26774:34;;26844:15;;26839:2;26824:18;;26817:43;26724:2;26709:18;;26562:304::o;28034:410::-;28236:2;28218:21;;;28275:2;28255:18;;;28248:30;28314:34;28309:2;28294:18;;28287:62;-1:-1:-1;;;28380:2:1;28365:18;;28358:44;28434:3;28419:19;;28034:410::o;28449:343::-;28651:2;28633:21;;;28690:2;28670:18;;;28663:30;-1:-1:-1;;;28724:2:1;28709:18;;28702:49;28783:2;28768:18;;28449:343::o;32789:980::-;33051:4;33099:3;33088:9;33084:19;33130:6;33119:9;33112:25;33156:2;33194:6;33189:2;33178:9;33174:18;33167:34;33237:3;33232:2;33221:9;33217:18;33210:31;33261:6;33296;33290:13;33327:6;33319;33312:22;33365:3;33354:9;33350:19;33343:26;;33404:2;33396:6;33392:15;33378:29;;33425:1;33435:195;33449:6;33446:1;33443:13;33435:195;;;33514:13;;-1:-1:-1;;;;;33510:39:1;33498:52;;33605:15;;;;33570:12;;;;33546:1;33464:9;33435:195;;;-1:-1:-1;;;;;;;33686:32:1;;;;33681:2;33666:18;;33659:60;-1:-1:-1;;;33750:3:1;33735:19;33728:35;33647:3;32789:980;-1:-1:-1;;;32789:980:1:o;34394:306::-;34482:6;34490;34498;34551:2;34539:9;34530:7;34526:23;34522:32;34519:52;;;34567:1;34564;34557:12;34519:52;34596:9;34590:16;34580:26;;34646:2;34635:9;34631:18;34625:25;34615:35;;34690:2;34679:9;34675:18;34669:25;34659:35;;34394:306;;;;;:::o;34958:171::-;35026:6;35065:10;;;35053;;;35049:27;;35088:12;;;35085:38;;;35103:18;;:::i

Swarm Source

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