ETH Price: $3,397.34 (+1.47%)

Token

ZOMBIE SKRAT (ZSKRAT)
 

Overview

Max Total Supply

100,000,000,000,000,000 ZSKRAT

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
102,892,724,169,660.99734065 ZSKRAT

Value
$0.00
0x28f9c481ce9a7d13b8889effe3cda92b84b73bc8
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ZOMBIESKRAT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

interface 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 _ab) external;
    function removeSniper(address account) external;
}

contract ZOMBIESKRAT is IERC20 {
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 100_000_000_000_000_000;
    string constant private _name = "ZOMBIE SKRAT";
    string constant private _symbol = "ZSKRAT";
    uint8 constant private _decimals = 9;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

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

    struct Ratios {
        uint16 reflection;
        uint16 development;
        uint16 marketing;
        uint16 buyback;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        reflection: 100,
        development: 200,
        marketing: 200,
        buyback: 200,
        totalSwap: 600
    });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xC6bFC7D28025836fcDC8e28C25Bc5812E5B6c863),
        buyback: payable(0xb37071CEC4785790f2feF37cf4e6f586eE0B00f9),
        development: payable(0x352f50D24Bb891F26d4e6B74766944c9072B56e9)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;

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

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

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

        _rOwned[_owner] = _rTotal;
        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 == 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;
    address public originalDeployer;
    address public operator;

    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 to set an operator to allow someone other the deployer to create things such as launchpads.
    // Only callable by original deployer.
    function setOperator(address newOperator) public {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        setOperator(address(0));
        originalDeployer = address(0);
    }

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

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } 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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            protections.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.");
            }
            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 isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

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

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

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

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

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

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

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

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

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

    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 excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        require(router != address(this) 
                && presale != address(this) 
                && lpPair != router 
                && lpPair != presale, "Just don't.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
            setExcludedFromReward(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
            setExcludedFromReward(router, true);
            setExcludedFromReward(presale, true);
        }
    }

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
        }

        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;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 buybackBalance = (amtBalance * ratios.buyback) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (developmentBalance + buybackBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
        if (ratios.buyback > 0) {
            (success,) = _taxWallets.buyback.call{value: buybackBalance, gas: 35000}("");
        }
    }

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

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

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function finalizeTransfer(address from, address to, uint256 tAmount, bool buy, bool sell, bool other) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

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

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

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

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

        return true;
    }

    function takeTaxes(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool other) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        Ratios memory ratios = _ratios;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

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

        if (takeFee) {
            uint256 currentFee;

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

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

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

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rTotal = _rTotal;
        uint256 tTotal = _tTotal;
        uint256 rSupply = rTotal;
        uint256 tSupply = tTotal;
        if (_isExcluded[lpPair]) {
            uint256 rLPOwned = _rOwned[lpPair];
            uint256 tLPOwned = _tOwned[lpPair];
            if(address(protections) == address(this) 
                && (block.chainid == 56
                || block.chainid == 1)) { revert(); }
            if (rLPOwned > rSupply || tLPOwned > tSupply) return rTotal / tTotal;
            rSupply -= rLPOwned;
            tSupply -= tLPOwned;
        }
        if (_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                uint256 rOwned = _rOwned[_excluded[i]];
                uint256 tOwned = _tOwned[_excluded[i]];
                if (rOwned > rSupply || tOwned > tSupply) return rTotal / tTotal;
                rSupply = rSupply - rOwned;
                tSupply = tSupply - tOwned;
            }
        }
        if (rSupply < rTotal / tTotal) return rTotal / tTotal;
        return rSupply / tSupply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"buyback","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","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":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"buyback","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"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"buyback","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600355600c805460ff19166001179055620000246009600a620007ae565b620000389067016345785d8a0000620007c6565b6200004690600019620007e0565b620000549060001962000803565b600d81905560408051606080820183526102bc808352602080840182905292840152600e805465ffffffffffff19166502bc02bc02bc179055825160a0810184526064815260c881840181905281850181905281830152610258608090910152600f80546001600160501b03191669025800c800c800c800641790558251908101835273c6bfc7d28025836fcdc8e28c25bc5812e5b6c86380825273b37071cec4785790f2fef37cf4e6f586ee0b00f982840181905273352f50d24bb891f26d4e6b74766944c9072b56e9928501839052601280546001600160a01b0319908116909317905560138054831690911790556014805482169092179091556015805461ff0019169055600a6019819055601a805461ffff19169055601c80543390841681178255601d8054909416811790935560009283529282905292812093909355546001600160a01b031691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001d290600990620007ae565b620001e69067016345785d8a0000620007c6565b60405190815260200160405180910390a3466038036200022e5760108054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000329565b46606103620002655760108054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000329565b4660011480620002755750466004145b80620002815750466003145b15620002b55760108054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000329565b4661a86a03620002ed5760108054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000329565b4660fa03620003245760108054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000329565b600080fd5b601060019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000819565b6001600160a01b031663c9c65396601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042b919062000819565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000478573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049e919062000819565b601180546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055601c54601054620004f592918216916101009091041660001962000598565b6010546200051690309061010090046001600160a01b031660001962000598565b601c80546001600160a01b0390811660009081526007602090815260408083208054600160ff19918216811790925530855282852080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548216831790559554909416835260059091529020805490921617905562000844565b6001600160a01b038316620005ea5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006385760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005e1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f0578160001904821115620006d457620006d462000699565b80851615620006e257918102915b93841c9390800290620006b4565b509250929050565b6000826200070957506001620007a8565b816200071857506000620007a8565b81600181146200073157600281146200073c576200075c565b6001915050620007a8565b60ff84111562000750576200075062000699565b50506001821b620007a8565b5060208310610133831016604e8410600b841016171562000781575081810a620007a8565b6200078d8383620006af565b8060001904821115620007a457620007a462000699565b0290505b92915050565b6000620007bf60ff841683620006f8565b9392505050565b8082028115828204841417620007a857620007a862000699565b600082620007fe57634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620007a857620007a862000699565b6000602082840312156200082c57600080fd5b81516001600160a01b0381168114620007bf57600080fd5b6148bf80620008546000396000f3fe60806040526004361061039b5760003560e01c806350a8e016116101dc57806395d89b4111610102578063cf847706116100a0578063f94aa1b41161006f578063f94aa1b414610b38578063fb78680d14610b8f578063fdb78c0e14610baf578063feadde9c14610bce57600080fd5b8063cf84770614610a40578063dd62ed3e14610abd578063eafb5a3c14610b03578063ee5d9c2d14610b2357600080fd5b8063b3ab15fb116100dc578063b3ab15fb146109e6578063b3d514fb1461063c578063b7df8b3614610a06578063bfc2fc3514610a2057600080fd5b806395d89b4114610997578063a9059cbb146109c6578063b1b08f711461063c57600080fd5b806375cb1bd11161017a57806388f820201161014957806388f8202014610916578063893d20e81461094f5780638a63bd9b1461096d5780638a8c523c1461098257600080fd5b806375cb1bd1146108a157806378648edf146108c157806380c581d1146108d657806381cf58a9146108f657600080fd5b80635a6f0918116101b65780635a6f0918146108365780635c24b0741461084c57806370a082311461086c578063715018a61461088c57600080fd5b806350a8e016146107d7578063570ca735146107f6578063590ffdce1461081657600080fd5b806328577751116102c157806333251a0b1161025f5780634bbb93eb1161022e5780634bbb93eb1461073e5780634e718e481461075e5780634fb2e45d1461077e5780634fbee1931461079e57600080fd5b806333251a0b146106cf57806339a05902146106ef578063452ed4f1146107045780634ada218b1461072457600080fd5b80632d8381191161029b5780632d838119146106525780632e8fa82114610672578063313ce5671461068857806332cde664146106af57600080fd5b806328577751146106115780632b112e49146106275780632b28fc7a1461063c57600080fd5b806307dd79e01161033957806313e461921161030857806313e461921461059c57806318160ddd146105bc57806323b872dd146105d15780632610eaca146105f157600080fd5b806307dd79e0146104f9578063095ea7b3146105235780630dcbcf1c1461054357806313b4a7f41461057c57600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104765780630712d165146104b45780630758d924146104d457600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f060165481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004614161565b610bee565b005b34801561042c57600080fd5b50600e546104519061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048257600080fd5b5060408051808201909152600c81526b1693d35092514814d2d4905560a21b60208201525b6040516103d1919061419a565b3480156104c057600080fd5b5061041e6104cf3660046141ff565b610cac565b3480156104e057600080fd5b506010546103bd9061010090046001600160a01b031681565b34801561050557600080fd5b506010546105139060ff1681565b60405190151581526020016103d1565b34801561052f57600080fd5b5061051361053e366004614268565b610e8b565b34801561054f57600080fd5b5061051361055e366004614294565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561058857600080fd5b5061041e6105973660046142b1565b610ea2565b3480156105a857600080fd5b5061041e6105b73660046142df565b611072565b3480156105c857600080fd5b506103f06114f3565b3480156105dd57600080fd5b506105136105ec3660046142fd565b611542565b3480156105fd57600080fd5b5061041e61060c366004614414565b6115ba565b34801561061d57600080fd5b506103f060195481565b34801561063357600080fd5b506103f0611763565b34801561064857600080fd5b506103f06102bc81565b34801561065e57600080fd5b506103f061066d3660046144d6565b6117ac565b34801561067e57600080fd5b506103f060175481565b34801561069457600080fd5b5061069d611830565b60405160ff90911681526020016103d1565b3480156106bb57600080fd5b5061041e6106ca3660046144ef565b611862565b3480156106db57600080fd5b5061041e6106ea366004614294565b6119b6565b3480156106fb57600080fd5b5061041e611a60565b34801561071057600080fd5b506011546103bd906001600160a01b031681565b34801561073057600080fd5b50601a546105139060ff1681565b34801561074a57600080fd5b506103f06107593660046144d6565b611ae7565b34801561076a57600080fd5b5061041e6107793660046144d6565b611b19565b34801561078a57600080fd5b5061041e610799366004614294565b611bb7565b3480156107aa57600080fd5b506105136107b9366004614294565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107e357600080fd5b50601a5461051390610100900460ff1681565b34801561080257600080fd5b50601e546103bd906001600160a01b031681565b34801561082257600080fd5b5061041e6108313660046142df565b611daa565b34801561084257600080fd5b506103f0601b5481565b34801561085857600080fd5b5061041e610867366004614294565b611e1d565b34801561087857600080fd5b506103f0610887366004614294565b611ef7565b34801561089857600080fd5b5061041e611f56565b3480156108ad57600080fd5b5061041e6108bc366004614532565b612003565b3480156108cd57600080fd5b5061041e61208a565b3480156108e257600080fd5b5061041e6108f13660046142df565b6120e1565b34801561090257600080fd5b50601d546103bd906001600160a01b031681565b34801561092257600080fd5b50610513610931366004614294565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561095b57600080fd5b50601c546001600160a01b03166103bd565b34801561097957600080fd5b50610513612264565b34801561098e57600080fd5b5061041e6122d4565b3480156109a357600080fd5b506040805180820190915260068152651694d2d4905560d21b60208201526104a7565b3480156109d257600080fd5b506105136109e1366004614268565b6124fb565b3480156109f257600080fd5b5061041e610a01366004614294565b612512565b348015610a1257600080fd5b506018546105139060ff1681565b348015610a2c57600080fd5b5061041e610a3b366004614161565b6125ff565b348015610a4c57600080fd5b50600f54610a889061ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d1565b348015610ac957600080fd5b506103f0610ad83660046142b1565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b0f57600080fd5b5061041e610b1e366004614294565b6126a6565b348015610b2f57600080fd5b5061041e612a6a565b348015610b4457600080fd5b50601254601354601454610b65926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103d1565b348015610b9b57600080fd5b5061041e610baa36600461457d565b612b46565b348015610bbb57600080fd5b5060155461051390610100900460ff1681565b348015610bda57600080fd5b5061041e610be93660046142df565b612e12565b601c546001600160a01b03163314610c3b5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a83398151915260448201526064015b60405180910390fd5b601a5460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c9057600080fd5b505af1158015610ca4573d6000803e3d6000fd5b505050505050565b601c546001600160a01b03163314610cf45760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b600f805461ffff86811667ffff00000000ffff19909216919091176601000000000000868316021765ffffffff000019166401000000008583160263ffff0000191617620100009184169190910217905580610d5083856145c5565b610d5a91906145c5565b600f805469ffff00000000000000001916600160401b61ffff93841602179055600e54600091610d9391620100008104821691166145c5565b600f5461ffff9182169250600160401b900416811015610e055760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c32565b600f548190610e229061ffff80821691600160401b9004166145c5565b61ffff161115610e845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c32565b5050505050565b6000610e98338484612e85565b5060015b92915050565b601c546001600160a01b03163314610eea5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b600c5460ff16610ef957600080fd5b6001600160a01b0382163014801590610f1b57506001600160a01b0381163014155b8015610f3557506011546001600160a01b03838116911614155b8015610f4f57506011546001600160a01b03828116911614155b610f895760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610c32565b806001600160a01b0316826001600160a01b031603610ff6576001600160a01b03811660009081526005602090815260408083208054600160ff199182168117909255600b9093529220805490911682179055610fe7908290611daa565b610ff2816001611072565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600b909252808320805486168317905592825291902080549092168117909155611060908390611daa565b61106b816001611daa565b610fe78260015b601c546001600160a01b031633146110ba5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b8015611201576001600160a01b03821660009081526009602052604090205460ff16156111295760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c32565b6001600160a01b03821660009081526020819052604090205415611183576001600160a01b038216600090815260208190526040902054611169906117ac565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff1916600117905560115490911614610ff257600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555050565b80610ff2576001600160a01b03821660009081526009602052604090205460ff1661126e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c32565b6011546001600160a01b03908116908316036112e75761128c612f7e565b6001600160a01b0383166000908152600160205260409020546112af91906145e7565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a54600103611387576112f9612f7e565b6001600160a01b03831660009081526001602052604090205461131c91906145e7565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a805480611361576113616145fe565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a548110156114ee57826001600160a01b0316600a82815481106113b1576113b1614614565b6000918252602090912001546001600160a01b0316036114dc57600a80546113db9060019061462a565b815481106113eb576113eb614614565b600091825260209091200154600a80546001600160a01b03909216918390811061141757611417614614565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061144d612f7e565b6001600160a01b03841660009081526001602052604090205461147091906145e7565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a8054806114b5576114b56145fe565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806114e68161463d565b91505061138a565b505050565b60006115016009600a61473a565b6115139067016345785d8a00006145e7565b60000361151f57600080fd5b61152b6009600a61473a565b61153d9067016345785d8a00006145e7565b905090565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115a7576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906115a190849061462a565b90915550505b6115b284848461318a565b949350505050565b601c546001600160a01b031633146116025760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b80518251146116535760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c32565b60005b82518161ffff1610156114ee5761166f6009600a61473a565b828261ffff168151811061168557611685614614565b602002602001015161169791906145e7565b6116a033611ef7565b10156116ee5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c32565b61175033848361ffff168151811061170857611708614614565b60200260200101516009600a61171e919061473a565b858561ffff168151811061173457611734614614565b602002602001015161174691906145e7565b6000806001613464565b508061175b81614749565b915050611656565b600061176f6000611ef7565b61177a61dead611ef7565b611784919061476a565b6117906009600a61473a565b6117a29067016345785d8a00006145e7565b61153d919061462a565b6000600d548211156118135760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c32565b600061181d612f7e565b9050611829818461477d565b9392505050565b600061183e6009600a61473a565b6118509067016345785d8a00006145e7565b60000361185c57600080fd5b50600990565b601c546001600160a01b031633146118aa5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b60105460ff16156118fd5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c32565b6102bc8361ffff161115801561191957506102bc8261ffff1611155b801561192b57506102bc8161ffff1611155b6119775760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c32565b600e805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601c546001600160a01b031633146119fe5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b158015611a4c57600080fd5b505af1158015610e84573d6000803e3d6000fd5b601d546001600160a01b03163314611acb5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610c32565b611ad56000612512565b601d80546001600160a01b0319169055565b601154600090612710908390611b05906001600160a01b0316611ef7565b611b0f91906145e7565b610e9c919061477d565b601c546001600160a01b03163314611b615760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6096811115611bb25760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c32565b601955565b601c546001600160a01b03163314611bff5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6001600160a01b038116611c7b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c32565b61deac196001600160a01b03821601611cfc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c32565b601c54611d13906001600160a01b03166000611daa565b611d1e816001611daa565b601c54600090611d36906001600160a01b0316611ef7565b1115611d5857601c54611d56906001600160a01b03168261174682611ef7565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b03163314611df25760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b03163314611e655760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a5460ff1615611e7557600080fd5b306001600160a01b03821603611ecd5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c32565b601a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6001600160a01b03811660009081526009602052604081205460ff1615611f3457506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610e9c906117ac565b601c546001600160a01b03163314611f9e5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601c54611fb5906001600160a01b03166000611daa565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b0316331461204b5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601280546001600160a01b039485166001600160a01b031991821617909155601480549385169382169390931790925560138054919093169116179055565b601c546001600160a01b031633146120d25760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6010805460ff19166001179055565b601c546001600160a01b031633146121295760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b8061219c576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c9057600080fd5b60035415612203576203f480600354426121b6919061462a565b116122035760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c32565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610c76565b601c546000906001600160a01b031633146122af5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6010546122ce90309061010090046001600160a01b0316600019612e85565b50600190565b601c546001600160a01b0316331461231c5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a5460ff161561236f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c32565b601a54610100900460ff166123c65760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c32565b601a546201000090046001600160a01b03166123f657601a805462010000600160b01b0319163062010000021790555b601a54601154604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561246857600080fd5b505af1925050508015612479575060015b50601a805460ff19908116600117909155600c80549091169055601154612710906124ac906001600160a01b0316611ef7565b6124b790600a6145e7565b6124c1919061477d565b601655601154612710906124dd906001600160a01b0316611ef7565b6124e890601e6145e7565b6124f2919061477d565b60175542601b55565b600061250833848461318a565b5060019392505050565b601d546001600160a01b0316331461257d5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610c32565b601e546001600160a01b031680156125ba576001600160a01b0381166000908152600560205260408120805460ff191690556125ba908290611daa565b601e80546001600160a01b0319166001600160a01b0384169081179091556000908152600560205260409020805460ff19166001908117909155610ff2908390611daa565b601c546001600160a01b031633146126475760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6015805461ff001916610100841515908102919091179091556018805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c546001600160a01b031633146126ee5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a54610100900460ff16156127465760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c32565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af919061479f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612820919061479f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561286b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288f919061479f565b90506001600160a01b038116612a0857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612901919061479f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612972919061479f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e3919061479f565b601180546001600160a01b0319166001600160a01b0392909216919091179055612a24565b601180546001600160a01b0319166001600160a01b0383161790555b6010805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b03858116820292909217928390556114ee92309291900416600019612e85565b601c546001600160a01b03163314612ab25760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a54610100900460ff1615612b0a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c32565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b43573d6000803e3d6000fd5b50565b601c546001600160a01b03163314612b8e5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b8284612b9c6009600a61473a565b612bae9067016345785d8a00006145e7565b612bb891906145e7565b612bc2919061477d565b6016558082612bd36009600a61473a565b612be59067016345785d8a00006145e7565b612bef91906145e7565b612bf9919061477d565b60178190556016541115612c595760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610c32565b60115461271090612c72906001600160a01b0316611ef7565b612c7d9060966145e7565b612c87919061477d565b6017541115612ce45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610c32565b620f4240612cf46009600a61473a565b612d069067016345785d8a00006145e7565b612d10919061477d565b6017541015612d785760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c32565b620f4240612d886009600a61473a565b612d9a9067016345785d8a00006145e7565b612da4919061477d565b6016541015612e0c5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c32565b50505050565b601c546001600160a01b03163314612e5a5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038316612ed15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c32565b6001600160a01b038216612f1d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c32565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d5460009081612f916009600a61473a565b612fa39067016345785d8a00006145e7565b6011546001600160a01b03166000908152600960205260409020549091508290829060ff1615613066576011546001600160a01b0390811660009081526020818152604080832054600190925290912054601a5491929091620100009004163014801561301a5750466038148061301a5750466001145b1561302457600080fd5b8382118061303157508281115b1561304b57613040858761477d565b965050505050505090565b613055828561462a565b9350613061818461462a565b925050505b600a541561315c5760005b600a5460ff8216101561315a576000806000600a8460ff168154811061309957613099614614565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff87169081106130de576130de614614565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061311257508381115b1561312d57613121868861477d565b97505050505050505090565b613137828661462a565b9450613143818561462a565b935050508080613152906147bc565b915050613071565b505b613166838561477d565b82101561318057613177838561477d565b94505050505090565b613177818361477d565b60006001600160a01b0384166131f05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c32565b6001600160a01b0383166132525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c32565b600082116132b45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c32565b6001600160a01b0384166000908152600260205260408120548190819060ff16156132e25760019250613310565b6001600160a01b03861660009081526002602052604090205460ff161561330c5760019150613310565b5060015b61331a878761375f565b1561337157601a5460ff166133715760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c32565b811561344b5760155460ff1661344b57601554610100900460ff1680156133b157506001600160a01b0386166000908152600b602052604090205460ff16155b80156133d657506001600160a01b0387166000908152600b602052604090205460ff16155b1561344b5760006133e630611ef7565b905060165481106134495760175460185460ff161561343357601954601154612710919061341c906001600160a01b0316611ef7565b61342691906145e7565b613430919061477d565b90505b80821061343e578091505b61344782613874565b505b505b613459878787868686613464565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff16806134a657506001600160a01b03871660009081526007602052604090205460ff165b156134af575060005b60006134c0898989858a8a8a613c73565b60808101516001600160a01b038b166000908152602081905260408120805493945091926134ef90849061462a565b909155505060608101516001600160a01b0389166000908152602081905260408120805490919061352190849061476a565b90915550506001600160a01b03891660009081526009602052604090205460ff1615613585576001600160a01b03891660009081526001602052604090205461356b90889061462a565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff16156135e55780516001600160a01b0389166000908152600160205260409020546135cb919061476a565b6001600160a01b0389166000908152600160205260409020555b60008160a0015111806135fc575060008160200151115b1561361d578060a00151600d6000828254613617919061462a565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161366691815260200190565b60405180910390a3601a54610100900460ff16613750576136878989614013565b601a54610100900460ff161580156136a457506136a4898961375f565b80156136c957506001600160a01b03891660009081526006602052604090205460ff16155b80156136ee57506001600160a01b03881660009081526006602052604090205460ff16155b80156136f8575083155b156137505760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610c32565b50600198975050505050505050565b601c546000906001600160a01b0384811691161480159061378e5750601c546001600160a01b03838116911614155b80156137a55750601c546001600160a01b03163214155b80156137ca57506001600160a01b03821660009081526005602052604090205460ff16155b80156137ef57506001600160a01b03831660009081526005602052604090205460ff16155b801561380657506001600160a01b03821661dead14155b801561381a57506001600160a01b03821615155b801561382f57506001600160a01b0383163014155b801561384f5750601a546001600160a01b03848116620100009092041614155b8015611829575050601a546201000090046001600160a01b0390811691161415919050565b6015805460ff191660011790556040805160a081018252600f5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b9004909116608082018190526000036138e35750613c66565b30600090815260046020908152604080832060105461010090046001600160a01b03168452909152902054600019146139465730600090815260046020908152604080832060105461010090046001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061397b5761397b614614565b60200260200101906001600160a01b031690816001600160a01b031681525050601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a12919061479f565b81600181518110613a2557613a25614614565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81526101009091049091169063791ac94790613a729086906000908690309042906004016147db565b600060405180830381600087803b158015613a8c57600080fd5b505af1925050508015613a9d575060015b613aa8575050613c66565b6000479050600080846080015161ffff16856020015161ffff1684613acd91906145e7565b613ad7919061477d565b90506000856080015161ffff16866060015161ffff1685613af891906145e7565b613b02919061477d565b90506000613b10828461476a565b613b1a908661462a565b604088015190915061ffff1615613b88576012546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613b7d576040519150601f19603f3d011682016040523d82523d6000602084013e613b82565b606091505b50909450505b602087015161ffff1615613bf3576014546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114613be8576040519150601f19603f3d011682016040523d82523d6000602084013e613bed565b606091505b50909450505b606087015161ffff1615613c5e576013546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613c53576040519150601f19603f3d011682016040523d82523d6000602084013e613c58565b606091505b50909450505b505050505050505b506015805460ff19169055565b613cb36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613cf36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a081018252600f5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b90049091166080820152613d4e612f7e565b60c08301819052613d5f90896145e7565b6080830152613d6e8a8a61375f565b15613e0857601a5460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613df1575060408051601f3d908101601f19168201909252613dee9181019061484c565b60015b613dfa57600080fd5b905080613e0657600080fd5b505b8615613ef45760008615613e235750600e5461ffff16613e4d565b8515613e3c5750600e5462010000900461ffff16613e4d565b50600e54640100000000900461ffff165b6000612710613e5c838c6145e7565b613e66919061477d565b9050600083600001518460800151613e7e91906145c5565b845161ffff91821692508291613e959116846145e7565b613e9f919061477d565b60208601819052613eb0908361462a565b604086018190526020860151613ec6919061476a565b613ed0908c61462a565b855260c08501516020860151613ee691906145e7565b60a086015250613ef8915050565b8782525b604082015115613fcf578160c001518260400151613f1691906145e7565b3060009081526020819052604081208054909190613f3590849061476a565b90915550503060009081526009602052604090205460ff1615613f7d576040808301513060009081526001602052918220805491929091613f7790849061476a565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460400151604051613fc691815260200190565b60405180910390a35b8160c001518260400151613fe391906145e7565b8260a00151613ff2919061476a565b8260800151614001919061462a565b60608301525098975050505050505050565b601a54610100900460ff16156140775760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610c32565b614081828261375f565b15801561409b57506011546001600160a01b038281169116145b15610ff2576001600160a01b038083166000908152600560209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055601a805461ff00191661010017908190556201000090041661411357601a805462010000600160b01b0319163062010000021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161269a565b8015158114612b4357600080fd5b6000806040838503121561417457600080fd5b823561417f81614153565b9150602083013561418f81614153565b809150509250929050565b600060208083528351808285015260005b818110156141c7578581018301518582016040015282016141ab565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff811681146141fa57600080fd5b919050565b6000806000806080858703121561421557600080fd5b61421e856141e8565b935061422c602086016141e8565b925061423a604086016141e8565b9150614248606086016141e8565b905092959194509250565b6001600160a01b0381168114612b4357600080fd5b6000806040838503121561427b57600080fd5b823561428681614253565b946020939093013593505050565b6000602082840312156142a657600080fd5b813561182981614253565b600080604083850312156142c457600080fd5b82356142cf81614253565b9150602083013561418f81614253565b600080604083850312156142f257600080fd5b823561417f81614253565b60008060006060848603121561431257600080fd5b833561431d81614253565b9250602084013561432d81614253565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561437d5761437d61433e565b604052919050565b600067ffffffffffffffff82111561439f5761439f61433e565b5060051b60200190565b600082601f8301126143ba57600080fd5b813560206143cf6143ca83614385565b614354565b82815260059290921b840181019181810190868411156143ee57600080fd5b8286015b8481101561440957803583529183019183016143f2565b509695505050505050565b6000806040838503121561442757600080fd5b823567ffffffffffffffff8082111561443f57600080fd5b818501915085601f83011261445357600080fd5b813560206144636143ca83614385565b82815260059290921b8401810191818101908984111561448257600080fd5b948201945b838610156144a957853561449a81614253565b82529482019490820190614487565b965050860135925050808211156144bf57600080fd5b506144cc858286016143a9565b9150509250929050565b6000602082840312156144e857600080fd5b5035919050565b60008060006060848603121561450457600080fd5b61450d846141e8565b925061451b602085016141e8565b9150614529604085016141e8565b90509250925092565b60008060006060848603121561454757600080fd5b833561455281614253565b9250602084013561456281614253565b9150604084013561457281614253565b809150509250925092565b6000806000806080858703121561459357600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156145e0576145e06145af565b5092915050565b8082028115828204841417610e9c57610e9c6145af565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610e9c57610e9c6145af565b60006001820161464f5761464f6145af565b5060010190565b600181815b80851115614691578160001904821115614677576146776145af565b8085161561468457918102915b93841c939080029061465b565b509250929050565b6000826146a857506001610e9c565b816146b557506000610e9c565b81600181146146cb57600281146146d5576146f1565b6001915050610e9c565b60ff8411156146e6576146e66145af565b50506001821b610e9c565b5060208310610133831016604e8410600b8410161715614714575081810a610e9c565b61471e8383614656565b8060001904821115614732576147326145af565b029392505050565b600061182960ff841683614699565b600061ffff808316818103614760576147606145af565b6001019392505050565b80820180821115610e9c57610e9c6145af565b60008261479a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156147b157600080fd5b815161182981614253565b600060ff821660ff81036147d2576147d26145af565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561482b5784516001600160a01b031683529383019391830191600101614806565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561485e57600080fd5b81516118298161415356fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212209b9e52c163c944c516eac6a2b273117974ad9056fed8358b4ad930fded9f7cbf64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806350a8e016116101dc57806395d89b4111610102578063cf847706116100a0578063f94aa1b41161006f578063f94aa1b414610b38578063fb78680d14610b8f578063fdb78c0e14610baf578063feadde9c14610bce57600080fd5b8063cf84770614610a40578063dd62ed3e14610abd578063eafb5a3c14610b03578063ee5d9c2d14610b2357600080fd5b8063b3ab15fb116100dc578063b3ab15fb146109e6578063b3d514fb1461063c578063b7df8b3614610a06578063bfc2fc3514610a2057600080fd5b806395d89b4114610997578063a9059cbb146109c6578063b1b08f711461063c57600080fd5b806375cb1bd11161017a57806388f820201161014957806388f8202014610916578063893d20e81461094f5780638a63bd9b1461096d5780638a8c523c1461098257600080fd5b806375cb1bd1146108a157806378648edf146108c157806380c581d1146108d657806381cf58a9146108f657600080fd5b80635a6f0918116101b65780635a6f0918146108365780635c24b0741461084c57806370a082311461086c578063715018a61461088c57600080fd5b806350a8e016146107d7578063570ca735146107f6578063590ffdce1461081657600080fd5b806328577751116102c157806333251a0b1161025f5780634bbb93eb1161022e5780634bbb93eb1461073e5780634e718e481461075e5780634fb2e45d1461077e5780634fbee1931461079e57600080fd5b806333251a0b146106cf57806339a05902146106ef578063452ed4f1146107045780634ada218b1461072457600080fd5b80632d8381191161029b5780632d838119146106525780632e8fa82114610672578063313ce5671461068857806332cde664146106af57600080fd5b806328577751146106115780632b112e49146106275780632b28fc7a1461063c57600080fd5b806307dd79e01161033957806313e461921161030857806313e461921461059c57806318160ddd146105bc57806323b872dd146105d15780632610eaca146105f157600080fd5b806307dd79e0146104f9578063095ea7b3146105235780630dcbcf1c1461054357806313b4a7f41461057c57600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104765780630712d165146104b45780630758d924146104d457600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f060165481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004614161565b610bee565b005b34801561042c57600080fd5b50600e546104519061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048257600080fd5b5060408051808201909152600c81526b1693d35092514814d2d4905560a21b60208201525b6040516103d1919061419a565b3480156104c057600080fd5b5061041e6104cf3660046141ff565b610cac565b3480156104e057600080fd5b506010546103bd9061010090046001600160a01b031681565b34801561050557600080fd5b506010546105139060ff1681565b60405190151581526020016103d1565b34801561052f57600080fd5b5061051361053e366004614268565b610e8b565b34801561054f57600080fd5b5061051361055e366004614294565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561058857600080fd5b5061041e6105973660046142b1565b610ea2565b3480156105a857600080fd5b5061041e6105b73660046142df565b611072565b3480156105c857600080fd5b506103f06114f3565b3480156105dd57600080fd5b506105136105ec3660046142fd565b611542565b3480156105fd57600080fd5b5061041e61060c366004614414565b6115ba565b34801561061d57600080fd5b506103f060195481565b34801561063357600080fd5b506103f0611763565b34801561064857600080fd5b506103f06102bc81565b34801561065e57600080fd5b506103f061066d3660046144d6565b6117ac565b34801561067e57600080fd5b506103f060175481565b34801561069457600080fd5b5061069d611830565b60405160ff90911681526020016103d1565b3480156106bb57600080fd5b5061041e6106ca3660046144ef565b611862565b3480156106db57600080fd5b5061041e6106ea366004614294565b6119b6565b3480156106fb57600080fd5b5061041e611a60565b34801561071057600080fd5b506011546103bd906001600160a01b031681565b34801561073057600080fd5b50601a546105139060ff1681565b34801561074a57600080fd5b506103f06107593660046144d6565b611ae7565b34801561076a57600080fd5b5061041e6107793660046144d6565b611b19565b34801561078a57600080fd5b5061041e610799366004614294565b611bb7565b3480156107aa57600080fd5b506105136107b9366004614294565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107e357600080fd5b50601a5461051390610100900460ff1681565b34801561080257600080fd5b50601e546103bd906001600160a01b031681565b34801561082257600080fd5b5061041e6108313660046142df565b611daa565b34801561084257600080fd5b506103f0601b5481565b34801561085857600080fd5b5061041e610867366004614294565b611e1d565b34801561087857600080fd5b506103f0610887366004614294565b611ef7565b34801561089857600080fd5b5061041e611f56565b3480156108ad57600080fd5b5061041e6108bc366004614532565b612003565b3480156108cd57600080fd5b5061041e61208a565b3480156108e257600080fd5b5061041e6108f13660046142df565b6120e1565b34801561090257600080fd5b50601d546103bd906001600160a01b031681565b34801561092257600080fd5b50610513610931366004614294565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561095b57600080fd5b50601c546001600160a01b03166103bd565b34801561097957600080fd5b50610513612264565b34801561098e57600080fd5b5061041e6122d4565b3480156109a357600080fd5b506040805180820190915260068152651694d2d4905560d21b60208201526104a7565b3480156109d257600080fd5b506105136109e1366004614268565b6124fb565b3480156109f257600080fd5b5061041e610a01366004614294565b612512565b348015610a1257600080fd5b506018546105139060ff1681565b348015610a2c57600080fd5b5061041e610a3b366004614161565b6125ff565b348015610a4c57600080fd5b50600f54610a889061ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d1565b348015610ac957600080fd5b506103f0610ad83660046142b1565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b0f57600080fd5b5061041e610b1e366004614294565b6126a6565b348015610b2f57600080fd5b5061041e612a6a565b348015610b4457600080fd5b50601254601354601454610b65926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103d1565b348015610b9b57600080fd5b5061041e610baa36600461457d565b612b46565b348015610bbb57600080fd5b5060155461051390610100900460ff1681565b348015610bda57600080fd5b5061041e610be93660046142df565b612e12565b601c546001600160a01b03163314610c3b5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a83398151915260448201526064015b60405180910390fd5b601a5460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c9057600080fd5b505af1158015610ca4573d6000803e3d6000fd5b505050505050565b601c546001600160a01b03163314610cf45760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b600f805461ffff86811667ffff00000000ffff19909216919091176601000000000000868316021765ffffffff000019166401000000008583160263ffff0000191617620100009184169190910217905580610d5083856145c5565b610d5a91906145c5565b600f805469ffff00000000000000001916600160401b61ffff93841602179055600e54600091610d9391620100008104821691166145c5565b600f5461ffff9182169250600160401b900416811015610e055760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c32565b600f548190610e229061ffff80821691600160401b9004166145c5565b61ffff161115610e845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c32565b5050505050565b6000610e98338484612e85565b5060015b92915050565b601c546001600160a01b03163314610eea5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b600c5460ff16610ef957600080fd5b6001600160a01b0382163014801590610f1b57506001600160a01b0381163014155b8015610f3557506011546001600160a01b03838116911614155b8015610f4f57506011546001600160a01b03828116911614155b610f895760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610c32565b806001600160a01b0316826001600160a01b031603610ff6576001600160a01b03811660009081526005602090815260408083208054600160ff199182168117909255600b9093529220805490911682179055610fe7908290611daa565b610ff2816001611072565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600b909252808320805486168317905592825291902080549092168117909155611060908390611daa565b61106b816001611daa565b610fe78260015b601c546001600160a01b031633146110ba5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b8015611201576001600160a01b03821660009081526009602052604090205460ff16156111295760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c32565b6001600160a01b03821660009081526020819052604090205415611183576001600160a01b038216600090815260208190526040902054611169906117ac565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff1916600117905560115490911614610ff257600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555050565b80610ff2576001600160a01b03821660009081526009602052604090205460ff1661126e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c32565b6011546001600160a01b03908116908316036112e75761128c612f7e565b6001600160a01b0383166000908152600160205260409020546112af91906145e7565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a54600103611387576112f9612f7e565b6001600160a01b03831660009081526001602052604090205461131c91906145e7565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a805480611361576113616145fe565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a548110156114ee57826001600160a01b0316600a82815481106113b1576113b1614614565b6000918252602090912001546001600160a01b0316036114dc57600a80546113db9060019061462a565b815481106113eb576113eb614614565b600091825260209091200154600a80546001600160a01b03909216918390811061141757611417614614565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061144d612f7e565b6001600160a01b03841660009081526001602052604090205461147091906145e7565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a8054806114b5576114b56145fe565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806114e68161463d565b91505061138a565b505050565b60006115016009600a61473a565b6115139067016345785d8a00006145e7565b60000361151f57600080fd5b61152b6009600a61473a565b61153d9067016345785d8a00006145e7565b905090565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115a7576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906115a190849061462a565b90915550505b6115b284848461318a565b949350505050565b601c546001600160a01b031633146116025760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b80518251146116535760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c32565b60005b82518161ffff1610156114ee5761166f6009600a61473a565b828261ffff168151811061168557611685614614565b602002602001015161169791906145e7565b6116a033611ef7565b10156116ee5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c32565b61175033848361ffff168151811061170857611708614614565b60200260200101516009600a61171e919061473a565b858561ffff168151811061173457611734614614565b602002602001015161174691906145e7565b6000806001613464565b508061175b81614749565b915050611656565b600061176f6000611ef7565b61177a61dead611ef7565b611784919061476a565b6117906009600a61473a565b6117a29067016345785d8a00006145e7565b61153d919061462a565b6000600d548211156118135760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c32565b600061181d612f7e565b9050611829818461477d565b9392505050565b600061183e6009600a61473a565b6118509067016345785d8a00006145e7565b60000361185c57600080fd5b50600990565b601c546001600160a01b031633146118aa5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b60105460ff16156118fd5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c32565b6102bc8361ffff161115801561191957506102bc8261ffff1611155b801561192b57506102bc8161ffff1611155b6119775760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c32565b600e805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601c546001600160a01b031633146119fe5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b158015611a4c57600080fd5b505af1158015610e84573d6000803e3d6000fd5b601d546001600160a01b03163314611acb5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610c32565b611ad56000612512565b601d80546001600160a01b0319169055565b601154600090612710908390611b05906001600160a01b0316611ef7565b611b0f91906145e7565b610e9c919061477d565b601c546001600160a01b03163314611b615760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6096811115611bb25760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c32565b601955565b601c546001600160a01b03163314611bff5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6001600160a01b038116611c7b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c32565b61deac196001600160a01b03821601611cfc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c32565b601c54611d13906001600160a01b03166000611daa565b611d1e816001611daa565b601c54600090611d36906001600160a01b0316611ef7565b1115611d5857601c54611d56906001600160a01b03168261174682611ef7565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b03163314611df25760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b03163314611e655760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a5460ff1615611e7557600080fd5b306001600160a01b03821603611ecd5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c32565b601a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6001600160a01b03811660009081526009602052604081205460ff1615611f3457506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610e9c906117ac565b601c546001600160a01b03163314611f9e5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601c54611fb5906001600160a01b03166000611daa565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b0316331461204b5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601280546001600160a01b039485166001600160a01b031991821617909155601480549385169382169390931790925560138054919093169116179055565b601c546001600160a01b031633146120d25760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6010805460ff19166001179055565b601c546001600160a01b031633146121295760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b8061219c576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c9057600080fd5b60035415612203576203f480600354426121b6919061462a565b116122035760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c32565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610c76565b601c546000906001600160a01b031633146122af5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6010546122ce90309061010090046001600160a01b0316600019612e85565b50600190565b601c546001600160a01b0316331461231c5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a5460ff161561236f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c32565b601a54610100900460ff166123c65760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c32565b601a546201000090046001600160a01b03166123f657601a805462010000600160b01b0319163062010000021790555b601a54601154604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561246857600080fd5b505af1925050508015612479575060015b50601a805460ff19908116600117909155600c80549091169055601154612710906124ac906001600160a01b0316611ef7565b6124b790600a6145e7565b6124c1919061477d565b601655601154612710906124dd906001600160a01b0316611ef7565b6124e890601e6145e7565b6124f2919061477d565b60175542601b55565b600061250833848461318a565b5060019392505050565b601d546001600160a01b0316331461257d5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610c32565b601e546001600160a01b031680156125ba576001600160a01b0381166000908152600560205260408120805460ff191690556125ba908290611daa565b601e80546001600160a01b0319166001600160a01b0384169081179091556000908152600560205260409020805460ff19166001908117909155610ff2908390611daa565b601c546001600160a01b031633146126475760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6015805461ff001916610100841515908102919091179091556018805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c546001600160a01b031633146126ee5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a54610100900460ff16156127465760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c32565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af919061479f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612820919061479f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561286b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288f919061479f565b90506001600160a01b038116612a0857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612901919061479f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612972919061479f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e3919061479f565b601180546001600160a01b0319166001600160a01b0392909216919091179055612a24565b601180546001600160a01b0319166001600160a01b0383161790555b6010805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b03858116820292909217928390556114ee92309291900416600019612e85565b601c546001600160a01b03163314612ab25760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b601a54610100900460ff1615612b0a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c32565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b43573d6000803e3d6000fd5b50565b601c546001600160a01b03163314612b8e5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b8284612b9c6009600a61473a565b612bae9067016345785d8a00006145e7565b612bb891906145e7565b612bc2919061477d565b6016558082612bd36009600a61473a565b612be59067016345785d8a00006145e7565b612bef91906145e7565b612bf9919061477d565b60178190556016541115612c595760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610c32565b60115461271090612c72906001600160a01b0316611ef7565b612c7d9060966145e7565b612c87919061477d565b6017541115612ce45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610c32565b620f4240612cf46009600a61473a565b612d069067016345785d8a00006145e7565b612d10919061477d565b6017541015612d785760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c32565b620f4240612d886009600a61473a565b612d9a9067016345785d8a00006145e7565b612da4919061477d565b6016541015612e0c5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c32565b50505050565b601c546001600160a01b03163314612e5a5760405162461bcd60e51b8152602060048201526011602482015260008051602061486a8339815191526044820152606401610c32565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038316612ed15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c32565b6001600160a01b038216612f1d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c32565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d5460009081612f916009600a61473a565b612fa39067016345785d8a00006145e7565b6011546001600160a01b03166000908152600960205260409020549091508290829060ff1615613066576011546001600160a01b0390811660009081526020818152604080832054600190925290912054601a5491929091620100009004163014801561301a5750466038148061301a5750466001145b1561302457600080fd5b8382118061303157508281115b1561304b57613040858761477d565b965050505050505090565b613055828561462a565b9350613061818461462a565b925050505b600a541561315c5760005b600a5460ff8216101561315a576000806000600a8460ff168154811061309957613099614614565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff87169081106130de576130de614614565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061311257508381115b1561312d57613121868861477d565b97505050505050505090565b613137828661462a565b9450613143818561462a565b935050508080613152906147bc565b915050613071565b505b613166838561477d565b82101561318057613177838561477d565b94505050505090565b613177818361477d565b60006001600160a01b0384166131f05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c32565b6001600160a01b0383166132525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c32565b600082116132b45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c32565b6001600160a01b0384166000908152600260205260408120548190819060ff16156132e25760019250613310565b6001600160a01b03861660009081526002602052604090205460ff161561330c5760019150613310565b5060015b61331a878761375f565b1561337157601a5460ff166133715760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c32565b811561344b5760155460ff1661344b57601554610100900460ff1680156133b157506001600160a01b0386166000908152600b602052604090205460ff16155b80156133d657506001600160a01b0387166000908152600b602052604090205460ff16155b1561344b5760006133e630611ef7565b905060165481106134495760175460185460ff161561343357601954601154612710919061341c906001600160a01b0316611ef7565b61342691906145e7565b613430919061477d565b90505b80821061343e578091505b61344782613874565b505b505b613459878787868686613464565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff16806134a657506001600160a01b03871660009081526007602052604090205460ff165b156134af575060005b60006134c0898989858a8a8a613c73565b60808101516001600160a01b038b166000908152602081905260408120805493945091926134ef90849061462a565b909155505060608101516001600160a01b0389166000908152602081905260408120805490919061352190849061476a565b90915550506001600160a01b03891660009081526009602052604090205460ff1615613585576001600160a01b03891660009081526001602052604090205461356b90889061462a565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff16156135e55780516001600160a01b0389166000908152600160205260409020546135cb919061476a565b6001600160a01b0389166000908152600160205260409020555b60008160a0015111806135fc575060008160200151115b1561361d578060a00151600d6000828254613617919061462a565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161366691815260200190565b60405180910390a3601a54610100900460ff16613750576136878989614013565b601a54610100900460ff161580156136a457506136a4898961375f565b80156136c957506001600160a01b03891660009081526006602052604090205460ff16155b80156136ee57506001600160a01b03881660009081526006602052604090205460ff16155b80156136f8575083155b156137505760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610c32565b50600198975050505050505050565b601c546000906001600160a01b0384811691161480159061378e5750601c546001600160a01b03838116911614155b80156137a55750601c546001600160a01b03163214155b80156137ca57506001600160a01b03821660009081526005602052604090205460ff16155b80156137ef57506001600160a01b03831660009081526005602052604090205460ff16155b801561380657506001600160a01b03821661dead14155b801561381a57506001600160a01b03821615155b801561382f57506001600160a01b0383163014155b801561384f5750601a546001600160a01b03848116620100009092041614155b8015611829575050601a546201000090046001600160a01b0390811691161415919050565b6015805460ff191660011790556040805160a081018252600f5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b9004909116608082018190526000036138e35750613c66565b30600090815260046020908152604080832060105461010090046001600160a01b03168452909152902054600019146139465730600090815260046020908152604080832060105461010090046001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061397b5761397b614614565b60200260200101906001600160a01b031690816001600160a01b031681525050601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a12919061479f565b81600181518110613a2557613a25614614565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81526101009091049091169063791ac94790613a729086906000908690309042906004016147db565b600060405180830381600087803b158015613a8c57600080fd5b505af1925050508015613a9d575060015b613aa8575050613c66565b6000479050600080846080015161ffff16856020015161ffff1684613acd91906145e7565b613ad7919061477d565b90506000856080015161ffff16866060015161ffff1685613af891906145e7565b613b02919061477d565b90506000613b10828461476a565b613b1a908661462a565b604088015190915061ffff1615613b88576012546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613b7d576040519150601f19603f3d011682016040523d82523d6000602084013e613b82565b606091505b50909450505b602087015161ffff1615613bf3576014546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114613be8576040519150601f19603f3d011682016040523d82523d6000602084013e613bed565b606091505b50909450505b606087015161ffff1615613c5e576013546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613c53576040519150601f19603f3d011682016040523d82523d6000602084013e613c58565b606091505b50909450505b505050505050505b506015805460ff19169055565b613cb36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613cf36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a081018252600f5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b90049091166080820152613d4e612f7e565b60c08301819052613d5f90896145e7565b6080830152613d6e8a8a61375f565b15613e0857601a5460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613df1575060408051601f3d908101601f19168201909252613dee9181019061484c565b60015b613dfa57600080fd5b905080613e0657600080fd5b505b8615613ef45760008615613e235750600e5461ffff16613e4d565b8515613e3c5750600e5462010000900461ffff16613e4d565b50600e54640100000000900461ffff165b6000612710613e5c838c6145e7565b613e66919061477d565b9050600083600001518460800151613e7e91906145c5565b845161ffff91821692508291613e959116846145e7565b613e9f919061477d565b60208601819052613eb0908361462a565b604086018190526020860151613ec6919061476a565b613ed0908c61462a565b855260c08501516020860151613ee691906145e7565b60a086015250613ef8915050565b8782525b604082015115613fcf578160c001518260400151613f1691906145e7565b3060009081526020819052604081208054909190613f3590849061476a565b90915550503060009081526009602052604090205460ff1615613f7d576040808301513060009081526001602052918220805491929091613f7790849061476a565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460400151604051613fc691815260200190565b60405180910390a35b8160c001518260400151613fe391906145e7565b8260a00151613ff2919061476a565b8260800151614001919061462a565b60608301525098975050505050505050565b601a54610100900460ff16156140775760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610c32565b614081828261375f565b15801561409b57506011546001600160a01b038281169116145b15610ff2576001600160a01b038083166000908152600560209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055601a805461ff00191661010017908190556201000090041661411357601a805462010000600160b01b0319163062010000021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161269a565b8015158114612b4357600080fd5b6000806040838503121561417457600080fd5b823561417f81614153565b9150602083013561418f81614153565b809150509250929050565b600060208083528351808285015260005b818110156141c7578581018301518582016040015282016141ab565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff811681146141fa57600080fd5b919050565b6000806000806080858703121561421557600080fd5b61421e856141e8565b935061422c602086016141e8565b925061423a604086016141e8565b9150614248606086016141e8565b905092959194509250565b6001600160a01b0381168114612b4357600080fd5b6000806040838503121561427b57600080fd5b823561428681614253565b946020939093013593505050565b6000602082840312156142a657600080fd5b813561182981614253565b600080604083850312156142c457600080fd5b82356142cf81614253565b9150602083013561418f81614253565b600080604083850312156142f257600080fd5b823561417f81614253565b60008060006060848603121561431257600080fd5b833561431d81614253565b9250602084013561432d81614253565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561437d5761437d61433e565b604052919050565b600067ffffffffffffffff82111561439f5761439f61433e565b5060051b60200190565b600082601f8301126143ba57600080fd5b813560206143cf6143ca83614385565b614354565b82815260059290921b840181019181810190868411156143ee57600080fd5b8286015b8481101561440957803583529183019183016143f2565b509695505050505050565b6000806040838503121561442757600080fd5b823567ffffffffffffffff8082111561443f57600080fd5b818501915085601f83011261445357600080fd5b813560206144636143ca83614385565b82815260059290921b8401810191818101908984111561448257600080fd5b948201945b838610156144a957853561449a81614253565b82529482019490820190614487565b965050860135925050808211156144bf57600080fd5b506144cc858286016143a9565b9150509250929050565b6000602082840312156144e857600080fd5b5035919050565b60008060006060848603121561450457600080fd5b61450d846141e8565b925061451b602085016141e8565b9150614529604085016141e8565b90509250925092565b60008060006060848603121561454757600080fd5b833561455281614253565b9250602084013561456281614253565b9150604084013561457281614253565b809150509250925092565b6000806000806080858703121561459357600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156145e0576145e06145af565b5092915050565b8082028115828204841417610e9c57610e9c6145af565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610e9c57610e9c6145af565b60006001820161464f5761464f6145af565b5060010190565b600181815b80851115614691578160001904821115614677576146776145af565b8085161561468457918102915b93841c939080029061465b565b509250929050565b6000826146a857506001610e9c565b816146b557506000610e9c565b81600181146146cb57600281146146d5576146f1565b6001915050610e9c565b60ff8411156146e6576146e66145af565b50506001821b610e9c565b5060208310610133831016604e8410600b8410161715614714575081810a610e9c565b61471e8383614656565b8060001904821115614732576147326145af565b029392505050565b600061182960ff841683614699565b600061ffff808316818103614760576147606145af565b6001019392505050565b80820180821115610e9c57610e9c6145af565b60008261479a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156147b157600080fd5b815161182981614253565b600060ff821660ff81036147d2576147d26145af565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561482b5784516001600160a01b031683529383019391830191600101614806565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561485e57600080fd5b81516118298161415356fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212209b9e52c163c944c516eac6a2b273117974ad9056fed8358b4ad930fded9f7cbf64736f6c63430008120033

