ETH Price: $3,154.74 (+1.14%)
Gas: 2 Gwei

Token

TRIM (TRIM)
 

Overview

Max Total Supply

1,000,000,000,000 TRIM

Holders

208

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
obamaslastname.eth
Balance
1,136,213,981.176577003 TRIM

Value
$0.00
0x646b14a3a0a24038b24b4b13b66d8dfea04e801f
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:
TRIM

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/*



Hello there fellow degens. If you found this, I hope you’ve read the medium. You must read it. 

Welcome to Trim. 

https://t.me/trim_portal



*/

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 AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

contract TRIM is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcludedFromDailyLimits;
   
    uint256 constant private startingSupply = 1_000_000_000_000;
    string constant private _name = "TRIM";
    string constant private _symbol = "TRIM";
    uint8 constant private _decimals = 9;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;


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

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

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

    Ratios public _ratios = Ratios({
        liquidity: 0,
        marketing: 900,
        totalSwap: 900
    });



    uint256 constant public maxBuyTaxes = 1800;
    uint256 constant public maxSellTaxes = 1800;
    uint256 constant public maxTransferTaxes = 1800;
    uint256 constant public maxRoundtripTax = 2200;
    uint256 constant masterTaxDivisor = 10000;

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

    struct TaxWallets {
        address payable marketing;
        address liquidity;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x3D170e306f025D124a9C79Ef9ef56FfF9679cBF9),
        liquidity: 0x3D170e306f025D124a9C79Ef9ef56FfF9679cBF9
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 25) / 10000;
    uint256 private _maxWalletSize = (_tTotal * 1) / 100;

    bool public sellLimitsEnabled = true;
    uint256 public sellTimer = 24 hours;
    mapping (address => uint256) private userDailySold;
    mapping (address => uint256) private userSoldTime;
    mapping (address => uint256) private userSellLimit;
    uint256 public dailySellLimit = 2500;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }

    constructor () payable {
        _tOwned[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            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;

    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;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

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

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

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

    function isExcludedFromDailyLimits(address account) external view returns (bool) {
        return _isExcludedFromDailyLimits[account];
    }

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

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

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

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

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

//================================================ BLACKLIST

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function isBlacklisted(address account) external view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

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

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

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


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

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

    function setWallets(address payable marketing, address liquidity) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        if(_taxWallets.liquidity != DEAD) {
            _taxWallets.liquidity = liquidity;
        }
    }

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

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

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

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

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

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

    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 setSellLimitsEnabled(bool enabled) external onlyOwner {
        sellLimitsEnabled = enabled;
    }

    function setDailySellLimit(uint256 percentInHundreds) external onlyOwner {
        require(percentInHundreds >= 2000, "Cannot set below 20% per day.");
        dailySellLimit = percentInHundreds;
    }

    function setDailySellTimer(uint256 timeInMinutes) external onlyOwner {
        timeInMinutes *= 1 minutes;
        require(timeInMinutes <= 36 hours, "Cannot set above 36 hours.");
        sellTimer = timeInMinutes;
    }

    function getSellLimitInfo(address account) external view returns (uint256 soldAmount, uint256 currentLimit, uint256 sellableAmountRemaining, uint256 secondsRemaining) {
        if (userSoldTime[account] + sellTimer > block.timestamp) {
            soldAmount = userDailySold[account] / 10**_decimals;
            currentLimit = userSellLimit[account] / 10**_decimals;
            sellableAmountRemaining = currentLimit - soldAmount;
            secondsRemaining = (userSoldTime[account] + sellTimer) - block.timestamp;
        } else {
            soldAmount = 0;
            currentLimit = ((balanceOf(account) * dailySellLimit) / masterTaxDivisor) / 10**_decimals;
            sellableAmountRemaining = currentLimit;
            secondsRemaining = 0;
        }
    }

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

    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 (sellLimitsEnabled) {
                if (sell) {
                    if (!_isExcludedFromDailyLimits[from]) {
                        uint256 currentTime = block.timestamp;
                        if (userSoldTime[from] + sellTimer < currentTime) {
                            userSellLimit[from] = (balanceOf(from) * dailySellLimit) / masterTaxDivisor;
                            userSoldTime[from] = currentTime;
                            userDailySold[from] = 0;
                        }
                        require(amount + userDailySold[from] <= userSellLimit[from], "Selling too much per time limit.");
                        userDailySold[from] += amount;
                    }
                }
            }
        }

        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; }
                        if (contractTokenBalance > 0) {
                            contractSwap(contractTokenBalance);
                        }
                    }
                }
            }
        } 
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

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

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

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

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

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

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

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

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

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

    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 (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            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 (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        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 (address(antiSnipe) == 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":"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","name":"liquidity","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":"dailySellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"address","name":"account","type":"address"}],"name":"getSellLimitInfo","outputs":[{"internalType":"uint256","name":"soldAmount","type":"uint256"},{"internalType":"uint256","name":"currentLimit","type":"uint256"},{"internalType":"uint256","name":"sellableAmountRemaining","type":"uint256"},{"internalType":"uint256","name":"secondsRemaining","type":"uint256"}],"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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDailyLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":[],"name":"sellLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","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":"uint256","name":"percentInHundreds","type":"uint256"}],"name":"setDailySellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"setDailySellTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromDailyLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSellLimitsEnabled","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","name":"liquidity","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"}]

