ETH Price: $3,318.81 (+1.82%)
Gas: 3 Gwei

Token

Cryptter (CTR)
 

Overview

Max Total Supply

1,000,000,000,000 CTR

Holders

169

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
4digit.eth
Balance
6,810,810,809 CTR

Value
$0.00
0x2592552707b9575afb566178134118a69d97fe29
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:
Cryptter

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-18
*/

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

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  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);
}

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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    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 _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
}

contract Cryptter is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) _isExcludedFromFees;
    mapping (address => bool) _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;

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

    struct StaticValuesStruct {
        uint16 maxBuyTaxes;
        uint16 maxSellTaxes;
        uint16 maxTransferTaxes;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 charity;
        uint16 development;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 1000,
        sellFee: 1400,
        transferFee: 1200
        });

    Ratios public _ratios = Ratios({
        liquidity: 30,
        marketing: 30,
        charity: 10,
        development: 30,
        total: 100
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxBuyTaxes: 2000,
        maxSellTaxes: 2000,
        maxTransferTaxes: 2000,
        masterTaxDivisor: 10000
        });

    IRouter02 public dexRouter;
    address public lpPair;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x6A31EBDc646B71F2B4Dbf0fe1d2AA7daf5e0ac18),
        charity: payable(0x2234223Da17e67b57BA56bc3f967d531812bf4ce),
        development: payable(0x2fc423f11d28dc4868d533E4c2A4E9317b9dB94A)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 30 seconds;
    uint256 private lastSwap;
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;
    uint256 public swapThreshold;
    uint256 public swapAmount;

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

    bool private contractInitialized;

    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 == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else {
            revert();
        }

        _approve(msg.sender, 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 {}

    function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == amounts.length, "2");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * (10**_decimals);
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 10) / 10000;
        _maxTxAmount = (_tTotal * 1) / 100;
        _maxWalletSize = (_tTotal * 1) / 100;
        contractInitialized = true;     
        _tOwned[owner()] = _tTotal;
        emit Transfer(address(0), owner(), _tTotal);

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

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _transfer(owner(), accounts[i], amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.
    function owner() public view returns (address) {
        return _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) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view 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(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        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() public 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        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 == false) {
            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(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    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 removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

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

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

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

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

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

    function setRatios(uint16 liquidity, uint16 marketing, uint16 charity, uint16 development) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.charity = charity;
        _ratios.development = development;
        _ratios.total = liquidity + marketing + charity + development;
    }

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

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

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

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

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

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

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

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

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor, uint256 time) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        contractSwapTimer = time;
    }

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

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

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

    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");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 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.total) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

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

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }
        ratios.total -= ratios.liquidity;
        amtBalance -= liquidityBalance;
        uint256 charityBalance = (ratios.charity * amtBalance) / ratios.total;
        uint256 developmentBalance = (ratios.development * amtBalance) / ratios.total;
        uint256 marketingBalance = amtBalance - (charityBalance + developmentBalance);
        if (ratios.charity > 0) {
            _taxWallets.charity.transfer(charityBalance);
        }
        if (ratios.development > 0) {
            _taxWallets.development.transfer(developmentBalance);
        }
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[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;
    }

    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 {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

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

            if(!checked) {
                revert();
            }
        }

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

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / staticVals.masterTaxDivisor;

        _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":"charity","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"charity","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","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":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"charity","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxBuyTaxes","type":"uint16"},{"internalType":"uint16","name":"maxSellTaxes","type":"uint16"},{"internalType":"uint16","name":"maxTransferTaxes","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

600060038190556103e860805261057860a0526104b060c052600d805465ffffffffffff19166504b0057803e8179055601e60e0819052610100819052600a61012052610140819052606461016052600e80546001600160501b0319166864001e000a001e001e1790556107d06101808190526101a08190526101c0526127106101e052600f80546001600160401b03191667271007d007d007d0179055610260604052736a31ebdc646b71f2b4dbf0fe1d2aa7daf5e0ac18610200819052732234223da17e67b57ba56bc3f967d531812bf4ce610220819052732fc423f11d28dc4868d533e4c2a4e9317b9db94a610240819052601280546001600160a01b0319908116909417905560138054841690921790915560148054831690911790556015805461ff0019169055601691909155601c805461ffff19169055815433911617905546603814156200017a57601080546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001f7565b4660611415620001b057601080546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001f7565b4660011480620001c05750466004145b15620001f257601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001f7565b600080fd5b601054620002139033906001600160a01b0316600019620002fe565b6010546200022f9030906001600160a01b0316600019620002fe565b600160056000620002486000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600790620002d06000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620003ff565b6001600160a01b038316620003505760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200039e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000347565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b614e58806200040f6000396000f3fe6080604052600436106103855760003560e01c806355dbc369116101d1578063a457c2d711610102578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610b2f578063f94aa1b414610b4f578063fdb78c0e14610ba6578063fe575a8714610bc557600080fd5b8063e4fcfd1814610ac4578063e8a0e3f914610ada578063eafb5a3c14610afa578063ee5d9c2d14610b1a57600080fd5b8063cab5ebea116100dc578063cab5ebea146109bc578063cf847706146109dc578063dd62ed3e14610a5e578063de3a3b6914610aa457600080fd5b8063a457c2d71461095c578063a9059cbb1461097c578063c6a276c21461099c57600080fd5b806375cb1bd11161016f5780638a63bd9b116101495780638a63bd9b1461091d5780638a8c523c146109325780638da5cb5b146108ff57806395d89b411461094757600080fd5b806375cb1bd1146108bf57806380c581d1146108df578063893d20e8146108ff57600080fd5b80635cce86cd116101ab5780635cce86cd146108265780636ebd00781461085f57806370a0823114610874578063715018a6146108aa57600080fd5b806355dbc369146107d1578063590ffdce146107e65780635c24b0741461080657600080fd5b80632610eaca116102b657806336fddb04116102545780634ada218b116102235780634ada218b1461073f5780634fb2e45d146107595780634fbee1931461077957806350a8e016146107b257600080fd5b806336fddb04146106bf57806339509351146106df5780633f3cf56c146106ff578063452ed4f11461071f57600080fd5b8063313ce56711610290578063313ce5671461063d57806332cde6641461065f57806333251a0b1461067f57806334cd82601461069f57600080fd5b80632610eaca146105e757806329dd8798146106075780632e8fa8211461062757600080fd5b8063092316021161032357806318160ddd116102fd57806318160ddd146105275780631b6afa2d1461053c57806323b872dd146105a757806326003957146105c757600080fd5b806309231602146104c2578063095ea7b3146104e25780630fa604e41461051257600080fd5b8063069d955f1161035f578063069d955f1461040a57806306fdde03146104605780630712d165146104825780630758d924146104a257600080fd5b806303fd2a45146103915780630445b667146103c457806305bbedb6146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da601a5481565b6040519081526020016103bb565b3480156103f457600080fd5b50610408610403366004614439565b610be5565b005b34801561041657600080fd5b50600d5461043b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561046c57600080fd5b50610475610cbe565b6040516103bb91906144b7565b34801561048e57600080fd5b5061040861049d366004614501565b610d50565b3480156104ae57600080fd5b506010546103a7906001600160a01b031681565b3480156104ce57600080fd5b506104086104dd366004614555565b610ea0565b3480156104ee57600080fd5b506105026104fd36600461456e565b610fbf565b60405190151581526020016103bb565b34801561051e57600080fd5b506103da610fd6565b34801561053357600080fd5b506103da610ffc565b34801561054857600080fd5b50600f546105799061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103bb565b3480156105b357600080fd5b506105026105c236600461459a565b611015565b3480156105d357600080fd5b506104086105e23660046145db565b61108d565b3480156105f357600080fd5b50610408610602366004614658565b611198565b34801561061357600080fd5b506104086106223660046146bc565b6112b8565b34801561063357600080fd5b506103da601b5481565b34801561064957600080fd5b50600b5460405160ff90911681526020016103bb565b34801561066b57600080fd5b5061040861067a366004614718565b6113a1565b34801561068b57600080fd5b5061040861069a36600461475b565b6114f6565b3480156106ab57600080fd5b506104086106ba366004614778565b611596565b3480156106cb57600080fd5b506104086106da3660046147b3565b611626565b3480156106eb57600080fd5b506105026106fa36600461456e565b61169f565b34801561070b57600080fd5b5061040861071a3660046145db565b6116db565b34801561072b57600080fd5b506011546103a7906001600160a01b031681565b34801561074b57600080fd5b50601c546105029060ff1681565b34801561076557600080fd5b5061040861077436600461475b565b6117e6565b34801561078557600080fd5b5061050261079436600461475b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107be57600080fd5b50601c5461050290610100900460ff1681565b3480156107dd57600080fd5b506103da6119f4565b3480156107f257600080fd5b506104086108013660046147b3565b611a6d565b34801561081257600080fd5b5061040861082136600461475b565b611ae6565b34801561083257600080fd5b5061050261084136600461475b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561086b57600080fd5b506103da611c25565b34801561088057600080fd5b506103da61088f36600461475b565b6001600160a01b031660009081526001602052604090205490565b3480156108b657600080fd5b50610408611c46565b3480156108cb57600080fd5b506104086108da3660046147e1565b611cf6565b3480156108eb57600080fd5b506104086108fa3660046147b3565b611d91565b34801561090b57600080fd5b506000546001600160a01b03166103a7565b34801561092957600080fd5b50610502611f3b565b34801561093e57600080fd5b50610408611faa565b34801561095357600080fd5b5061047561219a565b34801561096857600080fd5b5061050261097736600461456e565b6121a9565b34801561098857600080fd5b5061050261099736600461456e565b6121e0565b3480156109a857600080fd5b506104086109b736600461475b565b6121f7565b3480156109c857600080fd5b506104086109d736600461482c565b612297565b3480156109e857600080fd5b50600e54610a299061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103bb565b348015610a6a57600080fd5b506103da610a79366004614849565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ab057600080fd5b50610408610abf366004614877565b612339565b348015610ad057600080fd5b506103da60165481565b348015610ae657600080fd5b50610408610af53660046148e4565b612aed565b348015610b0657600080fd5b50610408610b1536600461475b565b612c51565b348015610b2657600080fd5b50610408613000565b348015610b3b57600080fd5b50610408610b4a3660046147b3565b6130e3565b348015610b5b57600080fd5b50601254601354601454610b7c926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103bb565b348015610bb257600080fd5b5060155461050290610100900460ff1681565b348015610bd157600080fd5b50610502610be036600461475b565b61318b565b6000546001600160a01b03163314610c385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610c8890859085906004016149b0565b600060405180830381600087803b158015610ca257600080fd5b505af1158015610cb6573d6000803e3d6000fd5b505050505050565b606060098054610ccd906149d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf9906149d4565b8015610d465780601f10610d1b57610100808354040283529160200191610d46565b820191906000526020600020905b815481529060010190602001808311610d2957829003601f168201915b5050505050905090565b6000546001600160a01b03163314610d9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b600e805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610e468587614a57565b610e509190614a57565b610e5a9190614a57565b600e805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff90921691909117905550505050565b6000546001600160a01b03163314610eee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b604b811015610f3f5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c2f565b601c546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b5050505050565b6000610fcc338484613219565b5060015b92915050565b600b54600090610fea9060ff16600a614b61565b601954610ff79190614b70565b905090565b6000600c546000141561100e57600080fd5b50600c5490565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461107a576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611074908490614bab565b90915550505b611085848484613326565b949350505050565b6000546001600160a01b031633146110db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6103e8600c546110eb9190614b70565b8183600c546110fa9190614bc2565b6111049190614b70565b10156111785760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c2f565b8082600c546111879190614bc2565b6111919190614b70565b6019555050565b80518251146111e95760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c2f565b60005b82518160ff1610156112b357818160ff168151811061120d5761120d614be1565b6020026020010151611234336001600160a01b031660009081526001602052604090205490565b101561123f57600080fd5b6112a033848360ff168151811061125857611258614be1565b6020908102919091010151600b546112749060ff16600a614b61565b858560ff168151811061128957611289614be1565b602002602001015161129b9190614bc2565b613326565b50806112ab81614c10565b9150506111ec565b505050565b6000546001600160a01b031633146113065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561138357600080fd5b505af1158015611397573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b600f5461ffff908116908416118015906114195750600f5461ffff62010000909104811690831611155b80156114375750600f5461ffff640100000000909104811690821611155b6114835760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c2f565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f8a565b6000546001600160a01b031633146115e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b8385600c546115f39190614bc2565b6115fd9190614b70565b601a55600c548290611610908590614bc2565b61161a9190614b70565b601b5560165550505050565b6000546001600160a01b031633146116745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610fcc9185906116d6908690614c30565b613219565b6000546001600160a01b031633146117295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6103e8600c546117399190614b70565b8183600c546117489190614bc2565b6117529190614b70565b10156117c65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c2f565b8082600c546117d59190614bc2565b6117df9190614b70565b6018555050565b6000546001600160a01b031633146118345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6001600160a01b0381166118b05760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c2f565b6001600160a01b03811661dead14156119315760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c2f565b6000805461194a916001600160a01b0390911690611a6d565b611955816001611a6d565b600080546001600160a01b03168152600160205260409020541561199c57600080546001600160a01b0316808252600160205260409091205461199a91908390613326565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601c60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff79190614c48565b6000546001600160a01b03163314611abb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c54610100900460ff1615611b8c5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610c2f565b6001600160a01b038116301415611be55760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c2f565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611c399060ff16600a614b61565b601854610ff79190614b70565b6000546001600160a01b03163314611c945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b60008054611cad916001600160a01b0390911690611a6d565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611d445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6013805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039384161790915560148054821693831693909317909255601280549092169216919091179055565b6000546001600160a01b03163314611ddf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b80611e56576001600160a01b03828116600081815260026020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c88565b60035415611ebd576203f48060035442611e709190614bab565b11611ebd5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c2f565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c88565b5050565b600080546001600160a01b03163314611f8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601054611fa49030906001600160a01b0316600019613219565b50600190565b6000546001600160a01b03163314611ff85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c5460ff161561204b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c2f565b601c54610100900460ff166120a25760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c2f565b601c546201000090046001600160a01b03166120e857601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54601154600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561217957600080fd5b505af192505050801561218a575060015b50601c805460ff19166001179055565b6060600a8054610ccd906149d4565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610fcc9185906116d6908690614bab565b60006121ed338484613326565b5060019392505050565b6000546001600160a01b031633146122455760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f8a565b6000546001600160a01b031633146122e55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601580548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061232e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c54760100000000000000000000000000000000000000000000900460ff16156123f45760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c2f565b81518351146124455760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610c2f565b601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b1580156124d757600080fd5b505af19250505080156124e8575060015b50601c60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561255d57506040513d6000823e601f3d908101601f1916820160405261255a9190810190614cc5565b60015b6125a95760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c2f565b83516125bc906009906020870190614285565b5082516125d090600a906020860190614285565b506008829055600b805460ff191660ff83169081179091556125f390600a614b61565b6008546126009190614bc2565b600c5550505050601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267e9190614d40565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127039190614d40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278b9190614d40565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c54612710906127e2906005614bc2565b6127ec9190614b70565b601a55600c546127109061280190600a614bc2565b61280b9190614b70565b601b55600c5460649061281f906001614bc2565b6128299190614b70565b601855600c5460649061283d906001614bc2565b6128479190614b70565b601955601c80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600c54600160006128a46000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556128d06000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405161291791815260200190565b60405180910390a36010546129399030906001600160a01b0316600019613219565b60005b83518110156129c957600b546000906129599060ff16600a614b61565b84838151811061296b5761296b614be1565b602002602001015161297d9190614bc2565b90506129b46129946000546001600160a01b031690565b8684815181106129a6576129a6614be1565b602002602001015183613326565b505080806129c190614d5d565b91505061293c565b506129f56129df6000546001600160a01b031690565b3061129b61088f6000546001600160a01b031690565b506010546001600160a01b031663f305d7194730612a28816001600160a01b031660009081526001602052604090205490565b600080612a3d6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612abd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ae29190614d78565b5050506112b3611faa565b81518351148015612aff575080518251145b612b4b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c2f565b60005b83518160ff161015612c4b57818160ff1681518110612b6f57612b6f614be1565b6020026020010151838260ff1681518110612b8c57612b8c614be1565b6020026020010151600c54612ba19190614bc2565b612bab9190614b70565b336000908152600160205260409020541015612bc657600080fd5b612c3833858360ff1681518110612bdf57612bdf614be1565b6020026020010151848460ff1681518110612bfc57612bfc614be1565b6020026020010151868560ff1681518110612c1957612c19614be1565b6020026020010151600c54612c2e9190614bc2565b61129b9190614b70565b5080612c4381614c10565b915050612b4e565b50505050565b6000546001600160a01b03163314612c9f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d089190614d40565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d799190614d40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e009190614d40565b90506001600160a01b038116612f9e57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e729190614d40565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee39190614d40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190614d40565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612fc7565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112b3903090600019613219565b6000546001600160a01b0316331461304e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c54610100900460ff16156130a65760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c2f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156130e0573d6000803e3d6000fd5b50565b6000546001600160a01b031633146131315760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610c88565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156131f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190614da6565b6001600160a01b03831661326f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c2f565b6001600160a01b0382166132c55760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c2f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166133a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c2f565b6001600160a01b0383166134205760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c2f565b600082116134965760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c2f565b6134a084846137e5565b156136f757601c5460ff166134f75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c2f565b6001600160a01b03841660009081526002602052604090205460ff168061353657506001600160a01b03831660009081526002602052604090205460ff165b156135fa576001600160a01b03841660009081526006602052604090205460ff1615801561357d57506001600160a01b03831660009081526006602052604090205460ff16155b156135fa576018548211156135fa5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c2f565b6010546001600160a01b0384811691161480159061363157506001600160a01b03831660009081526002602052604090205460ff16155b156136f7576001600160a01b03831660009081526006602052604090205460ff166136f75760195482613679856001600160a01b031660009081526001602052604090205490565b6136839190614c30565b11156136f75760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c2f565b6001600160a01b03841660009081526005602052604090205460019060ff168061373957506001600160a01b03841660009081526005602052604090205460ff165b15613742575060005b6001600160a01b03841660009081526002602052604090205460ff16156137d05760155460ff1615801561377d5750601554610100900460ff165b156137d057426016546017546137939190614c30565b10156137d05730600090815260016020526040902054601a5481106137ce57601b5481106137c05750601b545b6137c9816138ba565b426017555b505b6137dc85858584613dd1565b95945050505050565b600080546001600160a01b0384811691161480159061381257506000546001600160a01b03838116911614155b801561382957506000546001600160a01b03163214155b801561384e57506001600160a01b03821660009081526007602052604090205460ff16155b801561387357506001600160a01b03831660009081526007602052604090205460ff16155b801561388a57506001600160a01b03821661dead14155b801561389e57506001600160a01b03821615155b80156138b357506001600160a01b0383163014155b9392505050565b6015805460ff191660011790556040805160a081018252600e5461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000008104831660608301526801000000000000000090049091166080820181905261392b5750613dc4565b3060009081526004602090815260408083206010546001600160a01b0316845290915290205460001914613984573060009081526004602090815260408083206010546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836000015161ffff16856139a59190614bc2565b6139af9190614b70565b6139b99190614b70565b905060006139c78285614bab565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a0157613a01614be1565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a979190614d40565b81600181518110613aaa57613aaa614be1565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613b09908590600090869030904290600401614dc3565b600060405180830381600087803b158015613b2357600080fd5b505af1158015613b37573d6000803e3d6000fd5b5047925060009150849050613b4c8684614bc2565b613b569190614b70565b90508415613c47576010546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c0a9190614d78565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8551608087018051613c5a908390614dff565b61ffff16905250613c6b8183614bab565b91506000866080015161ffff1683886040015161ffff16613c8c9190614bc2565b613c969190614b70565b90506000876080015161ffff1684896060015161ffff16613cb79190614bc2565b613cc19190614b70565b90506000613ccf8284614c30565b613cd99086614bab565b60408a015190915061ffff1615613d26576013546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613d24573d6000803e3d6000fd5b505b606089015161ffff1615613d70576014546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613d6e573d6000803e3d6000fd5b505b602089015161ffff1615613dba576012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613db8573d6000803e3d6000fd5b505b5050505050505050505b506015805460ff19169055565b601c54600090610100900460ff16613e7d57613ded858561400d565b601c54610100900460ff16158015613e0a5750613e0a85856137e5565b15613e7d5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c2f565b613e8785856137e5565b15613f3a57601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613f23575060408051601f3d908101601f19168201909252613f2091810190614da6565b60015b613f2c57600080fd5b905080613f3857600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613f62908490614bab565b909155506000905082613f755783613f80565b613f8086868661416b565b6001600160a01b038616600090815260016020526040812080549293508392909190613fad908490614c30565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ff991815260200190565b60405180910390a350600195945050505050565b601c54610100900460ff161561408b5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c2f565b61409582826137e5565b1580156140af57506011546001600160a01b038281169116145b15611f37576001600160a01b038083166000908152600760205260409020805460ff19166001179055601c805461ff00191661010017908190556201000090041661412457601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff161561419b5750600d5461ffff166141e0565b6001600160a01b03841660009081526002602052604090205460ff16156141cf5750600d5462010000900461ffff166141e0565b50600d54640100000000900461ffff165b600f546000906601000000000000900461ffff166141fe8386614bc2565b6142089190614b70565b3060009081526001602052604081208054929350839290919061422c908490614c30565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361427b8185614bab565b9695505050505050565b828054614291906149d4565b90600052602060002090601f0160209004810192826142b357600085556142f9565b82601f106142cc57805160ff19168380011785556142f9565b828001600101855582156142f9579182015b828111156142f95782518255916020019190600101906142de565b50614305929150614309565b5090565b5b80821115614305576000815560010161430a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143765761437661431e565b604052919050565b600067ffffffffffffffff8211156143985761439861431e565b5060051b60200190565b6001600160a01b03811681146130e057600080fd5b600082601f8301126143c857600080fd5b813560206143dd6143d88361437e565b61434d565b82815260059290921b840181019181810190868411156143fc57600080fd5b8286015b84811015614420578035614413816143a2565b8352918301918301614400565b509695505050505050565b80151581146130e057600080fd5b6000806040838503121561444c57600080fd5b823567ffffffffffffffff81111561446357600080fd5b61446f858286016143b7565b92505060208301356144808161442b565b809150509250929050565b60005b838110156144a657818101518382015260200161448e565b83811115612c4b5750506000910152565b60208152600082518060208401526144d681604085016020870161448b565b601f01601f19169190910160400192915050565b803561ffff811681146144fc57600080fd5b919050565b6000806000806080858703121561451757600080fd5b614520856144ea565b935061452e602086016144ea565b925061453c604086016144ea565b915061454a606086016144ea565b905092959194509250565b60006020828403121561456757600080fd5b5035919050565b6000806040838503121561458157600080fd5b823561458c816143a2565b946020939093013593505050565b6000806000606084860312156145af57600080fd5b83356145ba816143a2565b925060208401356145ca816143a2565b929592945050506040919091013590565b600080604083850312156145ee57600080fd5b50508035926020909101359150565b600082601f83011261460e57600080fd5b8135602061461e6143d88361437e565b82815260059290921b8401810191818101908684111561463d57600080fd5b8286015b848110156144205780358352918301918301614641565b6000806040838503121561466b57600080fd5b823567ffffffffffffffff8082111561468357600080fd5b61468f868387016143b7565b935060208501359150808211156146a557600080fd5b506146b2858286016145fd565b9150509250929050565b600080600080608085870312156146d257600080fd5b84356146dd8161442b565b935060208501356146ed8161442b565b925060408501356146fd8161442b565b9150606085013561470d8161442b565b939692955090935050565b60008060006060848603121561472d57600080fd5b614736846144ea565b9250614744602085016144ea565b9150614752604085016144ea565b90509250925092565b60006020828403121561476d57600080fd5b81356138b3816143a2565b600080600080600060a0868803121561479057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156147c657600080fd5b82356147d1816143a2565b915060208301356144808161442b565b6000806000606084860312156147f657600080fd5b8335614801816143a2565b92506020840135614811816143a2565b91506040840135614821816143a2565b809150509250925092565b60006020828403121561483e57600080fd5b81356138b38161442b565b6000806040838503121561485c57600080fd5b8235614867816143a2565b91506020830135614480816143a2565b60008060006060848603121561488c57600080fd5b833567ffffffffffffffff808211156148a457600080fd5b6148b0878388016143b7565b945060208601359150808211156148c657600080fd5b506148d3868287016145fd565b9250506040840135614821816143a2565b6000806000606084860312156148f957600080fd5b833567ffffffffffffffff8082111561491157600080fd5b61491d878388016143b7565b9450602086013591508082111561493357600080fd5b61493f878388016145fd565b9350604086013591508082111561495557600080fd5b50614962868287016145fd565b9150509250925092565b600081518084526020808501945080840160005b838110156149a55781516001600160a01b031687529582019590820190600101614980565b509495945050505050565b6040815260006149c3604083018561496c565b905082151560208301529392505050565b600181811c908216806149e857607f821691505b60208210811415614a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818516808303821115614a7457614a74614a28565b01949350505050565b600181815b80851115614ab8578160001904821115614a9e57614a9e614a28565b80851615614aab57918102915b93841c9390800290614a82565b509250929050565b600082614acf57506001610fd0565b81614adc57506000610fd0565b8160018114614af25760028114614afc57614b18565b6001915050610fd0565b60ff841115614b0d57614b0d614a28565b50506001821b610fd0565b5060208310610133831016604e8410600b8410161715614b3b575081810a610fd0565b614b458383614a7d565b8060001904821115614b5957614b59614a28565b029392505050565b60006138b360ff841683614ac0565b600082614ba6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015614bbd57614bbd614a28565b500390565b6000816000190483118215151615614bdc57614bdc614a28565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614c2757614c27614a28565b60010192915050565b60008219821115614c4357614c43614a28565b500190565b600060208284031215614c5a57600080fd5b5051919050565b600082601f830112614c7257600080fd5b815167ffffffffffffffff811115614c8c57614c8c61431e565b614c9f6020601f19601f8401160161434d565b818152846020838601011115614cb457600080fd5b61108582602083016020870161448b565b60008060008060808587031215614cdb57600080fd5b845167ffffffffffffffff80821115614cf357600080fd5b614cff88838901614c61565b95506020870151915080821115614d1557600080fd5b50614d2287828801614c61565b93505060408501519150606085015160ff8116811461470d57600080fd5b600060208284031215614d5257600080fd5b81516138b3816143a2565b6000600019821415614d7157614d71614a28565b5060010190565b600080600060608486031215614d8d57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614db857600080fd5b81516138b38161442b565b85815284602082015260a060408201526000614de260a083018661496c565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff83811690831681811015614e1a57614e1a614a28565b03939250505056fea26469706673582212204a372bfce08af0d8a21998613d8671e3cb47c4aa9633826cd5e77e928c2586e264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806355dbc369116101d1578063a457c2d711610102578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610b2f578063f94aa1b414610b4f578063fdb78c0e14610ba6578063fe575a8714610bc557600080fd5b8063e4fcfd1814610ac4578063e8a0e3f914610ada578063eafb5a3c14610afa578063ee5d9c2d14610b1a57600080fd5b8063cab5ebea116100dc578063cab5ebea146109bc578063cf847706146109dc578063dd62ed3e14610a5e578063de3a3b6914610aa457600080fd5b8063a457c2d71461095c578063a9059cbb1461097c578063c6a276c21461099c57600080fd5b806375cb1bd11161016f5780638a63bd9b116101495780638a63bd9b1461091d5780638a8c523c146109325780638da5cb5b146108ff57806395d89b411461094757600080fd5b806375cb1bd1146108bf57806380c581d1146108df578063893d20e8146108ff57600080fd5b80635cce86cd116101ab5780635cce86cd146108265780636ebd00781461085f57806370a0823114610874578063715018a6146108aa57600080fd5b806355dbc369146107d1578063590ffdce146107e65780635c24b0741461080657600080fd5b80632610eaca116102b657806336fddb04116102545780634ada218b116102235780634ada218b1461073f5780634fb2e45d146107595780634fbee1931461077957806350a8e016146107b257600080fd5b806336fddb04146106bf57806339509351146106df5780633f3cf56c146106ff578063452ed4f11461071f57600080fd5b8063313ce56711610290578063313ce5671461063d57806332cde6641461065f57806333251a0b1461067f57806334cd82601461069f57600080fd5b80632610eaca146105e757806329dd8798146106075780632e8fa8211461062757600080fd5b8063092316021161032357806318160ddd116102fd57806318160ddd146105275780631b6afa2d1461053c57806323b872dd146105a757806326003957146105c757600080fd5b806309231602146104c2578063095ea7b3146104e25780630fa604e41461051257600080fd5b8063069d955f1161035f578063069d955f1461040a57806306fdde03146104605780630712d165146104825780630758d924146104a257600080fd5b806303fd2a45146103915780630445b667146103c457806305bbedb6146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da601a5481565b6040519081526020016103bb565b3480156103f457600080fd5b50610408610403366004614439565b610be5565b005b34801561041657600080fd5b50600d5461043b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561046c57600080fd5b50610475610cbe565b6040516103bb91906144b7565b34801561048e57600080fd5b5061040861049d366004614501565b610d50565b3480156104ae57600080fd5b506010546103a7906001600160a01b031681565b3480156104ce57600080fd5b506104086104dd366004614555565b610ea0565b3480156104ee57600080fd5b506105026104fd36600461456e565b610fbf565b60405190151581526020016103bb565b34801561051e57600080fd5b506103da610fd6565b34801561053357600080fd5b506103da610ffc565b34801561054857600080fd5b50600f546105799061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103bb565b3480156105b357600080fd5b506105026105c236600461459a565b611015565b3480156105d357600080fd5b506104086105e23660046145db565b61108d565b3480156105f357600080fd5b50610408610602366004614658565b611198565b34801561061357600080fd5b506104086106223660046146bc565b6112b8565b34801561063357600080fd5b506103da601b5481565b34801561064957600080fd5b50600b5460405160ff90911681526020016103bb565b34801561066b57600080fd5b5061040861067a366004614718565b6113a1565b34801561068b57600080fd5b5061040861069a36600461475b565b6114f6565b3480156106ab57600080fd5b506104086106ba366004614778565b611596565b3480156106cb57600080fd5b506104086106da3660046147b3565b611626565b3480156106eb57600080fd5b506105026106fa36600461456e565b61169f565b34801561070b57600080fd5b5061040861071a3660046145db565b6116db565b34801561072b57600080fd5b506011546103a7906001600160a01b031681565b34801561074b57600080fd5b50601c546105029060ff1681565b34801561076557600080fd5b5061040861077436600461475b565b6117e6565b34801561078557600080fd5b5061050261079436600461475b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107be57600080fd5b50601c5461050290610100900460ff1681565b3480156107dd57600080fd5b506103da6119f4565b3480156107f257600080fd5b506104086108013660046147b3565b611a6d565b34801561081257600080fd5b5061040861082136600461475b565b611ae6565b34801561083257600080fd5b5061050261084136600461475b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561086b57600080fd5b506103da611c25565b34801561088057600080fd5b506103da61088f36600461475b565b6001600160a01b031660009081526001602052604090205490565b3480156108b657600080fd5b50610408611c46565b3480156108cb57600080fd5b506104086108da3660046147e1565b611cf6565b3480156108eb57600080fd5b506104086108fa3660046147b3565b611d91565b34801561090b57600080fd5b506000546001600160a01b03166103a7565b34801561092957600080fd5b50610502611f3b565b34801561093e57600080fd5b50610408611faa565b34801561095357600080fd5b5061047561219a565b34801561096857600080fd5b5061050261097736600461456e565b6121a9565b34801561098857600080fd5b5061050261099736600461456e565b6121e0565b3480156109a857600080fd5b506104086109b736600461475b565b6121f7565b3480156109c857600080fd5b506104086109d736600461482c565b612297565b3480156109e857600080fd5b50600e54610a299061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103bb565b348015610a6a57600080fd5b506103da610a79366004614849565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ab057600080fd5b50610408610abf366004614877565b612339565b348015610ad057600080fd5b506103da60165481565b348015610ae657600080fd5b50610408610af53660046148e4565b612aed565b348015610b0657600080fd5b50610408610b1536600461475b565b612c51565b348015610b2657600080fd5b50610408613000565b348015610b3b57600080fd5b50610408610b4a3660046147b3565b6130e3565b348015610b5b57600080fd5b50601254601354601454610b7c926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103bb565b348015610bb257600080fd5b5060155461050290610100900460ff1681565b348015610bd157600080fd5b50610502610be036600461475b565b61318b565b6000546001600160a01b03163314610c385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610c8890859085906004016149b0565b600060405180830381600087803b158015610ca257600080fd5b505af1158015610cb6573d6000803e3d6000fd5b505050505050565b606060098054610ccd906149d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf9906149d4565b8015610d465780601f10610d1b57610100808354040283529160200191610d46565b820191906000526020600020905b815481529060010190602001808311610d2957829003601f168201915b5050505050905090565b6000546001600160a01b03163314610d9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b600e805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610e468587614a57565b610e509190614a57565b610e5a9190614a57565b600e805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff90921691909117905550505050565b6000546001600160a01b03163314610eee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b604b811015610f3f5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c2f565b601c546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b5050505050565b6000610fcc338484613219565b5060015b92915050565b600b54600090610fea9060ff16600a614b61565b601954610ff79190614b70565b905090565b6000600c546000141561100e57600080fd5b50600c5490565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461107a576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611074908490614bab565b90915550505b611085848484613326565b949350505050565b6000546001600160a01b031633146110db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6103e8600c546110eb9190614b70565b8183600c546110fa9190614bc2565b6111049190614b70565b10156111785760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c2f565b8082600c546111879190614bc2565b6111919190614b70565b6019555050565b80518251146111e95760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c2f565b60005b82518160ff1610156112b357818160ff168151811061120d5761120d614be1565b6020026020010151611234336001600160a01b031660009081526001602052604090205490565b101561123f57600080fd5b6112a033848360ff168151811061125857611258614be1565b6020908102919091010151600b546112749060ff16600a614b61565b858560ff168151811061128957611289614be1565b602002602001015161129b9190614bc2565b613326565b50806112ab81614c10565b9150506111ec565b505050565b6000546001600160a01b031633146113065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561138357600080fd5b505af1158015611397573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b600f5461ffff908116908416118015906114195750600f5461ffff62010000909104811690831611155b80156114375750600f5461ffff640100000000909104811690821611155b6114835760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c2f565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f8a565b6000546001600160a01b031633146115e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b8385600c546115f39190614bc2565b6115fd9190614b70565b601a55600c548290611610908590614bc2565b61161a9190614b70565b601b5560165550505050565b6000546001600160a01b031633146116745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610fcc9185906116d6908690614c30565b613219565b6000546001600160a01b031633146117295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6103e8600c546117399190614b70565b8183600c546117489190614bc2565b6117529190614b70565b10156117c65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c2f565b8082600c546117d59190614bc2565b6117df9190614b70565b6018555050565b6000546001600160a01b031633146118345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6001600160a01b0381166118b05760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c2f565b6001600160a01b03811661dead14156119315760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c2f565b6000805461194a916001600160a01b0390911690611a6d565b611955816001611a6d565b600080546001600160a01b03168152600160205260409020541561199c57600080546001600160a01b0316808252600160205260409091205461199a91908390613326565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601c60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff79190614c48565b6000546001600160a01b03163314611abb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c54610100900460ff1615611b8c5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610c2f565b6001600160a01b038116301415611be55760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c2f565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611c399060ff16600a614b61565b601854610ff79190614b70565b6000546001600160a01b03163314611c945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b60008054611cad916001600160a01b0390911690611a6d565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611d445760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b6013805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039384161790915560148054821693831693909317909255601280549092169216919091179055565b6000546001600160a01b03163314611ddf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b80611e56576001600160a01b03828116600081815260026020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c88565b60035415611ebd576203f48060035442611e709190614bab565b11611ebd5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c2f565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c88565b5050565b600080546001600160a01b03163314611f8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601054611fa49030906001600160a01b0316600019613219565b50600190565b6000546001600160a01b03163314611ff85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c5460ff161561204b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c2f565b601c54610100900460ff166120a25760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c2f565b601c546201000090046001600160a01b03166120e857601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54601154600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561217957600080fd5b505af192505050801561218a575060015b50601c805460ff19166001179055565b6060600a8054610ccd906149d4565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610fcc9185906116d6908690614bab565b60006121ed338484613326565b5060019392505050565b6000546001600160a01b031633146122455760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f8a565b6000546001600160a01b031633146122e55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601580548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061232e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c54760100000000000000000000000000000000000000000000900460ff16156123f45760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c2f565b81518351146124455760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610c2f565b601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b1580156124d757600080fd5b505af19250505080156124e8575060015b50601c60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561255d57506040513d6000823e601f3d908101601f1916820160405261255a9190810190614cc5565b60015b6125a95760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c2f565b83516125bc906009906020870190614285565b5082516125d090600a906020860190614285565b506008829055600b805460ff191660ff83169081179091556125f390600a614b61565b6008546126009190614bc2565b600c5550505050601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267e9190614d40565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127039190614d40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278b9190614d40565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c54612710906127e2906005614bc2565b6127ec9190614b70565b601a55600c546127109061280190600a614bc2565b61280b9190614b70565b601b55600c5460649061281f906001614bc2565b6128299190614b70565b601855600c5460649061283d906001614bc2565b6128479190614b70565b601955601c80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600c54600160006128a46000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556128d06000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405161291791815260200190565b60405180910390a36010546129399030906001600160a01b0316600019613219565b60005b83518110156129c957600b546000906129599060ff16600a614b61565b84838151811061296b5761296b614be1565b602002602001015161297d9190614bc2565b90506129b46129946000546001600160a01b031690565b8684815181106129a6576129a6614be1565b602002602001015183613326565b505080806129c190614d5d565b91505061293c565b506129f56129df6000546001600160a01b031690565b3061129b61088f6000546001600160a01b031690565b506010546001600160a01b031663f305d7194730612a28816001600160a01b031660009081526001602052604090205490565b600080612a3d6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612abd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ae29190614d78565b5050506112b3611faa565b81518351148015612aff575080518251145b612b4b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c2f565b60005b83518160ff161015612c4b57818160ff1681518110612b6f57612b6f614be1565b6020026020010151838260ff1681518110612b8c57612b8c614be1565b6020026020010151600c54612ba19190614bc2565b612bab9190614b70565b336000908152600160205260409020541015612bc657600080fd5b612c3833858360ff1681518110612bdf57612bdf614be1565b6020026020010151848460ff1681518110612bfc57612bfc614be1565b6020026020010151868560ff1681518110612c1957612c19614be1565b6020026020010151600c54612c2e9190614bc2565b61129b9190614b70565b5080612c4381614c10565b915050612b4e565b50505050565b6000546001600160a01b03163314612c9f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d089190614d40565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d799190614d40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e009190614d40565b90506001600160a01b038116612f9e57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e729190614d40565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee39190614d40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190614d40565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612fc7565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112b3903090600019613219565b6000546001600160a01b0316331461304e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c54610100900460ff16156130a65760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c2f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156130e0573d6000803e3d6000fd5b50565b6000546001600160a01b031633146131315760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c2f565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610c88565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156131f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190614da6565b6001600160a01b03831661326f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c2f565b6001600160a01b0382166132c55760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c2f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166133a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c2f565b6001600160a01b0383166134205760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c2f565b600082116134965760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c2f565b6134a084846137e5565b156136f757601c5460ff166134f75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c2f565b6001600160a01b03841660009081526002602052604090205460ff168061353657506001600160a01b03831660009081526002602052604090205460ff165b156135fa576001600160a01b03841660009081526006602052604090205460ff1615801561357d57506001600160a01b03831660009081526006602052604090205460ff16155b156135fa576018548211156135fa5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c2f565b6010546001600160a01b0384811691161480159061363157506001600160a01b03831660009081526002602052604090205460ff16155b156136f7576001600160a01b03831660009081526006602052604090205460ff166136f75760195482613679856001600160a01b031660009081526001602052604090205490565b6136839190614c30565b11156136f75760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c2f565b6001600160a01b03841660009081526005602052604090205460019060ff168061373957506001600160a01b03841660009081526005602052604090205460ff165b15613742575060005b6001600160a01b03841660009081526002602052604090205460ff16156137d05760155460ff1615801561377d5750601554610100900460ff165b156137d057426016546017546137939190614c30565b10156137d05730600090815260016020526040902054601a5481106137ce57601b5481106137c05750601b545b6137c9816138ba565b426017555b505b6137dc85858584613dd1565b95945050505050565b600080546001600160a01b0384811691161480159061381257506000546001600160a01b03838116911614155b801561382957506000546001600160a01b03163214155b801561384e57506001600160a01b03821660009081526007602052604090205460ff16155b801561387357506001600160a01b03831660009081526007602052604090205460ff16155b801561388a57506001600160a01b03821661dead14155b801561389e57506001600160a01b03821615155b80156138b357506001600160a01b0383163014155b9392505050565b6015805460ff191660011790556040805160a081018252600e5461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000008104831660608301526801000000000000000090049091166080820181905261392b5750613dc4565b3060009081526004602090815260408083206010546001600160a01b0316845290915290205460001914613984573060009081526004602090815260408083206010546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836000015161ffff16856139a59190614bc2565b6139af9190614b70565b6139b99190614b70565b905060006139c78285614bab565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a0157613a01614be1565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a979190614d40565b81600181518110613aaa57613aaa614be1565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613b09908590600090869030904290600401614dc3565b600060405180830381600087803b158015613b2357600080fd5b505af1158015613b37573d6000803e3d6000fd5b5047925060009150849050613b4c8684614bc2565b613b569190614b70565b90508415613c47576010546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c0a9190614d78565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8551608087018051613c5a908390614dff565b61ffff16905250613c6b8183614bab565b91506000866080015161ffff1683886040015161ffff16613c8c9190614bc2565b613c969190614b70565b90506000876080015161ffff1684896060015161ffff16613cb79190614bc2565b613cc19190614b70565b90506000613ccf8284614c30565b613cd99086614bab565b60408a015190915061ffff1615613d26576013546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613d24573d6000803e3d6000fd5b505b606089015161ffff1615613d70576014546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613d6e573d6000803e3d6000fd5b505b602089015161ffff1615613dba576012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613db8573d6000803e3d6000fd5b505b5050505050505050505b506015805460ff19169055565b601c54600090610100900460ff16613e7d57613ded858561400d565b601c54610100900460ff16158015613e0a5750613e0a85856137e5565b15613e7d5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c2f565b613e8785856137e5565b15613f3a57601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613f23575060408051601f3d908101601f19168201909252613f2091810190614da6565b60015b613f2c57600080fd5b905080613f3857600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613f62908490614bab565b909155506000905082613f755783613f80565b613f8086868661416b565b6001600160a01b038616600090815260016020526040812080549293508392909190613fad908490614c30565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ff991815260200190565b60405180910390a350600195945050505050565b601c54610100900460ff161561408b5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c2f565b61409582826137e5565b1580156140af57506011546001600160a01b038281169116145b15611f37576001600160a01b038083166000908152600760205260409020805460ff19166001179055601c805461ff00191661010017908190556201000090041661412457601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff161561419b5750600d5461ffff166141e0565b6001600160a01b03841660009081526002602052604090205460ff16156141cf5750600d5462010000900461ffff166141e0565b50600d54640100000000900461ffff165b600f546000906601000000000000900461ffff166141fe8386614bc2565b6142089190614b70565b3060009081526001602052604081208054929350839290919061422c908490614c30565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361427b8185614bab565b9695505050505050565b828054614291906149d4565b90600052602060002090601f0160209004810192826142b357600085556142f9565b82601f106142cc57805160ff19168380011785556142f9565b828001600101855582156142f9579182015b828111156142f95782518255916020019190600101906142de565b50614305929150614309565b5090565b5b80821115614305576000815560010161430a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143765761437661431e565b604052919050565b600067ffffffffffffffff8211156143985761439861431e565b5060051b60200190565b6001600160a01b03811681146130e057600080fd5b600082601f8301126143c857600080fd5b813560206143dd6143d88361437e565b61434d565b82815260059290921b840181019181810190868411156143fc57600080fd5b8286015b84811015614420578035614413816143a2565b8352918301918301614400565b509695505050505050565b80151581146130e057600080fd5b6000806040838503121561444c57600080fd5b823567ffffffffffffffff81111561446357600080fd5b61446f858286016143b7565b92505060208301356144808161442b565b809150509250929050565b60005b838110156144a657818101518382015260200161448e565b83811115612c4b5750506000910152565b60208152600082518060208401526144d681604085016020870161448b565b601f01601f19169190910160400192915050565b803561ffff811681146144fc57600080fd5b919050565b6000806000806080858703121561451757600080fd5b614520856144ea565b935061452e602086016144ea565b925061453c604086016144ea565b915061454a606086016144ea565b905092959194509250565b60006020828403121561456757600080fd5b5035919050565b6000806040838503121561458157600080fd5b823561458c816143a2565b946020939093013593505050565b6000806000606084860312156145af57600080fd5b83356145ba816143a2565b925060208401356145ca816143a2565b929592945050506040919091013590565b600080604083850312156145ee57600080fd5b50508035926020909101359150565b600082601f83011261460e57600080fd5b8135602061461e6143d88361437e565b82815260059290921b8401810191818101908684111561463d57600080fd5b8286015b848110156144205780358352918301918301614641565b6000806040838503121561466b57600080fd5b823567ffffffffffffffff8082111561468357600080fd5b61468f868387016143b7565b935060208501359150808211156146a557600080fd5b506146b2858286016145fd565b9150509250929050565b600080600080608085870312156146d257600080fd5b84356146dd8161442b565b935060208501356146ed8161442b565b925060408501356146fd8161442b565b9150606085013561470d8161442b565b939692955090935050565b60008060006060848603121561472d57600080fd5b614736846144ea565b9250614744602085016144ea565b9150614752604085016144ea565b90509250925092565b60006020828403121561476d57600080fd5b81356138b3816143a2565b600080600080600060a0868803121561479057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156147c657600080fd5b82356147d1816143a2565b915060208301356144808161442b565b6000806000606084860312156147f657600080fd5b8335614801816143a2565b92506020840135614811816143a2565b91506040840135614821816143a2565b809150509250925092565b60006020828403121561483e57600080fd5b81356138b38161442b565b6000806040838503121561485c57600080fd5b8235614867816143a2565b91506020830135614480816143a2565b60008060006060848603121561488c57600080fd5b833567ffffffffffffffff808211156148a457600080fd5b6148b0878388016143b7565b945060208601359150808211156148c657600080fd5b506148d3868287016145fd565b9250506040840135614821816143a2565b6000806000606084860312156148f957600080fd5b833567ffffffffffffffff8082111561491157600080fd5b61491d878388016143b7565b9450602086013591508082111561493357600080fd5b61493f878388016145fd565b9350604086013591508082111561495557600080fd5b50614962868287016145fd565b9150509250925092565b600081518084526020808501945080840160005b838110156149a55781516001600160a01b031687529582019590820190600101614980565b509495945050505050565b6040815260006149c3604083018561496c565b905082151560208301529392505050565b600181811c908216806149e857607f821691505b60208210811415614a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818516808303821115614a7457614a74614a28565b01949350505050565b600181815b80851115614ab8578160001904821115614a9e57614a9e614a28565b80851615614aab57918102915b93841c9390800290614a82565b509250929050565b600082614acf57506001610fd0565b81614adc57506000610fd0565b8160018114614af25760028114614afc57614b18565b6001915050610fd0565b60ff841115614b0d57614b0d614a28565b50506001821b610fd0565b5060208310610133831016604e8410600b8410161715614b3b575081810a610fd0565b614b458383614a7d565b8060001904821115614b5957614b59614a28565b029392505050565b60006138b360ff841683614ac0565b600082614ba6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015614bbd57614bbd614a28565b500390565b6000816000190483118215151615614bdc57614bdc614a28565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614c2757614c27614a28565b60010192915050565b60008219821115614c4357614c43614a28565b500190565b600060208284031215614c5a57600080fd5b5051919050565b600082601f830112614c7257600080fd5b815167ffffffffffffffff811115614c8c57614c8c61431e565b614c9f6020601f19601f8401160161434d565b818152846020838601011115614cb457600080fd5b61108582602083016020870161448b565b60008060008060808587031215614cdb57600080fd5b845167ffffffffffffffff80821115614cf357600080fd5b614cff88838901614c61565b95506020870151915080821115614d1557600080fd5b50614d2287828801614c61565b93505060408501519150606085015160ff8116811461470d57600080fd5b600060208284031215614d5257600080fd5b81516138b3816143a2565b6000600019821415614d7157614d71614a28565b5060010190565b600080600060608486031215614d8d57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614db857600080fd5b81516138b38161442b565b85815284602082015260a060408201526000614de260a083018661496c565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff83811690831681811015614e1a57614e1a614a28565b03939250505056fea26469706673582212204a372bfce08af0d8a21998613d8671e3cb47c4aa9633826cd5e77e928c2586e264736f6c634300080b0033

Deployed Bytecode Sourcemap

7072:23078:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8744:73;;;;;;;;;;;;8775:42;8744:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8744:73:0;;;;;;;;9474:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;9474:28:0;245:177:1;18461:172:0;;;;;;;;;;-1:-1:-1;18461:172:0;;;;;:::i;:::-;;:::i;:::-;;8184:116;;;;;;;;;;-1:-1:-1;8184:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;2855:6:1;2888:15;;;2870:34;;2940:15;;;2935:2;2920:18;;2913:43;2992:15;;2972:18;;;2965:43;;;;2833:2;2818:18;8184:116:0;2649:365:1;14944:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19926:350::-;;;;;;;;;;-1:-1:-1;19926:350:0;;;;;:::i;:::-;;:::i;8681:26::-;;;;;;;;;;-1:-1:-1;8681:26:0;;;;-1:-1:-1;;;;;8681:26:0;;;19331:149;;;;;;;;;;-1:-1:-1;19331:149:0;;;;;:::i;:::-;;:::i;15557:161::-;;;;;;;;;;-1:-1:-1;15557:161:0;;;;;:::i;:::-;;:::i;:::-;;;5217:14:1;;5210:22;5192:41;;5180:2;5165:18;15557:161:0;5052:187:1;21511:112:0;;;;;;;;;;;;;:::i;14647:115::-;;;;;;;;;;;;;:::i;8478:194::-;;;;;;;;;;-1:-1:-1;8478:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5477:6:1;5510:15;;;5492:34;;5562:15;;;5557:2;5542:18;;5535:43;5614:15;;;5594:18;;;5587:43;;;;5666:15;;;5661:2;5646:18;;5639:43;5454:3;5439:19;8478:194:0;5244:444:1;16224:306:0;;;;;;;;;;-1:-1:-1;16224:306:0;;;;;:::i;:::-;;:::i;20561:267::-;;;;;;;;;;-1:-1:-1;20561:267:0;;;;;:::i;:::-;;:::i;27782:373::-;;;;;;;;;;-1:-1:-1;27782:373:0;;;;;:::i;:::-;;:::i;19128:195::-;;;;;;;;;;-1:-1:-1;19128:195:0;;;;;:::i;:::-;;:::i;9509:25::-;;;;;;;;;;;;;;;;14768:80;;;;;;;;;;-1:-1:-1;14836:9:0;;14768:80;;14836:9;;;;8468:36:1;;8456:2;8441:18;14768:80:0;8326:184:1;19488:430:0;;;;;;;;;;-1:-1:-1;19488:430:0;;;;;:::i;:::-;;:::i;19012:108::-;;;;;;;;;;-1:-1:-1;19012:108:0;;;;;:::i;:::-;;:::i;21631:338::-;;;;;;;;;;-1:-1:-1;21631:338:0;;;;;:::i;:::-;;:::i;20836:140::-;;;;;;;;;;-1:-1:-1;20836:140:0;;;;;:::i;:::-;;:::i;16538:215::-;;;;;;;;;;-1:-1:-1;16538:215:0;;;;;:::i;:::-;;:::i;20284:269::-;;;;;;;;;;-1:-1:-1;20284:269:0;;;;;:::i;:::-;;:::i;8714:21::-;;;;;;;;;;-1:-1:-1;8714:21:0;;;;-1:-1:-1;;;;;8714:21:0;;;9543:34;;;;;;;;;;-1:-1:-1;9543:34:0;;;;;;;;13501:590;;;;;;;;;;-1:-1:-1;13501:590:0;;;;;:::i;:::-;;:::i;21122:125::-;;;;;;;;;;-1:-1:-1;21122:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21211:28:0;21187:4;21211:28;;;:19;:28;;;;;;;;;21122:125;9584:36;;;;;;;;;;-1:-1:-1;9584:36:0;;;;;;;;;;;18900:104;;;;;;;;;;;;;:::i;21255:134::-;;;;;;;;;;-1:-1:-1;21255:134:0;;;;;:::i;:::-;;:::i;18052:248::-;;;;;;;;;;-1:-1:-1;18052:248:0;;;;;:::i;:::-;;:::i;20984:130::-;;;;;;;;;;-1:-1:-1;20984:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;21076:30:0;21052:4;21076:30;;;:21;:30;;;;;;;;;20984:130;21397:106;;;;;;;;;;;;;:::i;15257:117::-;;;;;;;;;;-1:-1:-1;15257:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;15350:16:0;15323:7;15350:16;;;:7;:16;;;;;;;15257:117;14099:195;;;;;;;;;;;;;:::i;21977:287::-;;;;;;;;;;-1:-1:-1;21977:287:0;;;;;:::i;:::-;;:::i;17544:500::-;;;;;;;;;;-1:-1:-1;17544:500:0;;;;;:::i;:::-;;:::i;15030:80::-;;;;;;;;;;-1:-1:-1;15082:7:0;13479:6;-1:-1:-1;;;;;13479:6:0;15030:80;21511:112;16043:173;;;;;;;;;;;;;:::i;27154:429::-;;;;;;;;;;;;;:::i;14854:84::-;;;;;;;;;;;;;:::i;16761:225::-;;;;;;;;;;-1:-1:-1;16761:225:0;;;;;:::i;:::-;;:::i;15382:167::-;;;;;;;;;;-1:-1:-1;15382:167:0;;;;;:::i;:::-;;:::i;18641:118::-;;;;;;;;;;-1:-1:-1;18641:118:0;;;;;:::i;:::-;;:::i;22272:165::-;;;;;;;;;;-1:-1:-1;22272:165:0;;;;;:::i;:::-;;:::i;8309:160::-;;;;;;;;;;-1:-1:-1;8309:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11009:6:1;11042:15;;;11024:34;;11094:15;;;11089:2;11074:18;;11067:43;11146:15;;;11126:18;;;11119:43;;;;11198:15;;11193:2;11178:18;;11171:43;11251:15;;;11245:3;11230:19;;11223:44;10986:3;10971:19;8309:160:0;10750:523:1;15116:133:0;;;;;;;;;;-1:-1:-1;15116:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15218:19:0;;;15200:7;15218:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15116:133;11031:1831;;;;;;;;;;-1:-1:-1;11031:1831:0;;;;;:::i;:::-;;:::i;9319:45::-;;;;;;;;;;;;;;;;28163:482;;;;;;;;;;-1:-1:-1;28163:482:0;;;;;:::i;:::-;;:::i;16994:542::-;;;;;;;;;;-1:-1:-1;16994:542:0;;;;;:::i;:::-;;:::i;27591:183::-;;;;;;;;;;;;;:::i;18308:145::-;;;;;;;;;;-1:-1:-1;18308:145:0;;;;;:::i;:::-;;:::i;8968:274::-;;;;;;;;;;-1:-1:-1;8968:274:0;;;;;;;;-1:-1:-1;;;;;8968:274:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13561:15:1;;;13543:34;;13613:15;;;13608:2;13593:18;;13586:43;13665:15;;13645:18;;;13638:43;;;;13470:2;13455:18;8968:274:0;13232:455:1;9273:39:0;;;;;;;;;;-1:-1:-1;9273:39:0;;;;;;;;;;;18767:125;;;;;;;;;;-1:-1:-1;18767:125:0;;;;;:::i;:::-;;:::i;18461:172::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;;;;;;;;;18569:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;18569:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;18607:8;;18617:7;;18569:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18461:172:::0;;:::o;14944:80::-;14992:13;15016:5;15009:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14944:80;:::o;19926:350::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;20047:7:::1;:29:::0;;::::1;::::0;;::::1;20087::::0;;;;;;;;;;;::::1;;;20163:33:::0;;20127:25;;;::::1;;20163:33:::0;;;;;;::::1;::::0;;;::::1;;::::0;;;20127:25;20223:21:::1;20087:29:::0;20047;20223:21:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;20207:7;:61:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;19926:350:0:o;19331:149::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;19415:2:::1;19408:3;:9;;19400:30;;;::::0;-1:-1:-1;;;19400:30:0;;15936:2:1;19400:30:0::1;::::0;::::1;15918:21:1::0;15975:1;15955:18;;;15948:29;16013:10;15993:18;;;15986:38;16041:18;;19400:30:0::1;15734:331:1::0;19400:30:0::1;19441:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;19441:9:0;;;::::1;-1:-1:-1::0;;;;;19441:9:0::1;::::0;:26:::1;::::0;364:18:1;;19441:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19331:149:::0;:::o;15557:161::-;15632:4;15649:39;189:10;15672:7;15681:6;15649:8;:39::i;:::-;-1:-1:-1;15706:4:0;15557:161;;;;;:::o;21511:112::-;21605:9;;21556:7;;21601:13;;21605:9;;21601:2;:13;:::i;:::-;21583:14;;:32;;;;:::i;:::-;21576:39;;21511:112;:::o;14647:115::-;14702:7;14717;;14728:1;14717:12;14713:31;;;14733:8;;;14713:31;-1:-1:-1;14752:7:0;;;14647:115::o;16224:306::-;-1:-1:-1;;;;;16345:19:0;;16324:4;16345:19;;;:11;:19;;;;;;;;16365:10;16345:31;;;;;;;;-1:-1:-1;;16345:52:0;16341:126;;-1:-1:-1;;;;;16414:19:0;;;;;;:11;:19;;;;;;;;16434:10;16414:31;;;;;;;:41;;16449:6;;16414:19;:41;;16449:6;;16414:41;:::i;:::-;;;;-1:-1:-1;;16341:126:0;16486:36;16496:6;16504:9;16515:6;16486:9;:36::i;:::-;16479:43;16224:306;-1:-1:-1;;;;16224:306:0:o;20561:267::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;20703:4:::1;20693:7;;:14;;;;:::i;:::-;20681:7;20670;20660;;:17;;;;:::i;:::-;20659:29;;;;:::i;:::-;:49;;20651:112;;;::::0;-1:-1:-1;;;20651:112:0;;18417:2:1;20651:112:0::1;::::0;::::1;18399:21:1::0;18456:2;18436:18;;;18429:30;18495:34;18475:18;;;18468:62;18566:20;18546:18;;;18539:48;18604:19;;20651:112:0::1;18215:414:1::0;20651:112:0::1;20813:7;20802;20792;;:17;;;;:::i;:::-;20791:29;;;;:::i;:::-;20774:14;:46:::0;-1:-1:-1;;20561:267:0:o;27782:373::-;27907:7;:14;27888:8;:15;:33;27880:67;;;;-1:-1:-1;;;27880:67:0;;18836:2:1;27880:67:0;;;18818:21:1;18875:2;18855:18;;;18848:30;18914:23;18894:18;;;18887:51;18955:18;;27880:67:0;18634:345:1;27880:67:0;27963:7;27958:190;27980:8;:15;27976:1;:19;;;27958:190;;;28050:7;28058:1;28050:10;;;;;;;;;;:::i;:::-;;;;;;;28025:21;28035:10;-1:-1:-1;;;;;15350:16:0;15323:7;15350:16;;;:7;:16;;;;;;;15257:117;28025:21;:35;;28017:44;;;;;;28076:60;28086:10;28098:8;28107:1;28098:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;28126:9;;28122:13;;28126:9;;28122:2;:13;:::i;:::-;28111:7;28119:1;28111:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28076:9;:60::i;:::-;-1:-1:-1;27997:3:0;;;;:::i;:::-;;;;27958:190;;;;27782:373;;:::o;19128:195::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;19250:9:::1;::::0;:65:::1;::::0;;;;19585:14:1;;19578:22;19250:65:0::1;::::0;::::1;19560:41:1::0;19644:14;;19637:22;19617:18;;;19610:50;19703:14;;19696:22;19676:18;;;19669:50;19762:14;;19755:22;19735:18;;;19728:50;19250:9:0;;;::::1;-1:-1:-1::0;;;;;19250:9:0::1;::::0;:24:::1;::::0;19532:19:1;;19250:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19128:195:::0;;;;:::o;19488:430::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;19605:10:::1;:22:::0;::::1;::::0;;::::1;19595:32:::0;;::::1;;::::0;::::1;::::0;:87:::1;;-1:-1:-1::0;19658:10:0::1;:24:::0;::::1;::::0;;;::::1;::::0;::::1;19648:34:::0;;::::1;;;19595:87;:150;;;;-1:-1:-1::0;19718:10:0::1;:27:::0;::::1;::::0;;;::::1;::::0;::::1;19703:42:::0;;::::1;;;19595:150;19587:203;;;::::0;-1:-1:-1;;;19587:203:0;;19991:2:1;19587:203:0::1;::::0;::::1;19973:21:1::0;20030:2;20010:18;;;20003:30;20069:25;20049:18;;;20042:53;20112:18;;19587:203:0::1;19789:347:1::0;19587:203:0::1;19801:9;:25:::0;;::::1;::::0;;::::1;19837:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;19875:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;19488:430::o;19012:108::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;19081:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19081:31:0::1;::::0;::::1;160:74:1::0;19081:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;19081:31:0::1;14:226:1::0;21631:338:0;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;21845:16:::1;21825;21815:7;;:26;;;;:::i;:::-;21814:47;;;;:::i;:::-;21798:13;:63:::0;21886:7:::1;::::0;21913:13;;21886:23:::1;::::0;21896:13;;21886:23:::1;:::i;:::-;21885:41;;;;:::i;:::-;21872:10;:54:::0;21937:17:::1;:24:::0;-1:-1:-1;;;;21631:338:0:o;20836:140::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;-1:-1:-1;;;;;20928:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;20928:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20836:140::o;16538:215::-;189:10;16626:4;16675:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16675:34:0;;;;;;;;;;16626:4;;16643:80;;16666:7;;16675:47;;16712:10;;16675:47;:::i;:::-;16643:8;:80::i;20284:269::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;20425:4:::1;20415:7;;:14;;;;:::i;:::-;20403:7;20392;20382;;:17;;;;:::i;:::-;20381:29;;;;:::i;:::-;:49;;20373:117;;;::::0;-1:-1:-1;;;20373:117:0;;20476:2:1;20373:117:0::1;::::0;::::1;20458:21:1::0;20515:2;20495:18;;;20488:30;20554:34;20534:18;;;20527:62;20625:25;20605:18;;;20598:53;20668:19;;20373:117:0::1;20274:419:1::0;20373:117:0::1;20538:7;20527;20517;;:17;;;;:::i;:::-;20516:29;;;;:::i;:::-;20501:12;:44:::0;-1:-1:-1;;20284:269:0:o;13501:590::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;-1:-1:-1;;;;;13582:22:0;::::1;13574:96;;;::::0;-1:-1:-1;;;13574:96:0;;20900:2:1;13574:96:0::1;::::0;::::1;20882:21:1::0;20939:2;20919:18;;;20912:30;20978:34;20958:18;;;20951:62;21049:31;21029:18;;;21022:59;21098:19;;13574:96:0::1;20698:425:1::0;13574:96:0::1;-1:-1:-1::0;;;;;13689:16:0;::::1;8775:42;13689:16;;13681:90;;;::::0;-1:-1:-1;;;13681:90:0;;20900:2:1;13681:90:0::1;::::0;::::1;20882:21:1::0;20939:2;20919:18;;;20912:30;20978:34;20958:18;;;20951:62;21049:31;21029:18;;;21022:59;21098:19;;13681:90:0::1;20698:425:1::0;13681:90:0::1;13802:6;::::0;;13782:34:::1;::::0;-1:-1:-1;;;;;13802:6:0;;::::1;::::0;13782:19:::1;:34::i;:::-;13827:35;13847:8;13857:4;13827:19;:35::i;:::-;13906:1;13896:6:::0;;-1:-1:-1;;;;;13896:6:0::1;15350:16:::0;;:7;:16;;;;;;13886:21;13883:99:::1;;13934:6;::::0;;-1:-1:-1;;;;;13934:6:0::1;15350:16:::0;;;:7;:16;;;;;;;13924:46:::1;::::0;13934:6;13942:8;;28076:9;:60::i;13924:46::-:1;;13883:99;14002:6;:17:::0;;-1:-1:-1;;14002:17:0::1;-1:-1:-1::0;;;;;14002:17:0;::::1;::::0;;::::1;::::0;;14035:38:::1;::::0;14002:17;;;;14035:38:::1;::::0;14002:6;14035:38:::1;13501:590:::0;:::o;18900:104::-;18945:7;18972:9;;;;;;;;;-1:-1:-1;;;;;18972:9:0;-1:-1:-1;;;;;18972:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21255:134::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;-1:-1:-1;;;;;21343:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;21343:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21255:134::o;18052:248::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;18136:16:::1;::::0;::::1;::::0;::::1;;;18135:17;18127:54;;;::::0;-1:-1:-1;;;18127:54:0;;21519:2:1;18127:54:0::1;::::0;::::1;21501:21:1::0;21558:2;21538:18;;;21531:30;21597:26;21577:18;;;21570:54;21641:18;;18127:54:0::1;21317:348:1::0;18127:54:0::1;-1:-1:-1::0;;;;;18200:28:0;::::1;18223:4;18200:28;;18192:55;;;::::0;-1:-1:-1;;;18192:55:0;;21872:2:1;18192:55:0::1;::::0;::::1;21854:21:1::0;21911:2;21891:18;;;21884:30;21950:16;21930:18;;;21923:44;21984:18;;18192:55:0::1;21670:338:1::0;18192:55:0::1;18258:9;:34:::0;;-1:-1:-1;;;;;18258:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;18052:248::o;21397:106::-;21485:9;;21438:7;;21481:13;;21485:9;;21481:2;:13;:::i;:::-;21465:12;;:30;;;;:::i;14099:195::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;14186:6:::1;::::0;;14166:34:::1;::::0;-1:-1:-1;;;;;14186:6:0;;::::1;::::0;14166:19:::1;:34::i;:::-;14228:1;14211:19:::0;;-1:-1:-1;;14211:19:0::1;::::0;;14246:40:::1;::::0;14228:1;;14246:40:::1;::::0;14228:1;;14246:40:::1;14099:195::o:0;21977:287::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;22108:19;:38;;-1:-1:-1;;22108:38:0;;::::1;-1:-1:-1::0;;;;;22108:38:0;;::::1;;::::0;;;22157:23;:46;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;22108:11:::1;22214:42:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;21977:287::o;17544:500::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;17625:16;17621:416:::1;;-1:-1:-1::0;;;;;17658:13:0;;::::1;17674:5;17658:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17658:21:0::1;::::0;;17694:9:::1;::::0;:32;;;;;::::1;::::0;::::1;22181:74:1::0;;;;22271:18;;;22264:50;;;;17694:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22154:18:1;;17694:32:0::1;22013:307:1::0;17621:416:0::1;17763:17;::::0;:22;17759:136:::1;;17852:6;17832:17;;17814:15;:35;;;;:::i;:::-;:44;17806:73;;;::::0;-1:-1:-1;;;17806:73:0;;22527:2:1;17806:73:0::1;::::0;::::1;22509:21:1::0;22566:2;22546:18;;;22539:30;22605:18;22585;;;22578:46;22641:18;;17806:73:0::1;22325:340:1::0;17806:73:0::1;-1:-1:-1::0;;;;;17909:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17909:20:0::1;17925:4;17909:20:::0;;::::1;::::0;;;17964:15:::1;17944:17;:35:::0;17994:9:::1;::::0;:31;;;;;::::1;::::0;::::1;22181:74:1::0;;;;22271:18;;;22264:50;17994:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22154:18:1;;17994:31:0::1;22013:307:1::0;17621:416:0::1;17544:500:::0;;:::o;16043:173::-;16107:4;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;16156:9:::1;::::0;16124:62:::1;::::0;16141:4:::1;::::0;-1:-1:-1;;;;;16156:9:0::1;-1:-1:-1::0;;16124:8:0::1;:62::i;:::-;-1:-1:-1::0;16204:4:0::1;16043:173:::0;:::o;27154:429::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;27216:14:::1;::::0;::::1;;27215:15;27207:52;;;::::0;-1:-1:-1;;;27207:52:0;;22872:2:1;27207:52:0::1;::::0;::::1;22854:21:1::0;22911:2;22891:18;;;22884:30;22950:26;22930:18;;;22923:54;22994:18;;27207:52:0::1;22670:348:1::0;27207:52:0::1;27278:16;::::0;::::1;::::0;::::1;;;27270:53;;;::::0;-1:-1:-1;;;27270:53:0;;23225:2:1;27270:53:0::1;::::0;::::1;23207:21:1::0;23264:2;23244:18;;;23237:30;23303:26;23283:18;;;23276:54;23347:18;;27270:53:0::1;23023:348:1::0;27270:53:0::1;27345:9;::::0;;;::::1;-1:-1:-1::0;;;;;27345:9:0::1;27334:99;;27385:9;:36:::0;;;::::1;27415:4;27385:36:::0;::::1;;::::0;;27334:99:::1;27447:9;::::0;27467:6:::1;::::0;27522:9:::1;::::0;27447:85:::1;::::0;;;;-1:-1:-1;;;;;27467:6:0;;::::1;27447:85;::::0;::::1;23599:74:1::0;23721:10;27482:12:0::1;23709:23:1::0;23689:18;;;23682:51;23781:18;27504:15:0::1;23769:31:1::0;23749:18;;;23742:59;27522:9:0::1;::::0;;::::1;23817:18:1::0;;;23810:45;27447:9:0;;;::::1;;::::0;:19:::1;::::0;23571::1;;27447:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27443:101:::0;27554:14:::1;:21:::0;;-1:-1:-1;;27554:21:0::1;27571:4;27554:21;::::0;;27154:429::o;14854:84::-;14904:13;14928:7;14921:14;;;;;:::i;16761:225::-;189:10;16854:4;16903:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16903:34:0;;;;;;;;;;16854:4;;16871:85;;16894:7;;16903:52;;16940:15;;16903:52;:::i;15382:167::-;15460:4;15477:42;189:10;15501:9;15512:6;15477:9;:42::i;:::-;-1:-1:-1;15537:4:0;;15382:167;-1:-1:-1;;;15382:167:0:o;18641:118::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;18715:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;18715:36:0::1;::::0;::::1;160:74:1::0;18715:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;18715:36:0::1;14:226:1::0;22272:165:0;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;22347:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;22347:30:0;;::::1;;::::0;;22393:36:::1;::::0;::::1;::::0;::::1;::::0;22369:8;5217:14:1;5210:22;5192:41;;5180:2;5165:18;;5052:187;22393:36:0::1;;;;;;;;22272:165:::0;:::o;11031:1831::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;11170:19:::1;::::0;;;::::1;;;11169:20;11161:34;;;::::0;-1:-1:-1;;;11161:34:0;;24068:2:1;11161:34:0::1;::::0;::::1;24050:21:1::0;24107:1;24087:18;;;24080:29;24145:3;24125:18;;;24118:31;24166:18;;11161:34:0::1;23866:324:1::0;11161:34:0::1;11233:7;:14;11214:8;:15;:33;11206:47;;;::::0;-1:-1:-1;;;11206:47:0;;24397:2:1;11206:47:0::1;::::0;::::1;24379:21:1::0;24436:1;24416:18;;;24409:29;24474:3;24454:18;;;24447:31;24495:18;;11206:47:0::1;24195:324:1::0;11206:47:0::1;11264:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11264:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11312::::1;::::0;;;;11339:4:::1;11312:33;::::0;::::1;160:74:1::0;11312:9:0;::::1;;::::0;:18:::1;::::0;133::1;;11312:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;11308:49:::0;11371:9:::1;;;;;;;;;-1:-1:-1::0;;;;;11371:9:0::1;-1:-1:-1::0;;;;;11371:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;11371:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;11367:408;;11752:11;::::0;-1:-1:-1;;;11752:11:0;;26066:2:1;11752:11:0::1;::::0;::::1;26048:21:1::0;26105:1;26085:18;;;26078:29;26143:3;26123:18;;;26116:31;26164:18;;11752:11:0::1;25864:324:1::0;11367:408:0::1;11521:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11552:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11587:14:0::1;:35:::0;;;11637:9:::1;:24:::0;;-1:-1:-1;;11637:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;11704:13:::1;::::0;:2:::1;:13;:::i;:::-;11686:14;;:32;;;;:::i;:::-;11676:7;:42:::0;-1:-1:-1;;;;11805:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;11805:9:0::1;-1:-1:-1::0;;;;;11805:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11794:42:0::1;;11837:9;;;;;;;;;-1:-1:-1::0;;;;;11837:9:0::1;-1:-1:-1::0;;;;;11837:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11794:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;26702:15:1;;;11794:75:0::1;::::0;::::1;26684:34:1::0;11863:4:0::1;26734:18:1::0;;;26727:43;26596:18;;11794:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11785:6;:84:::0;;-1:-1:-1;;11785:84:0::1;-1:-1:-1::0;;;;;11785:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11880:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11880:22:0::1;-1:-1:-1::0;11880:22:0::1;::::0;;11930:7:::1;::::0;11945:5:::1;::::0;11930:11:::1;::::0;11940:1:::1;11930:11;:::i;:::-;11929:21;;;;:::i;:::-;11913:13;:37:::0;11975:7:::1;::::0;11991:5:::1;::::0;11975:12:::1;::::0;11985:2:::1;11975:12;:::i;:::-;11974:22;;;;:::i;:::-;11961:10;:35:::0;12023:7:::1;::::0;12038:3:::1;::::0;12023:11:::1;::::0;12033:1:::1;12023:11;:::i;:::-;12022:19;;;;:::i;:::-;12007:12;:34:::0;12070:7:::1;::::0;12085:3:::1;::::0;12070:11:::1;::::0;12080:1:::1;12070:11;:::i;:::-;12069:19;;;;:::i;:::-;12052:14;:36:::0;12099:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;12160:7:::1;::::0;12121:4:::1;12099:26:::0;12149:7:::1;13452::::0;13479:6;-1:-1:-1;;;;;13479:6:0;;13414:79;12149:7:::1;-1:-1:-1::0;;;;;12141:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12141:16:0;:26;12204:7:::1;13452::::0;13479:6;-1:-1:-1;;;;;13479:6:0;;13414:79;12204:7:::1;-1:-1:-1::0;;;;;12183:38:0::1;12200:1;-1:-1:-1::0;;;;;12183:38:0::1;;12213:7;;12183:38;;;;391:25:1::0;;379:2;364:18;;245:177;12183:38:0::1;;;;;;;;12266:9;::::0;12234:62:::1;::::0;12251:4:::1;::::0;-1:-1:-1;;;;;12266:9:0::1;-1:-1:-1::0;;12234:8:0::1;:62::i;:::-;12313:9;12309:168;12332:8;:15;12328:1;:19;12309:168;;;12402:9;::::0;12368:14:::1;::::0;12398:13:::1;::::0;12402:9:::1;;12398:2;:13;:::i;:::-;12385:7;12393:1;12385:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;12368:43;;12426:39;12436:7;13452::::0;13479:6;-1:-1:-1;;;;;13479:6:0;;13414:79;12436:7:::1;12445:8;12454:1;12445:11;;;;;;;;:::i;:::-;;;;;;;12458:6;12426:9;:39::i;:::-;;12353:124;12349:3;;;;;:::i;:::-;;;;12309:168;;;;12489:53;12499:7;13452::::0;13479:6;-1:-1:-1;;;;;13479:6:0;;13414:79;12499:7:::1;12516:4;12523:18;12533:7;13452::::0;13479:6;-1:-1:-1;;;;;13479:6:0;;13414:79;12489:53:::1;-1:-1:-1::0;12555:9:0::1;::::0;-1:-1:-1;;;;;12555:9:0::1;:25;12588:21;12633:4;12653:24;12633:4:::0;-1:-1:-1;;;;;15350:16:0;15323:7;15350:16;;;:7;:16;;;;;;;15257:117;12653:24:::1;12692:1;12735::::0;12778:7:::1;13452::::0;13479:6;-1:-1:-1;;;;;13479:6:0;;13414:79;12778:7:::1;12555:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;27363:15:1;;;12555:271:0::1;::::0;::::1;27345:34:1::0;27395:18;;;27388:34;;;;27438:18;;;27431:34;;;;27481:18;;;27474:34;27545:15;;;27524:19;;;27517:44;12800:15:0::1;27577:19:1::0;;;27570:35;27256:19;;12555:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12839:15;:13;:15::i;28163:482::-:0;28318:8;:15;28299:8;:15;:34;:72;;;;;28356:8;:15;28337:8;:15;:34;28299:72;28291:106;;;;-1:-1:-1;;;28291:106:0;;18836:2:1;28291:106:0;;;18818:21:1;18875:2;18855:18;;;18848:30;18914:23;18894:18;;;18887:51;18955:18;;28291:106:0;18634:345:1;28291:106:0;28413:7;28408:230;28430:8;:15;28426:1;:19;;;28408:230;;;28526:8;28535:1;28526:11;;;;;;;;;;:::i;:::-;;;;;;;28511:8;28520:1;28511:11;;;;;;;;;;:::i;:::-;;;;;;;28501:7;;:21;;;;:::i;:::-;28500:37;;;;:::i;:::-;28485:10;15323:7;15350:16;;;:7;:16;;;;;;28475:62;;28467:71;;;;;;28553:73;28563:10;28575:8;28584:1;28575:11;;;;;;;;;;:::i;:::-;;;;;;;28614:8;28623:1;28614:11;;;;;;;;;;:::i;:::-;;;;;;;28599:8;28608:1;28599:11;;;;;;;;;;:::i;:::-;;;;;;;28589:7;;:21;;;;:::i;:::-;28588:37;;;;:::i;28553:73::-;-1:-1:-1;28447:3:0;;;;:::i;:::-;;;;28408:230;;;;28163:482;;;:::o;16994:542::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;17065:20:::1;17098:9;17065:43;;17119:16;17149:10;-1:-1:-1::0;;;;;17149:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17138:40:0::1;;17187:4;17194:10;-1:-1:-1::0;;;;;17194:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17138:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;26702:15:1;;;17138:74:0::1;::::0;::::1;26684:34:1::0;26754:15;;26734:18;;;26727:43;26596:18;;17138:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17119:93:::0;-1:-1:-1;;;;;;17227:22:0;::::1;17223:200;;17286:10;-1:-1:-1::0;;;;;17286:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17275:43:0::1;;17327:4;17334:10;-1:-1:-1::0;;;;;17334:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17275:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;26702:15:1;;;17275:77:0::1;::::0;::::1;26684:34:1::0;26754:15;;26734:18;;;26727:43;26596:18;;17275:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17266:6;:86:::0;;-1:-1:-1;;17266:86:0::1;-1:-1:-1::0;;;;;17266:86:0;;;::::1;::::0;;;::::1;::::0;;17223:200:::1;;;17394:6;:17:::0;;-1:-1:-1;;17394:17:0::1;-1:-1:-1::0;;;;;17394:17:0;::::1;;::::0;;17223:200:::1;17433:9;:22:::0;;-1:-1:-1;;17433:22:0::1;-1:-1:-1::0;;;;;17433:22:0;::::1;::::0;;::::1;::::0;;;17466:62:::1;::::0;17483:4:::1;::::0;-1:-1:-1;;17466:8:0::1;:62::i;27591:183::-:0;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;27658:16:::1;::::0;::::1;::::0;::::1;;;27657:17;27649:58;;;::::0;-1:-1:-1;;;27649:58:0;;28129:2:1;27649:58:0::1;::::0;::::1;28111:21:1::0;28168:2;28148:18;;;28141:30;28207;28187:18;;;28180:58;28255:18;;27649:58:0::1;27927:352:1::0;27649:58:0::1;13452:7:::0;13479:6;;27718:48:::1;::::0;-1:-1:-1;;;;;13479:6:0;;;;27744:21:::1;27718:48:::0;::::1;;;::::0;27744:21;;27718:48;13452:7;27718:48;27744:21;13479:6;27718:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27591:183::o:0;18308:145::-;10053:6;;-1:-1:-1;;;;;10053:6:0;189:10;10053:22;10045:52;;;;-1:-1:-1;;;10045:52:0;;13894:2:1;10045:52:0;;;13876:21:1;13933:2;13913:18;;;13906:30;-1:-1:-1;;;13952:18:1;;;13945:47;14009:18;;10045:52:0;13692:341:1;10045:52:0;18398:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;22199:55:1;;;18398:47:0::1;::::0;::::1;22181:74:1::0;22298:14;;22291:22;22271:18;;;22264:50;18398:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;22154:18:1;;18398:47:0::1;22013:307:1::0;18767:125:0;18852:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;18852:32:0;;;160:74:1;18828:4:0;;18852:9;;;;;:23;;133:18:1;;18852:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15726:309::-;-1:-1:-1;;;;;15820:20:0;;15812:52;;;;-1:-1:-1;;;15812:52:0;;28736:2:1;15812:52:0;;;28718:21:1;28775:2;28755:18;;;28748:30;28814:21;28794:18;;;28787:49;28853:18;;15812:52:0;28534:343:1;15812:52:0;-1:-1:-1;;;;;15883:21:0;;15875:53;;;;-1:-1:-1;;;15875:53:0;;28736:2:1;15875:53:0;;;28718:21:1;28775:2;28755:18;;;28748:30;28814:21;28794:18;;;28787:49;28853:18;;15875:53:0;28534:343:1;15875:53:0;-1:-1:-1;;;;;15941:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15994:33;;391:25:1;;;15994:33:0;;364:18:1;15994:33:0;;;;;;;15726:309;;;:::o;22813:1818::-;22892:4;-1:-1:-1;;;;;22917:18:0;;22909:68;;;;-1:-1:-1;;;22909:68:0;;29084:2:1;22909:68:0;;;29066:21:1;29123:2;29103:18;;;29096:30;29162:34;29142:18;;;29135:62;29233:7;29213:18;;;29206:35;29258:19;;22909:68:0;28882:401:1;22909:68:0;-1:-1:-1;;;;;22996:16:0;;22988:64;;;;-1:-1:-1;;;22988:64:0;;29490:2:1;22988:64:0;;;29472:21:1;29529:2;29509:18;;;29502:30;29568:34;29548:18;;;29541:62;29639:5;29619:18;;;29612:33;29662:19;;22988:64:0;29288:399:1;22988:64:0;23080:1;23071:6;:10;23063:64;;;;-1:-1:-1;;;23063:64:0;;29894:2:1;23063:64:0;;;29876:21:1;29933:2;29913:18;;;29906:30;29972:34;29952:18;;;29945:62;30043:11;30023:18;;;30016:39;30072:19;;23063:64:0;29692:405:1;23063:64:0;23141:20;23152:4;23158:2;23141:10;:20::i;:::-;23138:665;;;23182:14;;;;23178:89;;23217:34;;-1:-1:-1;;;23217:34:0;;30304:2:1;23217:34:0;;;30286:21:1;30343:2;30323:18;;;30316:30;30382:26;30362:18;;;30355:54;30426:18;;23217:34:0;30102:348:1;23178:89:0;-1:-1:-1;;;;;23284:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;23301:11:0;;;;;;:7;:11;;;;;;;;23284:28;23281:248;;;-1:-1:-1;;;;;23337:27:0;;;;;;:21;:27;;;;;;;;23336:28;:58;;;;-1:-1:-1;;;;;;23369:25:0;;;;;;:21;:25;;;;;;;;23368:26;23336:58;23332:182;;;23437:12;;23427:6;:22;;23419:75;;;;-1:-1:-1;;;23419:75:0;;30657:2:1;23419:75:0;;;30639:21:1;30696:2;30676:18;;;30669:30;30735:34;30715:18;;;30708:62;30806:10;30786:18;;;30779:38;30834:19;;23419:75:0;30455:404:1;23419:75:0;23560:9;;-1:-1:-1;;;;;23546:24:0;;;23560:9;;23546:24;;;;:40;;-1:-1:-1;;;;;;23575:11:0;;;;;;:7;:11;;;;;;;;23574:12;23546:40;23543:249;;;-1:-1:-1;;;;;23612:25:0;;;;;;:21;:25;;;;;;;;23607:170;;23696:14;;23686:6;23670:13;23680:2;-1:-1:-1;;;;;15350:16:0;15323:7;15350:16;;;:7;:16;;;;;;;15257:117;23670:13;:22;;;;:::i;:::-;:40;;23662:95;;;;-1:-1:-1;;;23662:95:0;;31066:2:1;23662:95:0;;;31048:21:1;31105:2;31085:18;;;31078:30;31144:34;31124:18;;;31117:62;31215:12;31195:18;;;31188:40;31245:19;;23662:95:0;30864:406:1;23662:95:0;-1:-1:-1;;;;;23848:25:0;;23815:12;23848:25;;;:19;:25;;;;;;23830:4;;23848:25;;;:52;;-1:-1:-1;;;;;;23877:23:0;;;;;;:19;:23;;;;;;;;23848:52;23845:98;;;-1:-1:-1;23926:5:0;23845:98;-1:-1:-1;;;;;23959:11:0;;;;;;:7;:11;;;;;;;;23955:606;;;23992:6;;;;23991:7;:47;;;;-1:-1:-1;24019:19:0;;;;;;;23991:47;23987:557;;;24108:15;24088:17;;24077:8;;:28;;;;:::i;:::-;:46;24073:456;;;24197:4;24148:28;15350:16;;;:7;:16;;;;;;24254:13;;24230:37;;24226:284;;24323:10;;24299:20;:34;24296:77;;-1:-1:-1;24360:10:0;;24296:77;24399:34;24412:20;24399:12;:34::i;:::-;24471:15;24460:8;:26;24226:284;24125:404;24073:456;24579:44;24597:4;24603:2;24607:6;24615:7;24579:17;:44::i;:::-;24572:51;22813:1818;-1:-1:-1;;;;;22813:1818:0:o;22445:360::-;22513:4;13479:6;;-1:-1:-1;;;;;22537:15:0;;;13479:6;;22537:15;;;;:45;;-1:-1:-1;13452:7:0;13479:6;-1:-1:-1;;;;;22569:13:0;;;13479:6;;22569:13;;22537:45;:82;;;;-1:-1:-1;13452:7:0;13479:6;-1:-1:-1;;;;;13479:6:0;22599:9;:20;;22537:82;:121;;;;-1:-1:-1;;;;;;22637:21:0;;;;;;:17;:21;;;;;;;;22636:22;22537:121;:162;;;;-1:-1:-1;;;;;;22676:23:0;;;;;;:17;:23;;;;;;;;22675:24;22537:162;:189;;;;-1:-1:-1;;;;;;22716:10:0;;8775:42;22716:10;;22537:189;:222;;;;-1:-1:-1;;;;;;22743:16:0;;;;22537:222;:260;;;;-1:-1:-1;;;;;;22776:21:0;;22792:4;22776:21;;22537:260;22530:267;22445:360;-1:-1:-1;;;22445:360:0:o;24639:1991::-;9947:6;:13;;-1:-1:-1;;9947:13:0;9956:4;9947:13;;;24722:30:::1;::::0;;::::1;::::0;::::1;::::0;;24745:7:::1;24722:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;24763:56:::1;;24801:7;;;24763:56;24854:4;24834:26;::::0;;;:11:::1;:26;::::0;;;;;;;24869:9:::1;::::0;-1:-1:-1;;;;;24869:9:0::1;24834:46:::0;;;;;;;;-1:-1:-1;;24834:67:0::1;24831:165;;24938:4;24918:26;::::0;;;:11:::1;:26;::::0;;;;;;;24953:9:::1;::::0;-1:-1:-1;;;;;24953:9:0::1;24918:46:::0;;;;;;;-1:-1:-1;;24918:66:0;;24831:165:::1;25008:17;25089:1;25073:6;:12;;;25029:56;;25053:6;:16;;;25030:39;;:20;:39;;;;:::i;:::-;25029:56;;;;:::i;:::-;25028:62;;;;:::i;:::-;25008:82:::0;-1:-1:-1;25101:15:0::1;25119:32;25008:82:::0;25119:20;:32:::1;:::i;:::-;25196:16;::::0;;25210:1:::1;25196:16:::0;;;;;::::1;::::0;;25101:50;;-1:-1:-1;25172:21:0::1;::::0;25196:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25196:16:0::1;25172:40;;25241:4;25223;25228:1;25223:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25223:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25267:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;25223:7;;25267:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25257:4;25262:1;25257:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25257:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;25296:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;25371:7;;25296:9:::1;::::0;25409:4;;25436::::1;::::0;25456:15:::1;::::0;25296:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25516:21:0::1;::::0;-1:-1:-1;25495:18:0::1;::::0;-1:-1:-1;25602:7:0;;-1:-1:-1;25576:22:0::1;25589:9:::0;25516:21;25576:22:::1;:::i;:::-;25575:34;;;;:::i;:::-;25548:61:::0;-1:-1:-1;25626:13:0;;25622:328:::1;;25656:9;::::0;:222:::1;::::0;;;;25733:4:::1;25656:222;::::0;::::1;27345:34:1::0;27395:18;;;27388:34;;;25656:9:0::1;27438:18:1::0;;;27431:34;;;27481:18;;;27474:34;8775:42:0::1;27524:19:1::0;;;27517:44;25848:15:0::1;27577:19:1::0;;;27570:35;-1:-1:-1;;;;;25656:9:0;;::::1;::::0;:25:::1;::::0;25689:16;;27256:19:1;;25656:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25898:40:0::1;::::0;;32059:25:1;;;32115:2;32100:18;;32093:34;;;25898:40:0::1;::::0;-1:-1:-1;32032:18:1;25898:40:0::1;;;;;;;25622:328;25976:16:::0;;25960:12:::1;::::0;::::1;:32:::0;;::::1;::::0;25976:16;;25960:32:::1;:::i;:::-;;;::::0;;-1:-1:-1;26003:30:0::1;26017:16:::0;26003:30;::::1;:::i;:::-;;;26044:22;26101:6;:12;;;26069:44;;26087:10;26070:6;:14;;;:27;;;;;;:::i;:::-;26069:44;;;;:::i;:::-;26044:69;;26124:26;26189:6;:12;;;26153:48;;26175:10;26154:6;:18;;;:31;;;;;;:::i;:::-;26153:48;;;;:::i;:::-;26124:77:::0;-1:-1:-1;26212:24:0::1;26253:35;26124:77:::0;26253:14;:35:::1;:::i;:::-;26239:50;::::0;:10;:50:::1;:::i;:::-;26304:14;::::0;::::1;::::0;26212:77;;-1:-1:-1;26304:18:0::1;;::::0;26300:95:::1;;26339:19:::0;;:44:::1;::::0;-1:-1:-1;;;;;26339:19:0;;::::1;::::0;:44;::::1;;;::::0;26368:14;;26339:19:::1;:44:::0;:19;:44;26368:14;26339:19;:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26300:95;26409:18;::::0;::::1;::::0;:22:::1;;::::0;26405:107:::1;;26448:23:::0;;:52:::1;::::0;-1:-1:-1;;;;;26448:23:0;;::::1;::::0;:52;::::1;;;::::0;26481:18;;26448:23:::1;:52:::0;:23;:52;26481:18;26448:23;:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26405:107;26526:16;::::0;::::1;::::0;:20:::1;;::::0;26522:101:::1;;26563:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;26563:21:0;;::::1;::::0;:48;::::1;;;::::0;26594:16;;26563:21:::1;:48:::0;:21;:48;26594:16;26563:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26522:101;24711:1919;;;;;;;;;9971:1;-1:-1:-1::0;9983:6:0;:14;;-1:-1:-1;;9983:14:0;;;24639:1991::o;28653:905::-;28775:16;;28753:4;;28775:16;;;;;28770:221;;28808:28;28827:4;28833:2;28808:18;:28::i;:::-;28856:16;;;;;;;28855:17;:41;;;;;28876:20;28887:4;28893:2;28876:10;:20::i;:::-;28851:129;;;28917:47;;-1:-1:-1;;;28917:47:0;;32562:2:1;28917:47:0;;;32544:21:1;32601:2;32581:18;;;32574:30;32640:34;32620:18;;;32613:62;32711:7;32691:18;;;32684:35;32736:19;;28917:47:0;32360:401:1;28851:129:0;29007:20;29018:4;29024:2;29007:10;:20::i;:::-;29003:314;;;29075:9;;:37;;;;;-1:-1:-1;;;;;33047:15:1;;;29075:37:0;;;33029:34:1;33099:15;;;33079:18;;;33072:43;33131:18;;;33124:34;;;29044:12:0;;29075:9;;;;;:19;;32941:18:1;;29075:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;29075:37:0;;;;;;;;-1:-1:-1;;29075:37:0;;;;;;;;;;;;:::i;:::-;;;29071:163;;29210:8;;;29071:163;29163:5;-1:-1:-1;29254:7:0;29250:56;;29282:8;;;29250:56;29029:288;29003:314;-1:-1:-1;;;;;29329:13:0;;;;;;:7;:13;;;;;:23;;29346:6;;29329:13;:23;;29346:6;;29329:23;:::i;:::-;;;;-1:-1:-1;29363:22:0;;-1:-1:-1;29389:7:0;29388:48;;29430:6;29388:48;;;29400:27;29410:4;29416:2;29420:6;29400:9;:27::i;:::-;-1:-1:-1;;;;;29447:11:0;;;;;;:7;:11;;;;;:29;;29363:73;;-1:-1:-1;29363:73:0;;29447:11;;;:29;;29363:73;;29447:29;:::i;:::-;;;;;;;;29509:2;-1:-1:-1;;;;;29494:34:0;29503:4;-1:-1:-1;;;;;29494:34:0;;29513:14;29494:34;;;;391:25:1;;379:2;364:18;;245:177;29494:34:0;;;;;;;;-1:-1:-1;29546:4:0;;28653:905;-1:-1:-1;;;;;28653:905:0:o;26638:508::-;26720:16;;;;;;;26719:17;26711:65;;;;-1:-1:-1;;;26711:65:0;;33371:2:1;26711:65:0;;;33353:21:1;33410:2;33390:18;;;33383:30;33449:34;33429:18;;;33422:62;33520:5;33500:18;;;33493:33;33543:19;;26711:65:0;33169:399:1;26711:65:0;26792:20;26803:4;26809:2;26792:10;:20::i;:::-;26791:21;:37;;;;-1:-1:-1;26822:6:0;;-1:-1:-1;;;;;26816:12:0;;;26822:6;;26816:12;26791:37;26787:352;;;-1:-1:-1;;;;;26845:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;26845:30:0;26871:4;26845:30;;;26890:16;:23;;-1:-1:-1;;26890:23:0;26845:30;26890:23;;;;;26939:9;;;;26928:107;;26983:9;:36;;;;27013:4;26983:36;;;;;26928:107;27049:19;:26;;-1:-1:-1;;27049:26:0;;;;;27095:32;;-1:-1:-1;5192:41:1;;27095:32:0;;5180:2:1;5165:18;27095:32:0;;;;;;;26638:508;;:::o;29566:581::-;-1:-1:-1;;;;;29698:13:0;;29645:7;29698:13;;;:7;:13;;;;;;29645:7;;29698:13;;29694:222;;;-1:-1:-1;29741:9:0;:16;;;29694:222;;;-1:-1:-1;;;;;29779:11:0;;;;;;:7;:11;;;;;;;;29775:141;;;-1:-1:-1;29820:9:0;:17;;;;;;29775:141;;;-1:-1:-1;29883:9:0;:21;;;;;;29775:141;29970:10;:27;29928:17;;29970:27;;;;;29948:19;29957:10;29948:6;:19;:::i;:::-;:49;;;;:::i;:::-;30026:4;30010:22;;;;:7;:22;;;;;:35;;29928:69;;-1:-1:-1;29928:69:0;;30010:22;;;:35;;29928:69;;30010:35;:::i;:::-;;;;-1:-1:-1;;30061:40:0;;391:25:1;;;30084:4:0;;-1:-1:-1;;;;;30061:40:0;;;;;379:2:1;364:18;30061:40:0;;;;;;;30121:18;30130:9;30121:6;:18;:::i;:::-;30114:25;29566:581;-1:-1:-1;;;;;;29566:581:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;3019:258::-;3091:1;3101:113;3115:6;3112:1;3109:13;3101:113;;;3191:11;;;3185:18;3172:11;;;3165:39;3137:2;3130:10;3101:113;;;3232:6;3229:1;3226:13;3223:48;;;-1:-1:-1;;3267:1:1;3249:16;;3242:27;3019:258::o;3282:442::-;3431:2;3420:9;3413:21;3394:4;3463:6;3457:13;3506:6;3501:2;3490:9;3486:18;3479:34;3522:66;3581:6;3576:2;3565:9;3561:18;3556:2;3548:6;3544:15;3522:66;:::i;:::-;3640:2;3628:15;-1:-1:-1;;3624:88:1;3609:104;;;;3715:2;3605:113;;3282:442;-1:-1:-1;;3282:442:1:o;3729:159::-;3796:20;;3856:6;3845:18;;3835:29;;3825:57;;3878:1;3875;3868:12;3825:57;3729:159;;;:::o;3893:401::-;3975:6;3983;3991;3999;4052:3;4040:9;4031:7;4027:23;4023:33;4020:53;;;4069:1;4066;4059:12;4020:53;4092:28;4110:9;4092:28;:::i;:::-;4082:38;;4139:37;4172:2;4161:9;4157:18;4139:37;:::i;:::-;4129:47;;4195:37;4228:2;4217:9;4213:18;4195:37;:::i;:::-;4185:47;;4251:37;4284:2;4273:9;4269:18;4251:37;:::i;:::-;4241:47;;3893:401;;;;;;;:::o;4547:180::-;4606:6;4659:2;4647:9;4638:7;4634:23;4630:32;4627:52;;;4675:1;4672;4665:12;4627:52;-1:-1:-1;4698:23:1;;4547:180;-1:-1:-1;4547:180:1:o;4732:315::-;4800:6;4808;4861:2;4849:9;4840:7;4836:23;4832:32;4829:52;;;4877:1;4874;4867:12;4829:52;4916:9;4903:23;4935:31;4960:5;4935:31;:::i;:::-;4985:5;5037:2;5022:18;;;;5009:32;;-1:-1:-1;;;4732:315:1:o;5693:456::-;5770:6;5778;5786;5839:2;5827:9;5818:7;5814:23;5810:32;5807:52;;;5855:1;5852;5845:12;5807:52;5894:9;5881:23;5913:31;5938:5;5913:31;:::i;:::-;5963:5;-1:-1:-1;6020:2:1;6005:18;;5992:32;6033:33;5992:32;6033:33;:::i;:::-;5693:456;;6085:7;;-1:-1:-1;;;6139:2:1;6124:18;;;;6111:32;;5693:456::o;6154:248::-;6222:6;6230;6283:2;6271:9;6262:7;6258:23;6254:32;6251:52;;;6299:1;6296;6289:12;6251:52;-1:-1:-1;;6322:23:1;;;6392:2;6377:18;;;6364:32;;-1:-1:-1;6154:248:1:o;6407:662::-;6461:5;6514:3;6507:4;6499:6;6495:17;6491:27;6481:55;;6532:1;6529;6522:12;6481:55;6568:6;6555:20;6594:4;6618:60;6634:43;6674:2;6634:43;:::i;6618:60::-;6712:15;;;6798:1;6794:10;;;;6782:23;;6778:32;;;6743:12;;;;6822:15;;;6819:35;;;6850:1;6847;6840:12;6819:35;6886:2;6878:6;6874:15;6898:142;6914:6;6909:3;6906:15;6898:142;;;6980:17;;6968:30;;7018:12;;;;6931;;6898:142;;7074:595;7192:6;7200;7253:2;7241:9;7232:7;7228:23;7224:32;7221:52;;;7269:1;7266;7259:12;7221:52;7309:9;7296:23;7338:18;7379:2;7371:6;7368:14;7365:34;;;7395:1;7392;7385:12;7365:34;7418:61;7471:7;7462:6;7451:9;7447:22;7418:61;:::i;:::-;7408:71;;7532:2;7521:9;7517:18;7504:32;7488:48;;7561:2;7551:8;7548:16;7545:36;;;7577:1;7574;7567:12;7545:36;;7600:63;7655:7;7644:8;7633:9;7629:24;7600:63;:::i;:::-;7590:73;;;7074:595;;;;;:::o;7674:647::-;7748:6;7756;7764;7772;7825:3;7813:9;7804:7;7800:23;7796:33;7793:53;;;7842:1;7839;7832:12;7793:53;7881:9;7868:23;7900:28;7922:5;7900:28;:::i;:::-;7947:5;-1:-1:-1;8004:2:1;7989:18;;7976:32;8017:30;7976:32;8017:30;:::i;:::-;8066:7;-1:-1:-1;8125:2:1;8110:18;;8097:32;8138:30;8097:32;8138:30;:::i;:::-;8187:7;-1:-1:-1;8246:2:1;8231:18;;8218:32;8259:30;8218:32;8259:30;:::i;:::-;7674:647;;;;-1:-1:-1;7674:647:1;;-1:-1:-1;;7674:647:1:o;8515:328::-;8589:6;8597;8605;8658:2;8646:9;8637:7;8633:23;8629:32;8626:52;;;8674:1;8671;8664:12;8626:52;8697:28;8715:9;8697:28;:::i;:::-;8687:38;;8744:37;8777:2;8766:9;8762:18;8744:37;:::i;:::-;8734:47;;8800:37;8833:2;8822:9;8818:18;8800:37;:::i;:::-;8790:47;;8515:328;;;;;:::o;8848:247::-;8907:6;8960:2;8948:9;8939:7;8935:23;8931:32;8928:52;;;8976:1;8973;8966:12;8928:52;9015:9;9002:23;9034:31;9059:5;9034:31;:::i;9100:454::-;9195:6;9203;9211;9219;9227;9280:3;9268:9;9259:7;9255:23;9251:33;9248:53;;;9297:1;9294;9287:12;9248:53;-1:-1:-1;;9320:23:1;;;9390:2;9375:18;;9362:32;;-1:-1:-1;9441:2:1;9426:18;;9413:32;;9492:2;9477:18;;9464:32;;-1:-1:-1;9543:3:1;9528:19;9515:33;;-1:-1:-1;9100:454:1;-1:-1:-1;9100:454:1:o;9559:382::-;9624:6;9632;9685:2;9673:9;9664:7;9660:23;9656:32;9653:52;;;9701:1;9698;9691:12;9653:52;9740:9;9727:23;9759:31;9784:5;9759:31;:::i;:::-;9809:5;-1:-1:-1;9866:2:1;9851:18;;9838:32;9879:30;9838:32;9879:30;:::i;9946:553::-;10047:6;10055;10063;10116:2;10104:9;10095:7;10091:23;10087:32;10084:52;;;10132:1;10129;10122:12;10084:52;10171:9;10158:23;10190:31;10215:5;10190:31;:::i;:::-;10240:5;-1:-1:-1;10297:2:1;10282:18;;10269:32;10310:33;10269:32;10310:33;:::i;:::-;10362:7;-1:-1:-1;10421:2:1;10406:18;;10393:32;10434:33;10393:32;10434:33;:::i;:::-;10486:7;10476:17;;;9946:553;;;;;:::o;10504:241::-;10560:6;10613:2;10601:9;10592:7;10588:23;10584:32;10581:52;;;10629:1;10626;10619:12;10581:52;10668:9;10655:23;10687:28;10709:5;10687:28;:::i;11278:388::-;11346:6;11354;11407:2;11395:9;11386:7;11382:23;11378:32;11375:52;;;11423:1;11420;11413:12;11375:52;11462:9;11449:23;11481:31;11506:5;11481:31;:::i;:::-;11531:5;-1:-1:-1;11588:2:1;11573:18;;11560:32;11601:33;11560:32;11601:33;:::i;11671:730::-;11798:6;11806;11814;11867:2;11855:9;11846:7;11842:23;11838:32;11835:52;;;11883:1;11880;11873:12;11835:52;11923:9;11910:23;11952:18;11993:2;11985:6;11982:14;11979:34;;;12009:1;12006;11999:12;11979:34;12032:61;12085:7;12076:6;12065:9;12061:22;12032:61;:::i;:::-;12022:71;;12146:2;12135:9;12131:18;12118:32;12102:48;;12175:2;12165:8;12162:16;12159:36;;;12191:1;12188;12181:12;12159:36;;12214:63;12269:7;12258:8;12247:9;12243:24;12214:63;:::i;:::-;12204:73;;;12327:2;12316:9;12312:18;12299:32;12340:31;12365:5;12340:31;:::i;12406:821::-;12558:6;12566;12574;12627:2;12615:9;12606:7;12602:23;12598:32;12595:52;;;12643:1;12640;12633:12;12595:52;12683:9;12670:23;12712:18;12753:2;12745:6;12742:14;12739:34;;;12769:1;12766;12759:12;12739:34;12792:61;12845:7;12836:6;12825:9;12821:22;12792:61;:::i;:::-;12782:71;;12906:2;12895:9;12891:18;12878:32;12862:48;;12935:2;12925:8;12922:16;12919:36;;;12951:1;12948;12941:12;12919:36;12974:63;13029:7;13018:8;13007:9;13003:24;12974:63;:::i;:::-;12964:73;;13090:2;13079:9;13075:18;13062:32;13046:48;;13119:2;13109:8;13106:16;13103:36;;;13135:1;13132;13125:12;13103:36;;13158:63;13213:7;13202:8;13191:9;13187:24;13158:63;:::i;:::-;13148:73;;;12406:821;;;;;:::o;14038:484::-;14091:3;14129:5;14123:12;14156:6;14151:3;14144:19;14182:4;14211:2;14206:3;14202:12;14195:19;;14248:2;14241:5;14237:14;14269:1;14279:218;14293:6;14290:1;14287:13;14279:218;;;14358:13;;-1:-1:-1;;;;;14354:62:1;14342:75;;14437:12;;;;14472:15;;;;14315:1;14308:9;14279:218;;;-1:-1:-1;14513:3:1;;14038:484;-1:-1:-1;;;;;14038:484:1:o;14527:342::-;14728:2;14717:9;14710:21;14691:4;14748:56;14800:2;14789:9;14785:18;14777:6;14748:56;:::i;:::-;14740:64;;14854:6;14847:14;14840:22;14835:2;14824:9;14820:18;14813:50;14527:342;;;;;:::o;14874:437::-;14953:1;14949:12;;;;14996;;;15017:61;;15071:4;15063:6;15059:17;15049:27;;15017:61;15124:2;15116:6;15113:14;15093:18;15090:38;15087:218;;;15161:77;15158:1;15151:88;15262:4;15259:1;15252:15;15290:4;15287:1;15280:15;15087:218;;14874:437;;;:::o;15316:184::-;15368:77;15365:1;15358:88;15465:4;15462:1;15455:15;15489:4;15486:1;15479:15;15505:224;15544:3;15572:6;15605:2;15602:1;15598:10;15635:2;15632:1;15628:10;15666:3;15662:2;15658:12;15653:3;15650:21;15647:47;;;15674:18;;:::i;:::-;15710:13;;15505:224;-1:-1:-1;;;;15505:224:1:o;16070:482::-;16159:1;16202:5;16159:1;16216:330;16237:7;16227:8;16224:21;16216:330;;;16356:4;-1:-1:-1;;16284:77:1;16278:4;16275:87;16272:113;;;16365:18;;:::i;:::-;16415:7;16405:8;16401:22;16398:55;;;16435:16;;;;16398:55;16514:22;;;;16474:15;;;;16216:330;;;16220:3;16070:482;;;;;:::o;16557:866::-;16606:5;16636:8;16626:80;;-1:-1:-1;16677:1:1;16691:5;;16626:80;16725:4;16715:76;;-1:-1:-1;16762:1:1;16776:5;;16715:76;16807:4;16825:1;16820:59;;;;16893:1;16888:130;;;;16800:218;;16820:59;16850:1;16841:10;;16864:5;;;16888:130;16925:3;16915:8;16912:17;16909:43;;;16932:18;;:::i;:::-;-1:-1:-1;;16988:1:1;16974:16;;17003:5;;16800:218;;17102:2;17092:8;17089:16;17083:3;17077:4;17074:13;17070:36;17064:2;17054:8;17051:16;17046:2;17040:4;17037:12;17033:35;17030:77;17027:159;;;-1:-1:-1;17139:19:1;;;17171:5;;17027:159;17218:34;17243:8;17237:4;17218:34;:::i;:::-;17348:6;-1:-1:-1;;17276:79:1;17267:7;17264:92;17261:118;;;17359:18;;:::i;:::-;17397:20;;16557:866;-1:-1:-1;;;16557:866:1:o;17428:140::-;17486:5;17515:47;17556:4;17546:8;17542:19;17536:4;17515:47;:::i;17573:274::-;17613:1;17639;17629:189;;17674:77;17671:1;17664:88;17775:4;17772:1;17765:15;17803:4;17800:1;17793:15;17629:189;-1:-1:-1;17832:9:1;;17573:274::o;17852:125::-;17892:4;17920:1;17917;17914:8;17911:34;;;17925:18;;:::i;:::-;-1:-1:-1;17962:9:1;;17852:125::o;17982:228::-;18022:7;18148:1;-1:-1:-1;;18076:74:1;18073:1;18070:81;18065:1;18058:9;18051:17;18047:105;18044:131;;;18155:18;;:::i;:::-;-1:-1:-1;18195:9:1;;17982:228::o;18984:184::-;19036:77;19033:1;19026:88;19133:4;19130:1;19123:15;19157:4;19154:1;19147:15;19173:175;19210:3;19254:4;19247:5;19243:16;19283:4;19274:7;19271:17;19268:43;;;19291:18;;:::i;:::-;19340:1;19327:15;;19173:175;-1:-1:-1;;19173:175:1:o;20141:128::-;20181:3;20212:1;20208:6;20205:1;20202:13;20199:39;;;20218:18;;:::i;:::-;-1:-1:-1;20254:9:1;;20141:128::o;21128:184::-;21198:6;21251:2;21239:9;21230:7;21226:23;21222:32;21219:52;;;21267:1;21264;21257:12;21219:52;-1:-1:-1;21290:16:1;;21128:184;-1:-1:-1;21128:184:1:o;24524:556::-;24578:5;24631:3;24624:4;24616:6;24612:17;24608:27;24598:55;;24649:1;24646;24639:12;24598:55;24678:6;24672:13;24704:18;24700:2;24697:26;24694:52;;;24726:18;;:::i;:::-;24770:114;24878:4;-1:-1:-1;;24802:4:1;24798:2;24794:13;24790:86;24786:97;24770:114;:::i;:::-;24909:2;24900:7;24893:19;24955:3;24948:4;24943:2;24935:6;24931:15;24927:26;24924:35;24921:55;;;24972:1;24969;24962:12;24921:55;24985:64;25046:2;25039:4;25030:7;25026:18;25019:4;25011:6;25007:17;24985:64;:::i;25085:774::-;25200:6;25208;25216;25224;25277:3;25265:9;25256:7;25252:23;25248:33;25245:53;;;25294:1;25291;25284:12;25245:53;25327:9;25321:16;25356:18;25397:2;25389:6;25386:14;25383:34;;;25413:1;25410;25403:12;25383:34;25436:61;25489:7;25480:6;25469:9;25465:22;25436:61;:::i;:::-;25426:71;;25543:2;25532:9;25528:18;25522:25;25506:41;;25572:2;25562:8;25559:16;25556:36;;;25588:1;25585;25578:12;25556:36;;25611:63;25666:7;25655:8;25644:9;25640:24;25611:63;:::i;:::-;25601:73;;;25714:2;25703:9;25699:18;25693:25;25683:35;;25761:2;25750:9;25746:18;25740:25;25805:4;25798:5;25794:16;25787:5;25784:27;25774:55;;25825:1;25822;25815:12;26193:251;26263:6;26316:2;26304:9;26295:7;26291:23;26287:32;26284:52;;;26332:1;26329;26322:12;26284:52;26364:9;26358:16;26383:31;26408:5;26383:31;:::i;26781:195::-;26820:3;-1:-1:-1;;26844:5:1;26841:77;26838:103;;;26921:18;;:::i;:::-;-1:-1:-1;26968:1:1;26957:13;;26781:195::o;27616:306::-;27704:6;27712;27720;27773:2;27761:9;27752:7;27748:23;27744:32;27741:52;;;27789:1;27786;27779:12;27741:52;27818:9;27812:16;27802:26;;27868:2;27857:9;27853:18;27847:25;27837:35;;27912:2;27901:9;27897:18;27891:25;27881:35;;27616:306;;;;;:::o;28284:245::-;28351:6;28404:2;28392:9;28383:7;28379:23;28375:32;28372:52;;;28420:1;28417;28410:12;28372:52;28452:9;28446:16;28471:28;28493:5;28471:28;:::i;31275:605::-;31574:6;31563:9;31556:25;31617:6;31612:2;31601:9;31597:18;31590:34;31660:3;31655:2;31644:9;31640:18;31633:31;31537:4;31681:57;31733:3;31722:9;31718:19;31710:6;31681:57;:::i;:::-;-1:-1:-1;;;;;31774:55:1;;;;31769:2;31754:18;;31747:83;-1:-1:-1;31861:3:1;31846:19;31839:35;31673:65;31275:605;-1:-1:-1;;;31275:605:1:o;32138:217::-;32177:4;32206:6;32262:10;;;;32232;;32284:12;;;32281:38;;;32299:18;;:::i;:::-;32336:13;;32138:217;-1:-1:-1;;;32138:217:1:o

Swarm Source

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