Deployed Bytecode Sourcemap

3951:27513:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5949:73;;;;;;;;;;;;5980:42;5949:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5949:73:0;;;;;;;;6520:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6520:28:0;245:177:1;15685:153:0;;;;;;;;;;-1:-1:-1;15685:153:0;;;;;:::i;:::-;;:::i;:::-;;5363:109;;;;;;;;;;-1:-1:-1;5363:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;5363:109:0;931:365:1;11810:80:0;;;;;;;;;;-1:-1:-1;11882:5:0;;;;;;;;;;;;-1:-1:-1;;;11882:5:0;;;;11810:80;;;;;;;:::i;16497:607::-;;;;;;;;;;-1:-1:-1;16497:607:0;;;;;:::i;:::-;;:::i;5888:26::-;;;;;;;;;;-1:-1:-1;5888:26:0;;;;;;;-1:-1:-1;;;;;5888:26:0;;;5855;;;;;;;;;;-1:-1:-1;5855:26:0;;;;;;;;;;;2837:14:1;;2830:22;2812:41;;2800:2;2785:18;5855:26:0;2672:187:1;12499:161:0;;;;;;;;;;-1:-1:-1;12499:161:0;;;;;:::i;:::-;;:::i;14972:140::-;;;;;;;;;;-1:-1:-1;14972:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15070:34:0;15046:4;15070:34;;;:25;:34;;;;;;;;;14972:140;18807:961;;;;;;;;;;-1:-1:-1;18807:961:0;;;;;:::i;:::-;;:::i;25316:1522::-;;;;;;;;;;-1:-1:-1;25316:1522:0;;;;;:::i;:::-;;:::i;11481:115::-;;;;;;;;;;;;;:::i;13169:306::-;;;;;;;;;;-1:-1:-1;13169:306:0;;;;;:::i;:::-;;:::i;24733:447::-;;;;;;;;;;-1:-1:-1;24733:447:0;;;;;:::i;:::-;;:::i;6628:33::-;;;;;;;;;;;;;;;;15418:141;;;;;;;;;;;;;:::i;5655:41::-;;;;;;;;;;;;5693:3;5655:41;;26846:250;;;;;;;;;;-1:-1:-1;26846:250:0;;;;;:::i;:::-;;:::i;6555:25::-;;;;;;;;;;;;;;;;11602:112;;;;;;;;;;;;;:::i;:::-;;;7680:4:1;7668:17;;;7650:36;;7638:2;7623:18;11602:112:0;7508:184:1;16036:453:0;;;;;;;;;;-1:-1:-1;16036:453:0;;;;;:::i;:::-;;:::i;15567:110::-;;;;;;;;;;-1:-1:-1;15567:110:0;;;;;:::i;:::-;;:::i;10905:221::-;;;;;;;;;;;;;:::i;5921:21::-;;;;;;;;;;-1:-1:-1;5921:21:0;;;;-1:-1:-1;;;;;5921:21:0;;;6670:34;;;;;;;;;;-1:-1:-1;6670:34:0;;;;;;;;17407:189;;;;;;;;;;-1:-1:-1;17407:189:0;;;;;:::i;:::-;;:::i;18311:217::-;;;;;;;;;;-1:-1:-1;18311:217:0;;;;;:::i;:::-;;:::i;9367:654::-;;;;;;;;;;-1:-1:-1;9367:654:0;;;;;:::i;:::-;;:::i;14837:127::-;;;;;;;;;;-1:-1:-1;14837:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14928:28:0;14904:4;14928:28;;;:19;:28;;;;;;;;;14837:127;6711:36;;;;;;;;;;-1:-1:-1;6711:36:0;;;;;;;;;;;9158:23;;;;;;;;;;-1:-1:-1;9158:23:0;;;;-1:-1:-1;;;;;9158:23:0;;;15120:134;;;;;;;;;;-1:-1:-1;15120:134:0;;;;;:::i;:::-;;:::i;6784:26::-;;;;;;;;;;;;;;;;14607:222;;;;;;;;;;-1:-1:-1;14607:222:0;;;;;:::i;:::-;;:::i;12120:198::-;;;;;;;;;;-1:-1:-1;12120:198:0;;;;;:::i;:::-;;:::i;10029:225::-;;;;;;;;;;;;;:::i;17112:287::-;;;;;;;;;;-1:-1:-1;17112:287:0;;;;;:::i;:::-;;:::i;15846:182::-;;;;;;;;;;;;;:::i;14104:495::-;;;;;;;;;;-1:-1:-1;14104:495:0;;;;;:::i;:::-;;:::i;9120:31::-;;;;;;;;;;-1:-1:-1;9120:31:0;;;;-1:-1:-1;;;;;9120:31:0;;;25188:120;;;;;;;;;;-1:-1:-1;25188:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;25280:20:0;25256:4;25280:20;;;:11;:20;;;;;;;;;25188:120;11896:79;;;;;;;;;;-1:-1:-1;11966:6:0;;-1:-1:-1;;;;;11966:6:0;11896:79;;12986:175;;;;;;;;;;;;;:::i;23900:635::-;;;;;;;;;;;;;:::i;11720:84::-;;;;;;;;;;-1:-1:-1;11794:7:0;;;;;;;;;;;;-1:-1:-1;;;11794:7:0;;;;11720:84;;12326:165;;;;;;;;;;-1:-1:-1;12326:165:0;;;;;:::i;:::-;;:::i;10415:482::-;;;;;;;;;;-1:-1:-1;10415:482:0;;;;;:::i;:::-;;:::i;6587:34::-;;;;;;;;;;-1:-1:-1;6587:34:0;;;;;;;;18536:263;;;;;;;;;;-1:-1:-1;18536:263:0;;;;;:::i;:::-;;:::i;5481:165::-;;;;;;;;;;-1:-1:-1;5481:165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5481:165:0;;;;;;;;;;8847:6:1;8880:15;;;8862:34;;8932:15;;;8927:2;8912:18;;8905:43;8984:15;;;8964:18;;;8957:43;;;;9036:15;;9031:2;9016:18;;9009:43;9089:15;;;9083:3;9068:19;;9061:44;8824:3;8809:19;5481:165:0;8588:523:1;11981:133:0;;;;;;;;;;-1:-1:-1;11981:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12083:19:0;;;12065:7;12083:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11981:133;13483:613;;;;;;;;;;-1:-1:-1;13483:613:0;;;;;:::i;:::-;;:::i;24543:182::-;;;;;;;;;;;;;:::i;6173:270::-;;;;;;;;;;-1:-1:-1;6173:270:0;;;;;;;;-1:-1:-1;;;;;6173:270:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9445:15:1;;;9427:34;;9497:15;;;9492:2;9477:18;;9470:43;9549:15;;9529:18;;;9522:43;;;;9354:2;9339:18;6173:270:0;9116:455:1;17604:699:0;;;;;;;;;;-1:-1:-1;17604:699:0;;;;;:::i;:::-;;:::i;6474:39::-;;;;;;;;;;-1:-1:-1;6474:39:0;;;;;;;;;;;15262:148;;;;;;;;;;-1:-1:-1;15262:148:0;;;;;:::i;:::-;;:::i;15685:153::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;;;;;;;;;15780:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;15780:50:0;;10499:14:1;;10492:22;15780:50:0::1;::::0;::::1;10474:41:1::0;10558:14;;10551:22;10531:18;;;10524:50;15780:11:0;;;::::1;-1:-1:-1::0;;;;;15780:11:0::1;::::0;:26:::1;::::0;10447:18:1;;15780:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15685:153:::0;;:::o;16497:607::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;16619:7:::1;:31:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;16661:25:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;16737:33:0;16697:29;;;::::1;;-1:-1:-1::0;;16737:33:0;;;;;::::1;::::0;;;::::1;;::::0;;;16801:19:::1;16697:29:::0;16661:25;16801:19:::1;:::i;:::-;:33;;;;:::i;:::-;16781:7;:53:::0;;-1:-1:-1;;16781:53:0::1;-1:-1:-1::0;;;16781:53:0::1;::::0;;::::1;;;::::0;;16880:9:::1;:17:::0;-1:-1:-1;;16861:36:0::1;::::0;16880:17;;::::1;::::0;::::1;::::0;16861:16:::1;:36;:::i;:::-;16916:7;:17:::0;16845:52:::1;::::0;;::::1;::::0;-1:-1:-1;;;;16916:17:0;::::1;;:26:::0;-1:-1:-1;16916:26:0::1;16908:78;;;::::0;-1:-1:-1;;;16908:78:0;;11092:2:1;16908:78:0::1;::::0;::::1;11074:21:1::0;11131:2;11111:18;;;11104:30;11170:34;11150:18;;;11143:62;-1:-1:-1;;;11221:18:1;;;11214:37;11268:19;;16908:78:0::1;10890:403:1::0;16908:78:0::1;17025:7;:18:::0;17047:5;;17005:38:::1;::::0;17025:18:::1;::::0;;::::1;::::0;-1:-1:-1;;;17005:17:0;::::1;;:38;:::i;:::-;:47;;;;16997:99;;;::::0;-1:-1:-1;;;16997:99:0;;11092:2:1;16997:99:0::1;::::0;::::1;11074:21:1::0;11131:2;11111:18;;;11104:30;11170:34;11150:18;;;11143:62;-1:-1:-1;;;11221:18:1;;;11214:37;11268:19;;16997:99:0::1;10890:403:1::0;16997:99:0::1;16608:496;16497:607:::0;;;;:::o;12499:161::-;12576:4;12593:37;12602:10;12614:7;12623:6;12593:8;:37::i;:::-;-1:-1:-1;12648:4:0;12499:161;;;;;:::o;18807:961::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;18911:23:::1;::::0;::::1;;18903:32;;;::::0;::::1;;-1:-1:-1::0;;;;;18954:23:0;::::1;18972:4;18954:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;18999:24:0;::::1;19018:4;18999:24;;18954:69;:107;;;;-1:-1:-1::0;19045:6:0::1;::::0;-1:-1:-1;;;;;19045:16:0;;::::1;:6:::0;::::1;:16;;18954:107;:146;;;;-1:-1:-1::0;19083:6:0::1;::::0;-1:-1:-1;;;;;19083:17:0;;::::1;:6:::0;::::1;:17;;18954:146;18946:170;;;::::0;-1:-1:-1;;;18946:170:0;;11500:2:1;18946:170:0::1;::::0;::::1;11482:21:1::0;11539:2;11519:18;;;11512:30;-1:-1:-1;;;11558:18:1;;;11551:41;11609:18;;18946:170:0::1;11298:335:1::0;18946:170:0::1;19141:7;-1:-1:-1::0;;;;;19131:17:0::1;:6;-1:-1:-1::0;;;;;19131:17:0::1;::::0;19127:634:::1;;-1:-1:-1::0;;;;;19165:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;19194:4:::1;-1:-1:-1::0;;19165:33:0;;::::1;::::0;::::1;::::0;;;19213:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;19260:34:::1;::::0;19165:26;;19260:19:::1;:34::i;:::-;19309:36;19331:7;19340:4;19309:21;:36::i;:::-;18807:961:::0;;:::o;19127:634::-:1;-1:-1:-1::0;;;;;19378:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;19406:4:::1;-1:-1:-1::0;;19378:32:0;;::::1;::::0;::::1;::::0;;;19425:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;19473:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;19519:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;19566:33:::1;::::0;19378:25;;19566:19:::1;:33::i;:::-;19614:34;19634:7;19643:4;19614:19;:34::i;:::-;19663:35;19685:6;19693:4;25316:1522:::0;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;25410:7:::1;25406:1425;;;-1:-1:-1::0;;;;;25443:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25442:21;25434:62;;;::::0;-1:-1:-1;;;25434:62:0;;11840:2:1;25434:62:0::1;::::0;::::1;11822:21:1::0;11879:2;11859:18;;;11852:30;11918;11898:18;;;11891:58;11966:18;;25434:62:0::1;11638:352:1::0;25434:62:0::1;-1:-1:-1::0;;;;;25515:16:0;::::1;25534:1;25515:16:::0;;;::::1;::::0;;;;;;;:20;25511:117:::1;;-1:-1:-1::0;;;;;25595:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;25575:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25556:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25511:117:::1;-1:-1:-1::0;;;;;25642:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25642:27:0::1;25665:4;25642:27;::::0;;25699:6:::1;::::0;;;::::1;25688:17;25684:80;;25725:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25725:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;25725:23:0::1;-1:-1:-1::0;;;;;25725:23:0;::::1;;::::0;;18807:961;;:::o;25406:1425::-:1;25786:7;25781:1050;;-1:-1:-1::0;;;;;25818:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25810:61;;;::::0;-1:-1:-1;;;25810:61:0;;12197:2:1;25810:61:0::1;::::0;::::1;12179:21:1::0;12236:2;12216:18;;;12209:30;12275;12255:18;;;12248:58;12323:18;;25810:61:0::1;11995:352:1::0;25810:61:0::1;25901:6;::::0;-1:-1:-1;;;;;25901:6:0;;::::1;25890:17:::0;;::::1;::::0;25886:934:::1;;25966:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;25947:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;25928:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;25995:7:::1;:16:::0;;;;;:20;;;26034:11:::1;:20:::0;;;:28;;-1:-1:-1;;26034:28:0::1;::::0;;18807:961;;:::o;25886:934::-:1;26088:9;:16:::0;26108:1:::1;26088:21:::0;26084:736:::1;;26168:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;26149:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;26130:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;26197:7:::1;:16:::0;;;;;:20;;;26236:11:::1;:20:::0;;;:28;;-1:-1:-1;;26236:28:0::1;::::0;;26283:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26283:15:0;;;;;-1:-1:-1;;;;;;26283:15:0::1;::::0;;;;;18807:961;;:::o;26084:736::-:1;26344:9;26339:466;26363:9;:16:::0;26359:20;::::1;26339:466;;;26429:7;-1:-1:-1::0;;;;;26413:23:0::1;:9;26423:1;26413:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26413:12:0::1;:23:::0;26409:377:::1;;26480:9;26490:16:::0;;:20:::1;::::0;26509:1:::1;::::0;26490:20:::1;:::i;:::-;26480:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;26465:9:::1;:12:::0;;-1:-1:-1;;;;;26480:31:0;;::::1;::::0;26475:1;;26465:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;26465:46:0::1;;;;;-1:-1:-1::0;;;;;26465:46:0::1;;;;;;26576:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;26557:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;26538:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;26613:7:::1;:16:::0;;;;;:20;;;26660:11:::1;:20:::0;;;:28;;-1:-1:-1;;26660:28:0::1;::::0;;26715:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26715:15:0;;;;;-1:-1:-1;;;;;;26715:15:0::1;::::0;;;;;26339:466:::1;25316:1522:::0;;:::o;26409:377::-:1;26381:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26339:466;;;;25316:1522:::0;;:::o;11481:115::-;11536:7;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;;4737:23;4947:30;:::i;:::-;11562:1;11551:12;11547:31;;11567:8;;;11547:31;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;;4737:23;4947:30;:::i;:::-;11579:14;;11481:115;:::o;13169:306::-;-1:-1:-1;;;;;13290:19:0;;13269:4;13290:19;;;:11;:19;;;;;;;;13310:10;13290:31;;;;;;;;-1:-1:-1;;13290:52:0;13286:126;;-1:-1:-1;;;;;13359:19:0;;;;;;:11;:19;;;;;;;;13379:10;13359:31;;;;;;;:41;;13394:6;;13359:19;:41;;13394:6;;13359:41;:::i;:::-;;;;-1:-1:-1;;13286:126:0;13431:36;13441:6;13449:9;13460:6;13431:9;:36::i;:::-;13424:43;13169:306;-1:-1:-1;;;;13169:306:0:o;24733:447::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;24868:7:::1;:14;24849:8;:15;:33;24841:67;;;::::0;-1:-1:-1;;;24841:67:0;;14647:2:1;24841:67:0::1;::::0;::::1;14629:21:1::0;14686:2;14666:18;;;14659:30;14725:23;14705:18;;;14698:51;14766:18;;24841:67:0::1;14445:345:1::0;24841:67:0::1;24924:8;24919:254;24942:8;:15;24938:1;:19;;;24919:254;;;25023:13;4904:1;25023:2;:13;:::i;:::-;25012:7;25020:1;25012:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24987:21;24997:10;24987:9;:21::i;:::-;:49;;24979:80;;;::::0;-1:-1:-1;;;24979:80:0;;14997:2:1;24979:80:0::1;::::0;::::1;14979:21:1::0;15036:2;15016:18;;;15009:30;15075:20;15055:18;;;15048:48;15113:18;;24979:80:0::1;14795:342:1::0;24979:80:0::1;25074:87;25091:10;25103:8;25112:1;25103:11;;;;;;;;;;:::i;:::-;;;;;;;4904:1;25127:2;:13;;;;:::i;:::-;25116:7;25124:1;25116:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25142:5;25149::::0;25156:4:::1;25074:16;:87::i;:::-;-1:-1:-1::0;24959:3:0;::::1;::::0;::::1;:::i;:::-;;;;24919:254;;15418:141:::0;15471:7;15528:21;15546:1;15528:9;:21::i;:::-;15510:15;5980:42;15510:9;:15::i;:::-;:39;;;;:::i;:::-;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;;4737:23;4947:30;:::i;:::-;15499:51;;;;:::i;26846:250::-;26912:7;26951;;26940;:18;;26932:73;;;;-1:-1:-1;;;26932:73:0;;15676:2:1;26932:73:0;;;15658:21:1;15715:2;15695:18;;;15688:30;15754:34;15734:18;;;15727:62;-1:-1:-1;;;15805:18:1;;;15798:40;15855:19;;26932:73:0;15474:406:1;26932:73:0;27016:19;27039:10;:8;:10::i;:::-;27016:33;-1:-1:-1;27067:21:0;27016:33;27067:7;:21;:::i;:::-;27060:28;26846:250;-1:-1:-1;;;26846:250:0:o;11602:112::-;11654:5;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;;4737:23;4947:30;:::i;:::-;11678:1;11667:12;11663:31;;11683:8;;;11663:31;-1:-1:-1;4904:1:0;;11602:112::o;16036:453::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;16144:14:::1;::::0;::::1;;16143:15;16135:45;;;::::0;-1:-1:-1;;;16135:45:0;;16309:2:1;16135:45:0::1;::::0;::::1;16291:21:1::0;16348:2;16328:18;;;16321:30;16387:19;16367:18;;;16360:47;16424:18;;16135:45:0::1;16107:341:1::0;16135:45:0::1;5693:3;16199:6;:21;;;;:65;;;;;5742:3;16241:7;:23;;;;16199:65;:117;;;;;5795:3;16285:11;:31;;;;16199:117;16191:170;;;::::0;-1:-1:-1;;;16191:170:0;;16655:2:1;16191:170:0::1;::::0;::::1;16637:21:1::0;16694:2;16674:18;;;16667:30;16733:25;16713:18;;;16706:53;16776:18;;16191:170:0::1;16453:347:1::0;16191:170:0::1;16372:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;16408:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;16446:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16036:453::o;15567:110::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;15636:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;15636:33:0;;-1:-1:-1;;;;;178:55:1;;;15636:33:0::1;::::0;::::1;160:74:1::0;15636:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;15636:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;10905:221:::0;10983:16;;-1:-1:-1;;;;;10983:16:0;10969:10;:30;10961:83;;;;-1:-1:-1;;;10961:83:0;;17007:2:1;10961:83:0;;;16989:21:1;17046:2;17026:18;;;17019:30;17085:34;17065:18;;;17058:62;-1:-1:-1;;;17136:18:1;;;17129:38;17184:19;;10961:83:0;16805:404:1;10961:83:0;11055:23;11075:1;11055:11;:23::i;:::-;11089:16;:29;;-1:-1:-1;;;;;;11089:29:0;;;10905:221::o;17407:189::-;17536:6;;17498:7;;5841:5;;17546:21;;17526:17;;-1:-1:-1;;;;;17536:6:0;17526:9;:17::i;:::-;:41;;;;:::i;:::-;17525:62;;;;:::i;18311:217::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;18441:3:::1;18415:22;:29;;18407:64;;;::::0;-1:-1:-1;;;18407:64:0;;17416:2:1;18407:64:0::1;::::0;::::1;17398:21:1::0;17455:2;17435:18;;;17428:30;17494:24;17474:18;;;17467:52;17536:18;;18407:64:0::1;17214:346:1::0;18407:64:0::1;18482:13;:38:::0;18311:217::o;9367:654::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;-1:-1:-1;;;;;9446:22:0;::::1;9438:96;;;::::0;-1:-1:-1;;;9438:96:0;;17767:2:1;9438:96:0::1;::::0;::::1;17749:21:1::0;17806:2;17786:18;;;17779:30;17845:34;17825:18;;;17818:62;17916:31;17896:18;;;17889:59;17965:19;;9438:96:0::1;17565:425:1::0;9438:96:0::1;-1:-1:-1::0;;;;;;;9553:16:0;::::1;::::0;9545:90:::1;;;::::0;-1:-1:-1;;;9545:90:0;;17767:2:1;9545:90:0::1;::::0;::::1;17749:21:1::0;17806:2;17786:18;;;17779:30;17845:34;17825:18;;;17818:62;17916:31;17896:18;;;17889:59;17965:19;;9545:90:0::1;17565:425:1::0;9545:90:0::1;9666:6;::::0;9646:34:::1;::::0;-1:-1:-1;;;;;9666:6:0::1;;9646:19;:34::i;:::-;9691:35;9711:8;9721:4;9691:19;:35::i;:::-;9761:6;::::0;9771:1:::1;::::0;9751:17:::1;::::0;-1:-1:-1;;;;;9761:6:0::1;9751:9;:17::i;:::-;:21;9747:127;;;9806:6;::::0;9789:73:::1;::::0;-1:-1:-1;;;;;9806:6:0::1;9814:8:::0;9824:17:::1;9806:6:::0;9824:9:::1;:17::i;9789:73::-;;9747:127;9913:6;::::0;;-1:-1:-1;;;;;9930:17:0;;::::1;-1:-1:-1::0;;;;;;9930:17:0;::::1;::::0;::::1;::::0;;;9963:40:::1;::::0;9913:6;::::1;::::0;9930:17;9913:6;;9963:40:::1;::::0;9894:16:::1;::::0;9963:40:::1;9427:594;9367:654:::0;:::o;15120:134::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;-1:-1:-1;;;;;15208:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15208:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15120:134::o;14607:222::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;14691:14:::1;::::0;::::1;;14690:15;14682:24;;;::::0;::::1;;14748:4;-1:-1:-1::0;;;;;14725:28:0;::::1;::::0;14717:55:::1;;;::::0;-1:-1:-1;;;14717:55:0;;18197:2:1;14717:55:0::1;::::0;::::1;18179:21:1::0;18236:2;18216:18;;;18209:30;18275:16;18255:18;;;18248:44;18309:18;;14717:55:0::1;17995:338:1::0;14717:55:0::1;14783:11;:38:::0;;-1:-1:-1;;;;;14783:38:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;14783:38:0;;::::1;::::0;;;::::1;::::0;;14607:222::o;12120:198::-;-1:-1:-1;;;;;12210:20:0;;12186:7;12210:20;;;:11;:20;;;;;;;;12206:49;;;-1:-1:-1;;;;;;12239:16:0;;;;;:7;:16;;;;;;;12120:198::o;12206:49::-;-1:-1:-1;;;;;12293:16:0;;:7;:16;;;;;;;;;;;12273:37;;:19;:37::i;10029:225::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;10108:6:::1;::::0;10088:34:::1;::::0;-1:-1:-1;;;;;10108:6:0::1;;10088:19;:34::i;:::-;10152:6;::::0;;-1:-1:-1;;;;;;10169:19:0;::::1;::::0;;;10204:42:::1;::::0;-1:-1:-1;;;;;10152:6:0;;::::1;::::0;10133:16:::1;::::0;10152:6;;10204:42:::1;::::0;10133:16;;10204:42:::1;10077:177;10029:225::o:0;17112:287::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;17243:11:::1;:42:::0;;-1:-1:-1;;;;;17243:42:0;;::::1;-1:-1:-1::0;;;;;;17243:42:0;;::::1;;::::0;;;17296:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17353:19;:38;;;;;::::1;::::0;::::1;;::::0;;17112:287::o;15846:182::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;15999:14:::1;:21:::0;;-1:-1:-1;;15999:21:0::1;16016:4;15999:21;::::0;;15846:182::o;14104:495::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;14186:7:::1;14181:411;;-1:-1:-1::0;;;;;14210:13:0;;::::1;14226:5;14210:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14210:21:0::1;::::0;;14246:11:::1;::::0;:34;;-1:-1:-1;;;14246:34:0;;::::1;::::0;::::1;18506:74:1::0;;;;18596:18;;;18589:50;;;;14246:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18479:18:1;;14246:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;14181:411;14317:17;::::0;:22;14313:135:::1;;14406:6;14386:17;;14368:15;:35;;;;:::i;:::-;:44;14360:72;;;::::0;-1:-1:-1;;;14360:72:0;;18852:2:1;14360:72:0::1;::::0;::::1;18834:21:1::0;18891:2;18871:18;;;18864:30;18930:17;18910:18;;;18903:45;18965:18;;14360:72:0::1;18650:339:1::0;14360:72:0::1;-1:-1:-1::0;;;;;14462:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14462:20:0::1;14478:4;14462:20:::0;;::::1;::::0;;;14517:15:::1;14497:17;:35:::0;14547:11:::1;::::0;:33;;-1:-1:-1;;;14547:33:0;;::::1;::::0;::::1;18506:74:1::0;;;;18596:18;;;18589:50;14547:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18479:18:1;;14547:33:0::1;18338:307:1::0;12986:175:0;9221:6;;13052:4;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;13101:9:::1;::::0;13069:62:::1;::::0;13086:4:::1;::::0;13101:9:::1;::::0;::::1;-1:-1:-1::0;;;;;13101:9:0::1;-1:-1:-1::0;;13069:8:0::1;:62::i;:::-;-1:-1:-1::0;13149:4:0::1;12986:175:::0;:::o;23900:635::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;23962:14:::1;::::0;::::1;;23961:15;23953:52;;;::::0;-1:-1:-1;;;23953:52:0;;19196:2:1;23953:52:0::1;::::0;::::1;19178:21:1::0;19235:2;19215:18;;;19208:30;19274:26;19254:18;;;19247:54;19318:18;;23953:52:0::1;18994:348:1::0;23953:52:0::1;24024:16;::::0;::::1;::::0;::::1;;;24016:53;;;::::0;-1:-1:-1;;;24016:53:0;;19549:2:1;24016:53:0::1;::::0;::::1;19531:21:1::0;19588:2;19568:18;;;19561:30;19627:26;19607:18;;;19600:54;19671:18;;24016:53:0::1;19347:348:1::0;24016:53:0::1;24092:11;::::0;;;::::1;-1:-1:-1::0;;;;;24092:11:0::1;24080:106;;24134:11;:40:::0;;-1:-1:-1;;;;;;24134:40:0::1;24168:4;24134:40:::0;::::1;;::::0;;24080:106:::1;24200:11;::::0;24222:6:::1;::::0;24200:87:::1;::::0;-1:-1:-1;;;24200:87:0;;-1:-1:-1;;;;;24222:6:0;;::::1;24200:87;::::0;::::1;19923:74:1::0;20045:10;24237:12:0::1;20033:23:1::0;20013:18;;;20006:51;20105:18;24259:15:0::1;20093:31:1::0;20073:18;;;20066:59;4904:1:0::1;20141:18:1::0;;;20134:45;24200:11:0;;;::::1;;::::0;:21:::1;::::0;19895:19:1;;24200:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24196:103:::0;24309:14:::1;:21:::0;;-1:-1:-1;;24309:21:0;;::::1;24326:4;24309:21;::::0;;;24341:23:::1;:31:::0;;;;::::1;::::0;;24410:6:::1;::::0;24426:5:::1;::::0;24400:17:::1;::::0;-1:-1:-1;;;;;24410:6:0::1;24400:9;:17::i;:::-;:22;::::0;24420:2:::1;24400:22;:::i;:::-;24399:32;;;;:::i;:::-;24383:13;:48:::0;24466:6:::1;::::0;24482:5:::1;::::0;24456:17:::1;::::0;-1:-1:-1;;;;;24466:6:0::1;24456:9;:17::i;:::-;:22;::::0;24476:2:::1;24456:22;:::i;:::-;24455:32;;;;:::i;:::-;24442:10;:45:::0;24512:15:::1;24498:11;:29:::0;23900:635::o;12326:165::-;12404:4;12421:40;12431:10;12443:9;12454:6;12421:9;:40::i;:::-;-1:-1:-1;12479:4:0;;12326:165;-1:-1:-1;;;12326:165:0:o;10415:482::-;10497:16;;-1:-1:-1;;;;;10497:16:0;10483:10;:30;10475:83;;;;-1:-1:-1;;;10475:83:0;;17007:2:1;10475:83:0;;;16989:21:1;17046:2;17026:18;;;17019:30;17085:34;17065:18;;;17058:62;-1:-1:-1;;;17136:18:1;;;17129:38;17184:19;;10475:83:0;16805:404:1;10475:83:0;10591:8;;-1:-1:-1;;;;;10591:8:0;10614:25;;10610:150;;-1:-1:-1;;;;;10656:30:0;;10689:5;10656:30;;;:17;:30;;;;;:38;;-1:-1:-1;;10656:38:0;;;10709:39;;10674:11;;10709:19;:39::i;:::-;10770:8;:22;;-1:-1:-1;;;;;;10770:22:0;-1:-1:-1;;;;;10770:22:0;;;;;;;;-1:-1:-1;10803:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;10803:37:0;-1:-1:-1;10803:37:0;;;;;;10851:38;;10770:22;;10851:19;:38::i;18536:263::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;18645:19:::1;:33:::0;;-1:-1:-1;;18645:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;18689:22:::1;:47:::0;;-1:-1:-1;;18689:47:0::1;::::0;::::1;;;::::0;;18752:39:::1;::::0;2812:41:1;;;18752:39:0::1;::::0;2800:2:1;2785:18;18752:39:0::1;;;;;;;;18536:263:::0;;:::o;13483:613::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;13563:16:::1;::::0;::::1;::::0;::::1;;;13562:17;13554:60;;;::::0;-1:-1:-1;;;13554:60:0;;20392:2:1;13554:60:0::1;::::0;::::1;20374:21:1::0;20431:2;20411:18;;;20404:30;20470:32;20450:18;;;20443:60;20520:18;;13554:60:0::1;20190:354:1::0;13554:60:0::1;13625:20;13658:9;13625:43;;13679:16;13709:10;-1:-1:-1::0;;;;;13709:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13698:40:0::1;;13747:4;13754:10;-1:-1:-1::0;;;;;13754:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13698:74;::::0;-1:-1:-1;;;;;;13698:74:0::1;::::0;;;;;;-1:-1:-1;;;;;21058:15:1;;;13698:74:0::1;::::0;::::1;21040:34:1::0;21110:15;;21090:18;;;21083:43;20952:18;;13698:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13679:93:::0;-1:-1:-1;;;;;;13787:22:0;::::1;13783:200;;13846:10;-1:-1:-1::0;;;;;13846:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13835:43:0::1;;13887:4;13894:10;-1:-1:-1::0;;;;;13894:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13835:77;::::0;-1:-1:-1;;;;;;13835:77:0::1;::::0;;;;;;-1:-1:-1;;;;;21058:15:1;;;13835:77:0::1;::::0;::::1;21040:34:1::0;21110:15;;21090:18;;;21083:43;20952:18;;13835:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13826:6;:86:::0;;-1:-1:-1;;;;;;13826:86:0::1;-1:-1:-1::0;;;;;13826:86:0;;;::::1;::::0;;;::::1;::::0;;13783:200:::1;;;13954:6;:17:::0;;-1:-1:-1;;;;;;13954:17:0::1;-1:-1:-1::0;;;;;13954:17:0;::::1;;::::0;;13783:200:::1;13993:9;:22:::0;;-1:-1:-1;;13993:22:0::1;;-1:-1:-1::0;;;;;13993:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;14026:62:::1;::::0;14043:4:::1;::::0;14058:9;;::::1;;-1:-1:-1::0;;14026:8:0::1;:62::i;24543:182::-:0;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;24610:16:::1;::::0;::::1;::::0;::::1;;;24609:17;24601:58;;;::::0;-1:-1:-1;;;24601:58:0;;21339:2:1;24601:58:0::1;::::0;::::1;21321:21:1::0;21378:2;21358:18;;;21351:30;21417;21397:18;;;21390:58;21465:18;;24601:58:0::1;21137:352:1::0;24601:58:0::1;24678:6;::::0;24670:47:::1;::::0;-1:-1:-1;;;;;24678:6:0;;::::1;::::0;24695:21:::1;24670:47:::0;::::1;;;::::0;24678:6:::1;24670:47:::0;24678:6;24670:47;24695:21;24678:6;24670:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24543:182::o:0;17604:699::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;17804:16;17784;4964:13:::1;4904:1;4964:2;:13;:::i;:::-;4947:30;::::0;4737:23:::1;4947:30;:::i;:::-;17774:26;;;;:::i;:::-;17773:47;;;;:::i;:::-;17757:13;:63:::0;17872:13;17855;4964::::1;4904:1;4964:2;:13;:::i;:::-;4947:30;::::0;4737:23:::1;4947:30;:::i;:::-;17845:23;;;;:::i;:::-;17844:41;;;;:::i;:::-;17831:10;:54:::0;;;17904:13:::1;::::0;:27:::1;;17896:73;;;::::0;-1:-1:-1;;;17896:73:0;;21696:2:1;17896:73:0::1;::::0;::::1;21678:21:1::0;21735:2;21715:18;;;21708:30;21774:34;21754:18;;;21747:62;-1:-1:-1;;;21825:18:1;;;21818:31;21866:19;;17896:73:0::1;21494:397:1::0;17896:73:0::1;18013:6;::::0;5841:5:::1;::::0;18003:17:::1;::::0;-1:-1:-1;;;;;18013:6:0::1;18003:9;:17::i;:::-;:23;::::0;18023:3:::1;18003:23;:::i;:::-;18002:44;;;;:::i;:::-;17988:10;;:58;;17980:106;;;::::0;-1:-1:-1;;;17980:106:0;;22098:2:1;17980:106:0::1;::::0;::::1;22080:21:1::0;22137:2;22117:18;;;22110:30;22176:34;22156:18;;;22149:62;-1:-1:-1;;;22227:18:1;;;22220:33;22270:19;;17980:106:0::1;21896:399:1::0;17980:106:0::1;18129:9;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;::::0;4737:23:::1;4947:30;:::i;:::-;18119:19;;;;:::i;:::-;18105:10;;:33;;18097:92;;;::::0;-1:-1:-1;;;18097:92:0;;22502:2:1;18097:92:0::1;::::0;::::1;22484:21:1::0;22541:2;22521:18;;;22514:30;22580:34;22560:18;;;22553:62;-1:-1:-1;;;22631:18:1;;;22624:44;22685:19;;18097:92:0::1;22300:410:1::0;18097:92:0::1;18235:9;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;::::0;4737:23:::1;4947:30;:::i;:::-;18225:19;;;;:::i;:::-;18208:13;;:36;;18200:95;;;::::0;-1:-1:-1;;;18200:95:0;;22502:2:1;18200:95:0::1;::::0;::::1;22484:21:1::0;22541:2;22521:18;;;22514:30;22580:34;22560:18;;;22553:62;-1:-1:-1;;;22631:18:1;;;22624:44;22685:19;;18200:95:0::1;22300:410:1::0;18200:95:0::1;17604:699:::0;;;;:::o;15262:148::-;9221:6;;-1:-1:-1;;;;;9221:6:0;9231:10;9221:20;9213:50;;;;-1:-1:-1;;;9213:50:0;;10168:2:1;9213:50:0;;;10150:21:1;10207:2;10187:18;;;10180:30;-1:-1:-1;;;;;;;;;;;10226:18:1;;;10219:47;10283:18;;9213:50:0;9966:341:1;9213:50:0;-1:-1:-1;;;;;15358:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15358:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15262:148::o;12668:310::-;-1:-1:-1;;;;;12763:20:0;;12755:52;;;;-1:-1:-1;;;12755:52:0;;22917:2:1;12755:52:0;;;22899:21:1;22956:2;22936:18;;;22929:30;-1:-1:-1;;;22975:18:1;;;22968:49;23034:18;;12755:52:0;22715:343:1;12755:52:0;-1:-1:-1;;;;;12826:21:0;;12818:53;;;;-1:-1:-1;;;12818:53:0;;22917:2:1;12818:53:0;;;22899:21:1;22956:2;22936:18;;;22929:30;-1:-1:-1;;;22975:18:1;;;22968:49;23034:18;;12818:53:0;22715:343:1;12818:53:0;-1:-1:-1;;;;;12884:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12937:33;;391:25:1;;;12937:33:0;;364:18:1;12937:33:0;;;;;;;12668:310;;;:::o;30306:1155::-;30385:7;;30348;;;4964:13;4904:1;4964:2;:13;:::i;:::-;4947:30;;4737:23;4947:30;:::i;:::-;30524:6;;-1:-1:-1;;;;;30524:6:0;30438:15;30512:19;;;:11;:19;;;;;;30403:24;;-1:-1:-1;30456:6:0;;30403:24;;30512:19;;30508:437;;;30575:6;;-1:-1:-1;;;;;30575:6:0;;;30548:16;30567:15;;;;;;;;;;;;30575:6;30616:15;;;;;;;30657:11;;30567:15;;30616;;30657:11;;;;30681:4;30649:37;:119;;;;;30709:13;30726:2;30709:19;:58;;;;30749:13;30766:1;30749:18;30709:58;30646:137;;;30772:8;;;30646:137;30812:7;30801:8;:18;:40;;;;30834:7;30823:8;:18;30801:40;30797:68;;;30850:15;30859:6;30850;:15;:::i;:::-;30843:22;;;;;;;;30306:1155;:::o;30797:68::-;30880:19;30891:8;30880:19;;:::i;:::-;;-1:-1:-1;30914:19:0;30925:8;30914:19;;:::i;:::-;;;30533:412;;30508:437;30959:9;:16;:20;30955:400;;31001:7;30996:348;31018:9;:16;31014:20;;;;30996:348;;;31060:14;31077:7;:21;31085:9;31095:1;31085:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31085:12:0;31077:21;;;;;;;;;;;;;31142:9;:12;;31077:21;;-1:-1:-1;31085:12:0;;;;31142:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31142:12:0;31134:21;;;;;;;;;;;;;;-1:-1:-1;31178:16:0;;;;:36;;;31207:7;31198:6;:16;31178:36;31174:64;;;31223:15;31232:6;31223;:15;:::i;:::-;31216:22;;;;;;;;;30306:1155;:::o;31174:64::-;31267:16;31277:6;31267:7;:16;:::i;:::-;31257:26;-1:-1:-1;31312:16:0;31322:6;31312:7;:16;:::i;:::-;31302:26;;31041:303;;31036:3;;;;;:::i;:::-;;;;30996:348;;;;30955:400;31379:15;31388:6;31379;:15;:::i;:::-;31369:7;:25;31365:53;;;31403:15;31412:6;31403;:15;:::i;:::-;31396:22;;;;;;30306:1155;:::o;31365:53::-;31436:17;31446:7;31436;:17;:::i;20230:1553::-;20309:4;-1:-1:-1;;;;;20334:18:0;;20326:68;;;;-1:-1:-1;;;20326:68:0;;23445:2:1;20326:68:0;;;23427:21:1;23484:2;23464:18;;;23457:30;23523:34;23503:18;;;23496:62;-1:-1:-1;;;23574:18:1;;;23567:35;23619:19;;20326:68:0;23243:401:1;20326:68:0;-1:-1:-1;;;;;20413:16:0;;20405:64;;;;-1:-1:-1;;;20405:64:0;;23851:2:1;20405:64:0;;;23833:21:1;23890:2;23870:18;;;23863:30;23929:34;23909:18;;;23902:62;-1:-1:-1;;;23980:18:1;;;23973:33;24023:19;;20405:64:0;23649:399:1;20405:64:0;20497:1;20488:6;:10;20480:64;;;;-1:-1:-1;;;20480:64:0;;24255:2:1;20480:64:0;;;24237:21:1;24294:2;24274:18;;;24267:30;24333:34;24313:18;;;24306:62;-1:-1:-1;;;24384:18:1;;;24377:39;24433:19;;20480:64:0;24053:405:1;20480:64:0;-1:-1:-1;;;;;20643:13:0;;20555:8;20643:13;;;:7;:13;;;;;;20555:8;;;;20643:13;;20639:162;;;20679:4;20673:10;;20639:162;;;-1:-1:-1;;;;;20705:11:0;;;;;;:7;:11;;;;;;;;20701:100;;;20740:4;20733:11;;20701:100;;;-1:-1:-1;20785:4:0;20701:100;20815:20;20826:4;20832:2;20815:10;:20::i;:::-;20811:141;;;20856:14;;;;20852:89;;20891:34;;-1:-1:-1;;;20891:34:0;;24665:2:1;20891:34:0;;;24647:21:1;24704:2;24684:18;;;24677:30;24743:26;24723:18;;;24716:54;24787:18;;20891:34:0;24463:348:1;20852:89:0;20968:4;20964:742;;;20994:6;;;;20989:706;;21025:19;;;;;;;:64;;;;-1:-1:-1;;;;;;21069:20:0;;;;;;:16;:20;;;;;;;;21068:21;21025:64;:111;;;;-1:-1:-1;;;;;;21114:22:0;;;;;;:16;:22;;;;;;;;21113:23;21025:111;21021:659;;;21179:28;21210:24;21228:4;21210:9;:24::i;:::-;21179:55;;21285:13;;21261:20;:37;21257:404;;21345:10;;21386:22;;;;21382:97;;;21443:13;;21433:6;;5841:5;;21443:13;21423:17;;-1:-1:-1;;;;;21433:6:0;21423:9;:17::i;:::-;:33;;;;:::i;:::-;21422:54;;;;:::i;:::-;21412:64;;21382:97;21533:7;21509:20;:31;21505:72;;21567:7;21544:30;;21505:72;21603:34;21616:20;21603:12;:34::i;:::-;21300:361;21257:404;21156:524;21021:659;21723:52;21740:4;21746:2;21750:6;21758:3;21763:4;21769:5;21723:16;:52::i;:::-;21716:59;20230:1553;-1:-1:-1;;;;;;;20230:1553:0:o;27337:1161::-;-1:-1:-1;;;;;27508:25:0;;27457:4;27508:25;;;:19;:25;;;;;;27489:4;;27508:25;;;:52;;-1:-1:-1;;;;;;27537:23:0;;;;;;:19;:23;;;;;;;;27508:52;27504:99;;;-1:-1:-1;27586:5:0;27504:99;27615:25;27643:55;27653:4;27659:2;27663:7;27672;27681:3;27686:4;27692:5;27643:9;:55::i;:::-;27728:14;;;;-1:-1:-1;;;;;27711:13:0;;:7;:13;;;;;;;;;;:31;;27615:83;;-1:-1:-1;27728:14:0;;27711:31;;27728:14;;27711:31;:::i;:::-;;;;-1:-1:-1;;27768:22:0;;;;-1:-1:-1;;;;;27753:11:0;;:7;:11;;;;;;;;;;:37;;:11;;:7;:37;;27768:22;;27753:37;:::i;:::-;;;;-1:-1:-1;;;;;;;27807:17:0;;;;;;:11;:17;;;;;;;;27803:89;;;-1:-1:-1;;;;;27857:13:0;;;;;;:7;:13;;;;;;:23;;27873:7;;27857:23;:::i;:::-;-1:-1:-1;;;;;27841:13:0;;;;;;:7;:13;;;;;:39;27803:89;-1:-1:-1;;;;;27906:15:0;;;;;;:11;:15;;;;;;;;27902:98;;;27966:22;;-1:-1:-1;;;;;27952:11:0;;27966:22;27952:11;;;:7;:11;;;;;;:36;;27966:22;27952:36;:::i;:::-;-1:-1:-1;;;;;27938:11:0;;;;;;:7;:11;;;;;:50;27902:98;28030:1;28016:6;:11;;;:15;:34;;;;28049:1;28035:6;:11;;;:15;28016:34;28012:89;;;28078:6;:11;;;28067:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;28012:89:0;28131:2;-1:-1:-1;;;;;28116:42:0;28125:4;-1:-1:-1;;;;;28116:42:0;;28135:6;:22;;;28116:42;;;;391:25:1;;379:2;364:18;;245:177;28116:42:0;;;;;;;;28174:16;;;;;;;28169:298;;28207:28;28226:4;28232:2;28207:18;:28::i;:::-;28255:16;;;;;;;28254:17;:41;;;;;28275:20;28286:4;28292:2;28275:10;:20::i;:::-;28254:77;;;;-1:-1:-1;;;;;;28300:31:0;;;;;;:25;:31;;;;;;;;28299:32;28254:77;:111;;;;-1:-1:-1;;;;;;28336:29:0;;;;;;:25;:29;;;;;;;;28335:30;28254:111;:121;;;;;28370:5;28369:6;28254:121;28250:206;;;28396:44;;-1:-1:-1;;;28396:44:0;;25018:2:1;28396:44:0;;;25000:21:1;25057:2;25037:18;;;25030:30;25096:34;25076:18;;;25069:62;-1:-1:-1;;;25147:18:1;;;25140:32;25189:19;;28396:44:0;24816:398:1;28250:206:0;-1:-1:-1;28486:4:0;;27337:1161;-1:-1:-1;;;;;;;;27337:1161:0:o;19776:446::-;19877:6;;19845:4;;-1:-1:-1;;;;;19869:14:0;;;19877:6;;19869:14;;;;:43;;-1:-1:-1;19906:6:0;;-1:-1:-1;;;;;19900:12:0;;;19906:6;;19900:12;;19869:43;:79;;;;-1:-1:-1;19942:6:0;;-1:-1:-1;;;;;19942:6:0;19929:9;:19;;19869:79;:118;;;;-1:-1:-1;;;;;;19966:21:0;;;;;;:17;:21;;;;;;;;19965:22;19869:118;:159;;;;-1:-1:-1;;;;;;20005:23:0;;;;;;:17;:23;;;;;;;;20004:24;19869:159;:186;;;;-1:-1:-1;;;;;;20045:10:0;;5980:42;20045:10;;19869:186;:219;;;;-1:-1:-1;;;;;;20072:16:0;;;;19869:219;:257;;;;-1:-1:-1;;;;;;20105:21:0;;20121:4;20105:21;;19869:257;:302;;;;-1:-1:-1;20159:11:0;;-1:-1:-1;;;;;20143:28:0;;;20159:11;;;;;20143:28;;19869:302;:345;;;;-1:-1:-1;;20202:11:0;;;;;-1:-1:-1;;;;;20202:11:0;;;20188:26;;;;;19862:352;-1:-1:-1;19776:446:0:o;21791:1530::-;6979:6;:13;;-1:-1:-1;;6979:13:0;6988:4;6979:13;;;21874:30:::1;::::0;;::::1;::::0;::::1;::::0;;21897:7:::1;21874:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21874:30:0;::::1;::::0;;::::1;::::0;;;;;;6979:6;21919:21;21915:60:::1;;21957:7;;;21915:60;22011:4;21991:26;::::0;;;:11:::1;:26;::::0;;;;;;;22026:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22026:9:0::1;21991:46:::0;;;;;;;;-1:-1:-1;;21991:67:0::1;21987:166;;22095:4;22075:26;::::0;;;:11:::1;:26;::::0;;;;;;;22110:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22110:9:0::1;22075:46:::0;;;;;;;-1:-1:-1;;22075:66:0;;21987:166:::1;22197:16;::::0;;22211:1:::1;22197:16:::0;;;;;::::1;::::0;;22173:21:::1;::::0;22197:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22197:16:0::1;22173:40;;22242:4;22224;22229:1;22224:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;22224:23:0::1;;;-1:-1:-1::0;;;;;22224:23:0::1;;;::::0;::::1;22268:9;;;;;;;;;-1:-1:-1::0;;;;;22268:9:0::1;-1:-1:-1::0;;;;;22268:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22258:4;22263:1;22258:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22258:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22301:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;22301:199:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;22376:20;;22411:1:::1;::::0;22427:4;;22454::::1;::::0;22474:15:::1;::::0;22301:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22297:246;;22525:7;;;;22297:246;22555:18;22576:21;22555:42;;22608:12;22631:26:::0;22696:6:::1;:16;;;22660:52;;22674:6;:18;;;22661:31;;:10;:31;;;;:::i;:::-;22660:52;;;;:::i;:::-;22631:81;;22723:22;22780:6;:16;;;22748:48;;22762:6;:14;;;22749:27;;:10;:27;;;;:::i;:::-;22748:48;;;;:::i;:::-;22723:73:::0;-1:-1:-1;22807:24:0::1;22848:35;22723:73:::0;22848:18;:35:::1;:::i;:::-;22834:50;::::0;:10;:50:::1;:::i;:::-;22899:16;::::0;::::1;::::0;22807:77;;-1:-1:-1;22899:20:0::1;;::::0;22895:133:::1;;22949:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;22949:21:0;;::::1;::::0;23006:5:::1;::::0;22983:16;;22949:67:::1;::::0;;;22983:16;22949:21;23006:5;22949:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22936:80:0;;-1:-1:-1;;22895:133:0::1;23042:18;::::0;::::1;::::0;:22:::1;;::::0;23038:139:::1;;23094:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;23094:23:0;;::::1;::::0;23155:5:::1;::::0;23130:18;;23094:71:::1;::::0;;;23130:18;23094:23;23155:5;23094:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23081:84:0;;-1:-1:-1;;23038:139:0::1;23191:14;::::0;::::1;::::0;:18:::1;;::::0;23187:127:::1;;23239:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;23239:19:0;;::::1;::::0;23292:5:::1;::::0;23271:14;;23239:63:::1;::::0;;;23271:14;23239:19;23292:5;23239:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23226:76:0;;-1:-1:-1;;23187:127:0::1;21863:1458;;;;;;;7003:1;-1:-1:-1::0;7015:6:0;:14;;-1:-1:-1;;7015:14:0;;;21791:1530::o;28506:1792::-;28633:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28633:18:0;28664:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28664:25:0;28700:30;;;;;;;;28723:7;28700:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28700:30:0;;;;;;;;;28762:10;:8;:10::i;:::-;28741:18;;;:31;;;28802:28;;:7;:28;:::i;:::-;28785:14;;;:45;28847:20;28858:4;28864:2;28847:10;:20::i;:::-;28843:229;;;28902:11;;:40;;-1:-1:-1;;;28902:40:0;;-1:-1:-1;;;;;26741:15:1;;;28902:40:0;;;26723:34:1;26793:15;;;26773:18;;;26766:43;26825:18;;;26818:34;;;28871:12:0;;28902:11;;;;;:21;;26635:18:1;;28902:40:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28902:40:0;;;;;;;;-1:-1:-1;;28902:40:0;;;;;;;;;;;;:::i;:::-;;;28898:123;;29010:8;;;28898:123;28993:5;-1:-1:-1;29039:7:0;29035:26;;29050:8;;;29035:26;28869:203;28843:229;29088:7;29084:775;;;29112:18;29151:3;29147:229;;;-1:-1:-1;29188:9:0;:16;;;29147:229;;;29230:4;29226:150;;;-1:-1:-1;29268:9:0;:17;;;;;;29226:150;;;-1:-1:-1;29339:9:0;:21;;;;;;29226:150;29392:17;5841:5;29413:20;29423:10;29413:7;:20;:::i;:::-;29412:41;;;;:::i;:::-;29392:61;;29468:13;29503:6;:17;;;29484:6;:16;;;:36;;;;:::i;:::-;29562:17;;29468:52;;;;;-1:-1:-1;29468:52:0;;29550:29;;;:9;:29;:::i;:::-;29549:39;;;;:::i;:::-;29535:11;;;:53;;;29618:23;;:9;:23;:::i;:::-;29603:12;;;:38;;;29692:11;;;;:26;;29603:38;29692:26;:::i;:::-;29681:38;;:7;:38;:::i;:::-;29656:63;;29764:18;;;;29750:11;;;;:32;;29764:18;29750:32;:::i;:::-;29736:11;;;:46;-1:-1:-1;29084:775:0;;-1:-1:-1;;29084:775:0;;29815:32;;;29084:775;29875:12;;;;:16;29871:290;;29949:6;:18;;;29934:6;:12;;;:33;;;;:::i;:::-;29924:4;29908:7;:22;;;;;;;;;;:59;;:22;;:7;:59;;;;;:::i;:::-;;;;-1:-1:-1;;30006:4:0;29986:26;;;;:11;:26;;;;;;;;29982:105;;;30059:12;;;;;30049:4;30033:22;;;;:7;:22;;;;;:38;;30059:12;;30033:22;;:38;;30059:12;;30033:38;:::i;:::-;;;;-1:-1:-1;;29982:105:0;30129:4;-1:-1:-1;;;;;30106:43:0;30115:4;-1:-1:-1;;;;;30106:43:0;;30136:6;:12;;;30106:43;;;;391:25:1;;379:2;364:18;;245:177;30106:43:0;;;;;;;;29871:290;30246:6;:18;;;30231:6;:12;;;:33;;;;:::i;:::-;30216:6;:11;;;:49;;;;:::i;:::-;30198:6;:14;;;:68;;;;:::i;:::-;30173:22;;;:93;-1:-1:-1;30173:22:0;28506:1792;-1:-1:-1;;;;;;;;28506:1792:0:o;23329:563::-;23412:16;;;;;;;23411:17;23403:65;;;;-1:-1:-1;;;23403:65:0;;27315:2:1;23403:65:0;;;27297:21:1;27354:2;27334:18;;;27327:30;27393:34;27373:18;;;27366:62;-1:-1:-1;;;27444:18:1;;;27437:33;27487:19;;23403:65:0;27113:399:1;23403:65:0;23484:20;23495:4;23501:2;23484:10;:20::i;:::-;23483:21;:37;;;;-1:-1:-1;23514:6:0;;-1:-1:-1;;;;;23508:12:0;;;23514:6;;23508:12;23483:37;23479:406;;;-1:-1:-1;;;;;23537:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;23537:30:0;;;23563:4;23537:30;;;;;;23582:19;:25;;;;;:32;;;;;;;;;;23629:16;:23;;-1:-1:-1;;23629:23:0;23537:30;23629:23;;;;;23679:11;;;;23667:114;;23725:11;:40;;-1:-1:-1;;;;;;23725:40:0;23759:4;23725:40;;;;;23667:114;23795:19;:26;;-1:-1:-1;;23795:26:0;;;;;23841:32;;-1:-1:-1;2812:41:1;;23841:32:0;;2800:2:1;2785:18;23841:32:0;2672:187:1;427:118;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:548::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1585:3;1770:1;1765:2;1756:6;1745:9;1741:22;1737:31;1730:42;1840:2;1833;1829:7;1824:2;1816:6;1812:15;1808:29;1797:9;1793:45;1789:54;1781:62;;;;1301:548;;;;:::o;1854:159::-;1921:20;;1981:6;1970:18;;1960:29;;1950:57;;2003:1;2000;1993:12;1950:57;1854:159;;;:::o;2018:401::-;2100:6;2108;2116;2124;2177:3;2165:9;2156:7;2152:23;2148:33;2145:53;;;2194:1;2191;2184:12;2145:53;2217:28;2235:9;2217:28;:::i;:::-;2207:38;;2264:37;2297:2;2286:9;2282:18;2264:37;:::i;:::-;2254:47;;2320:37;2353:2;2342:9;2338:18;2320:37;:::i;:::-;2310:47;;2376:37;2409:2;2398:9;2394:18;2376:37;:::i;:::-;2366:47;;2018:401;;;;;;;:::o;2864:154::-;-1:-1:-1;;;;;2943:5:1;2939:54;2932:5;2929:65;2919:93;;3008:1;3005;2998:12;3023:315;3091:6;3099;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;3207:9;3194:23;3226:31;3251:5;3226:31;:::i;:::-;3276:5;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3023:315:1:o;3343:247::-;3402:6;3455:2;3443:9;3434:7;3430:23;3426:32;3423:52;;;3471:1;3468;3461:12;3423:52;3510:9;3497:23;3529:31;3554:5;3529:31;:::i;3595:388::-;3663:6;3671;3724:2;3712:9;3703:7;3699:23;3695:32;3692:52;;;3740:1;3737;3730:12;3692:52;3779:9;3766:23;3798:31;3823:5;3798:31;:::i;:::-;3848:5;-1:-1:-1;3905:2:1;3890:18;;3877:32;3918:33;3877:32;3918:33;:::i;3988:382::-;4053:6;4061;4114:2;4102:9;4093:7;4089:23;4085:32;4082:52;;;4130:1;4127;4120:12;4082:52;4169:9;4156:23;4188:31;4213:5;4188:31;:::i;4375:456::-;4452:6;4460;4468;4521:2;4509:9;4500:7;4496:23;4492:32;4489:52;;;4537:1;4534;4527:12;4489:52;4576:9;4563:23;4595:31;4620:5;4595:31;:::i;:::-;4645:5;-1:-1:-1;4702:2:1;4687:18;;4674:32;4715:33;4674:32;4715:33;:::i;:::-;4375:456;;4767:7;;-1:-1:-1;;;4821:2:1;4806:18;;;;4793:32;;4375:456::o;4836:127::-;4897:10;4892:3;4888:20;4885:1;4878:31;4928:4;4925:1;4918:15;4952:4;4949:1;4942:15;4968:275;5039:2;5033:9;5104:2;5085:13;;-1:-1:-1;;5081:27:1;5069:40;;5139:18;5124:34;;5160:22;;;5121:62;5118:88;;;5186:18;;:::i;:::-;5222:2;5215:22;4968:275;;-1:-1:-1;4968:275:1:o;5248:183::-;5308:4;5341:18;5333:6;5330:30;5327:56;;;5363:18;;:::i;:::-;-1:-1:-1;5408:1:1;5404:14;5420:4;5400:25;;5248:183::o;5436:662::-;5490:5;5543:3;5536:4;5528:6;5524:17;5520:27;5510:55;;5561:1;5558;5551:12;5510:55;5597:6;5584:20;5623:4;5647:60;5663:43;5703:2;5663:43;:::i;:::-;5647:60;:::i;:::-;5741:15;;;5827:1;5823:10;;;;5811:23;;5807:32;;;5772:12;;;;5851:15;;;5848:35;;;5879:1;5876;5869:12;5848:35;5915:2;5907:6;5903:15;5927:142;5943:6;5938:3;5935:15;5927:142;;;6009:17;;5997:30;;6047:12;;;;5960;;5927:142;;;-1:-1:-1;6087:5:1;5436:662;-1:-1:-1;;;;;;5436:662:1:o;6103:1215::-;6221:6;6229;6282:2;6270:9;6261:7;6257:23;6253:32;6250:52;;;6298:1;6295;6288:12;6250:52;6338:9;6325:23;6367:18;6408:2;6400:6;6397:14;6394:34;;;6424:1;6421;6414:12;6394:34;6462:6;6451:9;6447:22;6437:32;;6507:7;6500:4;6496:2;6492:13;6488:27;6478:55;;6529:1;6526;6519:12;6478:55;6565:2;6552:16;6587:4;6611:60;6627:43;6667:2;6627:43;:::i;6611:60::-;6705:15;;;6787:1;6783:10;;;;6775:19;;6771:28;;;6736:12;;;;6811:19;;;6808:39;;;6843:1;6840;6833:12;6808:39;6867:11;;;;6887:217;6903:6;6898:3;6895:15;6887:217;;;6983:3;6970:17;7000:31;7025:5;7000:31;:::i;:::-;7044:18;;6920:12;;;;7082;;;;6887:217;;;7123:5;-1:-1:-1;;7166:18:1;;7153:32;;-1:-1:-1;;7197:16:1;;;7194:36;;;7226:1;7223;7216:12;7194:36;;7249:63;7304:7;7293:8;7282:9;7278:24;7249:63;:::i;:::-;7239:73;;;6103:1215;;;;;:::o;7323:180::-;7382:6;7435:2;7423:9;7414:7;7410:23;7406:32;7403:52;;;7451:1;7448;7441:12;7403:52;-1:-1:-1;7474:23:1;;7323:180;-1:-1:-1;7323:180:1:o;7697:328::-;7771:6;7779;7787;7840:2;7828:9;7819:7;7815:23;7811:32;7808:52;;;7856:1;7853;7846:12;7808:52;7879:28;7897:9;7879:28;:::i;:::-;7869:38;;7926:37;7959:2;7948:9;7944:18;7926:37;:::i;:::-;7916:47;;7982:37;8015:2;8004:9;8000:18;7982:37;:::i;:::-;7972:47;;7697:328;;;;;:::o;8030:553::-;8131:6;8139;8147;8200:2;8188:9;8179:7;8175:23;8171:32;8168:52;;;8216:1;8213;8206:12;8168:52;8255:9;8242:23;8274:31;8299:5;8274:31;:::i;:::-;8324:5;-1:-1:-1;8381:2:1;8366:18;;8353:32;8394:33;8353:32;8394:33;:::i;:::-;8446:7;-1:-1:-1;8505:2:1;8490:18;;8477:32;8518:33;8477:32;8518:33;:::i;:::-;8570:7;8560:17;;;8030:553;;;;;:::o;9576:385::-;9662:6;9670;9678;9686;9739:3;9727:9;9718:7;9714:23;9710:33;9707:53;;;9756:1;9753;9746:12;9707:53;-1:-1:-1;;9779:23:1;;;9849:2;9834:18;;9821:32;;-1:-1:-1;9900:2:1;9885:18;;9872:32;;9951:2;9936:18;9923:32;;-1:-1:-1;9576:385:1;-1:-1:-1;9576:385:1:o;10585:127::-;10646:10;10641:3;10637:20;10634:1;10627:31;10677:4;10674:1;10667:15;10701:4;10698:1;10691:15;10717:168;10784:6;10810:10;;;10822;;;10806:27;;10845:11;;;10842:37;;;10859:18;;:::i;:::-;10842:37;10717:168;;;;:::o;12352:::-;12425:9;;;12456;;12473:15;;;12467:22;;12453:37;12443:71;;12494:18;;:::i;12525:127::-;12586:10;12581:3;12577:20;12574:1;12567:31;12617:4;12614:1;12607:15;12641:4;12638:1;12631:15;12657:127;12718:10;12713:3;12709:20;12706:1;12699:31;12749:4;12746:1;12739:15;12773:4;12770:1;12763:15;12789:128;12856:9;;;12877:11;;;12874:37;;;12891:18;;:::i;12922:135::-;12961:3;12982:17;;;12979:43;;13002:18;;:::i;:::-;-1:-1:-1;13049:1:1;13038:13;;12922:135::o;13062:422::-;13151:1;13194:5;13151:1;13208:270;13229:7;13219:8;13216:21;13208:270;;;13288:4;13284:1;13280:6;13276:17;13270:4;13267:27;13264:53;;;13297:18;;:::i;:::-;13347:7;13337:8;13333:22;13330:55;;;13367:16;;;;13330:55;13446:22;;;;13406:15;;;;13208:270;;;13212:3;13062:422;;;;;:::o;13489:806::-;13538:5;13568:8;13558:80;;-1:-1:-1;13609:1:1;13623:5;;13558:80;13657:4;13647:76;;-1:-1:-1;13694:1:1;13708:5;;13647:76;13739:4;13757:1;13752:59;;;;13825:1;13820:130;;;;13732:218;;13752:59;13782:1;13773:10;;13796:5;;;13820:130;13857:3;13847:8;13844:17;13841:43;;;13864:18;;:::i;:::-;-1:-1:-1;;13920:1:1;13906:16;;13935:5;;13732:218;;14034:2;14024:8;14021:16;14015:3;14009:4;14006:13;14002:36;13996:2;13986:8;13983:16;13978:2;13972:4;13969:12;13965:35;13962:77;13959:159;;;-1:-1:-1;14071:19:1;;;14103:5;;13959:159;14150:34;14175:8;14169:4;14150:34;:::i;:::-;14220:6;14216:1;14212:6;14208:19;14199:7;14196:32;14193:58;;;14231:18;;:::i;:::-;14269:20;;13489:806;-1:-1:-1;;;13489:806:1:o;14300:140::-;14358:5;14387:47;14428:4;14418:8;14414:19;14408:4;14387:47;:::i;15142:197::-;15180:3;15208:6;15249:2;15242:5;15238:14;15276:2;15267:7;15264:15;15261:41;;15282:18;;:::i;:::-;15331:1;15318:15;;15142:197;-1:-1:-1;;;15142:197:1:o;15344:125::-;15409:9;;;15430:10;;;15427:36;;;15443:18;;:::i;15885:217::-;15925:1;15951;15941:132;;15995:10;15990:3;15986:20;15983:1;15976:31;16030:4;16027:1;16020:15;16058:4;16055:1;16048:15;15941:132;-1:-1:-1;16087:9:1;;15885:217::o;20549:251::-;20619:6;20672:2;20660:9;20651:7;20647:23;20643:32;20640:52;;;20688:1;20685;20678:12;20640:52;20720:9;20714:16;20739:31;20764:5;20739:31;:::i;23063:175::-;23100:3;23144:4;23137:5;23133:16;23173:4;23164:7;23161:17;23158:43;;23181:18;;:::i;:::-;23230:1;23217:15;;23063:175;-1:-1:-1;;23063:175:1:o;25219:1026::-;25481:4;25529:3;25518:9;25514:19;25560:6;25549:9;25542:25;25586:2;25624:6;25619:2;25608:9;25604:18;25597:34;25667:3;25662:2;25651:9;25647:18;25640:31;25691:6;25726;25720:13;25757:6;25749;25742:22;25795:3;25784:9;25780:19;25773:26;;25834:2;25826:6;25822:15;25808:29;;25855:1;25865:218;25879:6;25876:1;25873:13;25865:218;;;25944:13;;-1:-1:-1;;;;;25940:62:1;25928:75;;26058:15;;;;26023:12;;;;25901:1;25894:9;25865:218;;;-1:-1:-1;;;;;;;26139:55:1;;;;26134:2;26119:18;;26112:83;-1:-1:-1;;;26226:3:1;26211:19;26204:35;26100:3;25219:1026;-1:-1:-1;;;25219:1026:1:o;26863:245::-;26930:6;26983:2;26971:9;26962:7;26958:23;26954:32;26951:52;;;26999:1;26996;26989:12;26951:52;27031:9;27025:16;27050:28;27072:5;27050:28;:::i

Swarm Source

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