60006002819055610384608081905260a081905260c08190526009805465ffffffffffff199081166503840384038417825560e09390935261010082905261012091909152600a805490921665038403840000178255610180604052733d170e306f025d124a9c79ef9ef56fff9679cbf9610140819052610160819052600d80546001600160a01b03199081168317909155600e80549091169091179055600f805461ff0019169055601382905561271091620000bd91906200079c565b620000ce9064e8d4a51000620007b4565b620000db906019620007b4565b620000e79190620007d6565b6014556064620000fa6009600a6200079c565b6200010b9064e8d4a51000620007b4565b62000118906001620007b4565b620001249190620007d6565b6015556016805460ff19166001179055620151806017556109c4601b55601c805461ffff191690556200015a6009600a6200079c565b6200016b9064e8d4a51000620007b4565b33600081815260208190526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001ae6009600a6200079c565b620001bf9064e8d4a51000620007b4565b60405190815260200160405180910390a3601d80546001600160a01b03191633179055466038036200021957600b8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000314565b466061036200025057600b8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000314565b4660011480620002605750466004145b806200026c5750466003145b15620002a057600b8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000314565b4661a86a03620002d857600b8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000314565b4660fa036200030f57600b8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000314565b600080fd5b600b60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e9190620007f9565b6001600160a01b031663c9c65396600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004169190620007f9565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000463573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004899190620007f9565b600c80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601d54600b54620004e392918216916101009091041660001962000586565b600b546200050490309061010090046001600160a01b031660001962000586565b601d80546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559554909416835260049091529020805490921617905562000824565b6001600160a01b038316620005d85760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006265760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005cf565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006de578160001904821115620006c257620006c262000687565b80851615620006d057918102915b93841c9390800290620006a2565b509250929050565b600082620006f75750600162000796565b81620007065750600062000796565b81600181146200071f57600281146200072a576200074a565b600191505062000796565b60ff8411156200073e576200073e62000687565b50506001821b62000796565b5060208310610133831016604e8410600b84101617156200076f575081810a62000796565b6200077b83836200069d565b806000190482111562000792576200079262000687565b0290505b92915050565b6000620007ad60ff841683620006e6565b9392505050565b6000816000190483118215151615620007d157620007d162000687565b500290565b600082620007f457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200080c57600080fd5b81516001600160a01b0381168114620007ad57600080fd5b614bd080620008346000396000f3fe6080604052600436106104685760003560e01c80634fb2e45d11610243578063b1b08f7111610143578063eafb5a3c116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610d49578063fe575a8714610d68578063feadde9c14610d8857600080fd5b8063f94aa1b414610ce2578063fb78680d14610d2957600080fd5b8063eafb5a3c14610c54578063ee5d9c2d14610c74578063eec2744e14610c89578063f91fc82814610ca957600080fd5b8063bfc2fc3511610112578063cf847706116100f7578063cf84770614610bbd578063d3f6a15714610bee578063dd62ed3e14610c0e57600080fd5b8063bfc2fc3514610b87578063c6c4e0d514610ba757600080fd5b8063b1b08f7114610722578063b3d514fb14610722578063b7df8b3614610b4d578063bcd96a2514610b6757600080fd5b8063715018a6116101d65780638a63bd9b116101a5578063948501831161018a5780639485018314610b0d57806395d89b4114610579578063a9059cbb14610b2d57600080fd5b80638a63bd9b14610ae35780638a8c523c14610af857600080fd5b8063715018a614610a7b57806378648edf14610a9057806380c581d114610aa5578063893d20e814610ac557600080fd5b80635c24b074116102125780635c24b074146109d75780635cce86cd146109f75780636ebd007814610a3057806370a0823114610a4557600080fd5b80634fb2e45d1461093f5780634fbee1931461095f57806350a8e01614610998578063590ffdce146109b757600080fd5b80632b112e49116103695780633f96b6f7116102e157806346ea7ac8116102b05780634ada218b116102955780634ada218b146108e55780634bbb93eb146108ff5780634e718e481461091f57600080fd5b806346ea7ac8146108af57806347598d2f146108c557600080fd5b80633f96b6f714610835578063452ed4f11461084f57806345b0a2741461086f57806345cb495c1461088f57600080fd5b806332cde6641161033857806336fddb041161031d57806336fddb04146107b557806337b547e9146107d55780633f3cf56c1461081557600080fd5b806332cde6641461077557806333251a0b1461079557600080fd5b80632b112e491461070d5780632b28fc7a146107225780632e8fa82114610738578063313ce5671461074e57600080fd5b806307dd79e0116103fc57806318160ddd116103cb57806326003957116103b057806326003957146106b75780632610eaca146106d757806328577751146106f757600080fd5b806318160ddd1461068257806323b872dd1461069757600080fd5b806307dd79e0146105ea578063095ea7b3146106145780630dcbcf1c146106345780630fa604e41461066d57600080fd5b806305bbedb61161043857806305bbedb614610503578063069d955f1461052357806306fdde03146105795780630758d924146105c557600080fd5b806236ce981461047457806303fd2a451461049d5780630445b667146104cb578063044df726146104e157600080fd5b3661046f57005b600080fd5b34801561048057600080fd5b5061048a601b5481565b6040519081526020015b60405180910390f35b3480156104a957600080fd5b506104b361dead81565b6040516001600160a01b039091168152602001610494565b3480156104d757600080fd5b5061048a60105481565b3480156104ed57600080fd5b506105016104fc3660046143de565b610da8565b005b34801561050f57600080fd5b5061050161051e366004614524565b610e85565b34801561052f57600080fd5b506009546105549061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610494565b34801561058557600080fd5b50604080518082018252600481527f5452494d0000000000000000000000000000000000000000000000000000000060208201529051610494919061456b565b3480156105d157600080fd5b50600b546104b39061010090046001600160a01b031681565b3480156105f657600080fd5b50600b546106049060ff1681565b6040519015158152602001610494565b34801561062057600080fd5b5061060461062f3660046145b9565b610f23565b34801561064057600080fd5b5061060461064f3660046145e5565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067957600080fd5b5061048a610f3a565b34801561068e57600080fd5b5061048a610f5a565b3480156106a357600080fd5b506106046106b2366004614602565b610f9e565b3480156106c357600080fd5b506105016106d2366004614643565b611016565b3480156106e357600080fd5b506105016106f2366004614665565b611168565b34801561070357600080fd5b5061048a60135481565b34801561071957600080fd5b5061048a6112d5565b34801561072e57600080fd5b5061048a61070881565b34801561074457600080fd5b5061048a60115481565b34801561075a57600080fd5b50610763611354565b60405160ff9091168152602001610494565b34801561078157600080fd5b50610501610790366004614737565b611383565b3480156107a157600080fd5b506105016107b03660046145e5565b611570565b3480156107c157600080fd5b506105016107d036600461477a565b611640565b3480156107e157600080fd5b506107f56107f03660046145e5565b6116b9565b604080519485526020850193909352918301526060820152608001610494565b34801561082157600080fd5b50610501610830366004614643565b6117fa565b34801561084157600080fd5b506016546106049060ff1681565b34801561085b57600080fd5b50600c546104b3906001600160a01b031681565b34801561087b57600080fd5b5061050161088a366004614798565b611958565b34801561089b57600080fd5b506105016108aa3660046147b5565b6119b9565b3480156108bb57600080fd5b5061048a61089881565b3480156108d157600080fd5b506105016108e03660046147b5565b611a6c565b3480156108f157600080fd5b50601c546106049060ff1681565b34801561090b57600080fd5b5061048a61091a3660046147b5565b611b11565b34801561092b57600080fd5b5061050161093a3660046147b5565b611b45565b34801561094b57600080fd5b5061050161095a3660046145e5565b611be9565b34801561096b57600080fd5b5061060461097a3660046145e5565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156109a457600080fd5b50601c5461060490610100900460ff1681565b3480156109c357600080fd5b506105016109d236600461477a565b611e26565b3480156109e357600080fd5b506105016109f23660046145e5565b611e9f565b348015610a0357600080fd5b50610604610a123660046145e5565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a3c57600080fd5b5061048a611f95565b348015610a5157600080fd5b5061048a610a603660046145e5565b6001600160a01b031660009081526020819052604090205490565b348015610a8757600080fd5b50610501611fb0565b348015610a9c57600080fd5b5061050161207b565b348015610ab157600080fd5b50610501610ac036600461477a565b6120d8565b348015610ad157600080fd5b50601d546001600160a01b03166104b3565b348015610aef57600080fd5b50610604612280565b348015610b0457600080fd5b506105016122f6565b348015610b1957600080fd5b50610501610b2836600461477a565b61254e565b348015610b3957600080fd5b50610604610b483660046145b9565b6125c7565b348015610b5957600080fd5b506012546106049060ff1681565b348015610b7357600080fd5b50610501610b823660046147ce565b6125de565b348015610b9357600080fd5b50610501610ba23660046143de565b612748565b348015610bb357600080fd5b5061048a60175481565b348015610bc957600080fd5b50600a546105549061ffff808216916201000081048216916401000000009091041683565b348015610bfa57600080fd5b50610501610c09366004614801565b6127f5565b348015610c1a57600080fd5b5061048a610c29366004614801565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c6057600080fd5b50610501610c6f3660046145e5565b6128c1565b348015610c8057600080fd5b50610501612cf5565b348015610c9557600080fd5b50610501610ca436600461477a565b612dd7565b348015610cb557600080fd5b50610604610cc43660046145e5565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610cee57600080fd5b50600d54600e54610d09916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610494565b348015610d3557600080fd5b50610501610d4436600461482f565b612e7f565b348015610d5557600080fd5b50600f5461060490610100900460ff1681565b348015610d7457600080fd5b50610604610d833660046145e5565b6130ff565b348015610d9457600080fd5b50610501610da336600461477a565b61318d565b601d546001600160a01b03163314610dfb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050505050565b601d546001600160a01b03163314610ed35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e4f90859085906004016148a5565b6000610f30338484613206565b5060015b92915050565b6000610f486009600a6149dc565b601554610f5591906149eb565b905090565b6000610f686009600a6149dc565b610f779064e8d4a51000614a26565b600003610f8357600080fd5b610f8f6009600a6149dc565b610f559064e8d4a51000614a26565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914611003576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610ffd908490614a45565b90915550505b61100e848484613313565b949350505050565b601d546001600160a01b031633146110645760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b60646110726009600a6149dc565b6110819064e8d4a51000614a26565b61108b91906149eb565b81836110996009600a6149dc565b6110a89064e8d4a51000614a26565b6110b29190614a26565b6110bc91906149eb565b10156111305760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610df2565b808261113e6009600a6149dc565b61114d9064e8d4a51000614a26565b6111579190614a26565b61116191906149eb565b6015555050565b601d546001600160a01b031633146111b65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b80518251146112075760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610df2565b60005b82518160ff1610156112d057818160ff168151811061122b5761122b614a58565b6020026020010151611252336001600160a01b031660009081526020819052604090205490565b101561125d57600080fd5b6112bd33848360ff168151811061127657611276614a58565b60200260200101516009600a61128c91906149dc565b858560ff16815181106112a1576112a1614a58565b60200260200101516112b39190614a26565b6000806001613922565b50806112c881614a87565b91505061120a565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461132f9190614aa6565b61133b6009600a6149dc565b61134a9064e8d4a51000614a26565b610f559190614a45565b60006113626009600a6149dc565b6113719064e8d4a51000614a26565b60000361137d57600080fd5b50600990565b601d546001600160a01b031633146113d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600b5460ff16156114245760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610df2565b6107088361ffff161115801561144057506107088261ffff1611155b801561145257506107088161ffff1611155b61149e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610df2565b6108986114ab8385614ab9565b61ffff1611156114fd5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610df2565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b601d546001600160a01b031633146115be5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b5050505050565b601d546001600160a01b0316331461168e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6017546001600160a01b038216600090815260196020526040812054909182918291829142916116e891614aa6565b1115611796576116fa6009600a6149dc565b6001600160a01b03861660009081526018602052604090205461171d91906149eb565b935061172b6009600a6149dc565b6001600160a01b0386166000908152601a602052604090205461174e91906149eb565b925061175a8484614a45565b6017546001600160a01b03871660009081526019602052604090205491935042916117859190614aa6565b61178f9190614a45565b90506117f3565b600093506117a66009600a6149dc565b612710601b546117cb886001600160a01b031660009081526020819052604090205490565b6117d59190614a26565b6117df91906149eb565b6117e991906149eb565b9250829150600090505b9193509193565b601d546001600160a01b031633146118485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6103e86118576009600a6149dc565b6118669064e8d4a51000614a26565b611871906005614a26565b61187b91906149eb565b81836118896009600a6149dc565b6118989064e8d4a51000614a26565b6118a29190614a26565b6118ac91906149eb565b10156119205760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610df2565b808261192e6009600a6149dc565b61193d9064e8d4a51000614a26565b6119479190614a26565b61195191906149eb565b6014555050565b601d546001600160a01b031633146119a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6016805460ff1916911515919091179055565b601d546001600160a01b03163314611a075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b611a12603c82614a26565b90506201fa40811115611a675760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207365742061626f766520333620686f7572732e0000000000006044820152606401610df2565b601755565b601d546001600160a01b03163314611aba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6107d0811015611b0c5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207365742062656c6f772032302520706572206461792e0000006044820152606401610df2565b601b55565b600c546001600160a01b031660009081526020819052604081205461271090611b3b908490614a26565b610f3491906149eb565b601d546001600160a01b03163314611b935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6096811115611be45760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610df2565b601355565b601d546001600160a01b03163314611c375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b038116611cb35760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610df2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611d515760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610df2565b601d54611d68906001600160a01b03166000611e26565b611d73816001611e26565b601d546001600160a01b031660009081526020819052604090205415611dbc57601d546001600160a01b0316600081815260208190526040902054611dba919083906112b3565b505b601d80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601d546001600160a01b03163314611e745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601d546001600160a01b03163314611eed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c5460ff1615611efd57600080fd5b306001600160a01b03821603611f555760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610df2565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611fa36009600a6149dc565b601454610f5591906149eb565b601d546001600160a01b03163314611ffe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601d54612015906001600160a01b03166000611e26565b601d80547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601d546001600160a01b031633146120c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600b805460ff19166001179055565b601d546001600160a01b031633146121265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b8061219d576001600160a01b03828116600081815260016020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610e4f565b60025415612204576203f480600254426121b79190614a45565b116122045760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610df2565b6001600160a01b03828116600081815260016020819052604091829020805460ff19168217905542600255601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610e4f565b5050565b601d546000906001600160a01b031633146122d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600b546122f090309061010090046001600160a01b0316600019613206565b50600190565b601d546001600160a01b031633146123445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c5460ff16156123975760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610df2565b601c54610100900460ff166123ee5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610df2565b601c546201000090046001600160a01b031661243457601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156124bf57600080fd5b505af19250505080156124d0575060015b50601c805460ff19166001179055600c546001600160a01b03166000908152602081905260409020546127109061250890600a614a26565b61251291906149eb565b601055600c546001600160a01b03166000908152602081905260409020546127109061253f90601e614a26565b61254991906149eb565b601155565b601d546001600160a01b0316331461259c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60006125d4338484613313565b5060019392505050565b601d546001600160a01b0316331461262c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600a805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216908516171790556126708183614ab9565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1664010000000061ffff938416021790556009546000916126bf9162010000810482169116614ab9565b600a5461ffff91821692506401000000009004168110156112d05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610df2565b601d546001600160a01b031633146127965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600f805461ff001916610100841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601d546001600160a01b031633146128435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384811691909117909155600e5461dead91161461227c57600e80546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b601d546001600160a01b0316331461290f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c54610100900460ff16156129675760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610df2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d09190614adb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a419190614adb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac89190614adb565b90506001600160a01b038116612c7157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190614adb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bab9190614adb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c349190614adb565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612ca5565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03858116820292909217928390556112d092309291900416600019613206565b601d546001600160a01b03163314612d435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c54610100900460ff1615612d9b5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610df2565b601d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612dd4573d6000803e3d6000fd5b50565b601d546001600160a01b03163314612e255760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e4f565b601d546001600160a01b03163314612ecd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b8284612edb6009600a6149dc565b612eea9064e8d4a51000614a26565b612ef49190614a26565b612efe91906149eb565b6010558082612f0f6009600a6149dc565b612f1e9064e8d4a51000614a26565b612f289190614a26565b612f3291906149eb565b60118190556010541115612fae5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610df2565b600c546001600160a01b031660009081526020819052604090205461271090612fd8906096614a26565b612fe291906149eb565b60115411156130595760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610df2565b620f42406130696009600a6149dc565b6130789064e8d4a51000614a26565b61308291906149eb565b60115410156130f95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610df2565b50505050565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613169573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f349190614af8565b601d546001600160a01b031633146131db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03831661325c5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610df2565b6001600160a01b0382166132b25760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610df2565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166133915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610df2565b6001600160a01b03831661340d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610df2565b600082116134835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610df2565b6001600160a01b0384166000908152600160205260408120548190819060ff16156134b157600192506134df565b6001600160a01b03861660009081526001602052604090205460ff16156134db57600191506134df565b5060015b6134e98787613c0a565b1561386c57601c5460ff166135405760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610df2565b82806135495750815b1561360d576001600160a01b03871660009081526007602052604090205460ff1615801561359057506001600160a01b03861660009081526007602052604090205460ff16155b1561360d5760145485111561360d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610df2565b600b546001600160a01b03878116610100909204161480159061362e575081155b156136f4576001600160a01b03861660009081526007602052604090205460ff166136f45760155485613676886001600160a01b031660009081526020819052604090205490565b6136809190614aa6565b11156136f45760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610df2565b60165460ff161561386c57811561386c576001600160a01b03871660009081526008602052604090205460ff1661386c576017546001600160a01b0388166000908152601960205260409020544291829161374f9190614aa6565b10156137c057612710601b5461377a8a6001600160a01b031660009081526020819052604090205490565b6137849190614a26565b61378e91906149eb565b6001600160a01b0389166000908152601a60209081526040808320939093556019815282822084905560189052908120555b6001600160a01b0388166000908152601a60209081526040808320546018909252909120546137ef9088614aa6565b111561383d5760405162461bcd60e51b815260206004820181905260248201527f53656c6c696e6720746f6f206d756368207065722074696d65206c696d69742e6044820152606401610df2565b6001600160a01b03881660009081526018602052604081208054889290613865908490614aa6565b9091555050505b811561390957600f5460ff1661390957600f54610100900460ff1615613909573060009081526020819052604090205460105481106139075760115460125460ff16156138eb57601354600c546001600160a01b0316600090815260208190526040902054612710916138de91614a26565b6138e891906149eb565b90505b8082106138f6578091505b81156139055761390582613d21565b505b505b613917878787868686613922565b979650505050505050565b601c54600090610100900460ff16613a225761393e878761415c565b601c54610100900460ff1615801561395b575061395b8787613c0a565b801561398057506001600160a01b03871660009081526005602052604090205460ff16155b80156139a557506001600160a01b03861660009081526005602052604090205460ff16155b80156139af575081155b15613a225760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610df2565b613a2c8787613c0a565b15613adf57601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ac8575060408051601f3d908101601f19168201909252613ac591810190614af8565b60015b613ad157600080fd5b905080613add57600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b2157506001600160a01b03871660009081526006602052604090205460ff165b15613b2a575060005b6001600160a01b03881660009081526020819052604081208054889290613b52908490614a45565b909155506000905081613b655786613b71565b613b718987878a6142cc565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613ba79190614aa6565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613bf391815260200190565b60405180910390a350600198975050505050505050565b601d546000906001600160a01b03848116911614801590613c395750601d546001600160a01b03838116911614155b8015613c505750601d546001600160a01b03163214155b8015613c7557506001600160a01b03821660009081526004602052604090205460ff16155b8015613c9a57506001600160a01b03831660009081526004602052604090205460ff16155b8015613cb157506001600160a01b03821661dead14155b8015613cc557506001600160a01b03821615155b8015613cda57506001600160a01b0383163014155b8015613cfa5750601c546001600160a01b03848116620100009092041614155b8015613d1a5750601c546001600160a01b03838116620100009092041614155b9392505050565b600f805460ff1916600117905560408051606081018252600a5461ffff8082168352620100008204811660208401526401000000009091041691810182905290600003613d6e575061414f565b306000908152600360209081526040808320600b5461010090046001600160a01b0316845290915290205460001914613dd157306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685613df29190614a26565b613dfc91906149eb565b613e0691906149eb565b90506000613e148285614a45565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613e4e57613e4e614a58565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee59190614adb565b81600181518110613ef857613ef8614a58565b6001600160a01b039283166020918202929092010152600b546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac94790613f5e908590600090869030904290600401614b15565b600060405180830381600087803b158015613f7857600080fd5b505af1925050508015613f89575060015b613f96575050505061414f565b47600083613fa48684614a26565b613fae91906149eb565b905084156140ad57600b54600e546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af193505050508015614061575060408051601f3d908101601f1916820190925261405e91810190614b51565b60015b6140705750505050505061414f565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6140b78183614a45565b91508560000151866040018181516140cf9190614b7f565b61ffff9081169091526020880151600092508491161561414657600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d806000811461413b576040519150601f19603f3d011682016040523d82523d6000602084013e614140565b606091505b50909250505b50505050505050505b50600f805460ff19169055565b601c54610100900460ff16156141da5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610df2565b6141e48282613c0a565b1580156141fe5750600c546001600160a01b038281169116145b1561227c576001600160a01b038083166000908152600460209081526040808320805460ff1990811660019081179092556006909352922080549091169091179055601c805461ff00191661010017908190556201000090041661428c57601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016127e9565b60008084156142e2575060095461ffff1661430c565b83156142fb575060095462010000900461ffff1661430c565b50600954640100000000900461ffff165b601c546201000090046001600160a01b031630148015614336575046600114806143365750466038145b1561434057506111945b600061271061434f8386614a26565b61435991906149eb565b905080156143c6573060009081526020819052604081208054839290614380908490614aa6565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6139178185614a45565b8015158114612dd457600080fd5b600080604083850312156143f157600080fd5b82356143fc816143d0565b9150602083013561440c816143d0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561446f5761446f614417565b604052919050565b600067ffffffffffffffff82111561449157614491614417565b5060051b60200190565b6001600160a01b0381168114612dd457600080fd5b600082601f8301126144c157600080fd5b813560206144d66144d183614477565b614446565b82815260059290921b840181019181810190868411156144f557600080fd5b8286015b8481101561451957803561450c8161449b565b83529183019183016144f9565b509695505050505050565b6000806040838503121561453757600080fd5b823567ffffffffffffffff81111561454e57600080fd5b61455a858286016144b0565b925050602083013561440c816143d0565b600060208083528351808285015260005b818110156145985785810183015185820160400152820161457c565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156145cc57600080fd5b82356145d78161449b565b946020939093013593505050565b6000602082840312156145f757600080fd5b8135613d1a8161449b565b60008060006060848603121561461757600080fd5b83356146228161449b565b925060208401356146328161449b565b929592945050506040919091013590565b6000806040838503121561465657600080fd5b50508035926020909101359150565b6000806040838503121561467857600080fd5b823567ffffffffffffffff8082111561469057600080fd5b61469c868387016144b0565b93506020915081850135818111156146b357600080fd5b85019050601f810186136146c657600080fd5b80356146d46144d182614477565b81815260059190911b820183019083810190888311156146f357600080fd5b928401925b82841015614711578335825292840192908401906146f8565b80955050505050509250929050565b803561ffff8116811461473257600080fd5b919050565b60008060006060848603121561474c57600080fd5b61475584614720565b925061476360208501614720565b915061477160408501614720565b90509250925092565b6000806040838503121561478d57600080fd5b82356143fc8161449b565b6000602082840312156147aa57600080fd5b8135613d1a816143d0565b6000602082840312156147c757600080fd5b5035919050565b600080604083850312156147e157600080fd5b6147ea83614720565b91506147f860208401614720565b90509250929050565b6000806040838503121561481457600080fd5b823561481f8161449b565b9150602083013561440c8161449b565b6000806000806080858703121561484557600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561489a5781516001600160a01b031687529582019590820190600101614875565b509495945050505050565b6040815260006148b86040830185614861565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614933578160001904821115614919576149196148c9565b8085161561492657918102915b93841c93908002906148fd565b509250929050565b60008261494a57506001610f34565b8161495757506000610f34565b816001811461496d576002811461497757614993565b6001915050610f34565b60ff841115614988576149886148c9565b50506001821b610f34565b5060208310610133831016604e8410600b84101617156149b6575081810a610f34565b6149c083836148f8565b80600019048211156149d4576149d46148c9565b029392505050565b6000613d1a60ff84168361493b565b600082614a21577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614a4057614a406148c9565b500290565b81810381811115610f3457610f346148c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103614a9d57614a9d6148c9565b60010192915050565b80820180821115610f3457610f346148c9565b61ffff818116838216019080821115614ad457614ad46148c9565b5092915050565b600060208284031215614aed57600080fd5b8151613d1a8161449b565b600060208284031215614b0a57600080fd5b8151613d1a816143d0565b85815284602082015260a060408201526000614b3460a0830186614861565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614b6657600080fd5b8351925060208401519150604084015190509250925092565b61ffff828116828216039080821115614ad457614ad46148c956fea264697066735822122086f291d7216f9d9c3d2df41774732af92df7db1caef77d2ca9b7518bb53962ab64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106104685760003560e01c80634fb2e45d11610243578063b1b08f7111610143578063eafb5a3c116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610d49578063fe575a8714610d68578063feadde9c14610d8857600080fd5b8063f94aa1b414610ce2578063fb78680d14610d2957600080fd5b8063eafb5a3c14610c54578063ee5d9c2d14610c74578063eec2744e14610c89578063f91fc82814610ca957600080fd5b8063bfc2fc3511610112578063cf847706116100f7578063cf84770614610bbd578063d3f6a15714610bee578063dd62ed3e14610c0e57600080fd5b8063bfc2fc3514610b87578063c6c4e0d514610ba757600080fd5b8063b1b08f7114610722578063b3d514fb14610722578063b7df8b3614610b4d578063bcd96a2514610b6757600080fd5b8063715018a6116101d65780638a63bd9b116101a5578063948501831161018a5780639485018314610b0d57806395d89b4114610579578063a9059cbb14610b2d57600080fd5b80638a63bd9b14610ae35780638a8c523c14610af857600080fd5b8063715018a614610a7b57806378648edf14610a9057806380c581d114610aa5578063893d20e814610ac557600080fd5b80635c24b074116102125780635c24b074146109d75780635cce86cd146109f75780636ebd007814610a3057806370a0823114610a4557600080fd5b80634fb2e45d1461093f5780634fbee1931461095f57806350a8e01614610998578063590ffdce146109b757600080fd5b80632b112e49116103695780633f96b6f7116102e157806346ea7ac8116102b05780634ada218b116102955780634ada218b146108e55780634bbb93eb146108ff5780634e718e481461091f57600080fd5b806346ea7ac8146108af57806347598d2f146108c557600080fd5b80633f96b6f714610835578063452ed4f11461084f57806345b0a2741461086f57806345cb495c1461088f57600080fd5b806332cde6641161033857806336fddb041161031d57806336fddb04146107b557806337b547e9146107d55780633f3cf56c1461081557600080fd5b806332cde6641461077557806333251a0b1461079557600080fd5b80632b112e491461070d5780632b28fc7a146107225780632e8fa82114610738578063313ce5671461074e57600080fd5b806307dd79e0116103fc57806318160ddd116103cb57806326003957116103b057806326003957146106b75780632610eaca146106d757806328577751146106f757600080fd5b806318160ddd1461068257806323b872dd1461069757600080fd5b806307dd79e0146105ea578063095ea7b3146106145780630dcbcf1c146106345780630fa604e41461066d57600080fd5b806305bbedb61161043857806305bbedb614610503578063069d955f1461052357806306fdde03146105795780630758d924146105c557600080fd5b806236ce981461047457806303fd2a451461049d5780630445b667146104cb578063044df726146104e157600080fd5b3661046f57005b600080fd5b34801561048057600080fd5b5061048a601b5481565b6040519081526020015b60405180910390f35b3480156104a957600080fd5b506104b361dead81565b6040516001600160a01b039091168152602001610494565b3480156104d757600080fd5b5061048a60105481565b3480156104ed57600080fd5b506105016104fc3660046143de565b610da8565b005b34801561050f57600080fd5b5061050161051e366004614524565b610e85565b34801561052f57600080fd5b506009546105549061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610494565b34801561058557600080fd5b50604080518082018252600481527f5452494d0000000000000000000000000000000000000000000000000000000060208201529051610494919061456b565b3480156105d157600080fd5b50600b546104b39061010090046001600160a01b031681565b3480156105f657600080fd5b50600b546106049060ff1681565b6040519015158152602001610494565b34801561062057600080fd5b5061060461062f3660046145b9565b610f23565b34801561064057600080fd5b5061060461064f3660046145e5565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067957600080fd5b5061048a610f3a565b34801561068e57600080fd5b5061048a610f5a565b3480156106a357600080fd5b506106046106b2366004614602565b610f9e565b3480156106c357600080fd5b506105016106d2366004614643565b611016565b3480156106e357600080fd5b506105016106f2366004614665565b611168565b34801561070357600080fd5b5061048a60135481565b34801561071957600080fd5b5061048a6112d5565b34801561072e57600080fd5b5061048a61070881565b34801561074457600080fd5b5061048a60115481565b34801561075a57600080fd5b50610763611354565b60405160ff9091168152602001610494565b34801561078157600080fd5b50610501610790366004614737565b611383565b3480156107a157600080fd5b506105016107b03660046145e5565b611570565b3480156107c157600080fd5b506105016107d036600461477a565b611640565b3480156107e157600080fd5b506107f56107f03660046145e5565b6116b9565b604080519485526020850193909352918301526060820152608001610494565b34801561082157600080fd5b50610501610830366004614643565b6117fa565b34801561084157600080fd5b506016546106049060ff1681565b34801561085b57600080fd5b50600c546104b3906001600160a01b031681565b34801561087b57600080fd5b5061050161088a366004614798565b611958565b34801561089b57600080fd5b506105016108aa3660046147b5565b6119b9565b3480156108bb57600080fd5b5061048a61089881565b3480156108d157600080fd5b506105016108e03660046147b5565b611a6c565b3480156108f157600080fd5b50601c546106049060ff1681565b34801561090b57600080fd5b5061048a61091a3660046147b5565b611b11565b34801561092b57600080fd5b5061050161093a3660046147b5565b611b45565b34801561094b57600080fd5b5061050161095a3660046145e5565b611be9565b34801561096b57600080fd5b5061060461097a3660046145e5565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156109a457600080fd5b50601c5461060490610100900460ff1681565b3480156109c357600080fd5b506105016109d236600461477a565b611e26565b3480156109e357600080fd5b506105016109f23660046145e5565b611e9f565b348015610a0357600080fd5b50610604610a123660046145e5565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a3c57600080fd5b5061048a611f95565b348015610a5157600080fd5b5061048a610a603660046145e5565b6001600160a01b031660009081526020819052604090205490565b348015610a8757600080fd5b50610501611fb0565b348015610a9c57600080fd5b5061050161207b565b348015610ab157600080fd5b50610501610ac036600461477a565b6120d8565b348015610ad157600080fd5b50601d546001600160a01b03166104b3565b348015610aef57600080fd5b50610604612280565b348015610b0457600080fd5b506105016122f6565b348015610b1957600080fd5b50610501610b2836600461477a565b61254e565b348015610b3957600080fd5b50610604610b483660046145b9565b6125c7565b348015610b5957600080fd5b506012546106049060ff1681565b348015610b7357600080fd5b50610501610b823660046147ce565b6125de565b348015610b9357600080fd5b50610501610ba23660046143de565b612748565b348015610bb357600080fd5b5061048a60175481565b348015610bc957600080fd5b50600a546105549061ffff808216916201000081048216916401000000009091041683565b348015610bfa57600080fd5b50610501610c09366004614801565b6127f5565b348015610c1a57600080fd5b5061048a610c29366004614801565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c6057600080fd5b50610501610c6f3660046145e5565b6128c1565b348015610c8057600080fd5b50610501612cf5565b348015610c9557600080fd5b50610501610ca436600461477a565b612dd7565b348015610cb557600080fd5b50610604610cc43660046145e5565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610cee57600080fd5b50600d54600e54610d09916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610494565b348015610d3557600080fd5b50610501610d4436600461482f565b612e7f565b348015610d5557600080fd5b50600f5461060490610100900460ff1681565b348015610d7457600080fd5b50610604610d833660046145e5565b6130ff565b348015610d9457600080fd5b50610501610da336600461477a565b61318d565b601d546001600160a01b03163314610dfb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050505050565b601d546001600160a01b03163314610ed35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e4f90859085906004016148a5565b6000610f30338484613206565b5060015b92915050565b6000610f486009600a6149dc565b601554610f5591906149eb565b905090565b6000610f686009600a6149dc565b610f779064e8d4a51000614a26565b600003610f8357600080fd5b610f8f6009600a6149dc565b610f559064e8d4a51000614a26565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914611003576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610ffd908490614a45565b90915550505b61100e848484613313565b949350505050565b601d546001600160a01b031633146110645760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b60646110726009600a6149dc565b6110819064e8d4a51000614a26565b61108b91906149eb565b81836110996009600a6149dc565b6110a89064e8d4a51000614a26565b6110b29190614a26565b6110bc91906149eb565b10156111305760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610df2565b808261113e6009600a6149dc565b61114d9064e8d4a51000614a26565b6111579190614a26565b61116191906149eb565b6015555050565b601d546001600160a01b031633146111b65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b80518251146112075760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610df2565b60005b82518160ff1610156112d057818160ff168151811061122b5761122b614a58565b6020026020010151611252336001600160a01b031660009081526020819052604090205490565b101561125d57600080fd5b6112bd33848360ff168151811061127657611276614a58565b60200260200101516009600a61128c91906149dc565b858560ff16815181106112a1576112a1614a58565b60200260200101516112b39190614a26565b6000806001613922565b50806112c881614a87565b91505061120a565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461132f9190614aa6565b61133b6009600a6149dc565b61134a9064e8d4a51000614a26565b610f559190614a45565b60006113626009600a6149dc565b6113719064e8d4a51000614a26565b60000361137d57600080fd5b50600990565b601d546001600160a01b031633146113d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600b5460ff16156114245760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610df2565b6107088361ffff161115801561144057506107088261ffff1611155b801561145257506107088161ffff1611155b61149e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610df2565b6108986114ab8385614ab9565b61ffff1611156114fd5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610df2565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b601d546001600160a01b031633146115be5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b5050505050565b601d546001600160a01b0316331461168e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6017546001600160a01b038216600090815260196020526040812054909182918291829142916116e891614aa6565b1115611796576116fa6009600a6149dc565b6001600160a01b03861660009081526018602052604090205461171d91906149eb565b935061172b6009600a6149dc565b6001600160a01b0386166000908152601a602052604090205461174e91906149eb565b925061175a8484614a45565b6017546001600160a01b03871660009081526019602052604090205491935042916117859190614aa6565b61178f9190614a45565b90506117f3565b600093506117a66009600a6149dc565b612710601b546117cb886001600160a01b031660009081526020819052604090205490565b6117d59190614a26565b6117df91906149eb565b6117e991906149eb565b9250829150600090505b9193509193565b601d546001600160a01b031633146118485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6103e86118576009600a6149dc565b6118669064e8d4a51000614a26565b611871906005614a26565b61187b91906149eb565b81836118896009600a6149dc565b6118989064e8d4a51000614a26565b6118a29190614a26565b6118ac91906149eb565b10156119205760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610df2565b808261192e6009600a6149dc565b61193d9064e8d4a51000614a26565b6119479190614a26565b61195191906149eb565b6014555050565b601d546001600160a01b031633146119a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6016805460ff1916911515919091179055565b601d546001600160a01b03163314611a075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b611a12603c82614a26565b90506201fa40811115611a675760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207365742061626f766520333620686f7572732e0000000000006044820152606401610df2565b601755565b601d546001600160a01b03163314611aba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6107d0811015611b0c5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207365742062656c6f772032302520706572206461792e0000006044820152606401610df2565b601b55565b600c546001600160a01b031660009081526020819052604081205461271090611b3b908490614a26565b610f3491906149eb565b601d546001600160a01b03163314611b935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6096811115611be45760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610df2565b601355565b601d546001600160a01b03163314611c375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b038116611cb35760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610df2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611d515760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610df2565b601d54611d68906001600160a01b03166000611e26565b611d73816001611e26565b601d546001600160a01b031660009081526020819052604090205415611dbc57601d546001600160a01b0316600081815260208190526040902054611dba919083906112b3565b505b601d80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601d546001600160a01b03163314611e745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601d546001600160a01b03163314611eed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c5460ff1615611efd57600080fd5b306001600160a01b03821603611f555760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610df2565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611fa36009600a6149dc565b601454610f5591906149eb565b601d546001600160a01b03163314611ffe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601d54612015906001600160a01b03166000611e26565b601d80547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601d546001600160a01b031633146120c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600b805460ff19166001179055565b601d546001600160a01b031633146121265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b8061219d576001600160a01b03828116600081815260016020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610e4f565b60025415612204576203f480600254426121b79190614a45565b116122045760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610df2565b6001600160a01b03828116600081815260016020819052604091829020805460ff19168217905542600255601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610e4f565b5050565b601d546000906001600160a01b031633146122d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600b546122f090309061010090046001600160a01b0316600019613206565b50600190565b601d546001600160a01b031633146123445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c5460ff16156123975760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610df2565b601c54610100900460ff166123ee5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610df2565b601c546201000090046001600160a01b031661243457601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156124bf57600080fd5b505af19250505080156124d0575060015b50601c805460ff19166001179055600c546001600160a01b03166000908152602081905260409020546127109061250890600a614a26565b61251291906149eb565b601055600c546001600160a01b03166000908152602081905260409020546127109061253f90601e614a26565b61254991906149eb565b601155565b601d546001600160a01b0316331461259c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60006125d4338484613313565b5060019392505050565b601d546001600160a01b0316331461262c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600a805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216908516171790556126708183614ab9565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1664010000000061ffff938416021790556009546000916126bf9162010000810482169116614ab9565b600a5461ffff91821692506401000000009004168110156112d05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610df2565b601d546001600160a01b031633146127965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600f805461ff001916610100841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601d546001600160a01b031633146128435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384811691909117909155600e5461dead91161461227c57600e80546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b601d546001600160a01b0316331461290f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c54610100900460ff16156129675760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610df2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d09190614adb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a419190614adb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac89190614adb565b90506001600160a01b038116612c7157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190614adb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bab9190614adb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c349190614adb565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612ca5565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03858116820292909217928390556112d092309291900416600019613206565b601d546001600160a01b03163314612d435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c54610100900460ff1615612d9b5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610df2565b601d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612dd4573d6000803e3d6000fd5b50565b601d546001600160a01b03163314612e255760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e4f565b601d546001600160a01b03163314612ecd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b8284612edb6009600a6149dc565b612eea9064e8d4a51000614a26565b612ef49190614a26565b612efe91906149eb565b6010558082612f0f6009600a6149dc565b612f1e9064e8d4a51000614a26565b612f289190614a26565b612f3291906149eb565b60118190556010541115612fae5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610df2565b600c546001600160a01b031660009081526020819052604090205461271090612fd8906096614a26565b612fe291906149eb565b60115411156130595760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610df2565b620f42406130696009600a6149dc565b6130789064e8d4a51000614a26565b61308291906149eb565b60115410156130f95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610df2565b50505050565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613169573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f349190614af8565b601d546001600160a01b031633146131db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610df2565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03831661325c5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610df2565b6001600160a01b0382166132b25760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610df2565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166133915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610df2565b6001600160a01b03831661340d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610df2565b600082116134835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610df2565b6001600160a01b0384166000908152600160205260408120548190819060ff16156134b157600192506134df565b6001600160a01b03861660009081526001602052604090205460ff16156134db57600191506134df565b5060015b6134e98787613c0a565b1561386c57601c5460ff166135405760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610df2565b82806135495750815b1561360d576001600160a01b03871660009081526007602052604090205460ff1615801561359057506001600160a01b03861660009081526007602052604090205460ff16155b1561360d5760145485111561360d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610df2565b600b546001600160a01b03878116610100909204161480159061362e575081155b156136f4576001600160a01b03861660009081526007602052604090205460ff166136f45760155485613676886001600160a01b031660009081526020819052604090205490565b6136809190614aa6565b11156136f45760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610df2565b60165460ff161561386c57811561386c576001600160a01b03871660009081526008602052604090205460ff1661386c576017546001600160a01b0388166000908152601960205260409020544291829161374f9190614aa6565b10156137c057612710601b5461377a8a6001600160a01b031660009081526020819052604090205490565b6137849190614a26565b61378e91906149eb565b6001600160a01b0389166000908152601a60209081526040808320939093556019815282822084905560189052908120555b6001600160a01b0388166000908152601a60209081526040808320546018909252909120546137ef9088614aa6565b111561383d5760405162461bcd60e51b815260206004820181905260248201527f53656c6c696e6720746f6f206d756368207065722074696d65206c696d69742e6044820152606401610df2565b6001600160a01b03881660009081526018602052604081208054889290613865908490614aa6565b9091555050505b811561390957600f5460ff1661390957600f54610100900460ff1615613909573060009081526020819052604090205460105481106139075760115460125460ff16156138eb57601354600c546001600160a01b0316600090815260208190526040902054612710916138de91614a26565b6138e891906149eb565b90505b8082106138f6578091505b81156139055761390582613d21565b505b505b613917878787868686613922565b979650505050505050565b601c54600090610100900460ff16613a225761393e878761415c565b601c54610100900460ff1615801561395b575061395b8787613c0a565b801561398057506001600160a01b03871660009081526005602052604090205460ff16155b80156139a557506001600160a01b03861660009081526005602052604090205460ff16155b80156139af575081155b15613a225760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610df2565b613a2c8787613c0a565b15613adf57601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ac8575060408051601f3d908101601f19168201909252613ac591810190614af8565b60015b613ad157600080fd5b905080613add57600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b2157506001600160a01b03871660009081526006602052604090205460ff165b15613b2a575060005b6001600160a01b03881660009081526020819052604081208054889290613b52908490614a45565b909155506000905081613b655786613b71565b613b718987878a6142cc565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613ba79190614aa6565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613bf391815260200190565b60405180910390a350600198975050505050505050565b601d546000906001600160a01b03848116911614801590613c395750601d546001600160a01b03838116911614155b8015613c505750601d546001600160a01b03163214155b8015613c7557506001600160a01b03821660009081526004602052604090205460ff16155b8015613c9a57506001600160a01b03831660009081526004602052604090205460ff16155b8015613cb157506001600160a01b03821661dead14155b8015613cc557506001600160a01b03821615155b8015613cda57506001600160a01b0383163014155b8015613cfa5750601c546001600160a01b03848116620100009092041614155b8015613d1a5750601c546001600160a01b03838116620100009092041614155b9392505050565b600f805460ff1916600117905560408051606081018252600a5461ffff8082168352620100008204811660208401526401000000009091041691810182905290600003613d6e575061414f565b306000908152600360209081526040808320600b5461010090046001600160a01b0316845290915290205460001914613dd157306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685613df29190614a26565b613dfc91906149eb565b613e0691906149eb565b90506000613e148285614a45565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613e4e57613e4e614a58565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee59190614adb565b81600181518110613ef857613ef8614a58565b6001600160a01b039283166020918202929092010152600b546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac94790613f5e908590600090869030904290600401614b15565b600060405180830381600087803b158015613f7857600080fd5b505af1925050508015613f89575060015b613f96575050505061414f565b47600083613fa48684614a26565b613fae91906149eb565b905084156140ad57600b54600e546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af193505050508015614061575060408051601f3d908101601f1916820190925261405e91810190614b51565b60015b6140705750505050505061414f565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6140b78183614a45565b91508560000151866040018181516140cf9190614b7f565b61ffff9081169091526020880151600092508491161561414657600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d806000811461413b576040519150601f19603f3d011682016040523d82523d6000602084013e614140565b606091505b50909250505b50505050505050505b50600f805460ff19169055565b601c54610100900460ff16156141da5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610df2565b6141e48282613c0a565b1580156141fe5750600c546001600160a01b038281169116145b1561227c576001600160a01b038083166000908152600460209081526040808320805460ff1990811660019081179092556006909352922080549091169091179055601c805461ff00191661010017908190556201000090041661428c57601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016127e9565b60008084156142e2575060095461ffff1661430c565b83156142fb575060095462010000900461ffff1661430c565b50600954640100000000900461ffff165b601c546201000090046001600160a01b031630148015614336575046600114806143365750466038145b1561434057506111945b600061271061434f8386614a26565b61435991906149eb565b905080156143c6573060009081526020819052604081208054839290614380908490614aa6565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6139178185614a45565b8015158114612dd457600080fd5b600080604083850312156143f157600080fd5b82356143fc816143d0565b9150602083013561440c816143d0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561446f5761446f614417565b604052919050565b600067ffffffffffffffff82111561449157614491614417565b5060051b60200190565b6001600160a01b0381168114612dd457600080fd5b600082601f8301126144c157600080fd5b813560206144d66144d183614477565b614446565b82815260059290921b840181019181810190868411156144f557600080fd5b8286015b8481101561451957803561450c8161449b565b83529183019183016144f9565b509695505050505050565b6000806040838503121561453757600080fd5b823567ffffffffffffffff81111561454e57600080fd5b61455a858286016144b0565b925050602083013561440c816143d0565b600060208083528351808285015260005b818110156145985785810183015185820160400152820161457c565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156145cc57600080fd5b82356145d78161449b565b946020939093013593505050565b6000602082840312156145f757600080fd5b8135613d1a8161449b565b60008060006060848603121561461757600080fd5b83356146228161449b565b925060208401356146328161449b565b929592945050506040919091013590565b6000806040838503121561465657600080fd5b50508035926020909101359150565b6000806040838503121561467857600080fd5b823567ffffffffffffffff8082111561469057600080fd5b61469c868387016144b0565b93506020915081850135818111156146b357600080fd5b85019050601f810186136146c657600080fd5b80356146d46144d182614477565b81815260059190911b820183019083810190888311156146f357600080fd5b928401925b82841015614711578335825292840192908401906146f8565b80955050505050509250929050565b803561ffff8116811461473257600080fd5b919050565b60008060006060848603121561474c57600080fd5b61475584614720565b925061476360208501614720565b915061477160408501614720565b90509250925092565b6000806040838503121561478d57600080fd5b82356143fc8161449b565b6000602082840312156147aa57600080fd5b8135613d1a816143d0565b6000602082840312156147c757600080fd5b5035919050565b600080604083850312156147e157600080fd5b6147ea83614720565b91506147f860208401614720565b90509250929050565b6000806040838503121561481457600080fd5b823561481f8161449b565b9150602083013561440c8161449b565b6000806000806080858703121561484557600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561489a5781516001600160a01b031687529582019590820190600101614875565b509495945050505050565b6040815260006148b86040830185614861565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614933578160001904821115614919576149196148c9565b8085161561492657918102915b93841c93908002906148fd565b509250929050565b60008261494a57506001610f34565b8161495757506000610f34565b816001811461496d576002811461497757614993565b6001915050610f34565b60ff841115614988576149886148c9565b50506001821b610f34565b5060208310610133831016604e8410600b84101617156149b6575081810a610f34565b6149c083836148f8565b80600019048211156149d4576149d46148c9565b029392505050565b6000613d1a60ff84168361493b565b600082614a21577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614a4057614a406148c9565b500290565b81810381811115610f3457610f346148c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103614a9d57614a9d6148c9565b60010192915050565b80820180821115610f3457610f346148c9565b61ffff818116838216019080821115614ad457614ad46148c9565b5092915050565b600060208284031215614aed57600080fd5b8151613d1a8161449b565b600060208284031215614b0a57600080fd5b8151613d1a816143d0565b85815284602082015260a060408201526000614b3460a0830186614861565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614b6657600080fd5b8351925060208401519150604084015190509250925092565b61ffff828116828216039080821115614ad457614ad46148c956fea264697066735822122086f291d7216f9d9c3d2df41774732af92df7db1caef77d2ca9b7518bb53962ab64736f6c63430008100033

