ETH Price: $2,291.44 (+1.20%)

Token

Meme Casino (MEMEC)
 

Overview

Max Total Supply

1,000,000 MEMEC

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
831.814695492106587104 MEMEC

Value
$0.00
0xa2057c495c46e1485f719d84098fc52d0d198083
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:
MemeCasino

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 Initializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
}

contract MemeCasino 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 = 1_000_000;
    string constant private _name = "Meme Casino";
    string constant private _symbol = "MEMEC";
    uint8 constant private _decimals = 18;
    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 jackpot;
        uint16 burn;
        uint16 marketing;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        reflection: 50,
        development: 150,
        jackpot: 200,
        burn: 50,
        marketing: 50,
        totalSwap: 400
    });

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x7D169b78AF3E8509b6F0995f295eB1a60AB478b6),
        development: payable(0xE6C4D85bFABD83396de8D6FC2B3D1Dc74e22100A),
        jackpot: payable(0xFF88EA021050C07080C24FfcE074323F9e471581)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    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;
        _rOwned[_owner] = _rTotal;
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

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

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

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

    address private _owner;

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

    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot renounce until trading has been enabled.");
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

    function setInitializer(address init) public onlyOwner {
        require(!_hasLiqBeenAdded);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (address router, address constructorLP) {
            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; 
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch { revert(); }
    }

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

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

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

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

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

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

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

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

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

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

    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 (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 jackpotBalance = (amtBalance * ratios.jackpot) / ratios.totalSwap;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (developmentBalance + jackpotBalance);
        if (ratios.jackpot > 0) {
            (success,) = _taxWallets.jackpot.call{value: jackpotBalance, gas: 55000}("");
        }
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(initializer) == address(0)){
                initializer = Initializer(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
            try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
            try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
                swapThreshold = initThreshold;
                swapAmount = initSwapAmount;
            } catch {}
            allowedPresaleExclusion = false;
            launchStamp = block.timestamp;
        }
    }

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

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

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

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

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

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

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

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }
        emit Transfer(from, to, values.tTransferAmount);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
        }

        return true;
    }

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

        values.rAmount = tAmount * values.currentRate;

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

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

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

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

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

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rTotal = _rTotal;
        uint256 tTotal = _tTotal;
        uint256 rSupply = rTotal;
        uint256 tSupply = tTotal;
        if (_isExcluded[lpPair]) {
            uint256 rLPOwned = _rOwned[lpPair];
            uint256 tLPOwned = _tOwned[lpPair];
            if (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":"jackpot","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"jackpot","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":[{"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":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","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":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","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":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"jackpot","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"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"}]

60806040526000600355600c805460ff19166001179055620000246012600a62000448565b6200003390620f424062000460565b62000041906000196200047a565b6200004f906000196200049d565b600d81905560408051606080820183526101f48083526020808401919091526000928401839052600e80546301f401f465ffffffffffff19909116179055835160c081018552603280825260968284015260c882870152818401819052608082015261019060a090910152600f80546001600160601b0319166b01900032003200c80096003217905583519182018452737d169b78af3e8509b6f0995f295eb1a60ab478b680835273e6c4d85bfabd83396de8d6fc2b3d1dc74e22100a83830181905273ff88ea021050c07080c24ffce074323f9e471581938601849052601280546001600160a01b031990811690931781556013805484169092179091556014805483169094179093556015805461ff0019169055600a6019819055601a805460ff19169055601c8054339316831790559084529083905292909120929092556200019c919062000448565b620001ab90620f424062000460565b601c80546001600160a01b03908116600090815260016020526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001ff6012600a62000448565b6200020e90620f424062000460565b60405190815260200160405180910390a3601c80546001600160a01b0390811660009081526007602081815260408084208054600160ff19918216811790925530865282862080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055965490951684526005825283208054861685179055527f369570fab114047d6931f481fe65511f6f30128550291df97f26a8b12fbb064780548416831790557f76e04a725e11e15e15ab8a12e133522d6ebb6e4ce8401eb7fccaa3f298dfd6e5805484168317905573dba68f07d1b7ca219f78ae8582c213d975c25caf90527fa41ba8ce755a9610529fb4698883547ff2835b475c582169085f2e8c39e304f78054909216179055620004b3565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200038a5781600019048211156200036e576200036e62000333565b808516156200037c57918102915b93841c93908002906200034e565b509250929050565b600082620003a35750600162000442565b81620003b25750600062000442565b8160018114620003cb5760028114620003d657620003f6565b600191505062000442565b60ff841115620003ea57620003ea62000333565b50506001821b62000442565b5060208310610133831016604e8410600b84101617156200041b575081810a62000442565b62000427838362000349565b80600019048211156200043e576200043e62000333565b0290505b92915050565b60006200045960ff84168362000392565b9392505050565b808202811582820484141762000442576200044262000333565b6000826200049857634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111562000442576200044262000333565b61445280620004c36000396000f3fe60806040526004361061032d5760003560e01c8063590ffdce116101a557806395d89b41116100ec578063dd62ed3e11610095578063f94aa1b41161006f578063f94aa1b414610a0d578063fb78680d14610a64578063fdb78c0e14610a84578063feadde9c14610aa357600080fd5b8063dd62ed3e14610992578063eafb5a3c146109d8578063ee5d9c2d146109f857600080fd5b8063b7df8b36116100c6578063b7df8b36146108c5578063bfc2fc35146108df578063cf847706146108ff57600080fd5b806395d89b4114610857578063a9059cbb14610885578063ab558e4d146108a557600080fd5b806375cb1bd11161014e57806388f820201161012857806388f82020146107eb578063893d20e8146108245780638a63bd9b1461084257600080fd5b806375cb1bd11461079657806378648edf146107b657806380c581d1146107cb57600080fd5b80635cce86cd1161017f5780635cce86cd1461072857806370a0823114610761578063715018a61461078157600080fd5b8063590ffdce146106d25780635a6f0918146106f25780635c24b0741461070857600080fd5b80632610eaca1161027457806336fddb041161021d5780634e718e48116101f75780634e718e481461063f5780634fb2e45d1461065f5780634fbee1931461067f57806350a8e016146106b857600080fd5b806336fddb04146105df578063452ed4f1146105ff5780634bbb93eb1461061f57600080fd5b80632d8381191161024e5780632d8381191461058d5780632e8fa821146105ad578063313ce567146105c357600080fd5b80632610eaca1461054257806328577751146105625780632b112e491461057857600080fd5b8063095ea7b3116102d657806313e46192116102b057806313e46192146104ed57806318160ddd1461050d57806323b872dd1461052257600080fd5b8063095ea7b3146104725780630dcbcf1c1461049257806313b4a7f4146104cb57600080fd5b806306fdde031161030757806306fdde03146103e65780630758d9241461042357806307dd79e01461044857600080fd5b806303fd2a45146103395780630445b6671461036c578063069d955f1461039057600080fd5b3661033457005b600080fd5b34801561034557600080fd5b5061034f61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037857600080fd5b5061038260165481565b604051908152602001610363565b34801561039c57600080fd5b50600e546103c19061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610363565b3480156103f257600080fd5b5060408051808201909152600b81526a4d656d6520436173696e6f60a81b60208201525b6040516103639190613d28565b34801561042f57600080fd5b5060105461034f9061010090046001600160a01b031681565b34801561045457600080fd5b506010546104629060ff1681565b6040519015158152602001610363565b34801561047e57600080fd5b5061046261048d366004613d8b565b610ac3565b34801561049e57600080fd5b506104626104ad366004613db7565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104d757600080fd5b506104eb6104e6366004613dd4565b610ada565b005b3480156104f957600080fd5b506104eb610508366004613e1b565b610caf565b34801561051957600080fd5b50610382611130565b34801561052e57600080fd5b5061046261053d366004613e49565b611150565b34801561054e57600080fd5b506104eb61055d366004613f60565b6111c8565b34801561056e57600080fd5b5061038260195481565b34801561058457600080fd5b50610382611371565b34801561059957600080fd5b506103826105a8366004614022565b6113b5565b3480156105b957600080fd5b5061038260175481565b3480156105cf57600080fd5b5060405160128152602001610363565b3480156105eb57600080fd5b506104eb6105fa366004613e1b565b611439565b34801561060b57600080fd5b5060115461034f906001600160a01b031681565b34801561062b57600080fd5b5061038261063a366004614022565b6114ac565b34801561064b57600080fd5b506104eb61065a366004614022565b6114de565b34801561066b57600080fd5b506104eb61067a366004613db7565b61157c565b34801561068b57600080fd5b5061046261069a366004613db7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106c457600080fd5b50601a546104629060ff1681565b3480156106de57600080fd5b506104eb6106ed366004613e1b565b61176f565b3480156106fe57600080fd5b50610382601b5481565b34801561071457600080fd5b506104eb610723366004613db7565b6117e2565b34801561073457600080fd5b50610462610743366004613db7565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561076d57600080fd5b5061038261077c366004613db7565b6119ae565b34801561078d57600080fd5b506104eb611a0d565b3480156107a257600080fd5b506104eb6107b136600461403b565b611b33565b3480156107c257600080fd5b506104eb611c3a565b3480156107d757600080fd5b506104eb6107e6366004613e1b565b611c91565b3480156107f757600080fd5b50610462610806366004613db7565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561083057600080fd5b50601c546001600160a01b031661034f565b34801561084e57600080fd5b50610462611eac565b34801561086357600080fd5b506040805180820190915260058152644d454d454360d81b6020820152610416565b34801561089157600080fd5b506104626108a0366004613d8b565b611f1c565b3480156108b157600080fd5b506104eb6108c0366004613db7565b611f33565b3480156108d157600080fd5b506018546104629060ff1681565b3480156108eb57600080fd5b506104eb6108fa366004614086565b6120c8565b34801561090b57600080fd5b50600f546109559061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000008204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c001610363565b34801561099e57600080fd5b506103826109ad366004613dd4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109e457600080fd5b506104eb6109f3366004613db7565b61216e565b348015610a0457600080fd5b506104eb61255a565b348015610a1957600080fd5b50601254601354601454610a3a926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610363565b348015610a7057600080fd5b506104eb610a7f3660046140a4565b61262e565b348015610a9057600080fd5b5060155461046290610100900460ff1681565b348015610aaf57600080fd5b506104eb610abe366004613e1b565b6128e6565b6000610ad0338484612959565b5060015b92915050565b601c546001600160a01b03163314610b275760405162461bcd60e51b815260206004820152601160248201526000805160206143fd83398151915260448201526064015b60405180910390fd5b600c5460ff16610b3657600080fd5b6001600160a01b0382163014801590610b5857506001600160a01b0381163014155b8015610b7257506011546001600160a01b03838116911614155b8015610b8c57506011546001600160a01b03828116911614155b610bc65760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610b1e565b806001600160a01b0316826001600160a01b031603610c33576001600160a01b03811660009081526005602090815260408083208054600160ff199182168117909255600b9093529220805490911682179055610c2490829061176f565b610c2f816001610caf565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600b909252808320805486168317905592825291902080549092168117909155610c9d90839061176f565b610ca881600161176f565b610c248260015b601c546001600160a01b03163314610cf75760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b8015610e3e576001600160a01b03821660009081526009602052604090205460ff1615610d665760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b1e565b6001600160a01b03821660009081526020819052604090205415610dc0576001600160a01b038216600090815260208190526040902054610da6906113b5565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff1916600117905560115490911614610c2f57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555050565b80610c2f576001600160a01b03821660009081526009602052604090205460ff16610eab5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b1e565b6011546001600160a01b0390811690831603610f2457610ec9612a52565b6001600160a01b038316600090815260016020526040902054610eec91906140ec565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a54600103610fc457610f36612a52565b6001600160a01b038316600090815260016020526040902054610f5991906140ec565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a805480610f9e57610f9e614103565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a5481101561112b57826001600160a01b0316600a8281548110610fee57610fee614119565b6000918252602090912001546001600160a01b03160361111957600a80546110189060019061412f565b8154811061102857611028614119565b600091825260209091200154600a80546001600160a01b03909216918390811061105457611054614119565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061108a612a52565b6001600160a01b0384166000908152600160205260409020546110ad91906140ec565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a8054806110f2576110f2614103565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061112381614142565b915050610fc7565b505050565b600061113e6012600a61423f565b61114b90620f42406140ec565b905090565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146111b5576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906111af90849061412f565b90915550505b6111c0848484612c27565b949350505050565b601c546001600160a01b031633146112105760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b80518251146112615760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b1e565b60005b82518161ffff16101561112b5761127d6012600a61423f565b828261ffff168151811061129357611293614119565b60200260200101516112a591906140ec565b6112ae336119ae565b10156112fc5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610b1e565b61135e33848361ffff168151811061131657611316614119565b60200260200101516012600a61132c919061423f565b858561ffff168151811061134257611342614119565b602002602001015161135491906140ec565b6000806001612ea0565b50806113698161424e565b915050611264565b600061137d60006119ae565b61138861dead6119ae565b611392919061426f565b61139e6012600a61423f565b6113ab90620f42406140ec565b61114b919061412f565b6000600d5482111561141c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b1e565b6000611426612a52565b90506114328184614282565b9392505050565b601c546001600160a01b031633146114815760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6011546000906127109083906114ca906001600160a01b03166119ae565b6114d491906140ec565b610ad49190614282565b601c546001600160a01b031633146115265760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b60968111156115775760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610b1e565b601955565b601c546001600160a01b031633146115c45760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b0381166116405760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b1e565b61deac196001600160a01b038216016116c15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b1e565b601c546116d8906001600160a01b0316600061176f565b6116e381600161176f565b601c546000906116fb906001600160a01b03166119ae565b111561171d57601c5461171b906001600160a01b031682611354826119ae565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b031633146117b75760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b0316331461182a5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff161561183a57600080fd5b306001600160a01b038216036118925760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b1e565b601a8054610100600160a81b0319166101006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611916575060408051601f3d908101601f19168201909252611913918101906142a4565b60015b61191f57600080fd5b60108054610100600160a81b0319166101006001600160a01b038581168202929092178355601180546001600160a01b0319168584169081179091556000908152600260205260409020805460ff19166001179055601c54925461198c9383169291900416600019612959565b60105461112b90309061010090046001600160a01b0316600019612959565b50565b6001600160a01b03811660009081526009602052604081205460ff16156119eb57506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610ad4906113b5565b601c546001600160a01b03163314611a555760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff1615611ace5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610b1e565b601c54611ae5906001600160a01b0316600061176f565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b03163314611b7b5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03831615801590611b9b57506001600160a01b03821615155b8015611baf57506001600160a01b03811615155b611bfb5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610b1e565b601280546001600160a01b039485166001600160a01b031991821617909155601380549385169382169390931790925560148054919093169116179055565b601c546001600160a01b03163314611c825760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6010805460ff19166001179055565b601c546001600160a01b03163314611cd95760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b80611d67576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490516380c581d160e01b8152600481019390935260248301919091526101009004909116906380c581d190604401600060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b505050505050565b60035415611dce576203f48060035442611d81919061412f565b11611dce5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610b1e565b6001600160a01b03821660009081526002602052604090205460ff1615611e375760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610b1e565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491516380c581d160e01b8152600481019390935260248301526101009004909116906380c581d190604401600060405180830381600087803b158015611d4b57600080fd5b601c546000906001600160a01b03163314611ef75760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601054611f1690309061010090046001600160a01b0316600019612959565b50600190565b6000611f29338484612c27565b5060019392505050565b601c546001600160a01b03163314611f7b5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff1615611fde57306001600160a01b03821603611fde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610b1e565b601c546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205991906142d3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156120a4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906142ec565b601c546001600160a01b031633146121105760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6015805461ff001916610100841515908102919091179091556018805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b601c546001600160a01b031633146121b65760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff16156122095760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610b1e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122729190614309565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e39190614309565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561232e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123529190614309565b6011546001600160a01b039081166000908152600260205260409020805460ff1916905590915081166124e857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e19190614309565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124529190614309565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561249f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c39190614309565b601180546001600160a01b0319166001600160a01b0392909216919091179055612504565b601180546001600160a01b0319166001600160a01b0383161790555b60108054610100600160a81b0319166101006001600160a01b03858116820292909217835560115482166000908152600260205260409020805460ff19166001179055915461112b923092910416600019612959565b601c546001600160a01b031633146125a25760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff16156125f55760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b1e565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156119ab573d6000803e3d6000fd5b601c546001600160a01b031633146126765760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b82846126846012600a61423f565b61269190620f42406140ec565b61269b91906140ec565b6126a59190614282565b60165580826126b66012600a61423f565b6126c390620f42406140ec565b6126cd91906140ec565b6126d79190614282565b601781905560165411156127375760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610b1e565b60115461271090612750906001600160a01b03166119ae565b61275b9060966140ec565b6127659190614282565b60175411156127c25760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610b1e565b620f42406127d26012600a61423f565b6127df90620f42406140ec565b6127e99190614282565b60175410156128515760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b1e565b620f42406128616012600a61423f565b61286e90620f42406140ec565b6128789190614282565b60165410156128e05760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b1e565b50505050565b601c546001600160a01b0316331461292e5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0383166129a55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b1e565b6001600160a01b0382166129f15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b1e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d5460009081612a656012600a61423f565b612a7290620f42406140ec565b6011546001600160a01b03166000908152600960205260409020549091508290829060ff1615612b03576011546001600160a01b03166000908152602081815260408083205460019092529091205483821180612ace57508281115b15612ae857612add8587614282565b965050505050505090565b612af2828561412f565b9350612afe818461412f565b925050505b600a5415612bf95760005b600a5460ff82161015612bf7576000806000600a8460ff1681548110612b3657612b36614119565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff8716908110612b7b57612b7b614119565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180612baf57508381115b15612bca57612bbe8688614282565b97505050505050505090565b612bd4828661412f565b9450612be0818561412f565b935050508080612bef90614326565b915050612b0e565b505b612c038385614282565b821015612c1d57612c148385614282565b94505050505090565b612c148183614282565b60006001600160a01b038416612c8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b1e565b6001600160a01b038316612cef5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b1e565b60008211612d515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b1e565b6001600160a01b0384166000908152600260205260408120548190819060ff1615612d7f5760019250612dad565b6001600160a01b03861660009081526002602052604090205460ff1615612da95760019150612dad565b5060015b8115612e875760155460ff16612e8757601554610100900460ff168015612ded57506001600160a01b0386166000908152600b602052604090205460ff16155b8015612e1257506001600160a01b0387166000908152600b602052604090205460ff16155b15612e87576000612e22306119ae565b90506016548110612e855760175460185460ff1615612e6f576019546011546127109190612e58906001600160a01b03166119ae565b612e6291906140ec565b612e6c9190614282565b90505b808210612e7a578091505b612e83826130d9565b505b505b612e95878787868686612ea0565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff1680612ee257506001600160a01b03871660009081526007602052604090205460ff165b15612eeb575060005b6000612efc898989858a8a8a6134eb565b60a08101516001600160a01b038b16600090815260208190526040902054919250612f269161412f565b6001600160a01b03808b16600090815260208190526040808220939093556080840151918b1681529190912054612f5d919061426f565b6001600160a01b03808a1660009081526020818152604080832094909455918c1681526009909152205460ff1615612fcd576001600160a01b038916600090815260016020526040902054612fb390889061412f565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff161561302d5780516001600160a01b038916600090815260016020526040902054613013919061426f565b6001600160a01b0389166000908152600160205260409020555b60008160c001511180613044575060008160200151115b15613065578060c00151600d600082825461305f919061412f565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516130ae91815260200190565b60405180910390a3601a5460ff166130ca576130ca89896139bd565b50600198975050505050505050565b6015805460ff191660011790556040805160c081018252600f5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a0820181905260000361315b57506134de565b30600090815260046020908152604080832060105461010090046001600160a01b03168452909152902054600019146131be5730600090815260046020908152604080832060105461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131f3576131f3614119565b60200260200101906001600160a01b031690816001600160a01b031681525050601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328a9190614309565b8160018151811061329d5761329d614119565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81526101009091049091169063791ac947906132ea908690600090869030904290600401614345565b600060405180830381600087803b15801561330457600080fd5b505af1925050508015613315575060015b6133205750506134de565b60004790506000808460a0015161ffff16856040015161ffff168461334591906140ec565b61334f9190614282565b905060008560a0015161ffff16866020015161ffff168561337091906140ec565b61337a9190614282565b90506000613388838361426f565b613392908661412f565b604088015190915061ffff1615613400576014546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d80600081146133f5576040519150601f19603f3d011682016040523d82523d6000602084013e6133fa565b606091505b50909450505b608087015161ffff161561346b576012546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114613460576040519150601f19603f3d011682016040523d82523d6000602084013e613465565b606091505b50909450505b602087015161ffff16156134d6576013546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146134cb576040519150601f19603f3d011682016040523d82523d6000602084013e6134d0565b606091505b50909450505b505050505050505b506015805460ff19169055565b61353360405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61357b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c081018252600f5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a08201526135e9612a52565b60e083018190526135fa90896140ec565b60a080840191909152606082015182519183015160009261361a916143b6565b61362491906143b6565b61ffff1690508060000361363757600097505b871561374b57600087156136525750600e5461ffff1661367c565b861561366b5750600e5462010000900461ffff1661367c565b50600e54640100000000900461ffff165b600061271061368b838d6140ec565b6136959190614282565b845190915083906136aa9061ffff16836140ec565b6136b49190614282565b6020860152606084015183906136ce9061ffff16836140ec565b6136d89190614282565b6060860181905260208601516136ee919061426f565b6136f8908261412f565b604086018190526060860151602087015190916137149161426f565b61371e919061426f565b613728908c61412f565b855260e0850151602086015161373e91906140ec565b60c08601525061374f9050565b8883525b604083015115613826578260e00151836040015161376d91906140ec565b306000908152602081905260408120805490919061378c90849061426f565b90915550503060009081526009602052604090205460ff16156137d45760408084015130600090815260016020529182208054919290916137ce90849061426f565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040015160405161381d91815260200190565b60405180910390a35b606083015115613959578260e00151836060015161384491906140ec565b61dead600090815260208190527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83805490919061388290849061426f565b909155505061dead60005260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff161561390557606083015161dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80549091906138ff90849061426f565b90915550505b61dead6001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856060015160405161395091815260200190565b60405180910390a35b8260e00151836060015161396d91906140ec565b8360e00151846040015161398191906140ec565b8460c00151613990919061426f565b61399a919061426f565b8360a001516139a9919061412f565b608084015250909998505050505050505050565b601a5460ff1615613a1c5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b1e565b613a268282613c15565b158015613a4057506011546001600160a01b038281169116145b15610c2f576001600160a01b0382811660009081526005602090815260408083208054600160ff199182168117909255600790935292208054821683179055601a805490911690911790819055610100900416613aaf57601a8054610100600160a81b03191630610100021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1601a54601154604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152601260648201526101009092041690636c115c3490608401600060405180830381600087803b158015613b6357600080fd5b505af1925050508015613b74575060015b50601a546011546001600160a01b036101009092048216916325a71cae91613b9c91166119ae565b6040518263ffffffff1660e01b8152600401613bba91815260200190565b60408051808303816000875af1925050508015613bf4575060408051601f3d908101601f19168201909252613bf1918101906143d8565b60015b15613c03576016919091556017555b600c805460ff1916905542601b555050565b601c546000906001600160a01b03848116911614801590613c445750601c546001600160a01b03838116911614155b8015613c5b5750601c546001600160a01b03163214155b8015613c8057506001600160a01b03821660009081526005602052604090205460ff16155b8015613ca557506001600160a01b03831660009081526005602052604090205460ff16155b8015613cbc57506001600160a01b03821661dead14155b8015613cd057506001600160a01b03821615155b8015613ce557506001600160a01b0383163014155b8015613d045750601a546001600160a01b038481166101009092041614155b8015611432575050601a5461010090046001600160a01b0390811691161415919050565b600060208083528351808285015260005b81811015613d5557858101830151858201604001528201613d39565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119ab57600080fd5b60008060408385031215613d9e57600080fd5b8235613da981613d76565b946020939093013593505050565b600060208284031215613dc957600080fd5b813561143281613d76565b60008060408385031215613de757600080fd5b8235613df281613d76565b91506020830135613e0281613d76565b809150509250929050565b80151581146119ab57600080fd5b60008060408385031215613e2e57600080fd5b8235613e3981613d76565b91506020830135613e0281613e0d565b600080600060608486031215613e5e57600080fd5b8335613e6981613d76565b92506020840135613e7981613d76565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ec957613ec9613e8a565b604052919050565b600067ffffffffffffffff821115613eeb57613eeb613e8a565b5060051b60200190565b600082601f830112613f0657600080fd5b81356020613f1b613f1683613ed1565b613ea0565b82815260059290921b84018101918181019086841115613f3a57600080fd5b8286015b84811015613f555780358352918301918301613f3e565b509695505050505050565b60008060408385031215613f7357600080fd5b823567ffffffffffffffff80821115613f8b57600080fd5b818501915085601f830112613f9f57600080fd5b81356020613faf613f1683613ed1565b82815260059290921b84018101918181019089841115613fce57600080fd5b948201945b83861015613ff5578535613fe681613d76565b82529482019490820190613fd3565b9650508601359250508082111561400b57600080fd5b5061401885828601613ef5565b9150509250929050565b60006020828403121561403457600080fd5b5035919050565b60008060006060848603121561405057600080fd5b833561405b81613d76565b9250602084013561406b81613d76565b9150604084013561407b81613d76565b809150509250925092565b6000806040838503121561409957600080fd5b8235613e3981613e0d565b600080600080608085870312156140ba57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad457610ad46140d6565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610ad457610ad46140d6565b600060018201614154576141546140d6565b5060010190565b600181815b8085111561419657816000190482111561417c5761417c6140d6565b8085161561418957918102915b93841c9390800290614160565b509250929050565b6000826141ad57506001610ad4565b816141ba57506000610ad4565b81600181146141d057600281146141da576141f6565b6001915050610ad4565b60ff8411156141eb576141eb6140d6565b50506001821b610ad4565b5060208310610133831016604e8410600b8410161715614219575081810a610ad4565b614223838361415b565b8060001904821115614237576142376140d6565b029392505050565b600061143260ff84168361419e565b600061ffff808316818103614265576142656140d6565b6001019392505050565b80820180821115610ad457610ad46140d6565b60008261429f57634e487b7160e01b600052601260045260246000fd5b500490565b600080604083850312156142b757600080fd5b82516142c281613d76565b6020840151909250613e0281613d76565b6000602082840312156142e557600080fd5b5051919050565b6000602082840312156142fe57600080fd5b815161143281613e0d565b60006020828403121561431b57600080fd5b815161143281613d76565b600060ff821660ff810361433c5761433c6140d6565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156143955784516001600160a01b031683529383019391830191600101614370565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff8181168382160190808211156143d1576143d16140d6565b5092915050565b600080604083850312156143eb57600080fd5b50508051602090910151909290915056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a264697066735822122015514abc7688c4d1bb89bf17f60dbd3102f61ba40ac953f2140d39524b9283bc64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061032d5760003560e01c8063590ffdce116101a557806395d89b41116100ec578063dd62ed3e11610095578063f94aa1b41161006f578063f94aa1b414610a0d578063fb78680d14610a64578063fdb78c0e14610a84578063feadde9c14610aa357600080fd5b8063dd62ed3e14610992578063eafb5a3c146109d8578063ee5d9c2d146109f857600080fd5b8063b7df8b36116100c6578063b7df8b36146108c5578063bfc2fc35146108df578063cf847706146108ff57600080fd5b806395d89b4114610857578063a9059cbb14610885578063ab558e4d146108a557600080fd5b806375cb1bd11161014e57806388f820201161012857806388f82020146107eb578063893d20e8146108245780638a63bd9b1461084257600080fd5b806375cb1bd11461079657806378648edf146107b657806380c581d1146107cb57600080fd5b80635cce86cd1161017f5780635cce86cd1461072857806370a0823114610761578063715018a61461078157600080fd5b8063590ffdce146106d25780635a6f0918146106f25780635c24b0741461070857600080fd5b80632610eaca1161027457806336fddb041161021d5780634e718e48116101f75780634e718e481461063f5780634fb2e45d1461065f5780634fbee1931461067f57806350a8e016146106b857600080fd5b806336fddb04146105df578063452ed4f1146105ff5780634bbb93eb1461061f57600080fd5b80632d8381191161024e5780632d8381191461058d5780632e8fa821146105ad578063313ce567146105c357600080fd5b80632610eaca1461054257806328577751146105625780632b112e491461057857600080fd5b8063095ea7b3116102d657806313e46192116102b057806313e46192146104ed57806318160ddd1461050d57806323b872dd1461052257600080fd5b8063095ea7b3146104725780630dcbcf1c1461049257806313b4a7f4146104cb57600080fd5b806306fdde031161030757806306fdde03146103e65780630758d9241461042357806307dd79e01461044857600080fd5b806303fd2a45146103395780630445b6671461036c578063069d955f1461039057600080fd5b3661033457005b600080fd5b34801561034557600080fd5b5061034f61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037857600080fd5b5061038260165481565b604051908152602001610363565b34801561039c57600080fd5b50600e546103c19061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610363565b3480156103f257600080fd5b5060408051808201909152600b81526a4d656d6520436173696e6f60a81b60208201525b6040516103639190613d28565b34801561042f57600080fd5b5060105461034f9061010090046001600160a01b031681565b34801561045457600080fd5b506010546104629060ff1681565b6040519015158152602001610363565b34801561047e57600080fd5b5061046261048d366004613d8b565b610ac3565b34801561049e57600080fd5b506104626104ad366004613db7565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104d757600080fd5b506104eb6104e6366004613dd4565b610ada565b005b3480156104f957600080fd5b506104eb610508366004613e1b565b610caf565b34801561051957600080fd5b50610382611130565b34801561052e57600080fd5b5061046261053d366004613e49565b611150565b34801561054e57600080fd5b506104eb61055d366004613f60565b6111c8565b34801561056e57600080fd5b5061038260195481565b34801561058457600080fd5b50610382611371565b34801561059957600080fd5b506103826105a8366004614022565b6113b5565b3480156105b957600080fd5b5061038260175481565b3480156105cf57600080fd5b5060405160128152602001610363565b3480156105eb57600080fd5b506104eb6105fa366004613e1b565b611439565b34801561060b57600080fd5b5060115461034f906001600160a01b031681565b34801561062b57600080fd5b5061038261063a366004614022565b6114ac565b34801561064b57600080fd5b506104eb61065a366004614022565b6114de565b34801561066b57600080fd5b506104eb61067a366004613db7565b61157c565b34801561068b57600080fd5b5061046261069a366004613db7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106c457600080fd5b50601a546104629060ff1681565b3480156106de57600080fd5b506104eb6106ed366004613e1b565b61176f565b3480156106fe57600080fd5b50610382601b5481565b34801561071457600080fd5b506104eb610723366004613db7565b6117e2565b34801561073457600080fd5b50610462610743366004613db7565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561076d57600080fd5b5061038261077c366004613db7565b6119ae565b34801561078d57600080fd5b506104eb611a0d565b3480156107a257600080fd5b506104eb6107b136600461403b565b611b33565b3480156107c257600080fd5b506104eb611c3a565b3480156107d757600080fd5b506104eb6107e6366004613e1b565b611c91565b3480156107f757600080fd5b50610462610806366004613db7565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561083057600080fd5b50601c546001600160a01b031661034f565b34801561084e57600080fd5b50610462611eac565b34801561086357600080fd5b506040805180820190915260058152644d454d454360d81b6020820152610416565b34801561089157600080fd5b506104626108a0366004613d8b565b611f1c565b3480156108b157600080fd5b506104eb6108c0366004613db7565b611f33565b3480156108d157600080fd5b506018546104629060ff1681565b3480156108eb57600080fd5b506104eb6108fa366004614086565b6120c8565b34801561090b57600080fd5b50600f546109559061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000008204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c001610363565b34801561099e57600080fd5b506103826109ad366004613dd4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109e457600080fd5b506104eb6109f3366004613db7565b61216e565b348015610a0457600080fd5b506104eb61255a565b348015610a1957600080fd5b50601254601354601454610a3a926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610363565b348015610a7057600080fd5b506104eb610a7f3660046140a4565b61262e565b348015610a9057600080fd5b5060155461046290610100900460ff1681565b348015610aaf57600080fd5b506104eb610abe366004613e1b565b6128e6565b6000610ad0338484612959565b5060015b92915050565b601c546001600160a01b03163314610b275760405162461bcd60e51b815260206004820152601160248201526000805160206143fd83398151915260448201526064015b60405180910390fd5b600c5460ff16610b3657600080fd5b6001600160a01b0382163014801590610b5857506001600160a01b0381163014155b8015610b7257506011546001600160a01b03838116911614155b8015610b8c57506011546001600160a01b03828116911614155b610bc65760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610b1e565b806001600160a01b0316826001600160a01b031603610c33576001600160a01b03811660009081526005602090815260408083208054600160ff199182168117909255600b9093529220805490911682179055610c2490829061176f565b610c2f816001610caf565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600b909252808320805486168317905592825291902080549092168117909155610c9d90839061176f565b610ca881600161176f565b610c248260015b601c546001600160a01b03163314610cf75760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b8015610e3e576001600160a01b03821660009081526009602052604090205460ff1615610d665760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b1e565b6001600160a01b03821660009081526020819052604090205415610dc0576001600160a01b038216600090815260208190526040902054610da6906113b5565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff1916600117905560115490911614610c2f57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555050565b80610c2f576001600160a01b03821660009081526009602052604090205460ff16610eab5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b1e565b6011546001600160a01b0390811690831603610f2457610ec9612a52565b6001600160a01b038316600090815260016020526040902054610eec91906140ec565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a54600103610fc457610f36612a52565b6001600160a01b038316600090815260016020526040902054610f5991906140ec565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a805480610f9e57610f9e614103565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a5481101561112b57826001600160a01b0316600a8281548110610fee57610fee614119565b6000918252602090912001546001600160a01b03160361111957600a80546110189060019061412f565b8154811061102857611028614119565b600091825260209091200154600a80546001600160a01b03909216918390811061105457611054614119565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061108a612a52565b6001600160a01b0384166000908152600160205260409020546110ad91906140ec565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a8054806110f2576110f2614103565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061112381614142565b915050610fc7565b505050565b600061113e6012600a61423f565b61114b90620f42406140ec565b905090565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146111b5576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906111af90849061412f565b90915550505b6111c0848484612c27565b949350505050565b601c546001600160a01b031633146112105760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b80518251146112615760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b1e565b60005b82518161ffff16101561112b5761127d6012600a61423f565b828261ffff168151811061129357611293614119565b60200260200101516112a591906140ec565b6112ae336119ae565b10156112fc5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610b1e565b61135e33848361ffff168151811061131657611316614119565b60200260200101516012600a61132c919061423f565b858561ffff168151811061134257611342614119565b602002602001015161135491906140ec565b6000806001612ea0565b50806113698161424e565b915050611264565b600061137d60006119ae565b61138861dead6119ae565b611392919061426f565b61139e6012600a61423f565b6113ab90620f42406140ec565b61114b919061412f565b6000600d5482111561141c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b1e565b6000611426612a52565b90506114328184614282565b9392505050565b601c546001600160a01b031633146114815760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6011546000906127109083906114ca906001600160a01b03166119ae565b6114d491906140ec565b610ad49190614282565b601c546001600160a01b031633146115265760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b60968111156115775760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610b1e565b601955565b601c546001600160a01b031633146115c45760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b0381166116405760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b1e565b61deac196001600160a01b038216016116c15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b1e565b601c546116d8906001600160a01b0316600061176f565b6116e381600161176f565b601c546000906116fb906001600160a01b03166119ae565b111561171d57601c5461171b906001600160a01b031682611354826119ae565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b031633146117b75760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b0316331461182a5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff161561183a57600080fd5b306001600160a01b038216036118925760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b1e565b601a8054610100600160a81b0319166101006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611916575060408051601f3d908101601f19168201909252611913918101906142a4565b60015b61191f57600080fd5b60108054610100600160a81b0319166101006001600160a01b038581168202929092178355601180546001600160a01b0319168584169081179091556000908152600260205260409020805460ff19166001179055601c54925461198c9383169291900416600019612959565b60105461112b90309061010090046001600160a01b0316600019612959565b50565b6001600160a01b03811660009081526009602052604081205460ff16156119eb57506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610ad4906113b5565b601c546001600160a01b03163314611a555760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff1615611ace5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610b1e565b601c54611ae5906001600160a01b0316600061176f565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b03163314611b7b5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03831615801590611b9b57506001600160a01b03821615155b8015611baf57506001600160a01b03811615155b611bfb5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610b1e565b601280546001600160a01b039485166001600160a01b031991821617909155601380549385169382169390931790925560148054919093169116179055565b601c546001600160a01b03163314611c825760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6010805460ff19166001179055565b601c546001600160a01b03163314611cd95760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b80611d67576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490516380c581d160e01b8152600481019390935260248301919091526101009004909116906380c581d190604401600060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b505050505050565b60035415611dce576203f48060035442611d81919061412f565b11611dce5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610b1e565b6001600160a01b03821660009081526002602052604090205460ff1615611e375760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610b1e565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491516380c581d160e01b8152600481019390935260248301526101009004909116906380c581d190604401600060405180830381600087803b158015611d4b57600080fd5b601c546000906001600160a01b03163314611ef75760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601054611f1690309061010090046001600160a01b0316600019612959565b50600190565b6000611f29338484612c27565b5060019392505050565b601c546001600160a01b03163314611f7b5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff1615611fde57306001600160a01b03821603611fde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610b1e565b601c546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205991906142d3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156120a4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906142ec565b601c546001600160a01b031633146121105760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6015805461ff001916610100841515908102919091179091556018805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b601c546001600160a01b031633146121b65760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff16156122095760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610b1e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122729190614309565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e39190614309565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561232e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123529190614309565b6011546001600160a01b039081166000908152600260205260409020805460ff1916905590915081166124e857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e19190614309565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124529190614309565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561249f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c39190614309565b601180546001600160a01b0319166001600160a01b0392909216919091179055612504565b601180546001600160a01b0319166001600160a01b0383161790555b60108054610100600160a81b0319166101006001600160a01b03858116820292909217835560115482166000908152600260205260409020805460ff19166001179055915461112b923092910416600019612959565b601c546001600160a01b031633146125a25760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b601a5460ff16156125f55760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b1e565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156119ab573d6000803e3d6000fd5b601c546001600160a01b031633146126765760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b82846126846012600a61423f565b61269190620f42406140ec565b61269b91906140ec565b6126a59190614282565b60165580826126b66012600a61423f565b6126c390620f42406140ec565b6126cd91906140ec565b6126d79190614282565b601781905560165411156127375760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610b1e565b60115461271090612750906001600160a01b03166119ae565b61275b9060966140ec565b6127659190614282565b60175411156127c25760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610b1e565b620f42406127d26012600a61423f565b6127df90620f42406140ec565b6127e99190614282565b60175410156128515760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b1e565b620f42406128616012600a61423f565b61286e90620f42406140ec565b6128789190614282565b60165410156128e05760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b1e565b50505050565b601c546001600160a01b0316331461292e5760405162461bcd60e51b815260206004820152601160248201526000805160206143fd8339815191526044820152606401610b1e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0383166129a55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b1e565b6001600160a01b0382166129f15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b1e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d5460009081612a656012600a61423f565b612a7290620f42406140ec565b6011546001600160a01b03166000908152600960205260409020549091508290829060ff1615612b03576011546001600160a01b03166000908152602081815260408083205460019092529091205483821180612ace57508281115b15612ae857612add8587614282565b965050505050505090565b612af2828561412f565b9350612afe818461412f565b925050505b600a5415612bf95760005b600a5460ff82161015612bf7576000806000600a8460ff1681548110612b3657612b36614119565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff8716908110612b7b57612b7b614119565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180612baf57508381115b15612bca57612bbe8688614282565b97505050505050505090565b612bd4828661412f565b9450612be0818561412f565b935050508080612bef90614326565b915050612b0e565b505b612c038385614282565b821015612c1d57612c148385614282565b94505050505090565b612c148183614282565b60006001600160a01b038416612c8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b1e565b6001600160a01b038316612cef5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b1e565b60008211612d515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b1e565b6001600160a01b0384166000908152600260205260408120548190819060ff1615612d7f5760019250612dad565b6001600160a01b03861660009081526002602052604090205460ff1615612da95760019150612dad565b5060015b8115612e875760155460ff16612e8757601554610100900460ff168015612ded57506001600160a01b0386166000908152600b602052604090205460ff16155b8015612e1257506001600160a01b0387166000908152600b602052604090205460ff16155b15612e87576000612e22306119ae565b90506016548110612e855760175460185460ff1615612e6f576019546011546127109190612e58906001600160a01b03166119ae565b612e6291906140ec565b612e6c9190614282565b90505b808210612e7a578091505b612e83826130d9565b505b505b612e95878787868686612ea0565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff1680612ee257506001600160a01b03871660009081526007602052604090205460ff165b15612eeb575060005b6000612efc898989858a8a8a6134eb565b60a08101516001600160a01b038b16600090815260208190526040902054919250612f269161412f565b6001600160a01b03808b16600090815260208190526040808220939093556080840151918b1681529190912054612f5d919061426f565b6001600160a01b03808a1660009081526020818152604080832094909455918c1681526009909152205460ff1615612fcd576001600160a01b038916600090815260016020526040902054612fb390889061412f565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff161561302d5780516001600160a01b038916600090815260016020526040902054613013919061426f565b6001600160a01b0389166000908152600160205260409020555b60008160c001511180613044575060008160200151115b15613065578060c00151600d600082825461305f919061412f565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516130ae91815260200190565b60405180910390a3601a5460ff166130ca576130ca89896139bd565b50600198975050505050505050565b6015805460ff191660011790556040805160c081018252600f5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a0820181905260000361315b57506134de565b30600090815260046020908152604080832060105461010090046001600160a01b03168452909152902054600019146131be5730600090815260046020908152604080832060105461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131f3576131f3614119565b60200260200101906001600160a01b031690816001600160a01b031681525050601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328a9190614309565b8160018151811061329d5761329d614119565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81526101009091049091169063791ac947906132ea908690600090869030904290600401614345565b600060405180830381600087803b15801561330457600080fd5b505af1925050508015613315575060015b6133205750506134de565b60004790506000808460a0015161ffff16856040015161ffff168461334591906140ec565b61334f9190614282565b905060008560a0015161ffff16866020015161ffff168561337091906140ec565b61337a9190614282565b90506000613388838361426f565b613392908661412f565b604088015190915061ffff1615613400576014546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d80600081146133f5576040519150601f19603f3d011682016040523d82523d6000602084013e6133fa565b606091505b50909450505b608087015161ffff161561346b576012546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114613460576040519150601f19603f3d011682016040523d82523d6000602084013e613465565b606091505b50909450505b602087015161ffff16156134d6576013546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146134cb576040519150601f19603f3d011682016040523d82523d6000602084013e6134d0565b606091505b50909450505b505050505050505b506015805460ff19169055565b61353360405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61357b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c081018252600f5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a08201526135e9612a52565b60e083018190526135fa90896140ec565b60a080840191909152606082015182519183015160009261361a916143b6565b61362491906143b6565b61ffff1690508060000361363757600097505b871561374b57600087156136525750600e5461ffff1661367c565b861561366b5750600e5462010000900461ffff1661367c565b50600e54640100000000900461ffff165b600061271061368b838d6140ec565b6136959190614282565b845190915083906136aa9061ffff16836140ec565b6136b49190614282565b6020860152606084015183906136ce9061ffff16836140ec565b6136d89190614282565b6060860181905260208601516136ee919061426f565b6136f8908261412f565b604086018190526060860151602087015190916137149161426f565b61371e919061426f565b613728908c61412f565b855260e0850151602086015161373e91906140ec565b60c08601525061374f9050565b8883525b604083015115613826578260e00151836040015161376d91906140ec565b306000908152602081905260408120805490919061378c90849061426f565b90915550503060009081526009602052604090205460ff16156137d45760408084015130600090815260016020529182208054919290916137ce90849061426f565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040015160405161381d91815260200190565b60405180910390a35b606083015115613959578260e00151836060015161384491906140ec565b61dead600090815260208190527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83805490919061388290849061426f565b909155505061dead60005260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff161561390557606083015161dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80549091906138ff90849061426f565b90915550505b61dead6001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856060015160405161395091815260200190565b60405180910390a35b8260e00151836060015161396d91906140ec565b8360e00151846040015161398191906140ec565b8460c00151613990919061426f565b61399a919061426f565b8360a001516139a9919061412f565b608084015250909998505050505050505050565b601a5460ff1615613a1c5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b1e565b613a268282613c15565b158015613a4057506011546001600160a01b038281169116145b15610c2f576001600160a01b0382811660009081526005602090815260408083208054600160ff199182168117909255600790935292208054821683179055601a805490911690911790819055610100900416613aaf57601a8054610100600160a81b03191630610100021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1601a54601154604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152601260648201526101009092041690636c115c3490608401600060405180830381600087803b158015613b6357600080fd5b505af1925050508015613b74575060015b50601a546011546001600160a01b036101009092048216916325a71cae91613b9c91166119ae565b6040518263ffffffff1660e01b8152600401613bba91815260200190565b60408051808303816000875af1925050508015613bf4575060408051601f3d908101601f19168201909252613bf1918101906143d8565b60015b15613c03576016919091556017555b600c805460ff1916905542601b555050565b601c546000906001600160a01b03848116911614801590613c445750601c546001600160a01b03838116911614155b8015613c5b5750601c546001600160a01b03163214155b8015613c8057506001600160a01b03821660009081526005602052604090205460ff16155b8015613ca557506001600160a01b03831660009081526005602052604090205460ff16155b8015613cbc57506001600160a01b03821661dead14155b8015613cd057506001600160a01b03821615155b8015613ce557506001600160a01b0383163014155b8015613d045750601a546001600160a01b038481166101009092041614155b8015611432575050601a5461010090046001600160a01b0390811691161415919050565b600060208083528351808285015260005b81811015613d5557858101830151858201604001528201613d39565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119ab57600080fd5b60008060408385031215613d9e57600080fd5b8235613da981613d76565b946020939093013593505050565b600060208284031215613dc957600080fd5b813561143281613d76565b60008060408385031215613de757600080fd5b8235613df281613d76565b91506020830135613e0281613d76565b809150509250929050565b80151581146119ab57600080fd5b60008060408385031215613e2e57600080fd5b8235613e3981613d76565b91506020830135613e0281613e0d565b600080600060608486031215613e5e57600080fd5b8335613e6981613d76565b92506020840135613e7981613d76565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ec957613ec9613e8a565b604052919050565b600067ffffffffffffffff821115613eeb57613eeb613e8a565b5060051b60200190565b600082601f830112613f0657600080fd5b81356020613f1b613f1683613ed1565b613ea0565b82815260059290921b84018101918181019086841115613f3a57600080fd5b8286015b84811015613f555780358352918301918301613f3e565b509695505050505050565b60008060408385031215613f7357600080fd5b823567ffffffffffffffff80821115613f8b57600080fd5b818501915085601f830112613f9f57600080fd5b81356020613faf613f1683613ed1565b82815260059290921b84018101918181019089841115613fce57600080fd5b948201945b83861015613ff5578535613fe681613d76565b82529482019490820190613fd3565b9650508601359250508082111561400b57600080fd5b5061401885828601613ef5565b9150509250929050565b60006020828403121561403457600080fd5b5035919050565b60008060006060848603121561405057600080fd5b833561405b81613d76565b9250602084013561406b81613d76565b9150604084013561407b81613d76565b809150509250925092565b6000806040838503121561409957600080fd5b8235613e3981613e0d565b600080600080608085870312156140ba57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad457610ad46140d6565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610ad457610ad46140d6565b600060018201614154576141546140d6565b5060010190565b600181815b8085111561419657816000190482111561417c5761417c6140d6565b8085161561418957918102915b93841c9390800290614160565b509250929050565b6000826141ad57506001610ad4565b816141ba57506000610ad4565b81600181146141d057600281146141da576141f6565b6001915050610ad4565b60ff8411156141eb576141eb6140d6565b50506001821b610ad4565b5060208310610133831016604e8410600b8410161715614219575081810a610ad4565b614223838361415b565b8060001904821115614237576142376140d6565b029392505050565b600061143260ff84168361419e565b600061ffff808316818103614265576142656140d6565b6001019392505050565b80820180821115610ad457610ad46140d6565b60008261429f57634e487b7160e01b600052601260045260246000fd5b500490565b600080604083850312156142b757600080fd5b82516142c281613d76565b6020840151909250613e0281613d76565b6000602082840312156142e557600080fd5b5051919050565b6000602082840312156142fe57600080fd5b815161143281613e0d565b60006020828403121561431b57600080fd5b815161143281613d76565b600060ff821660ff810361433c5761433c6140d6565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156143955784516001600160a01b031683529383019391830191600101614370565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff8181168382160190808211156143d1576143d16140d6565b5092915050565b600080604083850312156143eb57600080fd5b50508051602090910151909290915056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a264697066735822122015514abc7688c4d1bb89bf17f60dbd3102f61ba40ac953f2140d39524b9283bc64736f6c63430008130033

Deployed Bytecode Sourcemap

3889:25070:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5758:73;;;;;;;;;;;;5789:42;5758:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5758:73:0;;;;;;;;6329:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6329:28:0;245:177:1;5309:107:0;;;;;;;;;;-1:-1:-1;5309:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;633:6:1;666:15;;;648:34;;718:15;;;713:2;698:18;;691:43;770:15;;750:18;;;743:43;;;;611:2;596:18;5309:107:0;427:365:1;9890:80:0;;;;;;;;;;-1:-1:-1;9962:5:0;;;;;;;;;;;;-1:-1:-1;;;9962:5:0;;;;9890:80;;;;;;;:::i;5697:26::-;;;;;;;;;;-1:-1:-1;5697:26:0;;;;;;;-1:-1:-1;;;;;5697:26:0;;;5664;;;;;;;;;;-1:-1:-1;5664:26:0;;;;;;;;;;;1763:14:1;;1756:22;1738:41;;1726:2;1711:18;5664:26:0;1598:187:1;10581:161:0;;;;;;;;;;-1:-1:-1;10581:161:0;;;;;:::i;:::-;;:::i;13957:140::-;;;;;;;;;;-1:-1:-1;13957:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14055:34:0;14031:4;14055:34;;;:25;:34;;;;;;;;;13957:140;16419:961;;;;;;;;;;-1:-1:-1;16419:961:0;;;;;:::i;:::-;;:::i;:::-;;22878:1522;;;;;;;;;;-1:-1:-1;22878:1522:0;;;;;:::i;:::-;;:::i;9625:83::-;;;;;;;;;;;;;:::i;11251:306::-;;;;;;;;;;-1:-1:-1;11251:306:0;;;;;:::i;:::-;;:::i;22295:447::-;;;;;;;;;;-1:-1:-1;22295:447:0;;;;;:::i;:::-;;:::i;6437:33::-;;;;;;;;;;;;;;;;14261:141;;;;;;;;;;;;;:::i;24408:250::-;;;;;;;;;;-1:-1:-1;24408:250:0;;;;;:::i;:::-;;:::i;6364:25::-;;;;;;;;;;;;;;;;9714:80;;;;;;;;;;-1:-1:-1;9714:80:0;;4827:2;6699:36:1;;6687:2;6672:18;9714:80:0;6557:184:1;13532:140:0;;;;;;;;;;-1:-1:-1;13532:140:0;;;;;:::i;:::-;;:::i;5730:21::-;;;;;;;;;;-1:-1:-1;5730:21:0;;;;-1:-1:-1;;;;;5730:21:0;;;15019:189;;;;;;;;;;-1:-1:-1;15019:189:0;;;;;:::i;:::-;;:::i;15923:217::-;;;;;;;;;;-1:-1:-1;15923:217:0;;;;;:::i;:::-;;:::i;8260:654::-;;;;;;;;;;-1:-1:-1;8260:654:0;;;;;:::i;:::-;;:::i;13680:127::-;;;;;;;;;;-1:-1:-1;13680:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13771:28:0;13747:4;13771:28;;;:19;:28;;;;;;;;;13680:127;6477:36;;;;;;;;;;-1:-1:-1;6477:36:0;;;;;;;;13815:134;;;;;;;;;;-1:-1:-1;13815:134:0;;;;;:::i;:::-;;:::i;6550:26::-;;;;;;;;;;;;;;;;12825:559;;;;;;;;;;-1:-1:-1;12825:559:0;;;;;:::i;:::-;;:::i;13392:132::-;;;;;;;;;;-1:-1:-1;13392:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;13486:30:0;13462:4;13486:30;;;:21;:30;;;;;;;;;13392:132;10202:198;;;;;;;;;;-1:-1:-1;10202:198:0;;;;;:::i;:::-;;:::i;8922:313::-;;;;;;;;;;;;;:::i;14600:411::-;;;;;;;;;;-1:-1:-1;14600:411:0;;;;;:::i;:::-;;:::i;14410:182::-;;;;;;;;;;;;;:::i;12253:564::-;;;;;;;;;;-1:-1:-1;12253:564:0;;;;;:::i;:::-;;:::i;22750:120::-;;;;;;;;;;-1:-1:-1;22750:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22842:20:0;22818:4;22842:20;;;:11;:20;;;;;;;;;22750:120;9976:79;;;;;;;;;;-1:-1:-1;10046:6:0;;-1:-1:-1;;;;;10046:6:0;9976:79;;11068:175;;;;;;;;;;;;;:::i;9800:84::-;;;;;;;;;;-1:-1:-1;9874:7:0;;;;;;;;;;;;-1:-1:-1;;;9874:7:0;;;;9800:84;;10408:165;;;;;;;;;;-1:-1:-1;10408:165:0;;;;;:::i;:::-;;:::i;21991:296::-;;;;;;;;;;-1:-1:-1;21991:296:0;;;;;:::i;:::-;;:::i;6396:34::-;;;;;;;;;;-1:-1:-1;6396:34:0;;;;;;;;16148:263;;;;;;;;;;-1:-1:-1;16148:263:0;;;;;:::i;:::-;;:::i;5425:182::-;;;;;;;;;;-1:-1:-1;5425:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5425:182:0;;;;;;;;;7970:6:1;8003:15;;;7985:34;;8055:15;;;8050:2;8035:18;;8028:43;8107:15;;;8087:18;;;8080:43;;;;8159:15;;;8154:2;8139:18;;8132:43;8212:15;;8206:3;8191:19;;8184:44;8265:15;;;8259:3;8244:19;;8237:44;7947:3;7932:19;5425:182:0;7685:602:1;10061:133:0;;;;;;;;;;-1:-1:-1;10061:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10163:19:0;;;10145:7;10163:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10061:133;11565:680;;;;;;;;;;-1:-1:-1;11565:680:0;;;;;:::i;:::-;;:::i;21801:182::-;;;;;;;;;;;;;:::i;5982:270::-;;;;;;;;;;-1:-1:-1;5982:270:0;;;;;;;;-1:-1:-1;;;;;5982:270:0;;;;;;;;;;;;;;-1:-1:-1;;;;;8621:15:1;;;8603:34;;8673:15;;;8668:2;8653:18;;8646:43;8725:15;;8705:18;;;8698:43;;;;8530:2;8515:18;5982:270:0;8292:455:1;15216:699:0;;;;;;;;;;-1:-1:-1;15216:699:0;;;;;:::i;:::-;;:::i;6283:39::-;;;;;;;;;;-1:-1:-1;6283:39:0;;;;;;;;;;;14105:148;;;;;;;;;;-1:-1:-1;14105:148:0;;;;;:::i;:::-;;:::i;10581:161::-;10658:4;10675:37;10684:10;10696:7;10705:6;10675:8;:37::i;:::-;-1:-1:-1;10730:4:0;10581:161;;;;;:::o;16419:961::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;;;;;;;;;16523:23:::1;::::0;::::1;;16515:32;;;::::0;::::1;;-1:-1:-1::0;;;;;16566:23:0;::::1;16584:4;16566:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;16611:24:0;::::1;16630:4;16611:24;;16566:69;:107;;;;-1:-1:-1::0;16657:6:0::1;::::0;-1:-1:-1;;;;;16657:16:0;;::::1;:6:::0;::::1;:16;;16566:107;:146;;;;-1:-1:-1::0;16695:6:0::1;::::0;-1:-1:-1;;;;;16695:17:0;;::::1;:6:::0;::::1;:17;;16566:146;16558:170;;;::::0;-1:-1:-1;;;16558:170:0;;9690:2:1;16558:170:0::1;::::0;::::1;9672:21:1::0;9729:2;9709:18;;;9702:30;-1:-1:-1;;;9748:18:1;;;9741:41;9799:18;;16558:170:0::1;9488:335:1::0;16558:170:0::1;16753:7;-1:-1:-1::0;;;;;16743:17:0::1;:6;-1:-1:-1::0;;;;;16743:17:0::1;::::0;16739:634:::1;;-1:-1:-1::0;;;;;16777:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;16806:4:::1;-1:-1:-1::0;;16777:33:0;;::::1;::::0;::::1;::::0;;;16825:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;16872:34:::1;::::0;16777:26;;16872:19:::1;:34::i;:::-;16921:36;16943:7;16952:4;16921:21;:36::i;:::-;16419:961:::0;;:::o;16739:634::-:1;-1:-1:-1::0;;;;;16990:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;17018:4:::1;-1:-1:-1::0;;16990:32:0;;::::1;::::0;::::1;::::0;;;17037:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;17085:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;17131:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;17178:33:::1;::::0;16990:25;;17178:19:::1;:33::i;:::-;17226:34;17246:7;17255:4;17226:19;:34::i;:::-;17275:35;17297:6;17305:4;22878:1522:::0;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;22972:7:::1;22968:1425;;;-1:-1:-1::0;;;;;23005:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23004:21;22996:62;;;::::0;-1:-1:-1;;;22996:62:0;;10030:2:1;22996:62:0::1;::::0;::::1;10012:21:1::0;10069:2;10049:18;;;10042:30;10108;10088:18;;;10081:58;10156:18;;22996:62:0::1;9828:352:1::0;22996:62:0::1;-1:-1:-1::0;;;;;23077:16:0;::::1;23096:1;23077:16:::0;;;::::1;::::0;;;;;;;:20;23073:117:::1;;-1:-1:-1::0;;;;;23157:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;23137:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23118:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23073:117:::1;-1:-1:-1::0;;;;;23204:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23204:27:0::1;23227:4;23204:27;::::0;;23261:6:::1;::::0;;;::::1;23250:17;23246:80;;23287:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23287:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23287:23:0::1;-1:-1:-1::0;;;;;23287:23:0;::::1;;::::0;;16419:961;;:::o;22968:1425::-:1;23348:7;23343:1050;;-1:-1:-1::0;;;;;23380:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23372:61;;;::::0;-1:-1:-1;;;23372:61:0;;10387:2:1;23372:61:0::1;::::0;::::1;10369:21:1::0;10426:2;10406:18;;;10399:30;10465;10445:18;;;10438:58;10513:18;;23372:61:0::1;10185:352:1::0;23372:61:0::1;23463:6;::::0;-1:-1:-1;;;;;23463:6:0;;::::1;23452:17:::0;;::::1;::::0;23448:934:::1;;23528:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;23509:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;23490:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;23557:7:::1;:16:::0;;;;;:20;;;23596:11:::1;:20:::0;;;:28;;-1:-1:-1;;23596:28:0::1;::::0;;16419:961;;:::o;23448:934::-:1;23650:9;:16:::0;23670:1:::1;23650:21:::0;23646:736:::1;;23730:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;23711:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;23692:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;23759:7:::1;:16:::0;;;;;:20;;;23798:11:::1;:20:::0;;;:28;;-1:-1:-1;;23798:28:0::1;::::0;;23845:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23845:15:0;;;;;-1:-1:-1;;;;;;23845:15:0::1;::::0;;;;;16419:961;;:::o;23646:736::-:1;23906:9;23901:466;23925:9;:16:::0;23921:20;::::1;23901:466;;;23991:7;-1:-1:-1::0;;;;;23975:23:0::1;:9;23985:1;23975:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23975:12:0::1;:23:::0;23971:377:::1;;24042:9;24052:16:::0;;:20:::1;::::0;24071:1:::1;::::0;24052:20:::1;:::i;:::-;24042:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24027:9:::1;:12:::0;;-1:-1:-1;;;;;24042:31:0;;::::1;::::0;24037:1;;24027:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;24027:46:0::1;;;;;-1:-1:-1::0;;;;;24027:46:0::1;;;;;;24138:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;24119:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;24100:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;24175:7:::1;:16:::0;;;;;:20;;;24222:11:::1;:20:::0;;;:28;;-1:-1:-1;;24222:28:0::1;::::0;;24277:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24277:15:0;;;;;-1:-1:-1;;;;;;24277:15:0::1;::::0;;;;;23901:466:::1;22878:1522:::0;;:::o;23971:377::-:1;23943:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23901:466;;;;22878:1522:::0;;:::o;9625:83::-;9680:7;4888:13;4827:2;4888;:13;:::i;:::-;4871:30;;4676:9;4871:30;:::i;:::-;9691:14;;9625:83;:::o;11251:306::-;-1:-1:-1;;;;;11372:19:0;;11351:4;11372:19;;;:11;:19;;;;;;;;11392:10;11372:31;;;;;;;;-1:-1:-1;;11372:52:0;11368:126;;-1:-1:-1;;;;;11441:19:0;;;;;;:11;:19;;;;;;;;11461:10;11441:31;;;;;;;:41;;11476:6;;11441:19;:41;;11476:6;;11441:41;:::i;:::-;;;;-1:-1:-1;;11368:126:0;11513:36;11523:6;11531:9;11542:6;11513:9;:36::i;:::-;11506:43;11251:306;-1:-1:-1;;;;11251:306:0:o;22295:447::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;22430:7:::1;:14;22411:8;:15;:33;22403:67;;;::::0;-1:-1:-1;;;22403:67:0;;12969:2:1;22403:67:0::1;::::0;::::1;12951:21:1::0;13008:2;12988:18;;;12981:30;13047:23;13027:18;;;13020:51;13088:18;;22403:67:0::1;12767:345:1::0;22403:67:0::1;22486:8;22481:254;22504:8;:15;22500:1;:19;;;22481:254;;;22585:13;4827:2;22585;:13;:::i;:::-;22574:7;22582:1;22574:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;22549:21;22559:10;22549:9;:21::i;:::-;:49;;22541:80;;;::::0;-1:-1:-1;;;22541:80:0;;13319:2:1;22541:80:0::1;::::0;::::1;13301:21:1::0;13358:2;13338:18;;;13331:30;13397:20;13377:18;;;13370:48;13435:18;;22541:80:0::1;13117:342:1::0;22541:80:0::1;22636:87;22653:10;22665:8;22674:1;22665:11;;;;;;;;;;:::i;:::-;;;;;;;4827:2;22689;:13;;;;:::i;:::-;22678:7;22686:1;22678:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;22704:5;22711::::0;22718:4:::1;22636:16;:87::i;:::-;-1:-1:-1::0;22521:3:0;::::1;::::0;::::1;:::i;:::-;;;;22481:254;;14261:141:::0;14314:7;14371:21;14389:1;14371:9;:21::i;:::-;14353:15;5789:42;14353:9;:15::i;:::-;:39;;;;:::i;:::-;4888:13;4827:2;4888;:13;:::i;:::-;4871:30;;4676:9;4871:30;:::i;:::-;14342:51;;;;:::i;24408:250::-;24474:7;24513;;24502;:18;;24494:73;;;;-1:-1:-1;;;24494:73:0;;13998:2:1;24494:73:0;;;13980:21:1;14037:2;14017:18;;;14010:30;14076:34;14056:18;;;14049:62;-1:-1:-1;;;14127:18:1;;;14120:40;14177:19;;24494:73:0;13796:406:1;24494:73:0;24578:19;24601:10;:8;:10::i;:::-;24578:33;-1:-1:-1;24629:21:0;24578:33;24629:7;:21;:::i;:::-;24622:28;24408:250;-1:-1:-1;;;24408:250:0:o;13532:140::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;-1:-1:-1;;;;;13624:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13624:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13532:140::o;15019:189::-;15148:6;;15110:7;;5652:5;;15158:21;;15138:17;;-1:-1:-1;;;;;15148:6:0;15138:9;:17::i;:::-;:41;;;;:::i;:::-;15137:62;;;;:::i;15923:217::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;16053:3:::1;16027:22;:29;;16019:64;;;::::0;-1:-1:-1;;;16019:64:0;;14631:2:1;16019:64:0::1;::::0;::::1;14613:21:1::0;14670:2;14650:18;;;14643:30;14709:24;14689:18;;;14682:52;14751:18;;16019:64:0::1;14429:346:1::0;16019:64:0::1;16094:13;:38:::0;15923:217::o;8260:654::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;-1:-1:-1;;;;;8339:22:0;::::1;8331:96;;;::::0;-1:-1:-1;;;8331:96:0;;14982:2:1;8331:96:0::1;::::0;::::1;14964:21:1::0;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;15131:31;15111:18;;;15104:59;15180:19;;8331:96:0::1;14780:425:1::0;8331:96:0::1;-1:-1:-1::0;;;;;;;8446:16:0;::::1;::::0;8438:90:::1;;;::::0;-1:-1:-1;;;8438:90:0;;14982:2:1;8438:90:0::1;::::0;::::1;14964:21:1::0;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;15131:31;15111:18;;;15104:59;15180:19;;8438:90:0::1;14780:425:1::0;8438:90:0::1;8559:6;::::0;8539:34:::1;::::0;-1:-1:-1;;;;;8559:6:0::1;;8539:19;:34::i;:::-;8584:35;8604:8;8614:4;8584:19;:35::i;:::-;8654:6;::::0;8664:1:::1;::::0;8644:17:::1;::::0;-1:-1:-1;;;;;8654:6:0::1;8644:9;:17::i;:::-;:21;8640:127;;;8699:6;::::0;8682:73:::1;::::0;-1:-1:-1;;;;;8699:6:0::1;8707:8:::0;8717:17:::1;8699:6:::0;8717:9:::1;:17::i;8682:73::-;;8640:127;8806:6;::::0;;-1:-1:-1;;;;;8823:17:0;;::::1;-1:-1:-1::0;;;;;;8823:17:0;::::1;::::0;::::1;::::0;;;8856:40:::1;::::0;8806:6;::::1;::::0;8823:17;8806:6;;8856:40:::1;::::0;8787:16:::1;::::0;8856:40:::1;8320:594;8260:654:::0;:::o;13815:134::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;-1:-1:-1;;;;;13903:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;13903:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13815:134::o;12825:559::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;12900:16:::1;::::0;::::1;;12899:17;12891:26;;;::::0;::::1;;12952:4;-1:-1:-1::0;;;;;12936:21:0;::::1;::::0;12928:48:::1;;;::::0;-1:-1:-1;;;12928:48:0;;15412:2:1;12928:48:0::1;::::0;::::1;15394:21:1::0;15451:2;15431:18;;;15424:30;15490:16;15470:18;;;15463:44;15524:18;;12928:48:0::1;15210:338:1::0;12928:48:0::1;12987:11;:31:::0;;-1:-1:-1;;;;;;12987:31:0::1;;-1:-1:-1::0;;;;;12987:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13033:23:::1;::::0;;-1:-1:-1;;;13033:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13033:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;13033:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;13033:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;13029:348;;13366:8;::::0;::::1;13029:348;13120:9;:29:::0;;-1:-1:-1;;;;;;13120:29:0::1;;-1:-1:-1::0;;;;;13120:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13151:6:::1;:22:::0;;-1:-1:-1;;;;;;13151:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13175:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;13175:22:0::1;-1:-1:-1::0;13175:22:0::1;::::0;;13222:6:::1;::::0;13238:9;;13213:55:::1;::::0;13222:6;::::1;::::0;13238:9;;::::1;;-1:-1:-1::0;;13213:8:0::1;:55::i;:::-;13315:9;::::0;13283:62:::1;::::0;13300:4:::1;::::0;13315:9:::1;::::0;::::1;-1:-1:-1::0;;;;;13315:9:0::1;-1:-1:-1::0;;13283:8:0::1;:62::i;13029:348::-;12825:559:::0;:::o;10202:198::-;-1:-1:-1;;;;;10292:20:0;;10268:7;10292:20;;;:11;:20;;;;;;;;10288:49;;;-1:-1:-1;;;;;;10321:16:0;;;;;:7;:16;;;;;;;10202:198::o;10288:49::-;-1:-1:-1;;;;;10375:16:0;;:7;:16;;;;;;;;;;;10355:37;;:19;:37::i;8922:313::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;8990:16:::1;::::0;::::1;;8989:17;8981:77;;;::::0;-1:-1:-1;;;8981:77:0;;16145:2:1;8981:77:0::1;::::0;::::1;16127:21:1::0;16184:2;16164:18;;;16157:30;16223:34;16203:18;;;16196:62;16294:17;16274:18;;;16267:45;16329:19;;8981:77:0::1;15943:411:1::0;8981:77:0::1;9089:6;::::0;9069:34:::1;::::0;-1:-1:-1;;;;;9089:6:0::1;;9069:19;:34::i;:::-;9133:6;::::0;;-1:-1:-1;;;;;;9150:19:0;::::1;::::0;;;9185:42:::1;::::0;-1:-1:-1;;;;;9133:6:0;;::::1;::::0;9114:16:::1;::::0;9133:6;;9185:42:::1;::::0;9114:16;;9185:42:::1;8970:265;8922:313::o:0;14600:411::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;-1:-1:-1;;;;;14739:23:0;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;14766:25:0;::::1;::::0;::::1;14739:52;:77;;;;-1:-1:-1::0;;;;;;14795:21:0;::::1;::::0;::::1;14739:77;14731:113;;;::::0;-1:-1:-1;;;14731:113:0;;16561:2:1;14731:113:0::1;::::0;::::1;16543:21:1::0;16600:2;16580:18;;;16573:30;16639:25;16619:18;;;16612:53;16682:18;;14731:113:0::1;16359:347:1::0;14731:113:0::1;14855:11;:42:::0;;-1:-1:-1;;;;;14855:42:0;;::::1;-1:-1:-1::0;;;;;;14855:42:0;;::::1;;::::0;;;14908:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;14965:19;:38;;;;;::::1;::::0;::::1;;::::0;;14600:411::o;14410:182::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;14563:14:::1;:21:::0;;-1:-1:-1;;14563:21:0::1;14580:4;14563:21;::::0;;14410:182::o;12253:564::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;12335:7:::1;12330:480;;-1:-1:-1::0;;;;;12359:13:0;;::::1;12375:5;12359:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12359:21:0::1;::::0;;12395:11:::1;::::0;:34;;-1:-1:-1;;;12395:34:0;;::::1;::::0;::::1;16879:74:1::0;;;;16969:18;;;16962:50;;;;12359:21:0::1;12395:11:::0;::::1;::::0;;::::1;::::0;:21:::1;::::0;16852:18:1;;12395:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16419:961:::0;;:::o;12330:480::-:1;12466:17;::::0;:22;12462:135:::1;;12555:6;12535:17;;12517:15;:35;;;;:::i;:::-;:44;12509:72;;;::::0;-1:-1:-1;;;12509:72:0;;17225:2:1;12509:72:0::1;::::0;::::1;17207:21:1::0;17264:2;17244:18;;;17237:30;17303:17;17283:18;;;17276:45;17338:18;;12509:72:0::1;17023:339:1::0;12509:72:0::1;-1:-1:-1::0;;;;;12620:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;12619:14;12611:54;;;::::0;-1:-1:-1;;;12611:54:0;;17569:2:1;12611:54:0::1;::::0;::::1;17551:21:1::0;17608:2;17588:18;;;17581:30;17647:29;17627:18;;;17620:57;17694:18;;12611:54:0::1;17367:351:1::0;12611:54:0::1;-1:-1:-1::0;;;;;12680:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;12680:20:0::1;12696:4;12680:20:::0;;::::1;::::0;;;12735:15:::1;12715:17;:35:::0;12765:11:::1;::::0;:33;;-1:-1:-1;;;12765:33:0;;::::1;::::0;::::1;16879:74:1::0;;;;16969:18;;;16962:50;12680:20:0::1;12765:11:::0;::::1;::::0;;::::1;::::0;:21:::1;::::0;16852:18:1;;12765:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;11068:175:::0;8114:6;;11134:4;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;11183:9:::1;::::0;11151:62:::1;::::0;11168:4:::1;::::0;11183:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11183:9:0::1;-1:-1:-1::0;;11151:8:0::1;:62::i;:::-;-1:-1:-1::0;11231:4:0::1;11068:175:::0;:::o;10408:165::-;10486:4;10503:40;10513:10;10525:9;10536:6;10503:9;:40::i;:::-;-1:-1:-1;10561:4:0;;10408:165;-1:-1:-1;;;10408:165:0:o;21991:296::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;22069:16:::1;::::0;::::1;;22065:111;;;22127:4;-1:-1:-1::0;;;;;22110:22:0;::::1;::::0;22102:62:::1;;;::::0;-1:-1:-1;;;22102:62:0;;17925:2:1;22102:62:0::1;::::0;::::1;17907:21:1::0;17964:2;17944:18;;;17937:30;18003:29;17983:18;;;17976:57;18050:18;;22102:62:0::1;17723:351:1::0;22102:62:0::1;22240:6;::::0;22248:30:::1;::::0;-1:-1:-1;;;22248:30:0;;22272:4:::1;22248:30;::::0;::::1;160:74:1::0;22208:5:0;;-1:-1:-1;;;;;22225:14:0;;::::1;::::0;::::1;::::0;22240:6;;;::::1;::::0;22225:14;;22248:15:::1;::::0;133:18:1;;22248:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22225:54;::::0;-1:-1:-1;;;;;;22225:54:0::1;::::0;;;;;;-1:-1:-1;;;;;18460:55:1;;;22225:54:0::1;::::0;::::1;18442:74:1::0;18532:18;;;18525:34;18415:18;;22225:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16148:263::-:0;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;16257:19:::1;:33:::0;;-1:-1:-1;;16257:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;16301:22:::1;:47:::0;;-1:-1:-1;;16301:47:0::1;::::0;::::1;;;::::0;;16364:39:::1;::::0;1738:41:1;;;16364:39:0::1;::::0;1726:2:1;1711:18;16364:39:0::1;;;;;;;16148:263:::0;;:::o;11565:680::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;11645:16:::1;::::0;::::1;;11644:17;11636:60;;;::::0;-1:-1:-1;;;11636:60:0;;19022:2:1;11636:60:0::1;::::0;::::1;19004:21:1::0;19061:2;19041:18;;;19034:30;19100:32;19080:18;;;19073:60;19150:18;;11636:60:0::1;18820:354:1::0;11636:60:0::1;11707:20;11740:9;11707:43;;11761:16;11791:10;-1:-1:-1::0;;;;;11791:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11780:40:0::1;;11829:4;11836:10;-1:-1:-1::0;;;;;11836:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11780:74;::::0;-1:-1:-1;;;;;;11780:74:0::1;::::0;;;;;;-1:-1:-1;;;;;19688:15:1;;;11780:74:0::1;::::0;::::1;19670:34:1::0;19740:15;;19720:18;;;19713:43;19582:18;;11780:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11873:6;::::0;-1:-1:-1;;;;;11873:6:0;;::::1;11883:5;11865:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;11865:23:0::1;::::0;;11761:93;;-1:-1:-1;11903:22:0;::::1;11899:200;;11962:10;-1:-1:-1::0;;;;;11962:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11951:43:0::1;;12003:4;12010:10;-1:-1:-1::0;;;;;12010:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11951:77;::::0;-1:-1:-1;;;;;;11951:77:0::1;::::0;;;;;;-1:-1:-1;;;;;19688:15:1;;;11951:77:0::1;::::0;::::1;19670:34:1::0;19740:15;;19720:18;;;19713:43;19582:18;;11951:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11942:6;:86:::0;;-1:-1:-1;;;;;;11942:86:0::1;-1:-1:-1::0;;;;;11942:86:0;;;::::1;::::0;;;::::1;::::0;;11899:200:::1;;;12070:6;:17:::0;;-1:-1:-1;;;;;;12070:17:0::1;-1:-1:-1::0;;;;;12070:17:0;::::1;;::::0;;11899:200:::1;12109:9;:22:::0;;-1:-1:-1;;;;;;12109:22:0::1;;-1:-1:-1::0;;;;;12109:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12150:6:::1;::::0;;::::1;-1:-1:-1::0;12142:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;12142:22:0::1;-1:-1:-1::0;12142:22:0::1;::::0;;12207:9;;12175:62:::1;::::0;12192:4:::1;::::0;12207:9;::::1;;-1:-1:-1::0;;12175:8:0::1;:62::i;21801:182::-:0;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;21868:16:::1;::::0;::::1;;21867:17;21859:58;;;::::0;-1:-1:-1;;;21859:58:0;;19969:2:1;21859:58:0::1;::::0;::::1;19951:21:1::0;20008:2;19988:18;;;19981:30;20047;20027:18;;;20020:58;20095:18;;21859:58:0::1;19767:352:1::0;21859:58:0::1;21936:6;::::0;21928:47:::1;::::0;-1:-1:-1;;;;;21936:6:0;;::::1;::::0;21953:21:::1;21928:47:::0;::::1;;;::::0;21936:6:::1;21928:47:::0;21936:6;21928:47;21953:21;21936:6;21928:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;15216:699:::0;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;15416:16;15396;4888:13:::1;4827:2;4888;:13;:::i;:::-;4871:30;::::0;4676:9:::1;4871:30;:::i;:::-;15386:26;;;;:::i;:::-;15385:47;;;;:::i;:::-;15369:13;:63:::0;15484:13;15467;4888::::1;4827:2;4888;:13;:::i;:::-;4871:30;::::0;4676:9:::1;4871:30;:::i;:::-;15457:23;;;;:::i;:::-;15456:41;;;;:::i;:::-;15443:10;:54:::0;;;15516:13:::1;::::0;:27:::1;;15508:73;;;::::0;-1:-1:-1;;;15508:73:0;;20326:2:1;15508:73:0::1;::::0;::::1;20308:21:1::0;20365:2;20345:18;;;20338:30;20404:34;20384:18;;;20377:62;-1:-1:-1;;;20455:18:1;;;20448:31;20496:19;;15508:73:0::1;20124:397:1::0;15508:73:0::1;15625:6;::::0;5652:5:::1;::::0;15615:17:::1;::::0;-1:-1:-1;;;;;15625:6:0::1;15615:9;:17::i;:::-;:23;::::0;15635:3:::1;15615:23;:::i;:::-;15614:44;;;;:::i;:::-;15600:10;;:58;;15592:106;;;::::0;-1:-1:-1;;;15592:106:0;;20728:2:1;15592:106:0::1;::::0;::::1;20710:21:1::0;20767:2;20747:18;;;20740:30;20806:34;20786:18;;;20779:62;-1:-1:-1;;;20857:18:1;;;20850:33;20900:19;;15592:106:0::1;20526:399:1::0;15592:106:0::1;15741:9;4888:13;4827:2;4888;:13;:::i;:::-;4871:30;::::0;4676:9:::1;4871:30;:::i;:::-;15731:19;;;;:::i;:::-;15717:10;;:33;;15709:92;;;::::0;-1:-1:-1;;;15709:92:0;;21132:2:1;15709:92:0::1;::::0;::::1;21114:21:1::0;21171:2;21151:18;;;21144:30;21210:34;21190:18;;;21183:62;-1:-1:-1;;;21261:18:1;;;21254:44;21315:19;;15709:92:0::1;20930:410:1::0;15709:92:0::1;15847:9;4888:13;4827:2;4888;:13;:::i;:::-;4871:30;::::0;4676:9:::1;4871:30;:::i;:::-;15837:19;;;;:::i;:::-;15820:13;;:36;;15812:95;;;::::0;-1:-1:-1;;;15812:95:0;;21132:2:1;15812:95:0::1;::::0;::::1;21114:21:1::0;21171:2;21151:18;;;21144:30;21210:34;21190:18;;;21183:62;-1:-1:-1;;;21261:18:1;;;21254:44;21315:19;;15812:95:0::1;20930:410:1::0;15812:95:0::1;15216:699:::0;;;;:::o;14105:148::-;8114:6;;-1:-1:-1;;;;;8114:6:0;8124:10;8114:20;8106:50;;;;-1:-1:-1;;;8106:50:0;;9344:2:1;8106:50:0;;;9326:21:1;9383:2;9363:18;;;9356:30;-1:-1:-1;;;;;;;;;;;9402:18:1;;;9395:47;9459:18;;8106:50:0;9142:341:1;8106:50:0;-1:-1:-1;;;;;14201:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14201:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14105:148::o;10750:310::-;-1:-1:-1;;;;;10845:20:0;;10837:52;;;;-1:-1:-1;;;10837:52:0;;21547:2:1;10837:52:0;;;21529:21:1;21586:2;21566:18;;;21559:30;-1:-1:-1;;;21605:18:1;;;21598:49;21664:18;;10837:52:0;21345:343:1;10837:52:0;-1:-1:-1;;;;;10908:21:0;;10900:53;;;;-1:-1:-1;;;10900:53:0;;21547:2:1;10900:53:0;;;21529:21:1;21586:2;21566:18;;;21559:30;-1:-1:-1;;;21605:18:1;;;21598:49;21664:18;;10900:53:0;21345:343:1;10900:53:0;-1:-1:-1;;;;;10966:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11019:33;;391:25:1;;;11019:33:0;;364:18:1;11019:33:0;;;;;;;10750:310;;;:::o;27952:1004::-;28031:7;;27994;;;4888:13;4827:2;4888;:13;:::i;:::-;4871:30;;4676:9;4871:30;:::i;:::-;28170:6;;-1:-1:-1;;;;;28170:6:0;28084:15;28158:19;;;:11;:19;;;;;;28049:24;;-1:-1:-1;28102:6:0;;28049:24;;28158:19;;28154:286;;;28221:6;;-1:-1:-1;;;;;28221:6:0;28194:16;28213:15;;;;;;;;;;;;28221:6;28262:15;;;;;;;28296:18;;;;:40;;;28329:7;28318:8;:18;28296:40;28292:68;;;28345:15;28354:6;28345;:15;:::i;:::-;28338:22;;;;;;;;27952:1004;:::o;28292:68::-;28375:19;28386:8;28375:19;;:::i;:::-;;-1:-1:-1;28409:19:0;28420:8;28409:19;;:::i;:::-;;;28179:261;;28154:286;28454:9;:16;:20;28450:400;;28496:7;28491:348;28513:9;:16;28509:20;;;;28491:348;;;28555:14;28572:7;:21;28580:9;28590:1;28580:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28580:12:0;28572:21;;;;;;;;;;;;;28637:9;:12;;28572:21;;-1:-1:-1;28580:12:0;;;;28637:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28637:12:0;28629:21;;;;;;;;;;;;;;-1:-1:-1;28673:16:0;;;;:36;;;28702:7;28693:6;:16;28673:36;28669:64;;;28718:15;28727:6;28718;:15;:::i;:::-;28711:22;;;;;;;;;27952:1004;:::o;28669:64::-;28762:16;28772:6;28762:7;:16;:::i;:::-;28752:26;-1:-1:-1;28807:16:0;28817:6;28807:7;:16;:::i;:::-;28797:26;;28536:303;;28531:3;;;;;:::i;:::-;;;;28491:348;;;;28450:400;28874:15;28883:6;28874;:15;:::i;:::-;28864:7;:25;28860:53;;;28898:15;28907:6;28898;:15;:::i;:::-;28891:22;;;;;;27952:1004;:::o;28860:53::-;28931:17;28941:7;28931;:17;:::i;17842:1402::-;17921:4;-1:-1:-1;;;;;17946:18:0;;17938:68;;;;-1:-1:-1;;;17938:68:0;;22075:2:1;17938:68:0;;;22057:21:1;22114:2;22094:18;;;22087:30;22153:34;22133:18;;;22126:62;-1:-1:-1;;;22204:18:1;;;22197:35;22249:19;;17938:68:0;21873:401:1;17938:68:0;-1:-1:-1;;;;;18025:16:0;;18017:64;;;;-1:-1:-1;;;18017:64:0;;22481:2:1;18017:64:0;;;22463:21:1;22520:2;22500:18;;;22493:30;22559:34;22539:18;;;22532:62;-1:-1:-1;;;22610:18:1;;;22603:33;22653:19;;18017:64:0;22279:399:1;18017:64:0;18109:1;18100:6;:10;18092:64;;;;-1:-1:-1;;;18092:64:0;;22885:2:1;18092:64:0;;;22867:21:1;22924:2;22904:18;;;22897:30;22963:34;22943:18;;;22936:62;-1:-1:-1;;;23014:18:1;;;23007:39;23063:19;;18092:64:0;22683:405:1;18092:64:0;-1:-1:-1;;;;;18255:13:0;;18167:8;18255:13;;;:7;:13;;;;;;18167:8;;;;18255:13;;18251:162;;;18291:4;18285:10;;18251:162;;;-1:-1:-1;;;;;18317:11:0;;;;;;:7;:11;;;;;;;;18313:100;;;18352:4;18345:11;;18313:100;;;-1:-1:-1;18397:4:0;18313:100;18429:4;18425:742;;;18455:6;;;;18450:706;;18486:19;;;;;;;:64;;;;-1:-1:-1;;;;;;18530:20:0;;;;;;:16;:20;;;;;;;;18529:21;18486:64;:111;;;;-1:-1:-1;;;;;;18575:22:0;;;;;;:16;:22;;;;;;;;18574:23;18486:111;18482:659;;;18640:28;18671:24;18689:4;18671:9;:24::i;:::-;18640:55;;18746:13;;18722:20;:37;18718:404;;18806:10;;18847:22;;;;18843:97;;;18904:13;;18894:6;;5652:5;;18904:13;18884:17;;-1:-1:-1;;;;;18894:6:0;18884:9;:17::i;:::-;:33;;;;:::i;:::-;18883:54;;;;:::i;:::-;18873:64;;18843:97;18994:7;18970:20;:31;18966:72;;19028:7;19005:30;;18966:72;19064:34;19077:20;19064:12;:34::i;:::-;18761:361;18718:404;18617:524;18482:659;19184:52;19201:4;19207:2;19211:6;19219:3;19224:4;19230:5;19184:16;:52::i;:::-;19177:59;17842:1402;-1:-1:-1;;;;;;;17842:1402:0:o;24923:971::-;-1:-1:-1;;;;;25094:25:0;;25043:4;25094:25;;;:19;:25;;;;;;25075:4;;25094:25;;;:52;;-1:-1:-1;;;;;;25123:23:0;;;;;;:19;:23;;;;;;;;25094:52;25090:99;;;-1:-1:-1;25172:5:0;25090:99;25201:25;25229:55;25239:4;25245:2;25249:7;25258;25267:3;25272:4;25278:5;25229:9;:55::i;:::-;25329:14;;;;-1:-1:-1;;;;;25313:13:0;;:7;:13;;;;;;;;;;;25201:83;;-1:-1:-1;25313:30:0;;;:::i;:::-;-1:-1:-1;;;;;25297:13:0;;;:7;:13;;;;;;;;;;;:46;;;;25382:22;;;;25368:11;;;;;;;;;;:36;;25382:22;25368:36;:::i;:::-;-1:-1:-1;;;;;25354:11:0;;;:7;:11;;;;;;;;;;;:50;;;;25421:17;;;;;:11;:17;;;;;;;25417:89;;;-1:-1:-1;;;;;25471:13:0;;;;;;:7;:13;;;;;;:23;;25487:7;;25471:23;:::i;:::-;-1:-1:-1;;;;;25455:13:0;;;;;;:7;:13;;;;;:39;25417:89;-1:-1:-1;;;;;25520:15:0;;;;;;:11;:15;;;;;;;;25516:100;;;25580:22;;-1:-1:-1;;;;;25566:11:0;;25580:22;25566:11;;;:7;:11;;;;;;:36;;25580:22;25566:36;:::i;:::-;-1:-1:-1;;;;;25552:11:0;;;;;;:7;:11;;;;;:50;25516:100;25646:1;25632:6;:11;;;:15;:34;;;;25665:1;25651:6;:11;;;:15;25632:34;25628:89;;;25694:6;:11;;;25683:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;25628:89:0;25747:2;-1:-1:-1;;;;;25732:42:0;25741:4;-1:-1:-1;;;;;25732:42:0;;25751:6;:22;;;25732:42;;;;391:25:1;;379:2;364:18;;245:177;25732:42:0;;;;;;;;25790:16;;;;25785:78;;25823:28;25842:4;25848:2;25823:18;:28::i;:::-;-1:-1:-1;25882:4:0;;24923:971;-1:-1:-1;;;;;;;;24923:971:0:o;19252:1530::-;6741:6;:13;;-1:-1:-1;;6741:13:0;6750:4;6741:13;;;19335:30:::1;::::0;;::::1;::::0;::::1;::::0;;19358:7:::1;19335:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19335:30:0;::::1;::::0;;::::1;::::0;;;;;;6741:6;19380:21;19376:60:::1;;19418:7;;;19376:60;19472:4;19452:26;::::0;;;:11:::1;:26;::::0;;;;;;;19487:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;19487:9:0::1;19452:46:::0;;;;;;;;-1:-1:-1;;19452:67:0::1;19448:166;;19556:4;19536:26;::::0;;;:11:::1;:26;::::0;;;;;;;19571:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;19571:9:0::1;19536:46:::0;;;;;;;-1:-1:-1;;19536:66:0;;19448:166:::1;19658:16;::::0;;19672:1:::1;19658:16:::0;;;;;::::1;::::0;;19634:21:::1;::::0;19658:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19658:16:0::1;19634:40;;19703:4;19685;19690:1;19685:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;19685:23:0::1;;;-1:-1:-1::0;;;;;19685:23:0::1;;;::::0;::::1;19729:9;;;;;;;;;-1:-1:-1::0;;;;;19729:9:0::1;-1:-1:-1::0;;;;;19729:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19719:4;19724:1;19719:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19719:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;19762:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;19762:199:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;19837:20;;19872:1:::1;::::0;19888:4;;19915::::1;::::0;19935:15:::1;::::0;19762:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;19758:246;;19986:7;;;;19758:246;20016:18;20037:21;20016:42;;20069:12;20092:22:::0;20149:6:::1;:16;;;20117:48;;20131:6;:14;;;20118:27;;:10;:27;;;;:::i;:::-;20117:48;;;;:::i;:::-;20092:73;;20176:26;20241:6;:16;;;20205:52;;20219:6;:18;;;20206:31;;:10;:31;;;;:::i;:::-;20205:52;;;;:::i;:::-;20176:81:::0;-1:-1:-1;20268:24:0::1;20309:35;20330:14:::0;20176:81;20309:35:::1;:::i;:::-;20295:50;::::0;:10;:50:::1;:::i;:::-;20360:14;::::0;::::1;::::0;20268:77;;-1:-1:-1;20360:18:0::1;;::::0;20356:127:::1;;20408:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;20408:19:0;;::::1;::::0;20461:5:::1;::::0;20440:14;;20408:63:::1;::::0;;;20440:14;20408:19;20461:5;20408:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20395:76:0;;-1:-1:-1;;20356:127:0::1;20497:16;::::0;::::1;::::0;:20:::1;;::::0;20493:133:::1;;20547:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;20547:21:0;;::::1;::::0;20604:5:::1;::::0;20581:16;;20547:67:::1;::::0;;;20581:16;20547:21;20604:5;20547:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20534:80:0;;-1:-1:-1;;20493:133:0::1;20640:18;::::0;::::1;::::0;:22:::1;;::::0;20636:139:::1;;20692:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;20692:23:0;;::::1;::::0;20753:5:::1;::::0;20728:18;;20692:71:::1;::::0;;;20728:18;20692:23;20753:5;20692:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20679:84:0;;-1:-1:-1;;20636:139:0::1;19324:1458;;;;;;;6765:1;-1:-1:-1::0;6777:6:0;:14;;-1:-1:-1;;6777:14:0;;;19252:1530::o;25902:2042::-;26029:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26029:18:0;26060:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26060:25:0;26096:30;;;;;;;;26119:7;26096:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26096:30:0;;;;;;;;;26158:10;:8;:10::i;:::-;26137:18;;;:31;;;26198:28;;:7;:28;:::i;:::-;26181:14;;;;:45;;;;26294:11;;;;26274:17;;26255:16;;;;26239:13;;26255:36;;;:::i;:::-;:50;;;;:::i;:::-;26239:66;;;;26320:5;26329:1;26320:10;26316:58;;26357:5;26347:15;;26316:58;26390:7;26386:815;;;26414:18;26465:3;26461:229;;;-1:-1:-1;26502:9:0;:16;;;26461:229;;;26544:4;26540:150;;;-1:-1:-1;26582:9:0;:17;;;;;;26540:150;;;-1:-1:-1;26653:9:0;:21;;;;;;26540:150;26706:17;5652:5;26727:20;26737:10;26727:7;:20;:::i;:::-;26726:41;;;;:::i;:::-;26809:17;;26706:61;;-1:-1:-1;26830:5:0;;26797:29;;;;26706:61;26797:29;:::i;:::-;26796:39;;;;:::i;:::-;26782:11;;;:53;26878:11;;;;26893:5;;26866:23;;;;:9;:23;:::i;:::-;26865:33;;;;:::i;:::-;26850:12;;;:48;;;26941:11;;;;:26;;26850:48;26941:26;:::i;:::-;26928:40;;:9;:40;:::i;:::-;26913:12;;;:55;;;27048:12;;;;27019:11;;;;27048:12;;27019:26;;;:::i;:::-;:41;;;;:::i;:::-;27008:53;;:7;:53;:::i;:::-;26983:78;;27106:18;;;;27092:11;;;;:32;;27106:18;27092:32;:::i;:::-;27078:11;;;:46;-1:-1:-1;26386:815:0;;-1:-1:-1;26386:815:0;;27157:32;;;26386:815;27217:12;;;;:16;27213:290;;27291:6;:18;;;27276:6;:12;;;:33;;;;:::i;:::-;27266:4;27250:7;:22;;;;;;;;;;:59;;:22;;:7;:59;;;;;:::i;:::-;;;;-1:-1:-1;;27348:4:0;27328:26;;;;:11;:26;;;;;;;;27324:105;;;27401:12;;;;;27391:4;27375:22;;;;:7;:22;;;;;:38;;27401:12;;27375:22;;:38;;27401:12;;27375:38;:::i;:::-;;;;-1:-1:-1;;27324:105:0;27471:4;-1:-1:-1;;;;;27448:43:0;27457:4;-1:-1:-1;;;;;27448:43:0;;27478:6;:12;;;27448:43;;;;391:25:1;;379:2;364:18;;245:177;27448:43:0;;;;;;;;27213:290;27519:12;;;;:16;27515:254;;27584:6;:18;;;27569:6;:12;;;:33;;;;:::i;:::-;5789:42;27552:7;:13;;;;;;;;:50;;:13;;:7;:50;;;;;:::i;:::-;;;;-1:-1:-1;;5789:42:0;27621:17;;:11;:17;;;;;;27617:87;;;27676:12;;;;5789:42;27659:13;;;;:7;:13;;;:29;;:13;;;:29;;27676:12;;27659:29;:::i;:::-;;;;-1:-1:-1;;27617:87:0;5789:42;-1:-1:-1;;;;;27723:34:0;27732:4;-1:-1:-1;;;;;27723:34:0;;27744:6;:12;;;27723:34;;;;391:25:1;;379:2;364:18;;245:177;27723:34:0;;;;;;;;27515:254;27892:6;:18;;;27877:6;:12;;;:33;;;;:::i;:::-;27854:6;:18;;;27839:6;:12;;;:33;;;;:::i;:::-;27824:6;:11;;;:49;;;;:::i;:::-;:87;;;;:::i;:::-;27806:6;:14;;;:106;;;;:::i;:::-;27781:22;;;:131;-1:-1:-1;27781:22:0;;25902:2042;-1:-1:-1;;;;;;;;;25902:2042:0:o;20790:1003::-;20873:16;;;;20872:17;20864:65;;;;-1:-1:-1;;;20864:65:0;;24709:2:1;20864:65:0;;;24691:21:1;24748:2;24728:18;;;24721:30;24787:34;24767:18;;;24760:62;-1:-1:-1;;;24838:18:1;;;24831:33;24881:19;;20864:65:0;24507:399:1;20864:65:0;20945:20;20956:4;20962:2;20945:10;:20::i;:::-;20944:21;:37;;;;-1:-1:-1;20975:6:0;;-1:-1:-1;;;;;20969:12:0;;;20975:6;;20969:12;20944:37;20940:846;;;-1:-1:-1;;;;;20998:23:0;;;;;;;:17;:23;;;;;;;;:30;;21024:4;-1:-1:-1;;20998:30:0;;;;;;;;21043:19;:25;;;;;:32;;;;;;;;21090:16;:23;;;;;;;;;;;;20998:30;21140:11;;;21128:114;;21186:11;:40;;-1:-1:-1;;;;;;21186:40:0;21220:4;21186:40;;;;;21128:114;21256:19;:26;;-1:-1:-1;;21256:26:0;;;;;21302:32;;-1:-1:-1;1738:41:1;;21302:32:0;;1726:2:1;1711:18;21302:32:0;;;;;;;21353:11;;21375:6;;21353:87;;-1:-1:-1;;;21353:87:0;;-1:-1:-1;;;;;21375:6:0;;;21353:87;;;25134:74:1;25256:10;21390:12:0;25244:23:1;25224:18;;;25217:51;25316:18;21412:15:0;25304:31:1;25284:18;;;25277:59;4827:2:0;25352:18:1;;;25345:45;21353:11:0;;;;;;:21;;25106:19:1;;21353:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21349:103;21470:11;;21501:6;;-1:-1:-1;;;;;21470:11:0;;;;;;;:20;;21491:17;;21501:6;21491:9;:17::i;:::-;21470:39;;;;;;;;;;;;;391:25:1;;379:2;364:18;;245:177;21470:39:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21470:39:0;;;;;;;;-1:-1:-1;;21470:39:0;;;;;;;;;;;;:::i;:::-;;;21466:219;;;21585:13;:29;;;;21633:10;:27;21466:219;21699:23;:31;;-1:-1:-1;;21699:31:0;;;21759:15;21745:11;:29;20790:1003;;:::o;17388:446::-;17489:6;;17457:4;;-1:-1:-1;;;;;17481:14:0;;;17489:6;;17481:14;;;;:43;;-1:-1:-1;17518:6:0;;-1:-1:-1;;;;;17512:12:0;;;17518:6;;17512:12;;17481:43;:79;;;;-1:-1:-1;17554:6:0;;-1:-1:-1;;;;;17554:6:0;17541:9;:19;;17481:79;:118;;;;-1:-1:-1;;;;;;17578:21:0;;;;;;:17;:21;;;;;;;;17577:22;17481:118;:159;;;;-1:-1:-1;;;;;;17617:23:0;;;;;;:17;:23;;;;;;;;17616:24;17481:159;:186;;;;-1:-1:-1;;;;;;17657:10:0;;5789:42;17657:10;;17481:186;:219;;;;-1:-1:-1;;;;;;17684:16:0;;;;17481:219;:257;;;;-1:-1:-1;;;;;;17717:21:0;;17733:4;17717:21;;17481:257;:302;;;;-1:-1:-1;17771:11:0;;-1:-1:-1;;;;;17755:28:0;;;17771:11;;;;;17755:28;;17481:302;:345;;;;-1:-1:-1;;17814:11:0;;;;;-1:-1:-1;;;;;17814:11:0;;;17800:26;;;;;17474:352;-1:-1:-1;17388:446:0:o;797:548:1:-;909:4;938:2;967;956:9;949:21;999:6;993:13;1042:6;1037:2;1026:9;1022:18;1015:34;1067:1;1077:140;1091:6;1088:1;1085:13;1077:140;;;1186:14;;;1182:23;;1176:30;1152:17;;;1171:2;1148:26;1141:66;1106:10;;1077:140;;;1081:3;1266:1;1261:2;1252:6;1241:9;1237:22;1233:31;1226:42;1336:2;1329;1325:7;1320:2;1312:6;1308:15;1304:29;1293:9;1289:45;1285:54;1277:62;;;;797:548;;;;:::o;1790:154::-;-1:-1:-1;;;;;1869:5:1;1865:54;1858:5;1855:65;1845:93;;1934:1;1931;1924:12;1949:315;2017:6;2025;2078:2;2066:9;2057:7;2053:23;2049:32;2046:52;;;2094:1;2091;2084:12;2046:52;2133:9;2120:23;2152:31;2177:5;2152:31;:::i;:::-;2202:5;2254:2;2239:18;;;;2226:32;;-1:-1:-1;;;1949:315:1:o;2269:247::-;2328:6;2381:2;2369:9;2360:7;2356:23;2352:32;2349:52;;;2397:1;2394;2387:12;2349:52;2436:9;2423:23;2455:31;2480:5;2455:31;:::i;2521:388::-;2589:6;2597;2650:2;2638:9;2629:7;2625:23;2621:32;2618:52;;;2666:1;2663;2656:12;2618:52;2705:9;2692:23;2724:31;2749:5;2724:31;:::i;:::-;2774:5;-1:-1:-1;2831:2:1;2816:18;;2803:32;2844:33;2803:32;2844:33;:::i;:::-;2896:7;2886:17;;;2521:388;;;;;:::o;2914:118::-;3000:5;2993:13;2986:21;2979:5;2976:32;2966:60;;3022:1;3019;3012:12;3037:382;3102:6;3110;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;3218:9;3205:23;3237:31;3262:5;3237:31;:::i;:::-;3287:5;-1:-1:-1;3344:2:1;3329:18;;3316:32;3357:30;3316:32;3357:30;:::i;3424:456::-;3501:6;3509;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:52;;;3586:1;3583;3576:12;3538:52;3625:9;3612:23;3644:31;3669:5;3644:31;:::i;:::-;3694:5;-1:-1:-1;3751:2:1;3736:18;;3723:32;3764:33;3723:32;3764:33;:::i;:::-;3424:456;;3816:7;;-1:-1:-1;;;3870:2:1;3855:18;;;;3842:32;;3424:456::o;3885:127::-;3946:10;3941:3;3937:20;3934:1;3927:31;3977:4;3974:1;3967:15;4001:4;3998:1;3991:15;4017:275;4088:2;4082:9;4153:2;4134:13;;-1:-1:-1;;4130:27:1;4118:40;;4188:18;4173:34;;4209:22;;;4170:62;4167:88;;;4235:18;;:::i;:::-;4271:2;4264:22;4017:275;;-1:-1:-1;4017:275:1:o;4297:183::-;4357:4;4390:18;4382:6;4379:30;4376:56;;;4412:18;;:::i;:::-;-1:-1:-1;4457:1:1;4453:14;4469:4;4449:25;;4297:183::o;4485:662::-;4539:5;4592:3;4585:4;4577:6;4573:17;4569:27;4559:55;;4610:1;4607;4600:12;4559:55;4646:6;4633:20;4672:4;4696:60;4712:43;4752:2;4712:43;:::i;:::-;4696:60;:::i;:::-;4790:15;;;4876:1;4872:10;;;;4860:23;;4856:32;;;4821:12;;;;4900:15;;;4897:35;;;4928:1;4925;4918:12;4897:35;4964:2;4956:6;4952:15;4976:142;4992:6;4987:3;4984:15;4976:142;;;5058:17;;5046:30;;5096:12;;;;5009;;4976:142;;;-1:-1:-1;5136:5:1;4485:662;-1:-1:-1;;;;;;4485:662:1:o;5152:1215::-;5270:6;5278;5331:2;5319:9;5310:7;5306:23;5302:32;5299:52;;;5347:1;5344;5337:12;5299:52;5387:9;5374:23;5416:18;5457:2;5449:6;5446:14;5443:34;;;5473:1;5470;5463:12;5443:34;5511:6;5500:9;5496:22;5486:32;;5556:7;5549:4;5545:2;5541:13;5537:27;5527:55;;5578:1;5575;5568:12;5527:55;5614:2;5601:16;5636:4;5660:60;5676:43;5716:2;5676:43;:::i;5660:60::-;5754:15;;;5836:1;5832:10;;;;5824:19;;5820:28;;;5785:12;;;;5860:19;;;5857:39;;;5892:1;5889;5882:12;5857:39;5916:11;;;;5936:217;5952:6;5947:3;5944:15;5936:217;;;6032:3;6019:17;6049:31;6074:5;6049:31;:::i;:::-;6093:18;;5969:12;;;;6131;;;;5936:217;;;6172:5;-1:-1:-1;;6215:18:1;;6202:32;;-1:-1:-1;;6246:16:1;;;6243:36;;;6275:1;6272;6265:12;6243:36;;6298:63;6353:7;6342:8;6331:9;6327:24;6298:63;:::i;:::-;6288:73;;;5152:1215;;;;;:::o;6372:180::-;6431:6;6484:2;6472:9;6463:7;6459:23;6455:32;6452:52;;;6500:1;6497;6490:12;6452:52;-1:-1:-1;6523:23:1;;6372:180;-1:-1:-1;6372:180:1:o;6746:553::-;6847:6;6855;6863;6916:2;6904:9;6895:7;6891:23;6887:32;6884:52;;;6932:1;6929;6922:12;6884:52;6971:9;6958:23;6990:31;7015:5;6990:31;:::i;:::-;7040:5;-1:-1:-1;7097:2:1;7082:18;;7069:32;7110:33;7069:32;7110:33;:::i;:::-;7162:7;-1:-1:-1;7221:2:1;7206:18;;7193:32;7234:33;7193:32;7234:33;:::i;:::-;7286:7;7276:17;;;6746:553;;;;;:::o;7304:376::-;7366:6;7374;7427:2;7415:9;7406:7;7402:23;7398:32;7395:52;;;7443:1;7440;7433:12;7395:52;7482:9;7469:23;7501:28;7523:5;7501:28;:::i;8752:385::-;8838:6;8846;8854;8862;8915:3;8903:9;8894:7;8890:23;8886:33;8883:53;;;8932:1;8929;8922:12;8883:53;-1:-1:-1;;8955:23:1;;;9025:2;9010:18;;8997:32;;-1:-1:-1;9076:2:1;9061:18;;9048:32;;9127:2;9112:18;9099:32;;-1:-1:-1;8752:385:1;-1:-1:-1;8752:385:1:o;10542:127::-;10603:10;10598:3;10594:20;10591:1;10584:31;10634:4;10631:1;10624:15;10658:4;10655:1;10648:15;10674:168;10747:9;;;10778;;10795:15;;;10789:22;;10775:37;10765:71;;10816:18;;:::i;10847:127::-;10908:10;10903:3;10899:20;10896:1;10889:31;10939:4;10936:1;10929:15;10963:4;10960:1;10953:15;10979:127;11040:10;11035:3;11031:20;11028:1;11021:31;11071:4;11068:1;11061:15;11095:4;11092:1;11085:15;11111:128;11178:9;;;11199:11;;;11196:37;;;11213:18;;:::i;11244:135::-;11283:3;11304:17;;;11301:43;;11324:18;;:::i;:::-;-1:-1:-1;11371:1:1;11360:13;;11244:135::o;11384:422::-;11473:1;11516:5;11473:1;11530:270;11551:7;11541:8;11538:21;11530:270;;;11610:4;11606:1;11602:6;11598:17;11592:4;11589:27;11586:53;;;11619:18;;:::i;:::-;11669:7;11659:8;11655:22;11652:55;;;11689:16;;;;11652:55;11768:22;;;;11728:15;;;;11530:270;;;11534:3;11384:422;;;;;:::o;11811:806::-;11860:5;11890:8;11880:80;;-1:-1:-1;11931:1:1;11945:5;;11880:80;11979:4;11969:76;;-1:-1:-1;12016:1:1;12030:5;;11969:76;12061:4;12079:1;12074:59;;;;12147:1;12142:130;;;;12054:218;;12074:59;12104:1;12095:10;;12118:5;;;12142:130;12179:3;12169:8;12166:17;12163:43;;;12186:18;;:::i;:::-;-1:-1:-1;;12242:1:1;12228:16;;12257:5;;12054:218;;12356:2;12346:8;12343:16;12337:3;12331:4;12328:13;12324:36;12318:2;12308:8;12305:16;12300:2;12294:4;12291:12;12287:35;12284:77;12281:159;;;-1:-1:-1;12393:19:1;;;12425:5;;12281:159;12472:34;12497:8;12491:4;12472:34;:::i;:::-;12542:6;12538:1;12534:6;12530:19;12521:7;12518:32;12515:58;;;12553:18;;:::i;:::-;12591:20;;11811:806;-1:-1:-1;;;11811:806:1:o;12622:140::-;12680:5;12709:47;12750:4;12740:8;12736:19;12730:4;12709:47;:::i;13464:197::-;13502:3;13530:6;13571:2;13564:5;13560:14;13598:2;13589:7;13586:15;13583:41;;13604:18;;:::i;:::-;13653:1;13640:15;;13464:197;-1:-1:-1;;;13464:197:1:o;13666:125::-;13731:9;;;13752:10;;;13749:36;;;13765:18;;:::i;14207:217::-;14247:1;14273;14263:132;;14317:10;14312:3;14308:20;14305:1;14298:31;14352:4;14349:1;14342:15;14380:4;14377:1;14370:15;14263:132;-1:-1:-1;14409:9:1;;14207:217::o;15553:385::-;15632:6;15640;15693:2;15681:9;15672:7;15668:23;15664:32;15661:52;;;15709:1;15706;15699:12;15661:52;15741:9;15735:16;15760:31;15785:5;15760:31;:::i;:::-;15860:2;15845:18;;15839:25;15810:5;;-1:-1:-1;15873:33:1;15839:25;15873:33;:::i;18079:184::-;18149:6;18202:2;18190:9;18181:7;18177:23;18173:32;18170:52;;;18218:1;18215;18208:12;18170:52;-1:-1:-1;18241:16:1;;18079:184;-1:-1:-1;18079:184:1:o;18570:245::-;18637:6;18690:2;18678:9;18669:7;18665:23;18661:32;18658:52;;;18706:1;18703;18696:12;18658:52;18738:9;18732:16;18757:28;18779:5;18757:28;:::i;19179:251::-;19249:6;19302:2;19290:9;19281:7;19277:23;19273:32;19270:52;;;19318:1;19315;19308:12;19270:52;19350:9;19344:16;19369:31;19394:5;19369:31;:::i;21693:175::-;21730:3;21774:4;21767:5;21763:16;21803:4;21794:7;21791:17;21788:43;;21811:18;;:::i;:::-;21860:1;21847:15;;21693:175;-1:-1:-1;;21693:175:1:o;23093:1026::-;23355:4;23403:3;23392:9;23388:19;23434:6;23423:9;23416:25;23460:2;23498:6;23493:2;23482:9;23478:18;23471:34;23541:3;23536:2;23525:9;23521:18;23514:31;23565:6;23600;23594:13;23631:6;23623;23616:22;23669:3;23658:9;23654:19;23647:26;;23708:2;23700:6;23696:15;23682:29;;23729:1;23739:218;23753:6;23750:1;23747:13;23739:218;;;23818:13;;-1:-1:-1;;;;;23814:62:1;23802:75;;23932:15;;;;23897:12;;;;23775:1;23768:9;23739:218;;;-1:-1:-1;;;;;;;24013:55:1;;;;24008:2;23993:18;;23986:83;-1:-1:-1;;;24100:3:1;24085:19;24078:35;23974:3;23093:1026;-1:-1:-1;;;23093:1026:1:o;24334:168::-;24401:6;24427:10;;;24439;;;24423:27;;24462:11;;;24459:37;;;24476:18;;:::i;:::-;24459:37;24334:168;;;;:::o;25401:245::-;25480:6;25488;25541:2;25529:9;25520:7;25516:23;25512:32;25509:52;;;25557:1;25554;25547:12;25509:52;-1:-1:-1;;25580:16:1;;25636:2;25621:18;;;25615:25;25580:16;;25615:25;;-1:-1:-1;25401:245:1:o

Swarm Source

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