ETH Price: $2,623.35 (+1.01%)

Token

Aegis of the Immortal (AEGIS)
 

Overview

Max Total Supply

100,000,000 AEGIS

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,620.1752 AEGIS

Value
$0.00
0x17f50ea08ebd0bd4148de58e57c72c08803c5634
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:
AegisOfTheImmortal

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-17
*/

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

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

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

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

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

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

interface Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
}

contract AegisOfTheImmortal is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
   
    uint256 constant private startingSupply = 100_000_000;
    string constant private _name = "Aegis of the Immortal";
    string constant private _symbol = "AEGIS";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 jackpot;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 100,
        marketing: 200,
        jackpot: 300,
        totalSwap: 600
    });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x926D16aa6Deb31C402c2306142979b07E13dadAf),
        jackpot: payable(0x10b665a34088e489DffCe90A520DCC44D2A7d537)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 5) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 2) / 100;

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

    uint256 private totalHolders = 0;

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

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

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

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

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

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

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

    receive() external payable {}

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

    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }
    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

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

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

    function getHolders() external view returns (uint256) {
        return totalHolders;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

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

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

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

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

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

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

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

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

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

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

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

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

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

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

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

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

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try protections.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        if (_tOwned[to] == 0) {
            totalHolders++;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;
        if (_tOwned[from] == 0) {
            totalHolders--;
        }
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        return true;
    }

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(protections) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"jackpot","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":"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"jackpot","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600255610258608081905260a081905260c08190526008805465ffffffffffff191665025802580258179055606460e05260c86101005261012c6101205261014052600980546001600160401b031916670258012c00c800641790556101a060405273926d16aa6deb31c402c2306142979b07e13dadaf6101608190527310b665a34088e489dffce90a520dcc44d2a7d537610180819052600c80546001600160a01b03199081169093179055600d8054909216179055600e805461ff0019169055600a60128181556103e891620000da9190620007b1565b620000ea906305f5e100620007c9565b620000f7906005620007c9565b620001039190620007e3565b6013556064620001166012600a620007b1565b62000126906305f5e100620007c9565b62000133906002620007c9565b6200013f9190620007e3565b6014556015805461ffff191690556000601755601880546001600160a01b03191633179055620001726012600a620007b1565b62000182906305f5e100620007c9565b601880546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001d66012600a620007b1565b620001e6906305f5e100620007c9565b60405190815260200160405180910390a3466038036200022e57600a8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000329565b466061036200026557600a8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000329565b4660011480620002755750466004145b80620002815750466003145b15620002b557600a8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000329565b4661a86a03620002ed57600a8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000329565b4660fa036200032457600a8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000329565b600080fd5b600a60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000806565b6001600160a01b031663c9c65396600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042b919062000806565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000478573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049e919062000806565b600b80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601854600a54620004f89291821691610100909104166000196200059b565b600a546200051990309061010090046001600160a01b03166000196200059b565b601880546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559554909416835260049091529020805490921617905562000831565b6001600160a01b038316620005ed5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200063b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005e4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f3578160001904821115620006d757620006d76200069c565b80851615620006e557918102915b93841c9390800290620006b7565b509250929050565b6000826200070c57506001620007ab565b816200071b57506000620007ab565b81600181146200073457600281146200073f576200075f565b6001915050620007ab565b60ff8411156200075357620007536200069c565b50506001821b620007ab565b5060208310610133831016604e8410600b841016171562000784575081810a620007ab565b620007908383620006b2565b8060001904821115620007a757620007a76200069c565b0290505b92915050565b6000620007c260ff841683620006fb565b9392505050565b8082028115828204841417620007ab57620007ab6200069c565b6000826200080157634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200081957600080fd5b81516001600160a01b0381168114620007c257600080fd5b6146fe80620008416000396000f3fe6080604052600436106103a65760003560e01c80634fbee193116101e757806395d89b411161010d578063d3f6a157116100a0578063f94aa1b41161006f578063f94aa1b414610b85578063fb78680d14610bcc578063fdb78c0e14610bec578063feadde9c14610c0b57600080fd5b8063d3f6a15714610aea578063dd62ed3e14610b0a578063eafb5a3c14610b50578063ee5d9c2d14610b7057600080fd5b8063b3d514fb116100dc578063b3d514fb1461064d578063b7df8b3614610a45578063bfc2fc3514610a5f578063cf84770614610a7f57600080fd5b806395d89b41146109a9578063a9059cbb146109ef578063aa22b17214610a0f578063b1b08f7114610a2f57600080fd5b80636ebd00781161018557806380c581d11161015457806380c581d114610941578063893d20e8146109615780638a63bd9b1461097f5780638a8c523c1461099457600080fd5b80636ebd0078146108cc57806370a08231146108e1578063715018a61461091757806378648edf1461092c57600080fd5b80635a6f0918116101c15780635a6f0918146108485780635c24b0741461085e5780635cce86cd1461087e5780635fe8e7cc146108b757600080fd5b80634fbee193146107d057806350a8e01614610809578063590ffdce1461082857600080fd5b806329dd8798116102cc57806336fddb041161026a5780634ada218b116102395780634ada218b146107565780634bbb93eb146107705780634e718e48146107905780634fb2e45d146107b057600080fd5b806336fddb04146106e05780633f3cf56c14610700578063452ed4f11461072057806346ea7ac81461074057600080fd5b80632e8fa821116102a65780632e8fa82114610663578063313ce5671461067957806332cde664146106a057806333251a0b146106c057600080fd5b806329dd8798146106185780632b112e49146106385780632b28fc7a1461064d57600080fd5b8063095ea7b31161034457806323b872dd1161031357806323b872dd146105a257806326003957146105c25780632610eaca146105e2578063285777511461060257600080fd5b8063095ea7b31461051f5780630dcbcf1c1461053f5780630fa604e41461057857806318160ddd1461058d57600080fd5b806306fdde031161038057806306fdde031461045f5780630758d924146104ae57806307dd79e0146104d357806309231602146104fd57600080fd5b806303fd2a45146103b25780630445b667146103e5578063069d955f1461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb600f5481565b6040519081526020016103dc565b34801561041557600080fd5b5060085461043a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b34801561046b57600080fd5b5060408051808201909152601581527f4165676973206f662074686520496d6d6f7274616c000000000000000000000060208201525b6040516103dc9190613f43565b3480156104ba57600080fd5b50600a546103c89061010090046001600160a01b031681565b3480156104df57600080fd5b50600a546104ed9060ff1681565b60405190151581526020016103dc565b34801561050957600080fd5b5061051d610518366004613f91565b610c2b565b005b34801561052b57600080fd5b506104ed61053a366004613fbf565b610d4f565b34801561054b57600080fd5b506104ed61055a366004613feb565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561058457600080fd5b506103fb610d66565b34801561059957600080fd5b506103fb610d86565b3480156105ae57600080fd5b506104ed6105bd366004614008565b610dc8565b3480156105ce57600080fd5b5061051d6105dd366004614049565b610e40565b3480156105ee57600080fd5b5061051d6105fd36600461415a565b610f8f565b34801561060e57600080fd5b506103fb60125481565b34801561062457600080fd5b5061051d61063336600461422a565b61114a565b34801561064457600080fd5b506103fb611233565b34801561065957600080fd5b506103fb6107d081565b34801561066f57600080fd5b506103fb60105481565b34801561068557600080fd5b5061068e6112b1565b60405160ff90911681526020016103dc565b3480156106ac57600080fd5b5061051d6106bb36600461429d565b6112df565b3480156106cc57600080fd5b5061051d6106db366004613feb565b6114cc565b3480156106ec57600080fd5b5061051d6106fb3660046142e0565b61156c565b34801561070c57600080fd5b5061051d61071b366004614049565b6115e5565b34801561072c57600080fd5b50600b546103c8906001600160a01b031681565b34801561074c57600080fd5b506103fb6109c481565b34801561076257600080fd5b506015546104ed9060ff1681565b34801561077c57600080fd5b506103fb61078b366004613f91565b611740565b34801561079c57600080fd5b5061051d6107ab366004613f91565b611774565b3480156107bc57600080fd5b5061051d6107cb366004613feb565b611818565b3480156107dc57600080fd5b506104ed6107eb366004613feb565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081557600080fd5b506015546104ed90610100900460ff1681565b34801561083457600080fd5b5061051d6108433660046142e0565b611a55565b34801561085457600080fd5b506103fb60165481565b34801561086a57600080fd5b5061051d610879366004613feb565b611ace565b34801561088a57600080fd5b506104ed610899366004613feb565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108c357600080fd5b506017546103fb565b3480156108d857600080fd5b506103fb611bc4565b3480156108ed57600080fd5b506103fb6108fc366004613feb565b6001600160a01b031660009081526020819052604090205490565b34801561092357600080fd5b5061051d611bdf565b34801561093857600080fd5b5061051d611caa565b34801561094d57600080fd5b5061051d61095c3660046142e0565b611d07565b34801561096d57600080fd5b506018546001600160a01b03166103c8565b34801561098b57600080fd5b506104ed611ee1565b3480156109a057600080fd5b5061051d611f57565b3480156109b557600080fd5b5060408051808201909152600581527f414547495300000000000000000000000000000000000000000000000000000060208201526104a1565b3480156109fb57600080fd5b506104ed610a0a366004613fbf565b6121b3565b348015610a1b57600080fd5b5061051d610a2a36600461429d565b6121ca565b348015610a3b57600080fd5b506103fb6103e881565b348015610a5157600080fd5b506011546104ed9060ff1681565b348015610a6b57600080fd5b5061051d610a7a366004614319565b612379565b348015610a8b57600080fd5b50600954610abc9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103dc565b348015610af657600080fd5b5061051d610b05366004614337565b612426565b348015610b1657600080fd5b506103fb610b25366004614337565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b5c57600080fd5b5061051d610b6b366004613feb565b612526565b348015610b7c57600080fd5b5061051d61295a565b348015610b9157600080fd5b50600c54600d54610bac916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103dc565b348015610bd857600080fd5b5061051d610be7366004614365565b612a3c565b348015610bf857600080fd5b50600e546104ed90610100900460ff1681565b348015610c1757600080fd5b5061051d610c263660046142e0565b612d52565b6018546001600160a01b03163314610c7e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b60c8811015610ccf5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c75565b6015546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b5050505050565b6000610d5c338484612dcb565b5060015b92915050565b6000610d746012600a6144aa565b601454610d8191906144b9565b905090565b6000610d946012600a6144aa565b610da2906305f5e1006144f4565b600003610dae57600080fd5b610dba6012600a6144aa565b610d81906305f5e1006144f4565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610e2d576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610e2790849061450b565b90915550505b610e38848484612ed8565b949350505050565b6018546001600160a01b03163314610e8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6064610e9c6012600a6144aa565b610eaa906305f5e1006144f4565b610eb491906144b9565b8183610ec26012600a6144aa565b610ed0906305f5e1006144f4565b610eda91906144f4565b610ee491906144b9565b1015610f585760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c75565b8082610f666012600a6144aa565b610f74906305f5e1006144f4565b610f7e91906144f4565b610f8891906144b9565b6014555050565b6018546001600160a01b03163314610fdd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b805182511461102e5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c75565b60005b82518161ffff1610156111455761104a6012600a6144aa565b828261ffff16815181106110605761106061451e565b602002602001015161107291906144f4565b3360009081526020819052604090205410156110d05760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c75565b61113233848361ffff16815181106110ea576110ea61451e565b60200260200101516012600a61110091906144aa565b858561ffff16815181106111165761111661451e565b602002602001015161112891906144f4565b6000806001613369565b508061113d8161454d565b915050611031565b505050565b6018546001600160a01b031633146111985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6015546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561121557600080fd5b505af1158015611229573d6000803e3d6000fd5b5050505050505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461128d919061456e565b6112996012600a6144aa565b6112a7906305f5e1006144f4565b610d81919061450b565b60006112bf6012600a6144aa565b6112cd906305f5e1006144f4565b6000036112d957600080fd5b50601290565b6018546001600160a01b0316331461132d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600a5460ff16156113805760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c75565b6107d08361ffff161115801561139c57506107d08261ffff1611155b80156113ae57506103e88161ffff1611155b6113fa5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c75565b6109c46114078385614581565b61ffff1611156114595760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c75565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6018546001600160a01b0316331461151a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6015546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d1a565b6018546001600160a01b031633146115ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6018546001600160a01b031633146116335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6103e86116426012600a6144aa565b611650906305f5e1006144f4565b61165b9060056144f4565b61166591906144b9565b81836116736012600a6144aa565b611681906305f5e1006144f4565b61168b91906144f4565b61169591906144b9565b10156117095760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c75565b80826117176012600a6144aa565b611725906305f5e1006144f4565b61172f91906144f4565b61173991906144b9565b6013555050565b600b546001600160a01b03166000908152602081905260408120546127109061176a9084906144f4565b610d6091906144b9565b6018546001600160a01b031633146117c25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b60968111156118135760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c75565b601255565b6018546001600160a01b031633146118665760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b0381166118e25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c75565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016119805760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c75565b601854611997906001600160a01b03166000611a55565b6119a2816001611a55565b6018546001600160a01b0316600090815260208190526040902054156119eb576018546001600160a01b03166000818152602081905260409020546119e991908390611128565b505b601880546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b03163314611aa35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6018546001600160a01b03163314611b1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b60155460ff1615611b2c57600080fd5b306001600160a01b03821603611b845760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c75565b601580546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611bd26012600a6144aa565b601354610d8191906144b9565b6018546001600160a01b03163314611c2d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b601854611c44906001600160a01b03166000611a55565b601880547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b03163314611cf85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600a805460ff19166001179055565b6018546001600160a01b03163314611d555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b80611dfe576001600160a01b03828116600081815260016020526040808220805460ff1916905560155490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b158015611de257600080fd5b505af1158015611df6573d6000803e3d6000fd5b505050505050565b60025415611e65576203f48060025442611e18919061450b565b11611e655760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c75565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560155491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401611dc8565b5050565b6018546000906001600160a01b03163314611f325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600a54611f5190309061010090046001600160a01b0316600019612dcb565b50600190565b6018546001600160a01b03163314611fa55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b60155460ff1615611ff85760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c75565b601554610100900460ff1661204f5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c75565b6015546201000090046001600160a01b031661209557601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561212057600080fd5b505af1925050508015612131575060015b506015805460ff19166001179055600b546001600160a01b03166000908152602081905260409020546127109061216990600a6144f4565b61217391906144b9565b600f55600b546001600160a01b0316600090815260208190526040902054612710906121a090601e6144f4565b6121aa91906144b9565b60105542601655565b60006121c0338484612ed8565b5060019392505050565b6018546001600160a01b031633146122185760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6009805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082881664010000000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908516171790558261228d8284614581565b6122979190614581565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff938416021790556008546000916122e89162010000810482169116614581565b60095461ffff918216925066010000000000009004168110156123735760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c75565b50505050565b6018546001600160a01b031633146123c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600e805461ff001916610100841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146124745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b0382161580159061249457506001600160a01b03811615155b6124e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610c75565b600c80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600d8054929093169116179055565b6018546001600160a01b031633146125745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b601554610100900460ff16156125cc5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c75565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263591906145a3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a691906145a3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272d91906145a3565b90506001600160a01b0381166128d657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279f91906145a3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281091906145a3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612875573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289991906145a3565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561290a565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600a80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038581168202929092179283905561114592309291900416600019612dcb565b6018546001600160a01b031633146129a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b601554610100900460ff1615612a005760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c75565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a39573d6000803e3d6000fd5b50565b6018546001600160a01b03163314612a8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b8284612a986012600a6144aa565b612aa6906305f5e1006144f4565b612ab091906144f4565b612aba91906144b9565b600f558082612acb6012600a6144aa565b612ad9906305f5e1006144f4565b612ae391906144f4565b612aed91906144b9565b6010819055600f541115612b695760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c75565b600b546001600160a01b031660009081526020819052604090205461271090612b939060966144f4565b612b9d91906144b9565b6010541115612c145760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610c75565b620f4240612c246012600a6144aa565b612c32906305f5e1006144f4565b612c3c91906144b9565b6010541015612cb35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c75565b620f4240612cc36012600a6144aa565b612cd1906305f5e1006144f4565b612cdb91906144b9565b600f5410156123735760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c75565b6018546001600160a01b03163314612da05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612e215760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c75565b6001600160a01b038216612e775760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c75565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612f565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c75565b6001600160a01b038316612fd25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c75565b600082116130485760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c75565b6001600160a01b0384166000908152600160205260408120548190819060ff161561307657600192506130a4565b6001600160a01b03861660009081526001602052604090205460ff16156130a057600191506130a4565b5060015b6130ae87876136b8565b156132b95760155460ff166131055760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c75565b828061310e5750815b156131d2576001600160a01b03871660009081526007602052604090205460ff1615801561315557506001600160a01b03861660009081526007602052604090205460ff16155b156131d2576013548511156131d25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c75565b600a546001600160a01b0387811661010090920416148015906131f3575081155b156132b9576001600160a01b03861660009081526007602052604090205460ff166132b9576014548561323b886001600160a01b031660009081526020819052604090205490565b613245919061456e565b11156132b95760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c75565b811561335057600e5460ff1661335057600e54610100900460ff16156133505730600090815260208190526040902054600f54811061334e5760105460115460ff161561333857601254600b546001600160a01b03166000908152602081905260409020546127109161332b916144f4565b61333591906144b9565b90505b808210613343578091505b61334c826137cf565b505b505b61335e878787868686613369565b979650505050505050565b600061337587876136b8565b15613428576015546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613411575060408051601f3d908101601f1916820190925261340e918101906145c0565b60015b61341a57600080fd5b90508061342657600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061346a57506001600160a01b03871660009081526006602052604090205460ff165b15613473575060005b6001600160a01b03871660009081526020819052604081205490036134a857601780549060006134a2836145dd565b91905055505b6001600160a01b038816600090815260208190526040812080548892906134d090849061450b565b9091555060009050816134e357866134ef565b6134ef8987878a613cbe565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613525919061456e565b90915550506001600160a01b038916600090815260208190526040812054900361355f5760178054906000613559836145f7565b91905055505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135a491815260200190565b60405180910390a3601554610100900460ff166136a9576135c58989613dd3565b601554610100900460ff161580156135e257506135e289896136b8565b801561360757506001600160a01b03891660009081526005602052604090205460ff16155b801561362c57506001600160a01b03881660009081526005602052604090205460ff16155b8015613636575083155b156136a95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c75565b50600198975050505050505050565b6018546000906001600160a01b038481169116148015906136e757506018546001600160a01b03838116911614155b80156136fe57506018546001600160a01b03163214155b801561372357506001600160a01b03821660009081526004602052604090205460ff16155b801561374857506001600160a01b03831660009081526004602052604090205460ff16155b801561375f57506001600160a01b03821661dead14155b801561377357506001600160a01b03821615155b801561378857506001600160a01b0383163014155b80156137a857506015546001600160a01b03848116620100009092041614155b80156137c857506015546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526000036138305750613cb1565b306000908152600360209081526040808320600a5461010090046001600160a01b031684529091529020546000191461389357306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856138b491906144f4565b6138be91906144b9565b6138c891906144b9565b905060006138d6828561450b565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106139105761391061451e565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a791906145a3565b816001815181106139ba576139ba61451e565b6001600160a01b039283166020918202929092010152600a546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac94790613a2090859060009086903090429060040161460e565b600060405180830381600087803b158015613a3a57600080fd5b505af1925050508015613a4b575060015b613a585750505050613cb1565b47600083613a6686846144f4565b613a7091906144b9565b90508415613b6c57600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613b20575060408051601f3d908101601f19168201909252613b1d9181019061467f565b60015b613b2f57505050505050613cb1565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613b76818361450b565b9150856000015186606001818151613b8e91906146ad565b61ffff9081169091526060880151604089015160009350839291821691613bb69116866144f4565b613bc091906144b9565b90506000613bce828661450b565b60208a015190915061ffff1615613c3c57600c546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114613c31576040519150601f19603f3d011682016040523d82523d6000602084013e613c36565b606091505b50909350505b604089015161ffff1615613ca757600d546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d8060008114613c9c576040519150601f19603f3d011682016040523d82523d6000602084013e613ca1565b606091505b50909350505b5050505050505050505b50600e805460ff19169055565b6000808415613cd4575060085461ffff16613cfe565b8315613ced575060085462010000900461ffff16613cfe565b50600854640100000000900461ffff165b80600003613d0f5782915050610e38565b6015546201000090046001600160a01b031630148015613d3957504660011480613d395750466038145b15613d4357506111945b6000612710613d5283866144f4565b613d5c91906144b9565b90508015613dc9573060009081526020819052604081208054839290613d8390849061456e565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61335e818561450b565b601554610100900460ff1615613e515760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c75565b613e5b82826136b8565b158015613e755750600b546001600160a01b038281169116145b15611edd576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556015805461ff001916610100179081905562010000900416613f0357601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161241a565b600060208083528351808285015260005b81811015613f7057858101830151858201604001528201613f54565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215613fa357600080fd5b5035919050565b6001600160a01b0381168114612a3957600080fd5b60008060408385031215613fd257600080fd5b8235613fdd81613faa565b946020939093013593505050565b600060208284031215613ffd57600080fd5b81356137c881613faa565b60008060006060848603121561401d57600080fd5b833561402881613faa565b9250602084013561403881613faa565b929592945050506040919091013590565b6000806040838503121561405c57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140c3576140c361406b565b604052919050565b600067ffffffffffffffff8211156140e5576140e561406b565b5060051b60200190565b600082601f83011261410057600080fd5b81356020614115614110836140cb565b61409a565b82815260059290921b8401810191818101908684111561413457600080fd5b8286015b8481101561414f5780358352918301918301614138565b509695505050505050565b6000806040838503121561416d57600080fd5b823567ffffffffffffffff8082111561418557600080fd5b818501915085601f83011261419957600080fd5b813560206141a9614110836140cb565b82815260059290921b840181019181810190898411156141c857600080fd5b948201945b838610156141ef5785356141e081613faa565b825294820194908201906141cd565b9650508601359250508082111561420557600080fd5b50614212858286016140ef565b9150509250929050565b8015158114612a3957600080fd5b6000806000806080858703121561424057600080fd5b843561424b8161421c565b9350602085013561425b8161421c565b9250604085013561426b8161421c565b9150606085013561427b8161421c565b939692955090935050565b803561ffff8116811461429857600080fd5b919050565b6000806000606084860312156142b257600080fd5b6142bb84614286565b92506142c960208501614286565b91506142d760408501614286565b90509250925092565b600080604083850312156142f357600080fd5b82356142fe81613faa565b9150602083013561430e8161421c565b809150509250929050565b6000806040838503121561432c57600080fd5b82356142fe8161421c565b6000806040838503121561434a57600080fd5b823561435581613faa565b9150602083013561430e81613faa565b6000806000806080858703121561437b57600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156144015781600019048211156143e7576143e7614397565b808516156143f457918102915b93841c93908002906143cb565b509250929050565b60008261441857506001610d60565b8161442557506000610d60565b816001811461443b576002811461444557614461565b6001915050610d60565b60ff84111561445657614456614397565b50506001821b610d60565b5060208310610133831016604e8410600b8410161715614484575081810a610d60565b61448e83836143c6565b80600019048211156144a2576144a2614397565b029392505050565b60006137c860ff841683614409565b6000826144ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610d6057610d60614397565b81810381811115610d6057610d60614397565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff80831681810361456457614564614397565b6001019392505050565b80820180821115610d6057610d60614397565b61ffff81811683821601908082111561459c5761459c614397565b5092915050565b6000602082840312156145b557600080fd5b81516137c881613faa565b6000602082840312156145d257600080fd5b81516137c88161421c565b600060001982036145f0576145f0614397565b5060010190565b60008161460657614606614397565b506000190190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561465e5784516001600160a01b031683529383019391830191600101614639565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561469457600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111561459c5761459c61439756fea26469706673582212204e860c337be06438503114dcbb955448ec959a5ed457ecfa86f74b8101735cf864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80634fbee193116101e757806395d89b411161010d578063d3f6a157116100a0578063f94aa1b41161006f578063f94aa1b414610b85578063fb78680d14610bcc578063fdb78c0e14610bec578063feadde9c14610c0b57600080fd5b8063d3f6a15714610aea578063dd62ed3e14610b0a578063eafb5a3c14610b50578063ee5d9c2d14610b7057600080fd5b8063b3d514fb116100dc578063b3d514fb1461064d578063b7df8b3614610a45578063bfc2fc3514610a5f578063cf84770614610a7f57600080fd5b806395d89b41146109a9578063a9059cbb146109ef578063aa22b17214610a0f578063b1b08f7114610a2f57600080fd5b80636ebd00781161018557806380c581d11161015457806380c581d114610941578063893d20e8146109615780638a63bd9b1461097f5780638a8c523c1461099457600080fd5b80636ebd0078146108cc57806370a08231146108e1578063715018a61461091757806378648edf1461092c57600080fd5b80635a6f0918116101c15780635a6f0918146108485780635c24b0741461085e5780635cce86cd1461087e5780635fe8e7cc146108b757600080fd5b80634fbee193146107d057806350a8e01614610809578063590ffdce1461082857600080fd5b806329dd8798116102cc57806336fddb041161026a5780634ada218b116102395780634ada218b146107565780634bbb93eb146107705780634e718e48146107905780634fb2e45d146107b057600080fd5b806336fddb04146106e05780633f3cf56c14610700578063452ed4f11461072057806346ea7ac81461074057600080fd5b80632e8fa821116102a65780632e8fa82114610663578063313ce5671461067957806332cde664146106a057806333251a0b146106c057600080fd5b806329dd8798146106185780632b112e49146106385780632b28fc7a1461064d57600080fd5b8063095ea7b31161034457806323b872dd1161031357806323b872dd146105a257806326003957146105c25780632610eaca146105e2578063285777511461060257600080fd5b8063095ea7b31461051f5780630dcbcf1c1461053f5780630fa604e41461057857806318160ddd1461058d57600080fd5b806306fdde031161038057806306fdde031461045f5780630758d924146104ae57806307dd79e0146104d357806309231602146104fd57600080fd5b806303fd2a45146103b25780630445b667146103e5578063069d955f1461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb600f5481565b6040519081526020016103dc565b34801561041557600080fd5b5060085461043a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b34801561046b57600080fd5b5060408051808201909152601581527f4165676973206f662074686520496d6d6f7274616c000000000000000000000060208201525b6040516103dc9190613f43565b3480156104ba57600080fd5b50600a546103c89061010090046001600160a01b031681565b3480156104df57600080fd5b50600a546104ed9060ff1681565b60405190151581526020016103dc565b34801561050957600080fd5b5061051d610518366004613f91565b610c2b565b005b34801561052b57600080fd5b506104ed61053a366004613fbf565b610d4f565b34801561054b57600080fd5b506104ed61055a366004613feb565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561058457600080fd5b506103fb610d66565b34801561059957600080fd5b506103fb610d86565b3480156105ae57600080fd5b506104ed6105bd366004614008565b610dc8565b3480156105ce57600080fd5b5061051d6105dd366004614049565b610e40565b3480156105ee57600080fd5b5061051d6105fd36600461415a565b610f8f565b34801561060e57600080fd5b506103fb60125481565b34801561062457600080fd5b5061051d61063336600461422a565b61114a565b34801561064457600080fd5b506103fb611233565b34801561065957600080fd5b506103fb6107d081565b34801561066f57600080fd5b506103fb60105481565b34801561068557600080fd5b5061068e6112b1565b60405160ff90911681526020016103dc565b3480156106ac57600080fd5b5061051d6106bb36600461429d565b6112df565b3480156106cc57600080fd5b5061051d6106db366004613feb565b6114cc565b3480156106ec57600080fd5b5061051d6106fb3660046142e0565b61156c565b34801561070c57600080fd5b5061051d61071b366004614049565b6115e5565b34801561072c57600080fd5b50600b546103c8906001600160a01b031681565b34801561074c57600080fd5b506103fb6109c481565b34801561076257600080fd5b506015546104ed9060ff1681565b34801561077c57600080fd5b506103fb61078b366004613f91565b611740565b34801561079c57600080fd5b5061051d6107ab366004613f91565b611774565b3480156107bc57600080fd5b5061051d6107cb366004613feb565b611818565b3480156107dc57600080fd5b506104ed6107eb366004613feb565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081557600080fd5b506015546104ed90610100900460ff1681565b34801561083457600080fd5b5061051d6108433660046142e0565b611a55565b34801561085457600080fd5b506103fb60165481565b34801561086a57600080fd5b5061051d610879366004613feb565b611ace565b34801561088a57600080fd5b506104ed610899366004613feb565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108c357600080fd5b506017546103fb565b3480156108d857600080fd5b506103fb611bc4565b3480156108ed57600080fd5b506103fb6108fc366004613feb565b6001600160a01b031660009081526020819052604090205490565b34801561092357600080fd5b5061051d611bdf565b34801561093857600080fd5b5061051d611caa565b34801561094d57600080fd5b5061051d61095c3660046142e0565b611d07565b34801561096d57600080fd5b506018546001600160a01b03166103c8565b34801561098b57600080fd5b506104ed611ee1565b3480156109a057600080fd5b5061051d611f57565b3480156109b557600080fd5b5060408051808201909152600581527f414547495300000000000000000000000000000000000000000000000000000060208201526104a1565b3480156109fb57600080fd5b506104ed610a0a366004613fbf565b6121b3565b348015610a1b57600080fd5b5061051d610a2a36600461429d565b6121ca565b348015610a3b57600080fd5b506103fb6103e881565b348015610a5157600080fd5b506011546104ed9060ff1681565b348015610a6b57600080fd5b5061051d610a7a366004614319565b612379565b348015610a8b57600080fd5b50600954610abc9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103dc565b348015610af657600080fd5b5061051d610b05366004614337565b612426565b348015610b1657600080fd5b506103fb610b25366004614337565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b5c57600080fd5b5061051d610b6b366004613feb565b612526565b348015610b7c57600080fd5b5061051d61295a565b348015610b9157600080fd5b50600c54600d54610bac916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103dc565b348015610bd857600080fd5b5061051d610be7366004614365565b612a3c565b348015610bf857600080fd5b50600e546104ed90610100900460ff1681565b348015610c1757600080fd5b5061051d610c263660046142e0565b612d52565b6018546001600160a01b03163314610c7e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b60c8811015610ccf5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c75565b6015546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b5050505050565b6000610d5c338484612dcb565b5060015b92915050565b6000610d746012600a6144aa565b601454610d8191906144b9565b905090565b6000610d946012600a6144aa565b610da2906305f5e1006144f4565b600003610dae57600080fd5b610dba6012600a6144aa565b610d81906305f5e1006144f4565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610e2d576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610e2790849061450b565b90915550505b610e38848484612ed8565b949350505050565b6018546001600160a01b03163314610e8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6064610e9c6012600a6144aa565b610eaa906305f5e1006144f4565b610eb491906144b9565b8183610ec26012600a6144aa565b610ed0906305f5e1006144f4565b610eda91906144f4565b610ee491906144b9565b1015610f585760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c75565b8082610f666012600a6144aa565b610f74906305f5e1006144f4565b610f7e91906144f4565b610f8891906144b9565b6014555050565b6018546001600160a01b03163314610fdd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b805182511461102e5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c75565b60005b82518161ffff1610156111455761104a6012600a6144aa565b828261ffff16815181106110605761106061451e565b602002602001015161107291906144f4565b3360009081526020819052604090205410156110d05760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c75565b61113233848361ffff16815181106110ea576110ea61451e565b60200260200101516012600a61110091906144aa565b858561ffff16815181106111165761111661451e565b602002602001015161112891906144f4565b6000806001613369565b508061113d8161454d565b915050611031565b505050565b6018546001600160a01b031633146111985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6015546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561121557600080fd5b505af1158015611229573d6000803e3d6000fd5b5050505050505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461128d919061456e565b6112996012600a6144aa565b6112a7906305f5e1006144f4565b610d81919061450b565b60006112bf6012600a6144aa565b6112cd906305f5e1006144f4565b6000036112d957600080fd5b50601290565b6018546001600160a01b0316331461132d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600a5460ff16156113805760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c75565b6107d08361ffff161115801561139c57506107d08261ffff1611155b80156113ae57506103e88161ffff1611155b6113fa5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c75565b6109c46114078385614581565b61ffff1611156114595760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c75565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6018546001600160a01b0316331461151a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6015546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d1a565b6018546001600160a01b031633146115ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6018546001600160a01b031633146116335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6103e86116426012600a6144aa565b611650906305f5e1006144f4565b61165b9060056144f4565b61166591906144b9565b81836116736012600a6144aa565b611681906305f5e1006144f4565b61168b91906144f4565b61169591906144b9565b10156117095760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c75565b80826117176012600a6144aa565b611725906305f5e1006144f4565b61172f91906144f4565b61173991906144b9565b6013555050565b600b546001600160a01b03166000908152602081905260408120546127109061176a9084906144f4565b610d6091906144b9565b6018546001600160a01b031633146117c25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b60968111156118135760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c75565b601255565b6018546001600160a01b031633146118665760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b0381166118e25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c75565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016119805760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c75565b601854611997906001600160a01b03166000611a55565b6119a2816001611a55565b6018546001600160a01b0316600090815260208190526040902054156119eb576018546001600160a01b03166000818152602081905260409020546119e991908390611128565b505b601880546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b03163314611aa35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6018546001600160a01b03163314611b1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b60155460ff1615611b2c57600080fd5b306001600160a01b03821603611b845760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c75565b601580546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611bd26012600a6144aa565b601354610d8191906144b9565b6018546001600160a01b03163314611c2d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b601854611c44906001600160a01b03166000611a55565b601880547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b03163314611cf85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600a805460ff19166001179055565b6018546001600160a01b03163314611d555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b80611dfe576001600160a01b03828116600081815260016020526040808220805460ff1916905560155490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b158015611de257600080fd5b505af1158015611df6573d6000803e3d6000fd5b505050505050565b60025415611e65576203f48060025442611e18919061450b565b11611e655760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c75565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560155491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401611dc8565b5050565b6018546000906001600160a01b03163314611f325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600a54611f5190309061010090046001600160a01b0316600019612dcb565b50600190565b6018546001600160a01b03163314611fa55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b60155460ff1615611ff85760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c75565b601554610100900460ff1661204f5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c75565b6015546201000090046001600160a01b031661209557601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561212057600080fd5b505af1925050508015612131575060015b506015805460ff19166001179055600b546001600160a01b03166000908152602081905260409020546127109061216990600a6144f4565b61217391906144b9565b600f55600b546001600160a01b0316600090815260208190526040902054612710906121a090601e6144f4565b6121aa91906144b9565b60105542601655565b60006121c0338484612ed8565b5060019392505050565b6018546001600160a01b031633146122185760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6009805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082881664010000000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908516171790558261228d8284614581565b6122979190614581565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff938416021790556008546000916122e89162010000810482169116614581565b60095461ffff918216925066010000000000009004168110156123735760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c75565b50505050565b6018546001600160a01b031633146123c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b600e805461ff001916610100841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146124745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b0382161580159061249457506001600160a01b03811615155b6124e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610c75565b600c80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600d8054929093169116179055565b6018546001600160a01b031633146125745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b601554610100900460ff16156125cc5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c75565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263591906145a3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a691906145a3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272d91906145a3565b90506001600160a01b0381166128d657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279f91906145a3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281091906145a3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612875573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289991906145a3565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561290a565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600a80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038581168202929092179283905561114592309291900416600019612dcb565b6018546001600160a01b031633146129a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b601554610100900460ff1615612a005760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c75565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a39573d6000803e3d6000fd5b50565b6018546001600160a01b03163314612a8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b8284612a986012600a6144aa565b612aa6906305f5e1006144f4565b612ab091906144f4565b612aba91906144b9565b600f558082612acb6012600a6144aa565b612ad9906305f5e1006144f4565b612ae391906144f4565b612aed91906144b9565b6010819055600f541115612b695760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c75565b600b546001600160a01b031660009081526020819052604090205461271090612b939060966144f4565b612b9d91906144b9565b6010541115612c145760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610c75565b620f4240612c246012600a6144aa565b612c32906305f5e1006144f4565b612c3c91906144b9565b6010541015612cb35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c75565b620f4240612cc36012600a6144aa565b612cd1906305f5e1006144f4565b612cdb91906144b9565b600f5410156123735760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c75565b6018546001600160a01b03163314612da05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c75565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612e215760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c75565b6001600160a01b038216612e775760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c75565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612f565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c75565b6001600160a01b038316612fd25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c75565b600082116130485760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c75565b6001600160a01b0384166000908152600160205260408120548190819060ff161561307657600192506130a4565b6001600160a01b03861660009081526001602052604090205460ff16156130a057600191506130a4565b5060015b6130ae87876136b8565b156132b95760155460ff166131055760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c75565b828061310e5750815b156131d2576001600160a01b03871660009081526007602052604090205460ff1615801561315557506001600160a01b03861660009081526007602052604090205460ff16155b156131d2576013548511156131d25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c75565b600a546001600160a01b0387811661010090920416148015906131f3575081155b156132b9576001600160a01b03861660009081526007602052604090205460ff166132b9576014548561323b886001600160a01b031660009081526020819052604090205490565b613245919061456e565b11156132b95760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c75565b811561335057600e5460ff1661335057600e54610100900460ff16156133505730600090815260208190526040902054600f54811061334e5760105460115460ff161561333857601254600b546001600160a01b03166000908152602081905260409020546127109161332b916144f4565b61333591906144b9565b90505b808210613343578091505b61334c826137cf565b505b505b61335e878787868686613369565b979650505050505050565b600061337587876136b8565b15613428576015546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613411575060408051601f3d908101601f1916820190925261340e918101906145c0565b60015b61341a57600080fd5b90508061342657600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061346a57506001600160a01b03871660009081526006602052604090205460ff165b15613473575060005b6001600160a01b03871660009081526020819052604081205490036134a857601780549060006134a2836145dd565b91905055505b6001600160a01b038816600090815260208190526040812080548892906134d090849061450b565b9091555060009050816134e357866134ef565b6134ef8987878a613cbe565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613525919061456e565b90915550506001600160a01b038916600090815260208190526040812054900361355f5760178054906000613559836145f7565b91905055505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135a491815260200190565b60405180910390a3601554610100900460ff166136a9576135c58989613dd3565b601554610100900460ff161580156135e257506135e289896136b8565b801561360757506001600160a01b03891660009081526005602052604090205460ff16155b801561362c57506001600160a01b03881660009081526005602052604090205460ff16155b8015613636575083155b156136a95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c75565b50600198975050505050505050565b6018546000906001600160a01b038481169116148015906136e757506018546001600160a01b03838116911614155b80156136fe57506018546001600160a01b03163214155b801561372357506001600160a01b03821660009081526004602052604090205460ff16155b801561374857506001600160a01b03831660009081526004602052604090205460ff16155b801561375f57506001600160a01b03821661dead14155b801561377357506001600160a01b03821615155b801561378857506001600160a01b0383163014155b80156137a857506015546001600160a01b03848116620100009092041614155b80156137c857506015546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526000036138305750613cb1565b306000908152600360209081526040808320600a5461010090046001600160a01b031684529091529020546000191461389357306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856138b491906144f4565b6138be91906144b9565b6138c891906144b9565b905060006138d6828561450b565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106139105761391061451e565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a791906145a3565b816001815181106139ba576139ba61451e565b6001600160a01b039283166020918202929092010152600a546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac94790613a2090859060009086903090429060040161460e565b600060405180830381600087803b158015613a3a57600080fd5b505af1925050508015613a4b575060015b613a585750505050613cb1565b47600083613a6686846144f4565b613a7091906144b9565b90508415613b6c57600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613b20575060408051601f3d908101601f19168201909252613b1d9181019061467f565b60015b613b2f57505050505050613cb1565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613b76818361450b565b9150856000015186606001818151613b8e91906146ad565b61ffff9081169091526060880151604089015160009350839291821691613bb69116866144f4565b613bc091906144b9565b90506000613bce828661450b565b60208a015190915061ffff1615613c3c57600c546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114613c31576040519150601f19603f3d011682016040523d82523d6000602084013e613c36565b606091505b50909350505b604089015161ffff1615613ca757600d546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d8060008114613c9c576040519150601f19603f3d011682016040523d82523d6000602084013e613ca1565b606091505b50909350505b5050505050505050505b50600e805460ff19169055565b6000808415613cd4575060085461ffff16613cfe565b8315613ced575060085462010000900461ffff16613cfe565b50600854640100000000900461ffff165b80600003613d0f5782915050610e38565b6015546201000090046001600160a01b031630148015613d3957504660011480613d395750466038145b15613d4357506111945b6000612710613d5283866144f4565b613d5c91906144b9565b90508015613dc9573060009081526020819052604081208054839290613d8390849061456e565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61335e818561450b565b601554610100900460ff1615613e515760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c75565b613e5b82826136b8565b158015613e755750600b546001600160a01b038281169116145b15611edd576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556015805461ff001916610100179081905562010000900416613f0357601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161241a565b600060208083528351808285015260005b81811015613f7057858101830151858201604001528201613f54565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215613fa357600080fd5b5035919050565b6001600160a01b0381168114612a3957600080fd5b60008060408385031215613fd257600080fd5b8235613fdd81613faa565b946020939093013593505050565b600060208284031215613ffd57600080fd5b81356137c881613faa565b60008060006060848603121561401d57600080fd5b833561402881613faa565b9250602084013561403881613faa565b929592945050506040919091013590565b6000806040838503121561405c57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140c3576140c361406b565b604052919050565b600067ffffffffffffffff8211156140e5576140e561406b565b5060051b60200190565b600082601f83011261410057600080fd5b81356020614115614110836140cb565b61409a565b82815260059290921b8401810191818101908684111561413457600080fd5b8286015b8481101561414f5780358352918301918301614138565b509695505050505050565b6000806040838503121561416d57600080fd5b823567ffffffffffffffff8082111561418557600080fd5b818501915085601f83011261419957600080fd5b813560206141a9614110836140cb565b82815260059290921b840181019181810190898411156141c857600080fd5b948201945b838610156141ef5785356141e081613faa565b825294820194908201906141cd565b9650508601359250508082111561420557600080fd5b50614212858286016140ef565b9150509250929050565b8015158114612a3957600080fd5b6000806000806080858703121561424057600080fd5b843561424b8161421c565b9350602085013561425b8161421c565b9250604085013561426b8161421c565b9150606085013561427b8161421c565b939692955090935050565b803561ffff8116811461429857600080fd5b919050565b6000806000606084860312156142b257600080fd5b6142bb84614286565b92506142c960208501614286565b91506142d760408501614286565b90509250925092565b600080604083850312156142f357600080fd5b82356142fe81613faa565b9150602083013561430e8161421c565b809150509250929050565b6000806040838503121561432c57600080fd5b82356142fe8161421c565b6000806040838503121561434a57600080fd5b823561435581613faa565b9150602083013561430e81613faa565b6000806000806080858703121561437b57600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156144015781600019048211156143e7576143e7614397565b808516156143f457918102915b93841c93908002906143cb565b509250929050565b60008261441857506001610d60565b8161442557506000610d60565b816001811461443b576002811461444557614461565b6001915050610d60565b60ff84111561445657614456614397565b50506001821b610d60565b5060208310610133831016604e8410600b8410161715614484575081810a610d60565b61448e83836143c6565b80600019048211156144a2576144a2614397565b029392505050565b60006137c860ff841683614409565b6000826144ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610d6057610d60614397565b81810381811115610d6057610d60614397565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff80831681810361456457614564614397565b6001019392505050565b80820180821115610d6057610d60614397565b61ffff81811683821601908082111561459c5761459c614397565b5092915050565b6000602082840312156145b557600080fd5b81516137c881613faa565b6000602082840312156145d257600080fd5b81516137c88161421c565b600060001982036145f0576145f0614397565b5060010190565b60008161460657614606614397565b506000190190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561465e5784516001600160a01b031683529383019391830191600101614639565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561469457600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111561459c5761459c61439756fea26469706673582212204e860c337be06438503114dcbb955448ec959a5ed457ecfa86f74b8101735cf864736f6c63430008110033

Deployed Bytecode Sourcemap

4027:23041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5678:73;;;;;;;;;;;;5709:42;5678:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5678:73:0;;;;;;;;6136:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6136:28:0;245:177:1;5064:109:0;;;;;;;;;;-1:-1:-1;5064:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;633:6:1;666:15;;;648:34;;718:15;;;713:2;698:18;;691:43;770:15;;750:18;;;743:43;;;;611:2;596:18;5064:109:0;427:365:1;10610:80:0;;;;;;;;;;-1:-1:-1;10682:5:0;;;;;;;;;;;;;;;;;10610:80;;;;;;;:::i;5617:26::-;;;;;;;;;;-1:-1:-1;5617:26:0;;;;;;;-1:-1:-1;;;;;5617:26:0;;;5584;;;;;;;;;;-1:-1:-1;5584:26:0;;;;;;;;;;;1822:14:1;;1815:22;1797:41;;1785:2;1770:18;5584:26:0;1657:187:1;14897:152:0;;;;;;;;;;-1:-1:-1;14897:152:0;;;;;:::i;:::-;;:::i;:::-;;11218:161;;;;;;;;;;-1:-1:-1;11218:161:0;;;;;:::i;:::-;;:::i;14121:140::-;;;;;;;;;;-1:-1:-1;14121:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14219:34:0;14195:4;14219:34;;;:25;:34;;;;;;;;;14121:140;17206:114;;;;;;;;;;;;;:::i;10281:115::-;;;;;;;;;;;;;:::i;11888:306::-;;;;;;;;;;-1:-1:-1;11888:306:0;;;;;:::i;:::-;;:::i;16818:264::-;;;;;;;;;;-1:-1:-1;16818:264:0;;;;;:::i;:::-;;:::i;24593:447::-;;;;;;;;;;-1:-1:-1;24593:447:0;;;;;:::i;:::-;;:::i;6244:33::-;;;;;;;;;;;;;;;;14692:197;;;;;;;;;;-1:-1:-1;14692:197:0;;;;;:::i;:::-;;:::i;14425:141::-;;;;;;;;;;;;;:::i;5328:42::-;;;;;;;;;;;;5366:4;5328:42;;6171:25;;;;;;;;;;;;;;;;10402:112;;;;;;;;;;;;;:::i;:::-;;;7029:4:1;7017:17;;;6999:36;;6987:2;6972:18;10402:112:0;6857:184:1;15247:544:0;;;;;;;;;;-1:-1:-1;15247:544:0;;;;;:::i;:::-;;:::i;14574:110::-;;;;;;;;;;-1:-1:-1;14574:110:0;;;;;:::i;:::-;;:::i;13696:140::-;;;;;;;;;;-1:-1:-1;13696:140:0;;;;;:::i;:::-;;:::i;16539:273::-;;;;;;;;;;-1:-1:-1;16539:273:0;;;;;:::i;:::-;;:::i;5650:21::-;;;;;;;;;;-1:-1:-1;5650:21:0;;;;-1:-1:-1;;;;;5650:21:0;;;5481:46;;;;;;;;;;;;5523:4;5481:46;;6409:34;;;;;;;;;;-1:-1:-1;6409:34:0;;;;;;;;17328:189;;;;;;;;;;-1:-1:-1;17328:189:0;;;;;:::i;:::-;;:::i;18332:217::-;;;;;;;;;;-1:-1:-1;18332:217:0;;;;;:::i;:::-;;:::i;9039:654::-;;;;;;;;;;-1:-1:-1;9039:654:0;;;;;:::i;:::-;;:::i;13844:127::-;;;;;;;;;;-1:-1:-1;13844:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13935:28:0;13911:4;13935:28;;;:19;:28;;;;;;;;;13844:127;6450:36;;;;;;;;;;-1:-1:-1;6450:36:0;;;;;;;;;;;13979:134;;;;;;;;;;-1:-1:-1;13979:134:0;;;;;:::i;:::-;;:::i;6523:26::-;;;;;;;;;;;;;;;;13326:222;;;;;;;;;;-1:-1:-1;13326:222:0;;;;;:::i;:::-;;:::i;13556:132::-;;;;;;;;;;-1:-1:-1;13556:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;13650:30:0;13626:4;13650:30;;;:21;:30;;;;;;;;;13556:132;17525:92;;;;;;;;;;-1:-1:-1;17597:12:0;;17525:92;;17090:108;;;;;;;;;;;;;:::i;10920:117::-;;;;;;;;;;-1:-1:-1;10920:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;11013:16:0;10986:7;11013:16;;;;;;;;;;;;10920:117;9701:225;;;;;;;;;;;;;:::i;15057:182::-;;;;;;;;;;;;;:::i;12823:495::-;;;;;;;;;;-1:-1:-1;12823:495:0;;;;;:::i;:::-;;:::i;10696:79::-;;;;;;;;;;-1:-1:-1;10766:6:0;;-1:-1:-1;;;;;10766:6:0;10696:79;;11705:175;;;;;;;;;;;;;:::i;23802:593::-;;;;;;;;;;;;;:::i;10520:84::-;;;;;;;;;;-1:-1:-1;10594:7:0;;;;;;;;;;;;;;;;;10520:84;;11045:165;;;;;;;;;;-1:-1:-1;11045:165:0;;;;;:::i;:::-;;:::i;15799:428::-;;;;;;;;;;-1:-1:-1;15799:428:0;;;;;:::i;:::-;;:::i;5427:47::-;;;;;;;;;;;;5470:4;5427:47;;6203:34;;;;;;;;;;-1:-1:-1;6203:34:0;;;;;;;;18557:263;;;;;;;;;;-1:-1:-1;18557:263:0;;;;;:::i;:::-;;:::i;5182:137::-;;;;;;;;;;-1:-1:-1;5182:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8544:6:1;8577:15;;;8559:34;;8629:15;;;8624:2;8609:18;;8602:43;8681:15;;;8661:18;;;8654:43;;;;8733:15;;;8728:2;8713:18;;8706:43;8521:3;8506:19;5182:137:0;8311:444:1;16235:296:0;;;;;;;;;;-1:-1:-1;16235:296:0;;;;;:::i;:::-;;:::i;10781:133::-;;;;;;;;;;-1:-1:-1;10781:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10883:19:0;;;10865:7;10883:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10781:133;12202:613;;;;;;;;;;-1:-1:-1;12202:613:0;;;;;:::i;:::-;;:::i;24403:182::-;;;;;;;;;;;;;:::i;5864:195::-;;;;;;;;;;-1:-1:-1;5864:195:0;;;;;;-1:-1:-1;;;;;5864:195:0;;;;;;;;;;;-1:-1:-1;;;;;9847:15:1;;;9829:34;;9899:15;;;;9894:2;9879:18;;9872:43;9741:18;5864:195:0;9562:359:1;17625:699:0;;;;;;;;;;-1:-1:-1;17625:699:0;;;;;:::i;:::-;;:::i;6090:39::-;;;;;;;;;;-1:-1:-1;6090:39:0;;;;;;;;;;;14269:148;;;;;;;;;;-1:-1:-1;14269:148:0;;;;;:::i;:::-;;:::i;14897:152::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;;;;;;;;;14981:3:::1;14974;:10;;14966:31;;;::::0;-1:-1:-1;;;14966:31:0;;10864:2:1;14966:31:0::1;::::0;::::1;10846:21:1::0;10903:1;10883:18;;;10876:29;10941:10;10921:18;;;10914:38;10969:18;;14966:31:0::1;10662:331:1::0;14966:31:0::1;15008:11;::::0;:33:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;15008:11:0;;;::::1;-1:-1:-1::0;;;;;15008:11:0::1;::::0;:28:::1;::::0;364:18:1;;15008:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14897:152:::0;:::o;11218:161::-;11295:4;11312:37;11321:10;11333:7;11342:6;11312:8;:37::i;:::-;-1:-1:-1;11367:4:0;11218:161;;;;;:::o;17206:114::-;17253:7;17298:13;4739:2;17298;:13;:::i;:::-;17280:14;;:32;;;;:::i;:::-;17273:39;;17206:114;:::o;10281:115::-;10336:7;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;;4576:11;4783:30;:::i;:::-;10362:1;10351:12;10347:31;;10367:8;;;10347:31;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;;4576:11;4783:30;:::i;11888:306::-;-1:-1:-1;;;;;12009:19:0;;11988:4;12009:19;;;:11;:19;;;;;;;;12029:10;12009:31;;;;;;;;-1:-1:-1;;12009:52:0;12005:126;;-1:-1:-1;;;;;12078:19:0;;;;;;:11;:19;;;;;;;;12098:10;12078:31;;;;;;;:41;;12113:6;;12078:19;:41;;12113:6;;12078:41;:::i;:::-;;;;-1:-1:-1;;12005:126:0;12150:36;12160:6;12168:9;12179:6;12150:9;:36::i;:::-;12143:43;11888:306;-1:-1:-1;;;;11888:306:0:o;16818:264::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;16960:3:::1;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;16950:13;;;;:::i;:::-;16938:7:::0;16927;4800:13:::1;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;16917:17;;;;:::i;:::-;16916:29;;;;:::i;:::-;:48;;16908:109;;;::::0;-1:-1:-1;;;16908:109:0;;13477:2:1;16908:109:0::1;::::0;::::1;13459:21:1::0;13516:2;13496:18;;;13489:30;13555:34;13535:18;;;13528:62;13626:18;13606;;;13599:46;13662:19;;16908:109:0::1;13275:412:1::0;16908:109:0::1;17067:7:::0;17056;4800:13:::1;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;17046:17;;;;:::i;:::-;17045:29;;;;:::i;:::-;17028:14;:46:::0;-1:-1:-1;;16818:264:0:o;24593:447::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;24728:7:::1;:14;24709:8;:15;:33;24701:67;;;::::0;-1:-1:-1;;;24701:67:0;;13894:2:1;24701:67:0::1;::::0;::::1;13876:21:1::0;13933:2;13913:18;;;13906:30;13972:23;13952:18;;;13945:51;14013:18;;24701:67:0::1;13692:345:1::0;24701:67:0::1;24784:8;24779:254;24802:8;:15;24798:1;:19;;;24779:254;;;24883:13;4739:2;24883;:13;:::i;:::-;24872:7;24880:1;24872:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24857:10;10986:7:::0;11013:16;;;;;;;;;;;24847:49:::1;;24839:80;;;::::0;-1:-1:-1;;;24839:80:0;;14433:2:1;24839:80:0::1;::::0;::::1;14415:21:1::0;14472:2;14452:18;;;14445:30;14511:20;14491:18;;;14484:48;14549:18;;24839:80:0::1;14231:342:1::0;24839:80:0::1;24934:87;24951:10;24963:8;24972:1;24963:11;;;;;;;;;;:::i;:::-;;;;;;;4739:2;24987;:13;;;;:::i;:::-;24976:7;24984:1;24976:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25002:5;25009::::0;25016:4:::1;24934:16;:87::i;:::-;-1:-1:-1::0;24819:3:0;::::1;::::0;::::1;:::i;:::-;;;;24779:254;;;;24593:447:::0;;:::o;14692:197::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;14814:11:::1;::::0;:67:::1;::::0;;;;15012:14:1;;15005:22;14814:67:0::1;::::0;::::1;14987:41:1::0;15071:14;;15064:22;15044:18;;;15037:50;15130:14;;15123:22;15103:18;;;15096:50;15189:14;;15182:22;15162:18;;;15155:50;14814:11:0;;;::::1;-1:-1:-1::0;;;;;14814:11:0::1;::::0;:26:::1;::::0;14959:19:1;;14814:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14692:197:::0;;;;:::o;14425:141::-;14478:7;11013:16;;;;;;5709:42;11013:16;;;;14517:39;;11013:16;14517:39;:::i;:::-;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;;4576:11;4783:30;:::i;:::-;14506:51;;;;:::i;10402:112::-;10454:5;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;;4576:11;4783:30;:::i;:::-;10478:1;10467:12;10463:31;;10483:8;;;10463:31;-1:-1:-1;4739:2:0;;10402:112::o;15247:544::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;15355:14:::1;::::0;::::1;;15354:15;15346:45;;;::::0;-1:-1:-1;;;15346:45:0;;15548:2:1;15346:45:0::1;::::0;::::1;15530:21:1::0;15587:2;15567:18;;;15560:30;15626:19;15606:18;;;15599:47;15663:18;;15346:45:0::1;:341:1::0;:45:0::1;5366:4;15410:6;:21;;;;:65;;;;;5416:4;15452:7;:23;;;;15410:65;:117;;;;;5470:4;15496:11;:31;;;;15410:117;15402:170;;;::::0;-1:-1:-1;;;15402:170:0;;15894:2:1;15402:170:0::1;::::0;::::1;15876:21:1::0;15933:2;15913:18;;;15906:30;15972:25;15952:18;;;15945:53;16015:18;;15402:170:0::1;15692:347:1::0;15402:170:0::1;5523:4;15591:16;15600:7:::0;15591:6;:16:::1;:::i;:::-;:35;;;;15583:80;;;::::0;-1:-1:-1;;;15583:80:0;;16419:2:1;15583:80:0::1;::::0;::::1;16401:21:1::0;;;16438:18;;;16431:30;16497:34;16477:18;;;16470:62;16549:18;;15583:80:0::1;16217:356:1::0;15583:80:0::1;15674:9;:25:::0;;::::1;::::0;;::::1;15710:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;15748:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;15247:544::o;14574:110::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;14643:11:::1;::::0;:33:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;14643:33:0::1;::::0;::::1;160:74:1::0;14643:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;14643:33:0::1;14:226:1::0;13696:140:0;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;-1:-1:-1;;;;;13788:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13788:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13696:140::o;16539:273::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;16684:4:::1;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;16670:11;::::0;16680:1:::1;16670:11;:::i;:::-;:18;;;;:::i;:::-;16658:7:::0;16647;4800:13:::1;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;16637:17;;;;:::i;:::-;16636:29;;;;:::i;:::-;:53;;16628:121;;;::::0;-1:-1:-1;;;16628:121:0;;16780:2:1;16628:121:0::1;::::0;::::1;16762:21:1::0;16819:2;16799:18;;;16792:30;16858:34;16838:18;;;16831:62;16929:25;16909:18;;;16902:53;16972:19;;16628:121:0::1;16578:419:1::0;16628:121:0::1;16797:7:::0;16786;4800:13:::1;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;16776:17;;;;:::i;:::-;16775:29;;;;:::i;:::-;16760:12;:44:::0;-1:-1:-1;;16539:273:0:o;17328:189::-;17457:6;;-1:-1:-1;;;;;17457:6:0;17419:7;11013:16;;;;;;;;;;;5570:5;;17447:41;;17467:21;;17447:41;:::i;:::-;17446:62;;;;:::i;18332:217::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;18462:3:::1;18436:22;:29;;18428:64;;;::::0;-1:-1:-1;;;18428:64:0;;17204:2:1;18428:64:0::1;::::0;::::1;17186:21:1::0;17243:2;17223:18;;;17216:30;17282:24;17262:18;;;17255:52;17324:18;;18428:64:0::1;17002:346:1::0;18428:64:0::1;18503:13;:38:::0;18332:217::o;9039:654::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;-1:-1:-1;;;;;9118:22:0;::::1;9110:96;;;::::0;-1:-1:-1;;;9110:96:0;;17555:2:1;9110:96:0::1;::::0;::::1;17537:21:1::0;17594:2;17574:18;;;17567:30;17633:34;17613:18;;;17606:62;17704:31;17684:18;;;17677:59;17753:19;;9110:96:0::1;17353:425:1::0;9110:96:0::1;9225:16:::0;-1:-1:-1;;;;;9225:16:0;::::1;::::0;9217:90:::1;;;::::0;-1:-1:-1;;;9217:90:0;;17555:2:1;9217:90:0::1;::::0;::::1;17537:21:1::0;17594:2;17574:18;;;17567:30;17633:34;17613:18;;;17606:62;17704:31;17684:18;;;17677:59;17753:19;;9217:90:0::1;17353:425:1::0;9217:90:0::1;9338:6;::::0;9318:34:::1;::::0;-1:-1:-1;;;;;9338:6:0::1;;9318:19;:34::i;:::-;9363:35;9383:8;9393:4;9363:19;:35::i;:::-;9433:6;::::0;-1:-1:-1;;;;;9433:6:0::1;9443:1;11013:16:::0;;;;;;;;;;;9423:21;9419:127:::1;;9478:6;::::0;-1:-1:-1;;;;;9478:6:0::1;10986:7:::0;11013:16;;;;;;;;;;;9461:73:::1;::::0;9478:6;9486:8;;9496:17:::1;10920:117:::0;9461:73:::1;;9419:127;9585:6;::::0;;-1:-1:-1;;;;;9602:17:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;9635:40:::1;::::0;9585:6;::::1;::::0;9602:17;9585:6;;9635:40:::1;::::0;9566:16:::1;::::0;9635:40:::1;9099:594;9039:654:::0;:::o;13979:134::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;-1:-1:-1;;;;;14067:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14067:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13979:134::o;13326:222::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;13410:14:::1;::::0;::::1;;13409:15;13401:24;;;::::0;::::1;;13467:4;-1:-1:-1::0;;;;;13444:28:0;::::1;::::0;13436:55:::1;;;::::0;-1:-1:-1;;;13436:55:0;;17985:2:1;13436:55:0::1;::::0;::::1;17967:21:1::0;18024:2;18004:18;;;17997:30;18063:16;18043:18;;;18036:44;18097:18;;13436:55:0::1;17783:338:1::0;13436:55:0::1;13502:11;:38:::0;;-1:-1:-1;;;;;13502:38:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;13326:222::o;17090:108::-;17133:7;17176:13;4739:2;17176;:13;:::i;:::-;17160:12;;:30;;;;:::i;9701:225::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;9780:6:::1;::::0;9760:34:::1;::::0;-1:-1:-1;;;;;9780:6:0::1;;9760:19;:34::i;:::-;9824:6;::::0;;9841:19;;::::1;::::0;;;9876:42:::1;::::0;-1:-1:-1;;;;;9824:6:0;;::::1;::::0;9805:16:::1;::::0;9824:6;;9876:42:::1;::::0;9805:16;;9876:42:::1;9749:177;9701:225::o:0;15057:182::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;15210:14:::1;:21:::0;;-1:-1:-1;;15210:21:0::1;15227:4;15210:21;::::0;;15057:182::o;12823:495::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;12905:7:::1;12900:411;;-1:-1:-1::0;;;;;12929:13:0;;::::1;12945:5;12929:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12929:21:0::1;::::0;;12965:11:::1;::::0;:34;;;;;::::1;::::0;::::1;18294:74:1::0;;;;18384:18;;;18377:50;;;;12965:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18267:18:1;;12965:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12823:495:::0;;:::o;12900:411::-:1;13036:17;::::0;:22;13032:135:::1;;13125:6;13105:17;;13087:15;:35;;;;:::i;:::-;:44;13079:72;;;::::0;-1:-1:-1;;;13079:72:0;;18640:2:1;13079:72:0::1;::::0;::::1;18622:21:1::0;18679:2;18659:18;;;18652:30;18718:17;18698:18;;;18691:45;18753:18;;13079:72:0::1;18438:339:1::0;13079:72:0::1;-1:-1:-1::0;;;;;13181:13:0;;::::1;;::::0;;;13197:4:::1;13181:13;::::0;;;;;;;;:20;;-1:-1:-1;;13181:20:0::1;::::0;::::1;::::0;;13236:15:::1;13216:17;:35:::0;13266:11:::1;::::0;:33;;;;;::::1;::::0;::::1;18294:74:1::0;;;;18384:18;;;18377:50;13266:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18267:18:1;;13266:33:0::1;18126:307:1::0;12900:411:0::1;12823:495:::0;;:::o;11705:175::-;8893:6;;11771:4;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;11820:9:::1;::::0;11788:62:::1;::::0;11805:4:::1;::::0;11820:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11820:9:0::1;-1:-1:-1::0;;11788:8:0::1;:62::i;:::-;-1:-1:-1::0;11868:4:0::1;11705:175:::0;:::o;23802:593::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;23864:14:::1;::::0;::::1;;23863:15;23855:52;;;::::0;-1:-1:-1;;;23855:52:0;;18984:2:1;23855:52:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;19062:26;19042:18;;;19035:54;19106:18;;23855:52:0::1;18782:348:1::0;23855:52:0::1;23926:16;::::0;::::1;::::0;::::1;;;23918:53;;;::::0;-1:-1:-1;;;23918:53:0;;19337:2:1;23918:53:0::1;::::0;::::1;19319:21:1::0;19376:2;19356:18;;;19349:30;19415:26;19395:18;;;19388:54;19459:18;;23918:53:0::1;19135:348:1::0;23918:53:0::1;23994:11;::::0;;;::::1;-1:-1:-1::0;;;;;23994:11:0::1;23982:106;;24036:11;:40:::0;;;::::1;24070:4;24036:40:::0;::::1;;::::0;;23982:106:::1;24102:11;::::0;24124:6:::1;::::0;24102:87:::1;::::0;;;;-1:-1:-1;;;;;24124:6:0;;::::1;24102:87;::::0;::::1;19711:74:1::0;19833:10;24139:12:0::1;19821:23:1::0;19801:18;;;19794:51;19893:18;24161:15:0::1;19881:31:1::0;19861:18;;;19854:59;4739:2:0::1;19929:18:1::0;;;19922:45;24102:11:0;;;::::1;;::::0;:21:::1;::::0;19683:19:1;;24102:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;24211:14:0::1;:21:::0;;-1:-1:-1;;24211:21:0::1;24228:4;24211:21;::::0;;24270:6:::1;::::0;-1:-1:-1;;;;;24270:6:0::1;-1:-1:-1::0;11013:16:0;;;;;;;;;;;24286:5:::1;::::0;24260:22:::1;::::0;24280:2:::1;24260:22;:::i;:::-;24259:32;;;;:::i;:::-;24243:13;:48:::0;24326:6:::1;::::0;-1:-1:-1;;;;;24326:6:0::1;10986:7:::0;11013:16;;;;;;;;;;;24342:5:::1;::::0;24316:22:::1;::::0;24336:2:::1;24316:22;:::i;:::-;24315:32;;;;:::i;:::-;24302:10;:45:::0;24372:15:::1;24358:11;:29:::0;23802:593::o;11045:165::-;11123:4;11140:40;11150:10;11162:9;11173:6;11140:9;:40::i;:::-;-1:-1:-1;11198:4:0;;11045:165;-1:-1:-1;;;11045:165:0:o;15799:428::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;15900:7:::1;:25:::0;;::::1;15976:29:::0;;::::1;::::0;::::1;::::0;15900:25;;::::1;::::0;::::1;15976:29:::0;;;;;;;;;15936;;::::1;15976::::0;::::1;::::0;;15918:7;16036:21:::1;15996:9:::0;15956;16036:21:::1;:::i;:::-;:31;;;;:::i;:::-;16016:7;:51:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;16113:9:::1;:17:::0;-1:-1:-1;;16094:36:0::1;::::0;16113:17;;::::1;::::0;::::1;::::0;16094:16:::1;:36;:::i;:::-;16149:7;:17:::0;16078:52:::1;::::0;;::::1;::::0;-1:-1:-1;16149:17:0;;::::1;;:26:::0;-1:-1:-1;16149:26:0::1;16141:78;;;::::0;-1:-1:-1;;;16141:78:0;;20180:2:1;16141:78:0::1;::::0;::::1;20162:21:1::0;20219:2;20199:18;;;20192:30;20258:34;20238:18;;;20231:62;20329:9;20309:18;;;20302:37;20356:19;;16141:78:0::1;19978:403:1::0;16141:78:0::1;15889:338;15799:428:::0;;;:::o;18557:263::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;18666:19:::1;:33:::0;;-1:-1:-1;;18666:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;18710:22:::1;:47:::0;;-1:-1:-1;;18710:47:0::1;::::0;::::1;;;::::0;;18773:39:::1;::::0;1797:41:1;;;18773:39:0::1;::::0;1785:2:1;1770:18;18773:39:0::1;;;;;;;;18557:263:::0;;:::o;16235:296::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;-1:-1:-1;;;;;16345:23:0;::::1;::::0;;::::1;::::0;:48:::1;;-1:-1:-1::0;;;;;;16372:21:0;::::1;::::0;::::1;16345:48;16337:84;;;::::0;-1:-1:-1;;;16337:84:0;;20588:2:1;16337:84:0::1;::::0;::::1;20570:21:1::0;20627:2;20607:18;;;20600:30;20666:25;20646:18;;;20639:53;20709:18;;16337:84:0::1;20386:347:1::0;16337:84:0::1;16432:11;:42:::0;;-1:-1:-1;;;;;16432:42:0;;::::1;::::0;;;::::1;;::::0;;;16485:19;:38;;;;;::::1;::::0;::::1;;::::0;;16235:296::o;12202:613::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;12282:16:::1;::::0;::::1;::::0;::::1;;;12281:17;12273:60;;;::::0;-1:-1:-1;;;12273:60:0;;20940:2:1;12273:60:0::1;::::0;::::1;20922:21:1::0;20979:2;20959:18;;;20952:30;21018:32;20998:18;;;20991:60;21068:18;;12273:60:0::1;20738:354:1::0;12273:60:0::1;12344:20;12377:9;12344:43;;12398:16;12428:10;-1:-1:-1::0;;;;;12428:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12417:40:0::1;;12466:4;12473:10;-1:-1:-1::0;;;;;12473:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12417:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9847:15:1;;;12417:74:0::1;::::0;::::1;9829:34:1::0;9899:15;;9879:18;;;9872:43;9741:18;;12417:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12398:93:::0;-1:-1:-1;;;;;;12506:22:0;::::1;12502:200;;12565:10;-1:-1:-1::0;;;;;12565:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12554:43:0::1;;12606:4;12613:10;-1:-1:-1::0;;;;;12613:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12554:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9847:15:1;;;12554:77:0::1;::::0;::::1;9829:34:1::0;9899:15;;9879:18;;;9872:43;9741:18;;12554:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12545:6;:86:::0;;;::::1;-1:-1:-1::0;;;;;12545:86:0;;;::::1;::::0;;;::::1;::::0;;12502:200:::1;;;12673:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;12673:17:0;::::1;;::::0;;12502:200:::1;12712:9;:22:::0;;;::::1;;-1:-1:-1::0;;;;;12712:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;12745:62:::1;::::0;12762:4:::1;::::0;12777:9;;::::1;;-1:-1:-1::0;;12745:8:0::1;:62::i;24403:182::-:0;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;24470:16:::1;::::0;::::1;::::0;::::1;;;24469:17;24461:58;;;::::0;-1:-1:-1;;;24461:58:0;;21887:2:1;24461:58:0::1;::::0;::::1;21869:21:1::0;21926:2;21906:18;;;21899:30;21965;21945:18;;;21938:58;22013:18;;24461:58:0::1;21685:352:1::0;24461:58:0::1;24538:6;::::0;24530:47:::1;::::0;-1:-1:-1;;;;;24538:6:0;;::::1;::::0;24555:21:::1;24530:47:::0;::::1;;;::::0;24538:6:::1;24530:47:::0;24538:6;24530:47;24555:21;24538:6;24530:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24403:182::o:0;17625:699::-;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;17825:16;17805;4800:13:::1;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;17795:26;;;;:::i;:::-;17794:47;;;;:::i;:::-;17778:13;:63:::0;17893:13;17876;4800::::1;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;17866:23;;;;:::i;:::-;17865:41;;;;:::i;:::-;17852:10;:54:::0;;;17925:13:::1;::::0;:27:::1;;17917:73;;;::::0;-1:-1:-1;;;17917:73:0;;22244:2:1;17917:73:0::1;::::0;::::1;22226:21:1::0;22283:2;22263:18;;;22256:30;22322:34;22302:18;;;22295:62;22393:3;22373:18;;;22366:31;22414:19;;17917:73:0::1;22042:397:1::0;17917:73:0::1;18034:6;::::0;-1:-1:-1;;;;;18034:6:0::1;10986:7:::0;11013:16;;;;;;;;;;;5570:5:::1;::::0;18024:23:::1;::::0;18044:3:::1;18024:23;:::i;:::-;18023:44;;;;:::i;:::-;18009:10;;:58;;18001:106;;;::::0;-1:-1:-1;;;18001:106:0;;22646:2:1;18001:106:0::1;::::0;::::1;22628:21:1::0;22685:2;22665:18;;;22658:30;22724:34;22704:18;;;22697:62;22795:5;22775:18;;;22768:33;22818:19;;18001:106:0::1;22444:399:1::0;18001:106:0::1;18150:9;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;18140:19;;;;:::i;:::-;18126:10;;:33;;18118:92;;;::::0;-1:-1:-1;;;18118:92:0;;23050:2:1;18118:92:0::1;::::0;::::1;23032:21:1::0;23089:2;23069:18;;;23062:30;23128:34;23108:18;;;23101:62;23199:16;23179:18;;;23172:44;23233:19;;18118:92:0::1;22848:410:1::0;18118:92:0::1;18256:9;4800:13;4739:2;4800;:13;:::i;:::-;4783:30;::::0;4576:11:::1;4783:30;:::i;:::-;18246:19;;;;:::i;:::-;18229:13;;:36;;18221:95;;;::::0;-1:-1:-1;;;18221:95:0;;23050:2:1;18221:95:0::1;::::0;::::1;23032:21:1::0;23089:2;23069:18;;;23062:30;23128:34;23108:18;;;23101:62;23199:16;23179:18;;;23172:44;23233:19;;18221:95:0::1;22848:410:1::0;14269:148:0;8893:6;;-1:-1:-1;;;;;8893:6:0;8903:10;8893:20;8885:50;;;;-1:-1:-1;;;8885:50:0;;10518:2:1;8885:50:0;;;10500:21:1;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:47;10633:18;;8885:50:0;10316:341:1;8885:50:0;-1:-1:-1;;;;;14365:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14365:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14269:148::o;11387:310::-;-1:-1:-1;;;;;11482:20:0;;11474:52;;;;-1:-1:-1;;;11474:52:0;;23465:2:1;11474:52:0;;;23447:21:1;23504:2;23484:18;;;23477:30;23543:21;23523:18;;;23516:49;23582:18;;11474:52:0;23263:343:1;11474:52:0;-1:-1:-1;;;;;11545:21:0;;11537:53;;;;-1:-1:-1;;;11537:53:0;;23465:2:1;11537:53:0;;;23447:21:1;23504:2;23484:18;;;23477:30;23543:21;23523:18;;;23516:49;23582:18;;11537:53:0;23263:343:1;11537:53:0;-1:-1:-1;;;;;11603:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11656:33;;391:25:1;;;11656:33:0;;364:18:1;11656:33:0;;;;;;;11387:310;;;:::o;19282:1946::-;19361:4;-1:-1:-1;;;;;19386:18:0;;19378:68;;;;-1:-1:-1;;;19378:68:0;;23813:2:1;19378:68:0;;;23795:21:1;23852:2;23832:18;;;23825:30;23891:34;23871:18;;;23864:62;23962:7;23942:18;;;23935:35;23987:19;;19378:68:0;23611:401:1;19378:68:0;-1:-1:-1;;;;;19465:16:0;;19457:64;;;;-1:-1:-1;;;19457:64:0;;24219:2:1;19457:64:0;;;24201:21:1;24258:2;24238:18;;;24231:30;24297:34;24277:18;;;24270:62;24368:5;24348:18;;;24341:33;24391:19;;19457:64:0;24017:399:1;19457:64:0;19549:1;19540:6;:10;19532:64;;;;-1:-1:-1;;;19532:64:0;;24623:2:1;19532:64:0;;;24605:21:1;24662:2;24642:18;;;24635:30;24701:34;24681:18;;;24674:62;24772:11;24752:18;;;24745:39;24801:19;;19532:64:0;24421:405:1;19532:64:0;-1:-1:-1;;;;;19695:13:0;;19607:8;19695:13;;;:7;:13;;;;;;19607:8;;;;19695:13;;19691:162;;;19731:4;19725:10;;19691:162;;;-1:-1:-1;;;;;19757:11:0;;;;;;:7;:11;;;;;;;;19753:100;;;19792:4;19785:11;;19753:100;;;-1:-1:-1;19837:4:0;19753:100;19867:20;19878:4;19884:2;19867:10;:20::i;:::-;19863:644;;;19908:14;;;;19904:89;;19943:34;;-1:-1:-1;;;19943:34:0;;25033:2:1;19943:34:0;;;25015:21:1;25072:2;25052:18;;;25045:30;25111:26;25091:18;;;25084:54;25155:18;;19943:34:0;24831:348:1;19904:89:0;20011:3;:11;;;;20018:4;20011:11;20007:232;;;-1:-1:-1;;;;;20047:27:0;;;;;;:21;:27;;;;;;;;20046:28;:58;;;;-1:-1:-1;;;;;;20079:25:0;;;;;;:21;:25;;;;;;;;20078:26;20046:58;20042:182;;;20147:12;;20137:6;:22;;20129:75;;;;-1:-1:-1;;;20129:75:0;;25386:2:1;20129:75:0;;;25368:21:1;25425:2;25405:18;;;25398:30;25464:34;25444:18;;;25437:62;25535:10;25515:18;;;25508:38;25563:19;;20129:75:0;25184:404:1;20129:75:0;20271:9;;-1:-1:-1;;;;;20257:24:0;;;20271:9;;;;;20257:24;;;;:33;;;20286:4;20285:5;20257:33;20253:243;;;-1:-1:-1;;;;;20316:25:0;;;;;;:21;:25;;;;;;;;20311:170;;20400:14;;20390:6;20374:13;20384:2;-1:-1:-1;;;;;11013:16:0;10986:7;11013:16;;;;;;;;;;;;10920:117;20374:13;:22;;;;:::i;:::-;:40;;20366:95;;;;-1:-1:-1;;;20366:95:0;;25795:2:1;20366:95:0;;;25777:21:1;25834:2;25814:18;;;25807:30;25873:34;25853:18;;;25846:62;25944:12;25924:18;;;25917:40;25974:19;;20366:95:0;25593:406:1;20366:95:0;20523:4;20519:632;;;20549:6;;;;20544:596;;20580:19;;;;;;;20576:549;;;20673:4;20624:28;11013:16;;;;;;;;;;;20730:13;;20706:37;;20702:404;;20790:10;;20831:22;;;;20827:97;;;20888:13;;20878:6;;-1:-1:-1;;;;;20878:6:0;10986:7;11013:16;;;;;;;;;;;5570:5;;20868:33;;;:::i;:::-;20867:54;;;;:::i;:::-;20857:64;;20827:97;20978:7;20954:20;:31;20950:72;;21012:7;20989:30;;20950:72;21048:34;21061:20;21048:12;:34::i;:::-;20745:361;20702:404;20601:524;20576:549;21168:52;21185:4;21191:2;21195:6;21203:3;21208:4;21214:5;21168:16;:52::i;:::-;21161:59;19282:1946;-1:-1:-1;;;;;;;19282:1946:0:o;25048:1205::-;25167:4;25188:20;25199:4;25205:2;25188:10;:20::i;:::-;25184:228;;;25243:11;;:39;;;;;-1:-1:-1;;;;;26285:15:1;;;25243:39:0;;;26267:34:1;26337:15;;;26317:18;;;26310:43;26369:18;;;26362:34;;;25212:12:0;;25243:11;;;;;:21;;26179:18:1;;25243:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;25243:39:0;;;;;;;;-1:-1:-1;;25243:39:0;;;;;;;;;;;;:::i;:::-;;;25239:122;;25350:8;;;25239:122;25333:5;-1:-1:-1;25379:7:0;25375:26;;25390:8;;;25375:26;25210:202;25184:228;-1:-1:-1;;;;;25456:25:0;;25422:12;25456:25;;;:19;:25;;;;;;25437:4;;25456:25;;;:52;;-1:-1:-1;;;;;;25485:23:0;;;;;;:19;:23;;;;;;;;25456:52;25452:99;;;-1:-1:-1;25534:5:0;25452:99;-1:-1:-1;;;;;25565:11:0;;:7;:11;;;;;;;;;;;:16;;25561:63;;25598:12;:14;;;:12;:14;;;:::i;:::-;;;;;;25561:63;-1:-1:-1;;;;;25634:13:0;;:7;:13;;;;;;;;;;:23;;25651:6;;25634:7;:23;;25651:6;;25634:23;:::i;:::-;;;;-1:-1:-1;25668:22:0;;-1:-1:-1;25694:7:0;25693:55;;25742:6;25693:55;;;25705:34;25715:4;25721:3;25726:4;25732:6;25705:9;:34::i;:::-;25668:80;;25774:14;25759:7;:11;25767:2;-1:-1:-1;;;;;25759:11:0;-1:-1:-1;;;;;25759:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;25803:13:0;;:7;:13;;;;;;;;;;;:18;;25799:65;;25838:12;:14;;;:12;:14;;;:::i;:::-;;;;;;25799:65;25894:2;-1:-1:-1;;;;;25879:34:0;25888:4;-1:-1:-1;;;;;25879:34:0;;25898:14;25879:34;;;;391:25:1;;379:2;364:18;;245:177;25879:34:0;;;;;;;;25929:16;;;;;;;25924:298;;25962:28;25981:4;25987:2;25962:18;:28::i;:::-;26010:16;;;;;;;26009:17;:41;;;;;26030:20;26041:4;26047:2;26030:10;:20::i;:::-;26009:77;;;;-1:-1:-1;;;;;;26055:31:0;;;;;;:25;:31;;;;;;;;26054:32;26009:77;:111;;;;-1:-1:-1;;;;;;26091:29:0;;;;;;:25;:29;;;;;;;;26090:30;26009:111;:121;;;;;26125:5;26124:6;26009:121;26005:206;;;26151:44;;-1:-1:-1;;;26151:44:0;;27260:2:1;26151:44:0;;;27242:21:1;27299:2;27279:18;;;27272:30;27338:34;27318:18;;;27311:62;27409:4;27389:18;;;27382:32;27431:19;;26151:44:0;27058:398:1;26005:206:0;-1:-1:-1;26241:4:0;;25048:1205;-1:-1:-1;;;;;;;;25048:1205:0:o;18828:446::-;18929:6;;18897:4;;-1:-1:-1;;;;;18921:14:0;;;18929:6;;18921:14;;;;:43;;-1:-1:-1;18958:6:0;;-1:-1:-1;;;;;18952:12:0;;;18958:6;;18952:12;;18921:43;:79;;;;-1:-1:-1;18994:6:0;;-1:-1:-1;;;;;18994:6:0;18981:9;:19;;18921:79;:118;;;;-1:-1:-1;;;;;;19018:21:0;;;;;;:17;:21;;;;;;;;19017:22;18921:118;:159;;;;-1:-1:-1;;;;;;19057:23:0;;;;;;:17;:23;;;;;;;;19056:24;18921:159;:186;;;;-1:-1:-1;;;;;;19097:10:0;;5709:42;19097:10;;18921:186;:219;;;;-1:-1:-1;;;;;;19124:16:0;;;;18921:219;:257;;;;-1:-1:-1;;;;;;19157:21:0;;19173:4;19157:21;;18921:257;:302;;;;-1:-1:-1;19211:11:0;;-1:-1:-1;;;;;19195:28:0;;;19211:11;;;;;19195:28;;18921:302;:345;;;;-1:-1:-1;19254:11:0;;-1:-1:-1;;;;;19240:26:0;;;19254:11;;;;;19240:26;;18921:345;18914:352;18828:446;-1:-1:-1;;;18828:446:0:o;21236:1987::-;6759:6;:13;;-1:-1:-1;;6759:13:0;6768:4;6759:13;;;21319:30:::1;::::0;;::::1;::::0;::::1;::::0;;21342:7:::1;21319:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;6759:6;21364:21;21360:60:::1;;21402:7;;;21360:60;21456:4;21436:26;::::0;;;:11:::1;:26;::::0;;;;;;;21471:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;21471:9:0::1;21436:46:::0;;;;;;;;-1:-1:-1;;21436:67:0::1;21432:166;;21540:4;21520:26;::::0;;;:11:::1;:26;::::0;;;;;;;21555:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;21555:9:0::1;21520:46:::0;;;;;;;-1:-1:-1;;21520:66:0;;21432:166:::1;21610:17;21695:1;21675:6;:16;;;21631:60;;21655:6;:16;;;21632:39;;:20;:39;;;;:::i;:::-;21631:60;;;;:::i;:::-;21630:66;;;;:::i;:::-;21610:86:::0;-1:-1:-1;21707:15:0::1;21725:32;21610:86:::0;21725:20;:32:::1;:::i;:::-;21802:16;::::0;;21816:1:::1;21802:16:::0;;;;;::::1;::::0;;21707:50;;-1:-1:-1;21778:21:0::1;::::0;21802:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21802:16:0::1;21778:40;;21847:4;21829;21834:1;21829:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;21829:23:0::1;;;-1:-1:-1::0;;;;;21829:23:0::1;;;::::0;::::1;21873:9;;;;;;;;;-1:-1:-1::0;;;;;21873:9:0::1;-1:-1:-1::0;;;;;21873:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21863:4;21868:1;21863:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21863:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;21906:9:::1;::::0;:186:::1;::::0;;;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;21981:7;;22003:1:::1;::::0;22019:4;;22046::::1;::::0;22066:15:::1;::::0;21906:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21902:233;;22117:7;;;;;;21902:233;22168:21;22147:18;22254:7:::0;22228:22:::1;22241:9:::0;22168:21;22228:22:::1;:::i;:::-;22227:34;;;;:::i;:::-;22200:61:::0;-1:-1:-1;22278:13:0;;22274:400:::1;;22312:9;::::0;:222:::1;::::0;;;;22389:4:::1;22312:222;::::0;::::1;28856:34:1::0;28906:18;;;28899:34;;;22441:1:0::1;28949:18:1::0;;;28942:34;;;28992:18;;;28985:34;5709:42:0::1;29035:19:1::0;;;29028:44;22504:15:0::1;29088:19:1::0;;;29081:35;22312:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;22312:9:0::1;::::0;:25:::1;::::0;22345:16;;28767:19:1;;22312:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22312:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;22312:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;22308:355;;22641:7;;;;;;;;22308:355;-1:-1:-1::0;;22559:40:0::1;::::0;;29612:25:1;;;29668:2;29653:18;;29646:34;;;22559:40:0::1;::::0;-1:-1:-1;29585:18:1;22559:40:0::1;;;;;;;22308:355;22686:30;22700:16:::0;22686:30;::::1;:::i;:::-;;;22747:6;:16;;;22727:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;22854:16:::1;::::0;::::1;::::0;22836:14:::1;::::0;::::1;::::0;22774:12:::1;::::0;-1:-1:-1;22774:12:0;;22822:48;;::::1;::::0;22823:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;22822:48;;;;:::i;:::-;22797:73:::0;-1:-1:-1;22881:24:0::1;22908:27;22797:73:::0;22908:10;:27:::1;:::i;:::-;22950:16;::::0;::::1;::::0;22881:54;;-1:-1:-1;22950:20:0::1;;::::0;22946:133:::1;;23000:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;23000:21:0;;::::1;::::0;23057:5:::1;::::0;23034:16;;23000:67:::1;::::0;;;23034:16;23000:21;23057:5;23000:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22987:80:0;;-1:-1:-1;;22946:133:0::1;23093:14;::::0;::::1;::::0;:18:::1;;::::0;23089:127:::1;;23141:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;23141:19:0;;::::1;::::0;23194:5:::1;::::0;23173:14;;23141:63:::1;::::0;;;23173:14;23141:19;23194:5;23141:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23128:76:0;;-1:-1:-1;;23089:127:0::1;21308:1915;;;;;;;;;6783:1;-1:-1:-1::0;6795:6:0;:14;;-1:-1:-1;;6795:14:0;;;21236:1987::o;26261:804::-;26349:7;26369:18;26402:3;26398:205;;;-1:-1:-1;26435:9:0;:16;;;26398:205;;;26473:4;26469:134;;;-1:-1:-1;26507:9:0;:17;;;;;;26469:134;;;-1:-1:-1;26570:9:0;:21;;;;;;26469:134;26617:10;26631:1;26617:15;26613:39;;26643:6;26636:13;;;;;26613:39;26674:11;;;;;-1:-1:-1;;;;;26674:11:0;26698:4;26666:37;:110;;;;;26721:13;26738:1;26721:18;:54;;;;26756:13;26773:2;26756:19;26721:54;26662:138;;;-1:-1:-1;26793:4:0;26662:138;26810:17;5570:5;26830:19;26839:10;26830:6;:19;:::i;:::-;:38;;;;:::i;:::-;26810:58;-1:-1:-1;26883:13:0;;26879:141;;26929:4;26913:7;:22;;;;;;;;;;:35;;26939:9;;26913:7;:35;;26939:9;;26913:35;:::i;:::-;;;;-1:-1:-1;;26968:40:0;;391:25:1;;;26991:4:0;;-1:-1:-1;;;;;26968:40:0;;;;;379:2:1;364:18;26968:40:0;;;;;;;26879:141;27039:18;27048:9;27039:6;:18;:::i;23231:563::-;23314:16;;;;;;;23313:17;23305:65;;;;-1:-1:-1;;;23305:65:0;;30279:2:1;23305:65:0;;;30261:21:1;30318:2;30298:18;;;30291:30;30357:34;30337:18;;;30330:62;30428:5;30408:18;;;30401:33;30451:19;;23305:65:0;30077:399:1;23305:65:0;23386:20;23397:4;23403:2;23386:10;:20::i;:::-;23385:21;:37;;;;-1:-1:-1;23416:6:0;;-1:-1:-1;;;;;23410:12:0;;;23416:6;;23410:12;23385:37;23381:406;;;-1:-1:-1;;;;;23439:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;23439:30:0;;;23465:4;23439:30;;;;;;23484:19;:25;;;;;:32;;;;;;;;;;23531:16;:23;;-1:-1:-1;;23531:23:0;23439:30;23531:23;;;;;23581:11;;;;23569:114;;23627:11;:40;;;;23661:4;23627:40;;;;;23569:114;23697:19;:26;;-1:-1:-1;;23697:26:0;;;;;23743:32;;-1:-1:-1;1797:41:1;;23743:32:0;;1785:2:1;1770:18;23743:32:0;1657:187:1;797:607;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;1395:2;-1:-1:-1;;1320:2:1;1312:6;1308:15;1304:88;1293:9;1289:104;1285:113;1277:121;;;;797:607;;;;:::o;1849:180::-;1908:6;1961:2;1949:9;1940:7;1936:23;1932:32;1929:52;;;1977:1;1974;1967:12;1929:52;-1:-1:-1;2000:23:1;;1849:180;-1:-1:-1;1849:180:1:o;2034:154::-;-1:-1:-1;;;;;2113:5:1;2109:54;2102:5;2099:65;2089:93;;2178:1;2175;2168:12;2193:315;2261:6;2269;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;2377:9;2364:23;2396:31;2421:5;2396:31;:::i;:::-;2446:5;2498:2;2483:18;;;;2470:32;;-1:-1:-1;;;2193:315:1:o;2513:247::-;2572:6;2625:2;2613:9;2604:7;2600:23;2596:32;2593:52;;;2641:1;2638;2631:12;2593:52;2680:9;2667:23;2699:31;2724:5;2699:31;:::i;2765:456::-;2842:6;2850;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:52;;;2927:1;2924;2917:12;2879:52;2966:9;2953:23;2985:31;3010:5;2985:31;:::i;:::-;3035:5;-1:-1:-1;3092:2:1;3077:18;;3064:32;3105:33;3064:32;3105:33;:::i;:::-;2765:456;;3157:7;;-1:-1:-1;;;3211:2:1;3196:18;;;;3183:32;;2765:456::o;3226:248::-;3294:6;3302;3355:2;3343:9;3334:7;3330:23;3326:32;3323:52;;;3371:1;3368;3361:12;3323:52;-1:-1:-1;;3394:23:1;;;3464:2;3449:18;;;3436:32;;-1:-1:-1;3226:248:1:o;3479:184::-;3531:77;3528:1;3521:88;3628:4;3625:1;3618:15;3652:4;3649:1;3642:15;3668:334;3739:2;3733:9;3795:2;3785:13;;-1:-1:-1;;3781:86:1;3769:99;;3898:18;3883:34;;3919:22;;;3880:62;3877:88;;;3945:18;;:::i;:::-;3981:2;3974:22;3668:334;;-1:-1:-1;3668:334:1:o;4007:183::-;4067:4;4100:18;4092:6;4089:30;4086:56;;;4122:18;;:::i;:::-;-1:-1:-1;4167:1:1;4163:14;4179:4;4159:25;;4007:183::o;4195:662::-;4249:5;4302:3;4295:4;4287:6;4283:17;4279:27;4269:55;;4320:1;4317;4310:12;4269:55;4356:6;4343:20;4382:4;4406:60;4422:43;4462:2;4422:43;:::i;:::-;4406:60;:::i;:::-;4500:15;;;4586:1;4582:10;;;;4570:23;;4566:32;;;4531:12;;;;4610:15;;;4607:35;;;4638:1;4635;4628:12;4607:35;4674:2;4666:6;4662:15;4686:142;4702:6;4697:3;4694:15;4686:142;;;4768:17;;4756:30;;4806:12;;;;4719;;4686:142;;;-1:-1:-1;4846:5:1;4195:662;-1:-1:-1;;;;;;4195:662:1:o;4862:1215::-;4980:6;4988;5041:2;5029:9;5020:7;5016:23;5012:32;5009:52;;;5057:1;5054;5047:12;5009:52;5097:9;5084:23;5126:18;5167:2;5159:6;5156:14;5153:34;;;5183:1;5180;5173:12;5153:34;5221:6;5210:9;5206:22;5196:32;;5266:7;5259:4;5255:2;5251:13;5247:27;5237:55;;5288:1;5285;5278:12;5237:55;5324:2;5311:16;5346:4;5370:60;5386:43;5426:2;5386:43;:::i;5370:60::-;5464:15;;;5546:1;5542:10;;;;5534:19;;5530:28;;;5495:12;;;;5570:19;;;5567:39;;;5602:1;5599;5592:12;5567:39;5626:11;;;;5646:217;5662:6;5657:3;5654:15;5646:217;;;5742:3;5729:17;5759:31;5784:5;5759:31;:::i;:::-;5803:18;;5679:12;;;;5841;;;;5646:217;;;5882:5;-1:-1:-1;;5925:18:1;;5912:32;;-1:-1:-1;;5956:16:1;;;5953:36;;;5985:1;5982;5975:12;5953:36;;6008:63;6063:7;6052:8;6041:9;6037:24;6008:63;:::i;:::-;5998:73;;;4862:1215;;;;;:::o;6082:118::-;6168:5;6161:13;6154:21;6147:5;6144:32;6134:60;;6190:1;6187;6180:12;6205:647;6279:6;6287;6295;6303;6356:3;6344:9;6335:7;6331:23;6327:33;6324:53;;;6373:1;6370;6363:12;6324:53;6412:9;6399:23;6431:28;6453:5;6431:28;:::i;:::-;6478:5;-1:-1:-1;6535:2:1;6520:18;;6507:32;6548:30;6507:32;6548:30;:::i;:::-;6597:7;-1:-1:-1;6656:2:1;6641:18;;6628:32;6669:30;6628:32;6669:30;:::i;:::-;6718:7;-1:-1:-1;6777:2:1;6762:18;;6749:32;6790:30;6749:32;6790:30;:::i;:::-;6205:647;;;;-1:-1:-1;6205:647:1;;-1:-1:-1;;6205:647:1:o;7046:159::-;7113:20;;7173:6;7162:18;;7152:29;;7142:57;;7195:1;7192;7185:12;7142:57;7046:159;;;:::o;7210:328::-;7284:6;7292;7300;7353:2;7341:9;7332:7;7328:23;7324:32;7321:52;;;7369:1;7366;7359:12;7321:52;7392:28;7410:9;7392:28;:::i;:::-;7382:38;;7439:37;7472:2;7461:9;7457:18;7439:37;:::i;:::-;7429:47;;7495:37;7528:2;7517:9;7513:18;7495:37;:::i;:::-;7485:47;;7210:328;;;;;:::o;7543:382::-;7608:6;7616;7669:2;7657:9;7648:7;7644:23;7640:32;7637:52;;;7685:1;7682;7675:12;7637:52;7724:9;7711:23;7743:31;7768:5;7743:31;:::i;:::-;7793:5;-1:-1:-1;7850:2:1;7835:18;;7822:32;7863:30;7822:32;7863:30;:::i;:::-;7912:7;7902:17;;;7543:382;;;;;:::o;7930:376::-;7992:6;8000;8053:2;8041:9;8032:7;8028:23;8024:32;8021:52;;;8069:1;8066;8059:12;8021:52;8108:9;8095:23;8127:28;8149:5;8127:28;:::i;8760:404::-;8844:6;8852;8905:2;8893:9;8884:7;8880:23;8876:32;8873:52;;;8921:1;8918;8911:12;8873:52;8960:9;8947:23;8979:31;9004:5;8979:31;:::i;:::-;9029:5;-1:-1:-1;9086:2:1;9071:18;;9058:32;9099:33;9058:32;9099:33;:::i;9926:385::-;10012:6;10020;10028;10036;10089:3;10077:9;10068:7;10064:23;10060:33;10057:53;;;10106:1;10103;10096:12;10057:53;-1:-1:-1;;10129:23:1;;;10199:2;10184:18;;10171:32;;-1:-1:-1;10250:2:1;10235:18;;10222:32;;10301:2;10286:18;10273:32;;-1:-1:-1;9926:385:1;-1:-1:-1;9926:385:1:o;10998:184::-;11050:77;11047:1;11040:88;11147:4;11144:1;11137:15;11171:4;11168:1;11161:15;11187:482;11276:1;11319:5;11276:1;11333:330;11354:7;11344:8;11341:21;11333:330;;;11473:4;-1:-1:-1;;11401:77:1;11395:4;11392:87;11389:113;;;11482:18;;:::i;:::-;11532:7;11522:8;11518:22;11515:55;;;11552:16;;;;11515:55;11631:22;;;;11591:15;;;;11333:330;;;11337:3;11187:482;;;;;:::o;11674:866::-;11723:5;11753:8;11743:80;;-1:-1:-1;11794:1:1;11808:5;;11743:80;11842:4;11832:76;;-1:-1:-1;11879:1:1;11893:5;;11832:76;11924:4;11942:1;11937:59;;;;12010:1;12005:130;;;;11917:218;;11937:59;11967:1;11958:10;;11981:5;;;12005:130;12042:3;12032:8;12029:17;12026:43;;;12049:18;;:::i;:::-;-1:-1:-1;;12105:1:1;12091:16;;12120:5;;11917:218;;12219:2;12209:8;12206:16;12200:3;12194:4;12191:13;12187:36;12181:2;12171:8;12168:16;12163:2;12157:4;12154:12;12150:35;12147:77;12144:159;;;-1:-1:-1;12256:19:1;;;12288:5;;12144:159;12335:34;12360:8;12354:4;12335:34;:::i;:::-;12465:6;-1:-1:-1;;12393:79:1;12384:7;12381:92;12378:118;;;12476:18;;:::i;:::-;12514:20;;11674:866;-1:-1:-1;;;11674:866:1:o;12545:140::-;12603:5;12632:47;12673:4;12663:8;12659:19;12653:4;12632:47;:::i;12690:274::-;12730:1;12756;12746:189;;12791:77;12788:1;12781:88;12892:4;12889:1;12882:15;12920:4;12917:1;12910:15;12746:189;-1:-1:-1;12949:9:1;;12690:274::o;12969:168::-;13042:9;;;13073;;13090:15;;;13084:22;;13070:37;13060:71;;13111:18;;:::i;13142:128::-;13209:9;;;13230:11;;;13227:37;;;13244:18;;:::i;14042:184::-;14094:77;14091:1;14084:88;14191:4;14188:1;14181:15;14215:4;14212:1;14205:15;14578:197;14616:3;14644:6;14685:2;14678:5;14674:14;14712:2;14703:7;14700:15;14697:41;;14718:18;;:::i;:::-;14767:1;14754:15;;14578:197;-1:-1:-1;;;14578:197:1:o;15216:125::-;15281:9;;;15302:10;;;15299:36;;;15315:18;;:::i;16044:168::-;16111:6;16137:10;;;16149;;;16133:27;;16172:11;;;16169:37;;;16186:18;;:::i;:::-;16169:37;16044:168;;;;:::o;21097:251::-;21167:6;21220:2;21208:9;21199:7;21195:23;21191:32;21188:52;;;21236:1;21233;21226:12;21188:52;21268:9;21262:16;21287:31;21312:5;21287:31;:::i;26407:245::-;26474:6;26527:2;26515:9;26506:7;26502:23;26498:32;26495:52;;;26543:1;26540;26533:12;26495:52;26575:9;26569:16;26594:28;26616:5;26594:28;:::i;26657:195::-;26696:3;-1:-1:-1;;26720:5:1;26717:77;26714:103;;26797:18;;:::i;:::-;-1:-1:-1;26844:1:1;26833:13;;26657:195::o;26857:196::-;26896:3;26924:5;26914:39;;26933:18;;:::i;:::-;-1:-1:-1;;;26969:78:1;;26857:196::o;27461:1026::-;27723:4;27771:3;27760:9;27756:19;27802:6;27791:9;27784:25;27828:2;27866:6;27861:2;27850:9;27846:18;27839:34;27909:3;27904:2;27893:9;27889:18;27882:31;27933:6;27968;27962:13;27999:6;27991;27984:22;28037:3;28026:9;28022:19;28015:26;;28076:2;28068:6;28064:15;28050:29;;28097:1;28107:218;28121:6;28118:1;28115:13;28107:218;;;28186:13;;-1:-1:-1;;;;;28182:62:1;28170:75;;28300:15;;;;28265:12;;;;28143:1;28136:9;28107:218;;;-1:-1:-1;;;;;;;28381:55:1;;;;28376:2;28361:18;;28354:83;-1:-1:-1;;;28468:3:1;28453:19;28446:35;28342:3;27461:1026;-1:-1:-1;;;27461:1026:1:o;29127:306::-;29215:6;29223;29231;29284:2;29272:9;29263:7;29259:23;29255:32;29252:52;;;29300:1;29297;29290:12;29252:52;29329:9;29323:16;29313:26;;29379:2;29368:9;29364:18;29358:25;29348:35;;29423:2;29412:9;29408:18;29402:25;29392:35;;29127:306;;;;;:::o;29691:171::-;29759:6;29798:10;;;29786;;;29782:27;;29821:12;;;29818:38;;;29836:18;;:::i

Swarm Source

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