Deployed Bytecode Sourcemap

4362:25282:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6986:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;6986:36:0;;;;;;;;6011:73;;;;;;;;;;;;6042:42;6011:73;;;;;-1:-1:-1;;;;;360:55:1;;;342:74;;330:2;315:18;6011:73:0;196:226:1;6456:28:0;;;;;;;;;;;;;;;;16099:151;;;;;;;;;;-1:-1:-1;16099:151:0;;;;;:::i;:::-;;:::i;:::-;;15668:172;;;;;;;;;;-1:-1:-1;15668:172:0;;;;;:::i;:::-;;:::i;5418:109::-;;;;;;;;;;-1:-1:-1;5418:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;3236:6:1;3269:15;;;3251:34;;3321:15;;;3316:2;3301:18;;3294:43;3373:15;;3353:18;;;3346:43;;;;3214:2;3199:18;5418:109:0;3030:365:1;11186:80:0;;;;;;;;;;-1:-1:-1;11258:5:0;;;;;;;;;;;;;;;;11186:80;;;;11258:5;11186:80;:::i;5950:26::-;;;;;;;;;;-1:-1:-1;5950:26:0;;;;;;;-1:-1:-1;;;;;5950:26:0;;;5917;;;;;;;;;;-1:-1:-1;5917:26:0;;;;;;;;;;;4425:14:1;;4418:22;4400:41;;4388:2;4373:18;5917:26:0;4260:187:1;11794:161:0;;;;;;;;;;-1:-1:-1;11794:161:0;;;;;:::i;:::-;;:::i;14400:140::-;;;;;;;;;;-1:-1:-1;14400:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14498:34:0;14474:4;14498:34;;;:25;:34;;;;;;;;;14400:140;18303:114;;;;;;;;;;;;;:::i;10857:115::-;;;;;;;;;;;;;:::i;12464:306::-;;;;;;;;;;-1:-1:-1;12464:306:0;;;;;:::i;:::-;;:::i;17915:264::-;;;;;;;;;;-1:-1:-1;17915:264:0;;;;;:::i;:::-;;:::i;27401:410::-;;;;;;;;;;-1:-1:-1;27401:410:0;;;;;:::i;:::-;;:::i;6564:33::-;;;;;;;;;;;;;;;;15302:141;;;;;;;;;;;;;:::i;5661:42::-;;;;;;;;;;;;5699:4;5661:42;;6491:25;;;;;;;;;;;;;;;;10978:112;;;;;;;;;;;;;:::i;:::-;;;7053:4:1;7041:17;;;7023:36;;7011:2;6996:18;10978:112:0;6881:184:1;16450:544:0;;;;;;;;;;-1:-1:-1;16450:544:0;;;;;:::i;:::-;;:::i;15983:108::-;;;;;;;;;;-1:-1:-1;15983:108:0;;;;;:::i;:::-;;:::i;14698:140::-;;;;;;;;;;-1:-1:-1;14698:140:0;;;;;:::i;:::-;;:::i;20281:780::-;;;;;;;;;;-1:-1:-1;20281:780:0;;;;;:::i;:::-;;:::i;:::-;;;;8185:25:1;;;8241:2;8226:18;;8219:34;;;;8269:18;;;8262:34;8327:2;8312:18;;8305:34;8172:3;8157:19;20281:780:0;7954:391:1;17634:273:0;;;;;;;;;;-1:-1:-1;17634:273:0;;;;;:::i;:::-;;:::i;6731:36::-;;;;;;;;;;-1:-1:-1;6731:36:0;;;;;;;;5983:21;;;;;;;;;;-1:-1:-1;5983:21:0;;;;-1:-1:-1;;;;;5983:21:0;;;19719:109;;;;;;;;;;-1:-1:-1;19719:109:0;;;;;:::i;:::-;;:::i;20048:225::-;;;;;;;;;;-1:-1:-1;20048:225:0;;;;;:::i;:::-;;:::i;5814:46::-;;;;;;;;;;;;5856:4;5814:46;;19836:204;;;;;;;;;;-1:-1:-1;19836:204:0;;;;;:::i;:::-;;:::i;7031:34::-;;;;;;;;;;-1:-1:-1;7031:34:0;;;;;;;;18425:189;;;;;;;;;;-1:-1:-1;18425:189:0;;;;;:::i;:::-;;:::i;19223:217::-;;;;;;;;;;-1:-1:-1;19223:217:0;;;;;:::i;:::-;;:::i;9615:654::-;;;;;;;;;;-1:-1:-1;9615:654:0;;;;;:::i;:::-;;:::i;14265:127::-;;;;;;;;;;-1:-1:-1;14265:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14356:28:0;14332:4;14356:28;;;:19;:28;;;;;;;;;14265:127;7072:36;;;;;;;;;;-1:-1:-1;7072:36:0;;;;;;;;;;;14846:134;;;;;;;;;;-1:-1:-1;14846:134:0;;;;;:::i;:::-;;:::i;13899:218::-;;;;;;;;;;-1:-1:-1;13899:218:0;;;;;:::i;:::-;;:::i;14125:132::-;;;;;;;;;;-1:-1:-1;14125:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14219:30:0;14195:4;14219:30;;;:21;:30;;;;;;;;;14125:132;18187:108;;;;;;;;;;;;;:::i;11496:117::-;;;;;;;;;;-1:-1:-1;11496:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;11589:16:0;11562:7;11589:16;;;;;;;;;;;;11496:117;10277:225;;;;;;;;;;;;;:::i;16258:182::-;;;;;;;;;;;;;:::i;13399:492::-;;;;;;;;;;-1:-1:-1;13399:492:0;;;;;:::i;:::-;;:::i;11272:79::-;;;;;;;;;;-1:-1:-1;11342:6:0;;-1:-1:-1;;;;;11342:6:0;11272:79;;12281:175;;;;;;;;;;;;;:::i;26658:545::-;;;;;;;;;;;;;:::i;15144:150::-;;;;;;;;;;-1:-1:-1;15144:150:0;;;;;:::i;:::-;;:::i;11621:165::-;;;;;;;;;;-1:-1:-1;11621:165:0;;;;;:::i;:::-;;:::i;6523:34::-;;;;;;;;;;-1:-1:-1;6523:34:0;;;;;;;;17002:366;;;;;;;;;;-1:-1:-1;17002:366:0;;;;;:::i;:::-;;:::i;19448:263::-;;;;;;;;;;-1:-1:-1;19448:263:0;;;;;:::i;:::-;;:::i;6774:35::-;;;;;;;;;;;;;;;;5536:112;;;;;;;;;;-1:-1:-1;5536:112:0;;;;;;;;;;;;;;;;;;;;;;17376:250;;;;;;;;;;-1:-1:-1;17376:250:0;;;;;:::i;:::-;;:::i;11357:133::-;;;;;;;;;;-1:-1:-1;11357:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11459:19:0;;;11441:7;11459:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11357:133;12778:613;;;;;;;;;;-1:-1:-1;12778:613:0;;;;;:::i;:::-;;:::i;27211:182::-;;;;;;;;;;;;;:::i;15515:145::-;;;;;;;;;;-1:-1:-1;15515:145:0;;;;;:::i;:::-;;:::i;14548:142::-;;;;;;;;;;-1:-1:-1;14548:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;14647:35:0;14623:4;14647:35;;;:26;:35;;;;;;;;;14548:142;6191:188;;;;;;;;;;-1:-1:-1;6191:188:0;;;;;;-1:-1:-1;;;;;6191:188:0;;;;;;;;;;;-1:-1:-1;;;;;10105:15:1;;;10087:34;;10157:15;;;;10152:2;10137:18;;10130:43;9999:18;6191:188:0;9836:343:1;18622:593:0;;;;;;;;;;-1:-1:-1;18622:593:0;;;;;:::i;:::-;;:::i;6410:39::-;;;;;;;;;;-1:-1:-1;6410:39:0;;;;;;;;;;;15848:127;;;;;;;;;;-1:-1:-1;15848:127:0;;;;;:::i;:::-;;:::i;14988:148::-;;;;;;;;;;-1:-1:-1;14988:148:0;;;;;:::i;:::-;;:::i;16099:151::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;;;;;;;;;16194:9:::1;::::0;:48:::1;::::0;;;;11107:14:1;;11100:22;16194:48:0::1;::::0;::::1;11082:41:1::0;11166:14;;11159:22;11139:18;;;11132:50;16194:9:0;;;::::1;-1:-1:-1::0;;;;;16194:9:0::1;::::0;:24:::1;::::0;11055:18:1;;16194:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16099:151:::0;;:::o;15668:172::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;15776:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;15776:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;15814:8;;15824:7;;15776:56:::1;;;:::i;11794:161::-:0;11871:4;11888:37;11897:10;11909:7;11918:6;11888:8;:37::i;:::-;-1:-1:-1;11943:4:0;11794:161;;;;;:::o;18303:114::-;18350:7;18395:13;5117:1;18395:2;:13;:::i;:::-;18377:14;;:32;;;;:::i;:::-;18370:39;;18303:114;:::o;10857:115::-;10912:7;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;;4966:17;5160:30;:::i;:::-;10938:1;10927:12;10923:31;;10943:8;;;10923:31;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;;4966:17;5160:30;:::i;12464:306::-;-1:-1:-1;;;;;12585:19:0;;12564:4;12585:19;;;:11;:19;;;;;;;;12605:10;12585:31;;;;;;;;-1:-1:-1;;12585:52:0;12581:126;;-1:-1:-1;;;;;12654:19:0;;;;;;:11;:19;;;;;;;;12674:10;12654:31;;;;;;;:41;;12689:6;;12654:19;:41;;12689:6;;12654:41;:::i;:::-;;;;-1:-1:-1;;12581:126:0;12726:36;12736:6;12744:9;12755:6;12726:9;:36::i;:::-;12719:43;12464:306;-1:-1:-1;;;;12464:306:0:o;17915:264::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;18057:3:::1;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;18047:13;;;;:::i;:::-;18035:7:::0;18024;5177:13:::1;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;18014:17;;;;:::i;:::-;18013:29;;;;:::i;:::-;:48;;18005:109;;;::::0;-1:-1:-1;;;18005:109:0;;14568:2:1;18005:109:0::1;::::0;::::1;14550:21:1::0;14607:2;14587:18;;;14580:30;14646:34;14626:18;;;14619:62;14717:18;14697;;;14690:46;14753:19;;18005:109:0::1;14366:412:1::0;18005:109:0::1;18164:7:::0;18153;5177:13:::1;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;18143:17;;;;:::i;:::-;18142:29;;;;:::i;:::-;18125:14;:46:::0;-1:-1:-1;;17915:264:0:o;27401:410::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;27536:7:::1;:14;27517:8;:15;:33;27509:67;;;::::0;-1:-1:-1;;;27509:67:0;;14985:2:1;27509:67:0::1;::::0;::::1;14967:21:1::0;15024:2;15004:18;;;14997:30;15063:23;15043:18;;;15036:51;15104:18;;27509:67:0::1;14783:345:1::0;27509:67:0::1;27592:7;27587:217;27609:8;:15;27605:1;:19;;;27587:217;;;27679:7;27687:1;27679:10;;;;;;;;;;:::i;:::-;;;;;;;27654:21;27664:10;-1:-1:-1::0;;;;;11589:16:0;11562:7;11589:16;;;;;;;;;;;;11496:117;27654:21:::1;:35;;27646:44;;;::::0;::::1;;27705:87;27722:10;27734:8;27743:1;27734:11;;;;;;;;;;:::i;:::-;;;;;;;5117:1;27758:2;:13;;;;:::i;:::-;27747:7;27755:1;27747:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27773:5;27780::::0;27787:4:::1;27705:16;:87::i;:::-;-1:-1:-1::0;27626:3:0;::::1;::::0;::::1;:::i;:::-;;;;27587:217;;;;27401:410:::0;;:::o;15302:141::-;15355:7;11589:16;;;;;;6042:42;11589:16;;;;15394:39;;11589:16;15394:39;:::i;:::-;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;;4966:17;5160:30;:::i;:::-;15383:51;;;;:::i;10978:112::-;11030:5;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;;4966:17;5160:30;:::i;:::-;11054:1;11043:12;11039:31;;11059:8;;;11039:31;-1:-1:-1;5117:1:0;;10978:112::o;16450:544::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;16558:14:::1;::::0;::::1;;16557:15;16549:45;;;::::0;-1:-1:-1;;;16549:45:0;;15834:2:1;16549:45:0::1;::::0;::::1;15816:21:1::0;15873:2;15853:18;;;15846:30;15912:19;15892:18;;;15885:47;15949:18;;16549:45:0::1;15632:341:1::0;16549:45:0::1;5699:4;16613:6;:21;;;;:65;;;;;5749:4;16655:7;:23;;;;16613:65;:117;;;;;5803:4;16699:11;:31;;;;16613:117;16605:170;;;::::0;-1:-1:-1;;;16605:170:0;;16180:2:1;16605:170:0::1;::::0;::::1;16162:21:1::0;16219:2;16199:18;;;16192:30;16258:25;16238:18;;;16231:53;16301:18;;16605:170:0::1;15978:347:1::0;16605:170:0::1;5856:4;16794:16;16803:7:::0;16794:6;:16:::1;:::i;:::-;:35;;;;16786:80;;;::::0;-1:-1:-1;;;16786:80:0;;16705:2:1;16786:80:0::1;::::0;::::1;16687:21:1::0;;;16724:18;;;16717:30;16783:34;16763:18;;;16756:62;16835:18;;16786:80:0::1;16503:356:1::0;16786:80:0::1;16877:9;:25:::0;;::::1;::::0;;::::1;16913:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16951:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16450:544::o;15983:108::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;16052:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;360:55:1;;;16052:31:0::1;::::0;::::1;342:74:1::0;16052:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;315:18:1;;16052:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15983:108:::0;:::o;14698:140::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;-1:-1:-1;;;;;14790:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14790:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14698:140::o;20281:780::-;20487:9;;-1:-1:-1;;;;;20463:21:0;;20347:18;20463:21;;;:12;:21;;;;;;20347:18;;;;;;;;20499:15;;20463:33;;;:::i;:::-;:51;20459:595;;;20569:13;5117:1;20569:2;:13;:::i;:::-;-1:-1:-1;;;;;20544:22:0;;;;;;:13;:22;;;;;;:38;;;;:::i;:::-;20531:51;-1:-1:-1;20637:13:0;5117:1;20637:2;:13;:::i;:::-;-1:-1:-1;;;;;20612:22:0;;;;;;:13;:22;;;;;;:38;;;;:::i;:::-;20597:53;-1:-1:-1;20691:25:0;20706:10;20597:53;20691:25;:::i;:::-;20775:9;;-1:-1:-1;;;;;20751:21:0;;;;;;:12;:21;;;;;;20665:51;;-1:-1:-1;20788:15:0;;20751:33;;20775:9;20751:33;:::i;:::-;20750:53;;;;:::i;:::-;20731:72;;20459:595;;;20849:1;;-1:-1:-1;20941:13:0;5117:1;20941:2;:13;:::i;:::-;5903:5;20903:14;;20882:18;20892:7;-1:-1:-1;;;;;11589:16:0;11562:7;11589:16;;;;;;;;;;;;11496:117;20882:18;:35;;;;:::i;:::-;20881:56;;;;:::i;:::-;20880:74;;;;:::i;:::-;20865:89;;20995:12;20969:38;;21041:1;21022:20;;20459:595;20281:780;;;;;:::o;17634:273::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;17779:4:::1;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;17765:11;::::0;17775:1:::1;17765:11;:::i;:::-;:18;;;;:::i;:::-;17753:7:::0;17742;5177:13:::1;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;17732:17;;;;:::i;:::-;17731:29;;;;:::i;:::-;:53;;17723:121;;;::::0;-1:-1:-1;;;17723:121:0;;17066:2:1;17723:121:0::1;::::0;::::1;17048:21:1::0;17105:2;17085:18;;;17078:30;17144:34;17124:18;;;17117:62;17215:25;17195:18;;;17188:53;17258:19;;17723:121:0::1;16864:419:1::0;17723:121:0::1;17892:7:::0;17881;5177:13:::1;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;17871:17;;;;:::i;:::-;17870:29;;;;:::i;:::-;17855:12;:44:::0;-1:-1:-1;;17634:273:0:o;19719:109::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;19793:17:::1;:27:::0;;-1:-1:-1;;19793:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19719:109::o;20048:225::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;20128:26:::1;20145:9;20128:26:::0;::::1;:::i;:::-;;;20190:8;20173:13;:25;;20165:64;;;::::0;-1:-1:-1;;;20165:64:0;;17490:2:1;20165:64:0::1;::::0;::::1;17472:21:1::0;17529:2;17509:18;;;17502:30;17568:28;17548:18;;;17541:56;17614:18;;20165:64:0::1;17288:350:1::0;20165:64:0::1;20240:9;:25:::0;20048:225::o;19836:204::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;19949:4:::1;19928:17;:25;;19920:67;;;::::0;-1:-1:-1;;;19920:67:0;;17845:2:1;19920:67:0::1;::::0;::::1;17827:21:1::0;17884:2;17864:18;;;17857:30;17923:31;17903:18;;;17896:59;17972:18;;19920:67:0::1;17643:353:1::0;19920:67:0::1;19998:14;:34:::0;19836:204::o;18425:189::-;18554:6;;-1:-1:-1;;;;;18554:6:0;18516:7;11589:16;;;;;;;;;;;5903:5;;18544:41;;18564:21;;18544:41;:::i;:::-;18543:62;;;;:::i;19223:217::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;19353:3:::1;19327:22;:29;;19319:64;;;::::0;-1:-1:-1;;;19319:64:0;;18203:2:1;19319:64:0::1;::::0;::::1;18185:21:1::0;18242:2;18222:18;;;18215:30;18281:24;18261:18;;;18254:52;18323:18;;19319:64:0::1;18001:346:1::0;19319:64:0::1;19394:13;:38:::0;19223:217::o;9615:654::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;-1:-1:-1;;;;;9694:22:0;::::1;9686:96;;;::::0;-1:-1:-1;;;9686:96:0;;18554:2:1;9686:96:0::1;::::0;::::1;18536:21:1::0;18593:2;18573:18;;;18566:30;18632:34;18612:18;;;18605:62;18703:31;18683:18;;;18676:59;18752:19;;9686:96:0::1;18352:425:1::0;9686:96:0::1;9801:16:::0;-1:-1:-1;;;;;9801:16:0;::::1;::::0;9793:90:::1;;;::::0;-1:-1:-1;;;9793:90:0;;18554:2:1;9793:90:0::1;::::0;::::1;18536:21:1::0;18593:2;18573:18;;;18566:30;18632:34;18612:18;;;18605:62;18703:31;18683:18;;;18676:59;18752:19;;9793:90:0::1;18352:425:1::0;9793:90:0::1;9914:6;::::0;9894:34:::1;::::0;-1:-1:-1;;;;;9914:6:0::1;;9894:19;:34::i;:::-;9939:35;9959:8;9969:4;9939:19;:35::i;:::-;10009:6;::::0;-1:-1:-1;;;;;10009:6:0::1;10019:1;11589:16:::0;;;;;;;;;;;9999:21;9995:127:::1;;10054:6;::::0;-1:-1:-1;;;;;10054:6:0::1;11562:7:::0;11589:16;;;;;;;;;;;10037:73:::1;::::0;10054:6;10062:8;;10072:17:::1;11496:117:::0;10037:73:::1;;9995:127;10161:6;::::0;;-1:-1:-1;;;;;10178:17:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;10211:40:::1;::::0;10161:6;::::1;::::0;10178:17;10161:6;;10211:40:::1;::::0;10142:16:::1;::::0;10211:40:::1;9675:594;9615:654:::0;:::o;14846:134::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;-1:-1:-1;;;;;14934:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14934:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14846:134::o;13899:218::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;13983:14:::1;::::0;::::1;;13982:15;13974:24;;;::::0;::::1;;14040:4;-1:-1:-1::0;;;;;14017:28:0;::::1;::::0;14009:55:::1;;;::::0;-1:-1:-1;;;14009:55:0;;18984:2:1;14009:55:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;19062:16;19042:18;;;19035:44;19096:18;;14009:55:0::1;18782:338:1::0;14009:55:0::1;14075:9;:34:::0;;-1:-1:-1;;;;;14075:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;13899:218::o;18187:108::-;18230:7;18273:13;5117:1;18273:2;:13;:::i;:::-;18257:12;;:30;;;;:::i;10277:225::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;10356:6:::1;::::0;10336:34:::1;::::0;-1:-1:-1;;;;;10356:6:0::1;;10336:19;:34::i;:::-;10400:6;::::0;;10417:19;;::::1;::::0;;;10452:42:::1;::::0;-1:-1:-1;;;;;10400:6:0;;::::1;::::0;10381:16:::1;::::0;10400:6;;10452:42:::1;::::0;10381:16;;10452:42:::1;10325:177;10277:225::o:0;16258:182::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;16411:14:::1;:21:::0;;-1:-1:-1;;16411:21:0::1;16428:4;16411:21;::::0;;16258:182::o;13399:492::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;13481:7:::1;13476:408;;-1:-1:-1::0;;;;;13505:13:0;;::::1;13521:5;13505:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13505:21:0::1;::::0;;13541:9:::1;::::0;:32;;;;;::::1;::::0;::::1;19293:74:1::0;;;;19383:18;;;19376:50;;;;13541:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19266:18:1;;13541:32:0::1;19125:307:1::0;13476:408:0::1;13610:17;::::0;:22;13606:136:::1;;13699:6;13679:17;;13661:15;:35;;;;:::i;:::-;:44;13653:73;;;::::0;-1:-1:-1;;;13653:73:0;;19639:2:1;13653:73:0::1;::::0;::::1;19621:21:1::0;19678:2;19658:18;;;19651:30;19717:18;19697;;;19690:46;19753:18;;13653:73:0::1;19437:340:1::0;13653:73:0::1;-1:-1:-1::0;;;;;13756:13:0;;::::1;;::::0;;;13772:4:::1;13756:13;::::0;;;;;;;;:20;;-1:-1:-1;;13756:20:0::1;::::0;::::1;::::0;;13811:15:::1;13791:17;:35:::0;13841:9:::1;::::0;:31;;;;;::::1;::::0;::::1;19293:74:1::0;;;;19383:18;;;19376:50;13841:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19266:18:1;;13841:31:0::1;19125:307:1::0;13476:408:0::1;13399:492:::0;;:::o;12281:175::-;7500:6;;12347:4;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;12396:9:::1;::::0;12364:62:::1;::::0;12381:4:::1;::::0;12396:9:::1;::::0;::::1;-1:-1:-1::0;;;;;12396:9:0::1;-1:-1:-1::0;;12364:8:0::1;:62::i;:::-;-1:-1:-1::0;12444:4:0::1;12281:175:::0;:::o;26658:545::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;26720:14:::1;::::0;::::1;;26719:15;26711:52;;;::::0;-1:-1:-1;;;26711:52:0;;19984:2:1;26711:52:0::1;::::0;::::1;19966:21:1::0;20023:2;20003:18;;;19996:30;20062:26;20042:18;;;20035:54;20106:18;;26711:52:0::1;19782:348:1::0;26711:52:0::1;26782:16;::::0;::::1;::::0;::::1;;;26774:53;;;::::0;-1:-1:-1;;;26774:53:0;;20337:2:1;26774:53:0::1;::::0;::::1;20319:21:1::0;20376:2;20356:18;;;20349:30;20415:26;20395:18;;;20388:54;20459:18;;26774:53:0::1;20135:348:1::0;26774:53:0::1;26850:9;::::0;;;::::1;-1:-1:-1::0;;;;;26850:9:0::1;26838:100;;26890:9;:36:::0;;;::::1;26920:4;26890:36:::0;::::1;;::::0;;26838:100:::1;26952:9;::::0;26972:6:::1;::::0;26952:85:::1;::::0;;;;-1:-1:-1;;;;;26972:6:0;;::::1;26952:85;::::0;::::1;20711:74:1::0;20833:10;26987:12:0::1;20821:23:1::0;20801:18;;;20794:51;20893:18;27009:15:0::1;20881:31:1::0;20861:18;;;20854:59;5117:1:0::1;20929:18:1::0;;;20922:45;26952:9:0;;;::::1;;::::0;:19:::1;::::0;20683::1;;26952:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;27059:14:0::1;:21:::0;;-1:-1:-1;;27059:21:0::1;27076:4;27059:21;::::0;;27118:6:::1;::::0;-1:-1:-1;;;;;27118:6:0::1;-1:-1:-1::0;11589:16:0;;;;;;;;;;;27134:5:::1;::::0;27108:22:::1;::::0;27128:2:::1;27108:22;:::i;:::-;27107:32;;;;:::i;:::-;27091:13;:48:::0;27174:6:::1;::::0;-1:-1:-1;;;;;27174:6:0::1;11562:7:::0;11589:16;;;;;;;;;;;27190:5:::1;::::0;27164:22:::1;::::0;27184:2:::1;27164:22;:::i;:::-;27163:32;;;;:::i;:::-;27150:10;:45:::0;26658:545::o;15144:150::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;-1:-1:-1;;;;;15241:35:0;;;::::1;;::::0;;;:26:::1;:35;::::0;;;;:45;;-1:-1:-1;;15241:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15144:150::o;11621:165::-;11699:4;11716:40;11726:10;11738:9;11749:6;11716:9;:40::i;:::-;-1:-1:-1;11774:4:0;;11621:165;-1:-1:-1;;;11621:165:0:o;17002:366::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;17087:7:::1;:29:::0;;::::1;17127::::0;;::::1;::::0;::::1;::::0;;;;17087;;::::1;17127::::0;::::1;::::0;;17187:21:::1;17147:9:::0;17107;17187:21:::1;:::i;:::-;17167:7;:41:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;17254:9:::1;:17:::0;-1:-1:-1;;17235:36:0::1;::::0;17254:17;;::::1;::::0;::::1;::::0;17235:16:::1;:36;:::i;:::-;17290:7;:17:::0;17219:52:::1;::::0;;::::1;::::0;-1:-1:-1;17290:17:0;;::::1;;:26:::0;-1:-1:-1;17290:26:0::1;17282:78;;;::::0;-1:-1:-1;;;17282:78:0;;21180:2:1;17282:78:0::1;::::0;::::1;21162:21:1::0;21219:2;21199:18;;;21192:30;21258:34;21238:18;;;21231:62;21329:9;21309:18;;;21302:37;21356:19;;17282:78:0::1;20978:403:1::0;19448:263:0;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;19557:19:::1;:33:::0;;-1:-1:-1;;19557:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19601:22:::1;:47:::0;;-1:-1:-1;;19601:47:0::1;::::0;::::1;;;::::0;;19664:39:::1;::::0;4400:41:1;;;19664:39:0::1;::::0;4388:2:1;4373:18;19664:39:0::1;;;;;;;;19448:263:::0;;:::o;17376:250::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;17472:11:::1;:42:::0;;;::::1;-1:-1:-1::0;;;;;17472:42:0;;::::1;::::0;;;::::1;::::0;;;17528:21;;6042:42:::1;17528:21:::0;::::1;:29;17525:94;;17574:21:::0;:33;;-1:-1:-1;;;;;17574:33:0;::::1;::::0;;;::::1;;::::0;;17376:250;;:::o;12778:613::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;12858:16:::1;::::0;::::1;::::0;::::1;;;12857:17;12849:60;;;::::0;-1:-1:-1;;;12849:60:0;;21588:2:1;12849:60:0::1;::::0;::::1;21570:21:1::0;21627:2;21607:18;;;21600:30;21666:32;21646:18;;;21639:60;21716:18;;12849:60:0::1;21386:354:1::0;12849:60:0::1;12920:20;12953:9;12920:43;;12974:16;13004:10;-1:-1:-1::0;;;;;13004:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12993:40:0::1;;13042:4;13049:10;-1:-1:-1::0;;;;;13049:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12993:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;10105:15:1;;;12993:74:0::1;::::0;::::1;10087:34:1::0;10157:15;;10137:18;;;10130:43;9999:18;;12993:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12974:93:::0;-1:-1:-1;;;;;;13082:22:0;::::1;13078:200;;13141:10;-1:-1:-1::0;;;;;13141:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13130:43:0::1;;13182:4;13189:10;-1:-1:-1::0;;;;;13189:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13130:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;10105:15:1;;;13130:77:0::1;::::0;::::1;10087:34:1::0;10157:15;;10137:18;;;10130:43;9999:18;;13130:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13121:6;:86:::0;;;::::1;-1:-1:-1::0;;;;;13121:86:0;;;::::1;::::0;;;::::1;::::0;;13078:200:::1;;;13249:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;13249:17:0;::::1;;::::0;;13078:200:::1;13288:9;:22:::0;;;::::1;;-1:-1:-1::0;;;;;13288:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13321:62:::1;::::0;13338:4:::1;::::0;13353:9;;::::1;;-1:-1:-1::0;;13321:8:0::1;:62::i;27211:182::-:0;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;27278:16:::1;::::0;::::1;::::0;::::1;;;27277:17;27269:58;;;::::0;-1:-1:-1;;;27269:58:0;;22535:2:1;27269:58:0::1;::::0;::::1;22517:21:1::0;22574:2;22554:18;;;22547:30;22613;22593:18;;;22586:58;22661:18;;27269:58:0::1;22333:352:1::0;27269:58:0::1;27346:6;::::0;27338:47:::1;::::0;-1:-1:-1;;;;;27346:6:0;;::::1;::::0;27363:21:::1;27338:47:::0;::::1;;;::::0;27346:6:::1;27338:47:::0;27346:6;27338:47;27363:21;27346:6;27338:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27211:182::o:0;15515:145::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;15605:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;19311:55:1;;;15605:47:0::1;::::0;::::1;19293:74:1::0;19410:14;;19403:22;19383:18;;;19376:50;15605:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19266:18:1;;15605:47:0::1;19125:307:1::0;18622:593:0;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;18822:16;18802;5177:13:::1;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;18792:26;;;;:::i;:::-;18791:47;;;;:::i;:::-;18775:13;:63:::0;18890:13;18873;5177::::1;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;18863:23;;;;:::i;:::-;18862:41;;;;:::i;:::-;18849:10;:54:::0;;;18922:13:::1;::::0;:27:::1;;18914:73;;;::::0;-1:-1:-1;;;18914:73:0;;22892:2:1;18914:73:0::1;::::0;::::1;22874:21:1::0;22931:2;22911:18;;;22904:30;22970:34;22950:18;;;22943:62;23041:3;23021:18;;;23014:31;23062:19;;18914:73:0::1;22690:397:1::0;18914:73:0::1;19031:6;::::0;-1:-1:-1;;;;;19031:6:0::1;11562:7:::0;11589:16;;;;;;;;;;;5903:5:::1;::::0;19021:23:::1;::::0;19041:3:::1;19021:23;:::i;:::-;19020:44;;;;:::i;:::-;19006:10;;:58;;18998:106;;;::::0;-1:-1:-1;;;18998:106:0;;23294:2:1;18998:106:0::1;::::0;::::1;23276:21:1::0;23333:2;23313:18;;;23306:30;23372:34;23352:18;;;23345:62;23443:5;23423:18;;;23416:33;23466:19;;18998:106:0::1;23092:399:1::0;18998:106:0::1;19147:9;5177:13;5117:1;5177:2;:13;:::i;:::-;5160:30;::::0;4966:17:::1;5160:30;:::i;:::-;19137:19;;;;:::i;:::-;19123:10;;:33;;19115:92;;;::::0;-1:-1:-1;;;19115:92:0;;23698:2:1;19115:92:0::1;::::0;::::1;23680:21:1::0;23737:2;23717:18;;;23710:30;23776:34;23756:18;;;23749:62;23847:16;23827:18;;;23820:44;23881:19;;19115:92:0::1;23496:410:1::0;19115:92:0::1;18622:593:::0;;;;:::o;15848:127::-;15935:9;;:32;;;;;-1:-1:-1;;;;;360:55:1;;;15935:32:0;;;342:74:1;15911:4:0;;15935:9;;;;;:23;;315:18:1;;15935:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14988:148::-;7500:6;;-1:-1:-1;;;;;7500:6:0;7510:10;7500:20;7492:50;;;;-1:-1:-1;;;7492:50:0;;10776:2:1;7492:50:0;;;10758:21:1;10815:2;10795:18;;;10788:30;-1:-1:-1;;;10834:18:1;;;10827:47;10891:18;;7492:50:0;10574:341:1;7492:50:0;-1:-1:-1;;;;;15084:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15084:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14988:148::o;11963:310::-;-1:-1:-1;;;;;12058:20:0;;12050:52;;;;-1:-1:-1;;;12050:52:0;;24363:2:1;12050:52:0;;;24345:21:1;24402:2;24382:18;;;24375:30;24441:21;24421:18;;;24414:49;24480:18;;12050:52:0;24161:343:1;12050:52:0;-1:-1:-1;;;;;12121:21:0;;12113:53;;;;-1:-1:-1;;;12113:53:0;;24363:2:1;12113:53:0;;;24345:21:1;24402:2;24382:18;;;24375:30;24441:21;24421:18;;;24414:49;24480:18;;12113:53:0;24161:343:1;12113:53:0;-1:-1:-1;;;;;12179:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12232:33;;160:25:1;;;12232:33:0;;133:18:1;12232:33:0;;;;;;;11963:310;;;:::o;21519:2791::-;21598:4;-1:-1:-1;;;;;21623:18:0;;21615:68;;;;-1:-1:-1;;;21615:68:0;;24711:2:1;21615:68:0;;;24693:21:1;24750:2;24730:18;;;24723:30;24789:34;24769:18;;;24762:62;24860:7;24840:18;;;24833:35;24885:19;;21615:68:0;24509:401:1;21615:68:0;-1:-1:-1;;;;;21702:16:0;;21694:64;;;;-1:-1:-1;;;21694:64:0;;25117:2:1;21694:64:0;;;25099:21:1;25156:2;25136:18;;;25129:30;25195:34;25175:18;;;25168:62;25266:5;25246:18;;;25239:33;25289:19;;21694:64:0;24915:399:1;21694:64:0;21786:1;21777:6;:10;21769:64;;;;-1:-1:-1;;;21769:64:0;;25521:2:1;21769:64:0;;;25503:21:1;25560:2;25540:18;;;25533:30;25599:34;25579:18;;;25572:62;25670:11;25650:18;;;25643:39;25699:19;;21769:64:0;25319:405:1;21769:64:0;-1:-1:-1;;;;;21932:13:0;;21844:8;21932:13;;;:7;:13;;;;;;21844:8;;;;21932:13;;21928:162;;;21968:4;21962:10;;21928:162;;;-1:-1:-1;;;;;21994:11:0;;;;;;:7;:11;;;;;;;;21990:100;;;22029:4;22022:11;;21990:100;;;-1:-1:-1;22074:4:0;21990:100;22104:20;22115:4;22121:2;22104:10;:20::i;:::-;22100:1400;;;22145:14;;;;22141:89;;22180:34;;-1:-1:-1;;;22180:34:0;;25931:2:1;22180:34:0;;;25913:21:1;25970:2;25950:18;;;25943:30;26009:26;25989:18;;;25982:54;26053:18;;22180:34:0;25729:348:1;22141:89:0;22248:3;:11;;;;22255:4;22248:11;22244:232;;;-1:-1:-1;;;;;22284:27:0;;;;;;:21;:27;;;;;;;;22283:28;:58;;;;-1:-1:-1;;;;;;22316:25:0;;;;;;:21;:25;;;;;;;;22315:26;22283:58;22279:182;;;22384:12;;22374:6;:22;;22366:75;;;;-1:-1:-1;;;22366:75:0;;26284:2:1;22366:75:0;;;26266:21:1;26323:2;26303:18;;;26296:30;26362:34;26342:18;;;26335:62;26433:10;26413:18;;;26406:38;26461:19;;22366:75:0;26082:404:1;22366:75:0;22508:9;;-1:-1:-1;;;;;22494:24:0;;;22508:9;;;;;22494:24;;;;:33;;;22523:4;22522:5;22494:33;22490:243;;;-1:-1:-1;;;;;22553:25:0;;;;;;:21;:25;;;;;;;;22548:170;;22637:14;;22627:6;22611:13;22621:2;-1:-1:-1;;;;;11589:16:0;11562:7;11589:16;;;;;;;;;;;;11496:117;22611:13;:22;;;;:::i;:::-;:40;;22603:95;;;;-1:-1:-1;;;22603:95:0;;26693:2:1;22603:95:0;;;26675:21:1;26732:2;26712:18;;;26705:30;26771:34;26751:18;;;26744:62;26842:12;26822:18;;;26815:40;26872:19;;22603:95:0;26491:406:1;22603:95:0;22751:17;;;;22747:742;;;22793:4;22789:685;;;-1:-1:-1;;;;;22827:32:0;;;;;;:26;:32;;;;;;;;22822:633;;22977:9;;-1:-1:-1;;;;;22956:18:0;;22888:19;22956:18;;;:12;:18;;;;;;22910:15;;;;22956:30;;22977:9;22956:30;:::i;:::-;:44;22952:301;;;5903:5;23074:14;;23056:15;23066:4;-1:-1:-1;;;;;11589:16:0;11562:7;11589:16;;;;;;;;;;;;11496:117;23056:15;:32;;;;:::i;:::-;23055:53;;;;:::i;:::-;-1:-1:-1;;;;;23033:19:0;;;;;;:13;:19;;;;;;;;:75;;;;23139:12;:18;;;;;:32;;;23202:13;:19;;;;;:23;22952:301;-1:-1:-1;;;;;23319:19:0;;;;;;:13;:19;;;;;;;;;23296:13;:19;;;;;;;23287:28;;:6;:28;:::i;:::-;:51;;23279:96;;;;-1:-1:-1;;;23279:96:0;;27104:2:1;23279:96:0;;;27086:21:1;;;27123:18;;;27116:30;27182:34;27162:18;;;27155:62;27234:18;;23279:96:0;26902:356:1;23279:96:0;-1:-1:-1;;;;;23402:19:0;;;;;;:13;:19;;;;;:29;;23425:6;;23402:19;:29;;23425:6;;23402:29;:::i;:::-;;;;-1:-1:-1;;;22822:633:0;23516:4;23512:720;;;23542:6;;;;23537:684;;23573:19;;;;;;;23569:637;;;23666:4;23617:28;11589:16;;;;;;;;;;;23723:13;;23699:37;;23695:492;;23783:10;;23824:22;;;;23820:97;;;23881:13;;23871:6;;-1:-1:-1;;;;;23871:6:0;11562:7;11589:16;;;;;;;;;;;5903:5;;23861:33;;;:::i;:::-;23860:54;;;;:::i;:::-;23850:64;;23820:97;23971:7;23947:20;:31;23943:72;;24005:7;23982:30;;23943:72;24045:24;;24041:123;;24102:34;24115:20;24102:12;:34::i;:::-;23738:449;23695:492;23594:612;23569:637;24250:52;24267:4;24273:2;24277:6;24285:3;24290:4;24296:5;24250:16;:52::i;:::-;24243:59;21519:2791;-1:-1:-1;;;;;;;21519:2791:0:o;27819:1061::-;27960:16;;27938:4;;27960:16;;;;;27955:298;;27993:28;28012:4;28018:2;27993:18;:28::i;:::-;28041:16;;;;;;;28040:17;:41;;;;;28061:20;28072:4;28078:2;28061:10;:20::i;:::-;28040:77;;;;-1:-1:-1;;;;;;28086:31:0;;;;;;:25;:31;;;;;;;;28085:32;28040:77;:111;;;;-1:-1:-1;;;;;;28122:29:0;;;;;;:25;:29;;;;;;;;28121:30;28040:111;:121;;;;;28156:5;28155:6;28040:121;28036:206;;;28182:44;;-1:-1:-1;;;28182:44:0;;27465:2:1;28182:44:0;;;27447:21:1;27504:2;27484:18;;;27477:30;27543:34;27523:18;;;27516:62;27614:4;27594:18;;;27587:32;27636:19;;28182:44:0;27263:398:1;28036:206:0;28269:20;28280:4;28286:2;28269:10;:20::i;:::-;28265:226;;;28324:9;;:37;;;;;-1:-1:-1;;;;;27947:15:1;;;28324:37:0;;;27929:34:1;27999:15;;;27979:18;;;27972:43;28031:18;;;28024:34;;;28293:12:0;;28324:9;;;;;:19;;27841:18:1;;28324:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28324:37:0;;;;;;;;-1:-1:-1;;28324:37:0;;;;;;;;;;;;:::i;:::-;;;28320:120;;28429:8;;;28320:120;28412:5;-1:-1:-1;28458:7:0;28454:26;;28469:8;;;28454:26;28291:200;28265:226;-1:-1:-1;;;;;28537:25:0;;28503:12;28537:25;;;:19;:25;;;;;;28518:4;;28537:25;;;:52;;-1:-1:-1;;;;;;28566:23:0;;;;;;:19;:23;;;;;;;;28537:52;28533:99;;;-1:-1:-1;28615:5:0;28533:99;-1:-1:-1;;;;;28644:13:0;;:7;:13;;;;;;;;;;:23;;28661:6;;28644:7;:23;;28661:6;;28644:23;:::i;:::-;;;;-1:-1:-1;28678:22:0;;-1:-1:-1;28704:7:0;28703:55;;28752:6;28703:55;;;28715:34;28725:4;28731:3;28736:4;28742:6;28715:9;:34::i;:::-;28678:80;;28784:14;28769:7;:11;28777:2;-1:-1:-1;;;;;28769:11:0;-1:-1:-1;;;;;28769:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;28831:2;-1:-1:-1;;;;;28816:34:0;28825:4;-1:-1:-1;;;;;28816:34:0;;28835:14;28816:34;;;;160:25:1;;148:2;133:18;;14:177;28816:34:0;;;;;;;;-1:-1:-1;28868:4:0;;27819:1061;-1:-1:-1;;;;;;;;27819:1061:0:o;21069:442::-;21170:6;;21138:4;;-1:-1:-1;;;;;21162:14:0;;;21170:6;;21162:14;;;;:43;;-1:-1:-1;21199:6:0;;-1:-1:-1;;;;;21193:12:0;;;21199:6;;21193:12;;21162:43;:79;;;;-1:-1:-1;21235:6:0;;-1:-1:-1;;;;;21235:6:0;21222:9;:19;;21162:79;:118;;;;-1:-1:-1;;;;;;21259:21:0;;;;;;:17;:21;;;;;;;;21258:22;21162:118;:159;;;;-1:-1:-1;;;;;;21298:23:0;;;;;;:17;:23;;;;;;;;21297:24;21162:159;:186;;;;-1:-1:-1;;;;;;21338:10:0;;6042:42;21338:10;;21162:186;:219;;;;-1:-1:-1;;;;;;21365:16:0;;;;21162:219;:257;;;;-1:-1:-1;;;;;;21398:21:0;;21414:4;21398:21;;21162:257;:300;;;;-1:-1:-1;21452:9:0;;-1:-1:-1;;;;;21436:26:0;;;21452:9;;;;;21436:26;;21162:300;:341;;;;-1:-1:-1;21493:9:0;;-1:-1:-1;;;;;21479:24:0;;;21493:9;;;;;21479:24;;21162:341;21155:348;21069:442;-1:-1:-1;;;21069:442:0:o;24318:1767::-;7394:6;:13;;-1:-1:-1;;7394:13:0;7403:4;7394:13;;;24402:30:::1;::::0;;::::1;::::0;::::1;::::0;;24425:7:::1;24402:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;7394:6;24447:21;24443:60:::1;;24485:7;;;24443:60;24539:4;24519:26;::::0;;;:11:::1;:26;::::0;;;;;;;24554:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24554:9:0::1;24519:46:::0;;;;;;;;-1:-1:-1;;24519:67:0::1;24515:166;;24623:4;24603:26;::::0;;;:11:::1;:26;::::0;;;;;;;24638:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24638:9:0::1;24603:46:::0;;;;;;;-1:-1:-1;;24603:66:0;;24515:166:::1;24693:17;24778:1;24758:6;:16;;;24714:60;;24738:6;:16;;;24715:39;;:20;:39;;;;:::i;:::-;24714:60;;;;:::i;:::-;24713:66;;;;:::i;:::-;24693:86:::0;-1:-1:-1;24790:15:0::1;24808:32;24693:86:::0;24808:20;:32:::1;:::i;:::-;24885:16;::::0;;24899:1:::1;24885:16:::0;;;;;::::1;::::0;;24790:50;;-1:-1:-1;24861:21:0::1;::::0;24885:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24885:16:0::1;24861:40;;24930:4;24912;24917:1;24912:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24912:23:0::1;;;-1:-1:-1::0;;;;;24912:23:0::1;;;::::0;::::1;24956:9;;;;;;;;;-1:-1:-1::0;;;;;24956:9:0::1;-1:-1:-1::0;;;;;24956:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24946:4;24951:1;24946:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24946:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24989:9:::1;::::0;:186:::1;::::0;;;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;25064:7;;25086:1:::1;::::0;25102:4;;25129::::1;::::0;25149:15:::1;::::0;24989:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24985:233;;25200:7;;;;;;24985:233;25251:21;25230:18;25337:7:::0;25311:22:::1;25324:9:::0;25251:21;25311:22:::1;:::i;:::-;25310:34;;;;:::i;:::-;25283:61:::0;-1:-1:-1;25361:13:0;;25357:417:::1;;25395:9;::::0;25564:21;;25395:239:::1;::::0;;;;25472:4:::1;25395:239;::::0;::::1;29043:34:1::0;29093:18;;;29086:34;;;25524:1:0::1;29136:18:1::0;;;29129:34;;;29179:18;;;29172:34;-1:-1:-1;;;;;25564:21:0;;::::1;29222:19:1::0;;;29215:44;25604:15:0::1;29275:19:1::0;;;29268:35;25395:9:0::1;::::0;;::::1;;::::0;:25:::1;::::0;25428:16;;28954:19:1;;25395:239:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25395:239:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25395:239:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25391:372;;25741:7;;;;;;;;25391:372;-1:-1:-1::0;;25659:40:0::1;::::0;;29799:25:1;;;29855:2;29840:18;;29833:34;;;25659:40:0::1;::::0;-1:-1:-1;29772:18:1;25659:40:0::1;;;;;;;25391:372;25786:30;25800:16:::0;25786:30;::::1;:::i;:::-;;;25847:6;:16;;;25827:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;25949:16:::1;::::0;::::1;::::0;25874:12:::1;::::0;-1:-1:-1;25924:10:0;;25949:20:::1;::::0;25945:133:::1;;25999:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;25999:21:0;;::::1;::::0;26056:5:::1;::::0;26033:16;;25999:67:::1;::::0;;;26033:16;25999:21;26056:5;25999:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25986:80:0;;-1:-1:-1;;25945:133:0::1;24391:1694;;;;;;;;7418:1;-1:-1:-1::0;7430:6:0;:14;;-1:-1:-1;;7430:14:0;;;24318:1767::o;26093:557::-;26176:16;;;;;;;26175:17;26167:65;;;;-1:-1:-1;;;26167:65:0;;30466:2:1;26167:65:0;;;30448:21:1;30505:2;30485:18;;;30478:30;30544:34;30524:18;;;30517:62;30615:5;30595:18;;;30588:33;30638:19;;26167:65:0;30264:399:1;26167:65:0;26248:20;26259:4;26265:2;26248:10;:20::i;:::-;26247:21;:37;;;;-1:-1:-1;26278:6:0;;-1:-1:-1;;;;;26272:12:0;;;26278:6;;26272:12;26247:37;26243:400;;;-1:-1:-1;;;;;26301:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;26301:30:0;;;26327:4;26301:30;;;;;;26346:19;:25;;;;;:32;;;;;;;;;;26393:16;:23;;-1:-1:-1;;26393:23:0;26301:30;26393:23;;;;;26443:9;;;;26431:108;;26487:9;:36;;;;26517:4;26487:36;;;;;26431:108;26553:19;:26;;-1:-1:-1;;26553:26:0;;;;;26599:32;;-1:-1:-1;4400:41:1;;26599:32:0;;4388:2:1;4373:18;26599:32:0;4260:187:1;28888:753:0;28976:7;28996:18;29029:3;29025:205;;;-1:-1:-1;29062:9:0;:16;;;29025:205;;;29100:4;29096:134;;;-1:-1:-1;29134:9:0;:17;;;;;;29096:134;;;-1:-1:-1;29197:9:0;:21;;;;;;29096:134;29252:9;;;;;-1:-1:-1;;;;;29252:9:0;29274:4;29244:35;:108;;;;;29297:13;29314:1;29297:18;:54;;;;29332:13;29349:2;29332:19;29297:54;29240:136;;;-1:-1:-1;29369:4:0;29240:136;29386:17;5903:5;29406:19;29415:10;29406:6;:19;:::i;:::-;:38;;;;:::i;:::-;29386:58;-1:-1:-1;29459:13:0;;29455:141;;29505:4;29489:7;:22;;;;;;;;;;:35;;29515:9;;29489:7;:35;;29515:9;;29489:35;:::i;:::-;;;;-1:-1:-1;;29544:40:0;;160:25:1;;;29567:4:0;;-1:-1:-1;;;;;29544:40:0;;;;;148:2:1;133:18;29544:40:0;;;;;;;29455:141;29615:18;29624:9;29615:6;:18;:::i;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:184::-;983:77;980:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:334;1191:2;1185:9;1247:2;1237:13;;-1:-1:-1;;1233:86:1;1221:99;;1350:18;1335:34;;1371:22;;;1332:62;1329:88;;;1397:18;;:::i;:::-;1433:2;1426:22;1120:334;;-1:-1:-1;1120:334:1:o;1459:183::-;1519:4;1552:18;1544:6;1541:30;1538:56;;;1574:18;;:::i;:::-;-1:-1:-1;1619:1:1;1615:14;1631:4;1611:25;;1459:183::o;1647:154::-;-1:-1:-1;;;;;1726:5:1;1722:54;1715:5;1712:65;1702:93;;1791:1;1788;1781:12;1806:737;1860:5;1913:3;1906:4;1898:6;1894:17;1890:27;1880:55;;1931:1;1928;1921:12;1880:55;1967:6;1954:20;1993:4;2017:60;2033:43;2073:2;2033:43;:::i;:::-;2017:60;:::i;:::-;2111:15;;;2197:1;2193:10;;;;2181:23;;2177:32;;;2142:12;;;;2221:15;;;2218:35;;;2249:1;2246;2239:12;2218:35;2285:2;2277:6;2273:15;2297:217;2313:6;2308:3;2305:15;2297:217;;;2393:3;2380:17;2410:31;2435:5;2410:31;:::i;:::-;2454:18;;2492:12;;;;2330;;2297:217;;;-1:-1:-1;2532:5:1;1806:737;-1:-1:-1;;;;;;1806:737:1:o;2548:477::-;2638:6;2646;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2755:9;2742:23;2788:18;2780:6;2777:30;2774:50;;;2820:1;2817;2810:12;2774:50;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;;2954:2;2943:9;2939:18;2926:32;2967:28;2989:5;2967:28;:::i;3400:607::-;3512:4;3541:2;3570;3559:9;3552:21;3602:6;3596:13;3645:6;3640:2;3629:9;3625:18;3618:34;3670:1;3680:140;3694:6;3691:1;3688:13;3680:140;;;3789:14;;;3785:23;;3779:30;3755:17;;;3774:2;3751:26;3744:66;3709:10;;3680:140;;;3684:3;3869:1;3864:2;3855:6;3844:9;3840:22;3836:31;3829:42;3998:2;-1:-1:-1;;3923:2:1;3915:6;3911:15;3907:88;3896:9;3892:104;3888:113;3880:121;;;;3400:607;;;;:::o;4452:315::-;4520:6;4528;4581:2;4569:9;4560:7;4556:23;4552:32;4549:52;;;4597:1;4594;4587:12;4549:52;4636:9;4623:23;4655:31;4680:5;4655:31;:::i;:::-;4705:5;4757:2;4742:18;;;;4729:32;;-1:-1:-1;;;4452:315:1:o;4772:247::-;4831:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:52;;;4900:1;4897;4890:12;4852:52;4939:9;4926:23;4958:31;4983:5;4958:31;:::i;5024:456::-;5101:6;5109;5117;5170:2;5158:9;5149:7;5145:23;5141:32;5138:52;;;5186:1;5183;5176:12;5138:52;5225:9;5212:23;5244:31;5269:5;5244:31;:::i;:::-;5294:5;-1:-1:-1;5351:2:1;5336:18;;5323:32;5364:33;5323:32;5364:33;:::i;:::-;5024:456;;5416:7;;-1:-1:-1;;;5470:2:1;5455:18;;;;5442:32;;5024:456::o;5485:248::-;5553:6;5561;5614:2;5602:9;5593:7;5589:23;5585:32;5582:52;;;5630:1;5627;5620:12;5582:52;-1:-1:-1;;5653:23:1;;;5723:2;5708:18;;;5695:32;;-1:-1:-1;5485:248:1:o;5738:1138::-;5856:6;5864;5917:2;5905:9;5896:7;5892:23;5888:32;5885:52;;;5933:1;5930;5923:12;5885:52;5973:9;5960:23;6002:18;6043:2;6035:6;6032:14;6029:34;;;6059:1;6056;6049:12;6029:34;6082:61;6135:7;6126:6;6115:9;6111:22;6082:61;:::i;:::-;6072:71;;6162:2;6152:12;;6217:2;6206:9;6202:18;6189:32;6246:2;6236:8;6233:16;6230:36;;;6262:1;6259;6252:12;6230:36;6285:24;;;-1:-1:-1;6340:4:1;6332:13;;6328:27;-1:-1:-1;6318:55:1;;6369:1;6366;6359:12;6318:55;6405:2;6392:16;6428:60;6444:43;6484:2;6444:43;:::i;6428:60::-;6522:15;;;6604:1;6600:10;;;;6592:19;;6588:28;;;6553:12;;;;6628:19;;;6625:39;;;6660:1;6657;6650:12;6625:39;6684:11;;;;6704:142;6720:6;6715:3;6712:15;6704:142;;;6786:17;;6774:30;;6737:12;;;;6824;;;;6704:142;;;6865:5;6855:15;;;;;;;5738:1138;;;;;:::o;7070:159::-;7137:20;;7197:6;7186:18;;7176:29;;7166:57;;7219:1;7216;7209:12;7166:57;7070:159;;;:::o;7234:328::-;7308:6;7316;7324;7377:2;7365:9;7356:7;7352:23;7348:32;7345:52;;;7393:1;7390;7383:12;7345:52;7416:28;7434:9;7416:28;:::i;:::-;7406:38;;7463:37;7496:2;7485:9;7481:18;7463:37;:::i;:::-;7453:47;;7519:37;7552:2;7541:9;7537:18;7519:37;:::i;:::-;7509:47;;7234:328;;;;;:::o;7567:382::-;7632:6;7640;7693:2;7681:9;7672:7;7668:23;7664:32;7661:52;;;7709:1;7706;7699:12;7661:52;7748:9;7735:23;7767:31;7792:5;7767:31;:::i;8350:241::-;8406:6;8459:2;8447:9;8438:7;8434:23;8430:32;8427:52;;;8475:1;8472;8465:12;8427:52;8514:9;8501:23;8533:28;8555:5;8533:28;:::i;8596:180::-;8655:6;8708:2;8696:9;8687:7;8683:23;8679:32;8676:52;;;8724:1;8721;8714:12;8676:52;-1:-1:-1;8747:23:1;;8596:180;-1:-1:-1;8596:180:1:o;8781:256::-;8847:6;8855;8908:2;8896:9;8887:7;8883:23;8879:32;8876:52;;;8924:1;8921;8914:12;8876:52;8947:28;8965:9;8947:28;:::i;:::-;8937:38;;8994:37;9027:2;9016:9;9012:18;8994:37;:::i;:::-;8984:47;;8781:256;;;;;:::o;9042:396::-;9118:6;9126;9179:2;9167:9;9158:7;9154:23;9150:32;9147:52;;;9195:1;9192;9185:12;9147:52;9234:9;9221:23;9253:31;9278:5;9253:31;:::i;:::-;9303:5;-1:-1:-1;9360:2:1;9345:18;;9332:32;9373:33;9332:32;9373:33;:::i;10184:385::-;10270:6;10278;10286;10294;10347:3;10335:9;10326:7;10322:23;10318:33;10315:53;;;10364:1;10361;10354:12;10315:53;-1:-1:-1;;10387:23:1;;;10457:2;10442:18;;10429:32;;-1:-1:-1;10508:2:1;10493:18;;10480:32;;10559:2;10544:18;10531:32;;-1:-1:-1;10184:385:1;-1:-1:-1;10184:385:1:o;11193:484::-;11246:3;11284:5;11278:12;11311:6;11306:3;11299:19;11337:4;11366:2;11361:3;11357:12;11350:19;;11403:2;11396:5;11392:14;11424:1;11434:218;11448:6;11445:1;11442:13;11434:218;;;11513:13;;-1:-1:-1;;;;;11509:62:1;11497:75;;11592:12;;;;11627:15;;;;11470:1;11463:9;11434:218;;;-1:-1:-1;11668:3:1;;11193:484;-1:-1:-1;;;;;11193:484:1:o;11682:342::-;11883:2;11872:9;11865:21;11846:4;11903:56;11955:2;11944:9;11940:18;11932:6;11903:56;:::i;:::-;11895:64;;12009:6;12002:14;11995:22;11990:2;11979:9;11975:18;11968:50;11682:342;;;;;:::o;12029:184::-;12081:77;12078:1;12071:88;12178:4;12175:1;12168:15;12202:4;12199:1;12192:15;12218:482;12307:1;12350:5;12307:1;12364:330;12385:7;12375:8;12372:21;12364:330;;;12504:4;-1:-1:-1;;12432:77:1;12426:4;12423:87;12420:113;;;12513:18;;:::i;:::-;12563:7;12553:8;12549:22;12546:55;;;12583:16;;;;12546:55;12662:22;;;;12622:15;;;;12364:330;;;12368:3;12218:482;;;;;:::o;12705:866::-;12754:5;12784:8;12774:80;;-1:-1:-1;12825:1:1;12839:5;;12774:80;12873:4;12863:76;;-1:-1:-1;12910:1:1;12924:5;;12863:76;12955:4;12973:1;12968:59;;;;13041:1;13036:130;;;;12948:218;;12968:59;12998:1;12989:10;;13012:5;;;13036:130;13073:3;13063:8;13060:17;13057:43;;;13080:18;;:::i;:::-;-1:-1:-1;;13136:1:1;13122:16;;13151:5;;12948:218;;13250:2;13240:8;13237:16;13231:3;13225:4;13222:13;13218:36;13212:2;13202:8;13199:16;13194:2;13188:4;13185:12;13181:35;13178:77;13175:159;;;-1:-1:-1;13287:19:1;;;13319:5;;13175:159;13366:34;13391:8;13385:4;13366:34;:::i;:::-;13496:6;-1:-1:-1;;13424:79:1;13415:7;13412:92;13409:118;;;13507:18;;:::i;:::-;13545:20;;12705:866;-1:-1:-1;;;12705:866:1:o;13576:140::-;13634:5;13663:47;13704:4;13694:8;13690:19;13684:4;13663:47;:::i;13721:274::-;13761:1;13787;13777:189;;13822:77;13819:1;13812:88;13923:4;13920:1;13913:15;13951:4;13948:1;13941:15;13777:189;-1:-1:-1;13980:9:1;;13721:274::o;14000:228::-;14040:7;14166:1;-1:-1:-1;;14094:74:1;14091:1;14088:81;14083:1;14076:9;14069:17;14065:105;14062:131;;;14173:18;;:::i;:::-;-1:-1:-1;14213:9:1;;14000:228::o;14233:128::-;14300:9;;;14321:11;;;14318:37;;;14335:18;;:::i;15133:184::-;15185:77;15182:1;15175:88;15282:4;15279:1;15272:15;15306:4;15303:1;15296:15;15322:175;15359:3;15403:4;15396:5;15392:16;15432:4;15423:7;15420:17;15417:43;;15440:18;;:::i;:::-;15489:1;15476:15;;15322:175;-1:-1:-1;;15322:175:1:o;15502:125::-;15567:9;;;15588:10;;;15585:36;;;15601:18;;:::i;16330:168::-;16397:6;16423:10;;;16435;;;16419:27;;16458:11;;;16455:37;;;16472:18;;:::i;:::-;16455:37;16330:168;;;;:::o;21745:251::-;21815:6;21868:2;21856:9;21847:7;21843:23;21839:32;21836:52;;;21884:1;21881;21874:12;21836:52;21916:9;21910:16;21935:31;21960:5;21935:31;:::i;23911:245::-;23978:6;24031:2;24019:9;24010:7;24006:23;24002:32;23999:52;;;24047:1;24044;24037:12;23999:52;24079:9;24073:16;24098:28;24120:5;24098:28;:::i;28069:605::-;28368:6;28357:9;28350:25;28411:6;28406:2;28395:9;28391:18;28384:34;28454:3;28449:2;28438:9;28434:18;28427:31;28331:4;28475:57;28527:3;28516:9;28512:19;28504:6;28475:57;:::i;:::-;-1:-1:-1;;;;;28568:55:1;;;;28563:2;28548:18;;28541:83;-1:-1:-1;28655:3:1;28640:19;28633:35;28467:65;28069:605;-1:-1:-1;;;28069:605:1:o;29314:306::-;29402:6;29410;29418;29471:2;29459:9;29450:7;29446:23;29442:32;29439:52;;;29487:1;29484;29477:12;29439:52;29516:9;29510:16;29500:26;;29566:2;29555:9;29551:18;29545:25;29535:35;;29610:2;29599:9;29595:18;29589:25;29579:35;;29314:306;;;;;:::o;29878:171::-;29946:6;29985:10;;;29973;;;29969:27;;30008:12;;;30005:38;;;30023:18;;:::i

Swarm Source

ipfs://86f291d7216f9d9c3d2df41774732af92df7db1caef77d2ca9b7518bb53962ab
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.