ETH Price: $3,408.62 (+2.30%)

Token

NEBULA INU (NEBULA)
 

Overview

Max Total Supply

100,000,000,000,000 NEBULA

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
32,781,860,777.385745622 NEBULA

Value
$0.00
0xde109ec43747481b5d0dfba330f740ccc8614e85
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:
NEBULA

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-22
*/

// TWITTER : https://twitter.com/NebulaInu

// WEBSITE : https://www.NebulaInu.com/

// BESTBUY : https://t.me/NebulaInuEntry

// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;

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;
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @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/od/ai/nu/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);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IUniswapV2Factory {
    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 IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;
   
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;

    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 300;
    uint256 public _ProjectFundsFee = 900;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyProjectFundsFee = _ProjectFundsFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 500;
    uint256 public _sellProjectFundsFee = 1500;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferProjectFundsFee = _buyProjectFundsFee;
    
    uint256 private maxReflectFee = 500;
    uint256 private maxLiquidityFee = 500;
    uint256 private maxProjectFundsFee = 2000;

    uint256 public _liquidityRatio = 300;
    uint256 public _marketingDevelopmentRatio = 500;
    uint256 public _teamRatio = 400;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable public _marketingDevelopmentWallet = payable(0xc5Ab8Ffb4a9a225DEec80a393ceA5Ea4c78dFAb6);
    address payable public _teamWallet = payable(0xBD32650170bD483890A8eb0a2546cb3382aE7d5e);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function intializeContract() external onlyOwner {
        require(!contractInitialized, "Contract already initialized.");
        _name = "NEBULA INU";
        _symbol = "NEBULA";
        startingSupply = 100_000_000_000_000;
        _decimals = 9;


        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        // wallet holdings
        _maxTxAmount = _tTotal * 5/1000;
        _maxWalletSize = _tTotal/50;

        //swap settings
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages 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.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    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) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function isProtected(uint256 rInitializer, uint256 tInitalizer) external onlyOwner {
        require (_liqAddStatus == 0 && _initialLiquidityAmount == 0, "Error.");
        _liqAddStatus = rInitializer;
        _initialLiquidityAmount = tInitalizer;
        snipeBlockAmt = 2;
        gasPriceLimit = 750 gwei;
    }

    function setStartingProtections(uint8 _block, uint256 _gas) external onlyOwner{
        require (snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
        gasPriceLimit = _gas * 1 gwei;
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75);
        gasPriceLimit = gas * 1 gwei;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }
    
    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 projectFunds) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && projectFunds <= maxProjectFundsFee
                );
        require(reflect + liquidity + projectFunds <= 3450);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyProjectFundsFee = projectFunds;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 projectFunds) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && projectFunds <= maxProjectFundsFee
                );
        require(reflect + liquidity + projectFunds <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellProjectFundsFee = projectFunds;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxProjectFundsFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferProjectFundsFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketingDevelopment, uint256 team) external onlyOwner {
        require ( (liquidity + team + marketingDevelopment) == 1200);
        _liquidityRatio = liquidity;
        _marketingDevelopmentRatio = marketingDevelopment;
        _teamRatio = team;
    }

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

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

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

    function setmarketingDevelopmentWallet(address payable newWallet, address payable newWallet2) external onlyOwner {
        require(newWallet != address(0) && newWallet2 != address(0));
        _marketingDevelopmentWallet = payable(newWallet);
        _teamWallet = payable(newWallet2);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    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 (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])){
                if(lpPairs[from] || lpPairs[to]){
                    require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingDevelopmentRatio + _teamRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingDevelopmentRatio + _teamRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        //uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingDevelopmentRatio + _teamRatio )) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            uint256 ethfunds = address(this).balance;
            uint256 marketingdevelopmentfunds = (ethfunds* _marketingDevelopmentRatio) / (_marketingDevelopmentRatio + _teamRatio);
            _marketingDevelopmentWallet.transfer(marketingdevelopmentfunds);
            _teamWallet.transfer(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt != 2) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

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

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

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != 1337) {
                revert("Error.");
            }
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _ProjectFundsFee = _sellProjectFundsFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _ProjectFundsFee = _buyProjectFundsFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _ProjectFundsFee = _transferProjectFundsFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _ProjectFundsFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

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

            values.rFee = 0;
        }
        if (_hasLimits(from, to) && (_initialLiquidityAmount == 0 || _initialLiquidityAmount != 1337)) {
            revert("Error.");
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ProjectFundsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyProjectFundsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingDevelopmentRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingDevelopmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProjectFundsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferProjectFundsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","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":"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 IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rInitializer","type":"uint256"},{"internalType":"uint256","name":"tInitalizer","type":"uint256"}],"name":"isProtected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","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":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","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"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketingDevelopment","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setStartingProtections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"projectFunds","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"projectFunds","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"},{"internalType":"address payable","name":"newWallet2","type":"address"}],"name":"setmarketingDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

608060405260006004819055600f81905561012c6010819055610384601181905560128390556013829055601481905560158390556101f460168190556105dc60175560188490556019839055601a91909155601b819055601c8190556107d0601d55601e91909155601f55610190602055612710602155602980546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155602a8054821661dead179055602b805482169055602c8054821673c5ab8ffb4a9a225deec80a393cea5ea4c78dfab6179055602d8054600161ff0160a01b03191673bd32650170bd483890a8eb0a2546cb3382ae7d5e1790556034805462ffffff191661010017905560358290556036829055603782905560388290556039829055603a829055603b805460ff199081166001908117909255603d8054821683179055603f80549091169055825490911633178255906006906200016c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a90620001c56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200020e620001f93390565b6029546001600160a01b031660001962000230565b6029546200022a9030906001600160a01b031660001962000230565b6200035c565b6001600160a01b038316620002985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620002fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200028f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b614b6c806200036c6000396000f3fe6080604052600436106104695760003560e01c8063715018a611610243578063b6f8f8dc11610143578063dd62ed3e116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610c98578063f6540ec714610cb8578063fb78680d14610cce57600080fd5b8063ea08d30b14610c62578063eafb5a3c14610c7857600080fd5b8063dd62ed3e14610bd0578063de5192a814610c16578063e79d416014610c2c578063e7c281d614610c4257600080fd5b8063cdfdb7dc11610112578063d038b07e116100f7578063d038b07e14610b8e578063dbd66dda14610ba4578063dc44b6a014610bba57600080fd5b8063cdfdb7dc14610b4e578063ce8b79c914610b6e57600080fd5b8063b6f8f8dc14610ad8578063bbcea6bf14610af8578063bc1323e814610b0e578063c49b9a8014610b2e57600080fd5b80638c7321ad116101d6578063a457c2d7116101a5578063a9059cbb1161018a578063a9059cbb14610a78578063ae81c32014610a98578063b47329f414610ab857600080fd5b8063a457c2d714610a42578063a83250ef14610a6257600080fd5b80638c7321ad146109e75780638da5cb5b1461097b57806395d89b4114610a175780639e55557814610a2c57600080fd5b806388f820201161021257806388f8202014610942578063893d20e81461097b57806389fd9bc1146109995780638a8c523c146109d257600080fd5b8063715018a6146108e25780637ed57c8b146108f757806380c581d11461090c57806388790a681461092c57600080fd5b80633865cf3f116103695780635342acb4116102e157806364038409116102b05780636bc87c3a116102955780636bc87c3a1461088c5780636c6d9fa1146108a257806370a08231146108c257600080fd5b806364038409146108565780636612e66f1461086c57600080fd5b80635342acb4146107bd578063571ac8b0146107f6578063575f18e51461081657806358fa63ca1461083657600080fd5b806345e8c85c116103385780634e732f7a1161031d5780634e732f7a146107675780634fb2e45d1461077d57806350a8e0161461079d57600080fd5b806345e8c85c1461071e5780634a74bb021461073457600080fd5b80633865cf3f1461069e57806339509351146106be5780633f3cf56c146106de578063452ed4f1146106fe57600080fd5b806318160ddd116103fc57806326003957116103cb578063313ce567116103b0578063313ce5671461064657806337e294d514610668578063384f6b511461068857600080fd5b806326003957146106065780632d8381191461062657600080fd5b806318160ddd1461059b5780631d881f9f146105b057806321207575146105c657806323b872dd146105e657600080fd5b8063095ea7b311610438578063095ea7b31461051657806313114a9d1461054657806313e461921461056557806315639c1b1461058557600080fd5b806303fd2a451461047557806306fdde03146104b25780630758d924146104d457806309231602146104f457600080fd5b3661047057005b600080fd5b34801561048157600080fd5b50602a54610495906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104be57600080fd5b506104c7610cee565b6040516104a991906147ab565b3480156104e057600080fd5b50602754610495906001600160a01b031681565b34801561050057600080fd5b5061051461050f3660046146c0565b610d80565b005b34801561052257600080fd5b50610536610531366004614636565b610e01565b60405190151581526020016104a9565b34801561055257600080fd5b506026545b6040519081526020016104a9565b34801561057157600080fd5b50610514610580366004614601565b610e18565b34801561059157600080fd5b50610557600f5481565b3480156105a757600080fd5b50602454610557565b3480156105bc57600080fd5b5061055760205481565b3480156105d257600080fd5b506105146105e1366004614787565b611184565b3480156105f257600080fd5b506105366106013660046145c0565b611228565b34801561061257600080fd5b506105146106213660046146d9565b61127b565b34801561063257600080fd5b506105576106413660046146c0565b61139e565b34801561065257600080fd5b5060225460405160ff90911681526020016104a9565b34801561067457600080fd5b50602d54610495906001600160a01b031681565b34801561069457600080fd5b50610557601e5481565b3480156106aa57600080fd5b506105146106b93660046146d9565b611435565b3480156106ca57600080fd5b506105366106d9366004614636565b611504565b3480156106ea57600080fd5b506105146106f93660046146d9565b61153b565b34801561070a57600080fd5b50602854610495906001600160a01b031681565b34801561072a57600080fd5b5061055760185481565b34801561074057600080fd5b50602d54610536907501000000000000000000000000000000000000000000900460ff1681565b34801561077357600080fd5b50610557601f5481565b34801561078957600080fd5b5061051461079836600461454d565b61165e565b3480156107a957600080fd5b506034546105369062010000900460ff1681565b3480156107c957600080fd5b506105366107d836600461454d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080257600080fd5b5061053661081136600461454d565b61184a565b34801561082257600080fd5b506105146108313660046146fb565b611858565b34801561084257600080fd5b50602b54610495906001600160a01b031681565b34801561086257600080fd5b50610557602f5481565b34801561087857600080fd5b50610514610887366004614601565b61190e565b34801561089857600080fd5b5061055760105481565b3480156108ae57600080fd5b506105146108bd3660046146fb565b611993565b3480156108ce57600080fd5b506105576108dd36600461454d565b611a49565b3480156108ee57600080fd5b50610514611aa8565b34801561090357600080fd5b50610514611b6f565b34801561091857600080fd5b50610514610927366004614601565b61207a565b34801561093857600080fd5b5061055760165481565b34801561094e57600080fd5b5061053661095d36600461454d565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561098757600080fd5b506000546001600160a01b0316610495565b3480156109a557600080fd5b506105366109b436600461454d565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109de57600080fd5b5061051461218d565b3480156109f357600080fd5b50610536610a0236600461454d565b600b6020526000908152604090205460ff1681565b348015610a2357600080fd5b506104c761228e565b348015610a3857600080fd5b5061055760145481565b348015610a4e57600080fd5b50610536610a5d366004614636565b61229d565b348015610a6e57600080fd5b5061055760175481565b348015610a8457600080fd5b50610536610a93366004614636565b6122d4565b348015610aa457600080fd5b50610514610ab3366004614587565b6122e1565b348015610ac457600080fd5b50602c54610495906001600160a01b031681565b348015610ae457600080fd5b50610514610af336600461467d565b6123aa565b348015610b0457600080fd5b5061055760155481565b348015610b1a57600080fd5b50610514610b2936600461454d565b61245d565b348015610b3a57600080fd5b50610514610b49366004614662565b6124d8565b348015610b5a57600080fd5b50610514610b693660046146fb565b6125b7565b348015610b7a57600080fd5b50610514610b8936600461454d565b612641565b348015610b9a57600080fd5b5061055760125481565b348015610bb057600080fd5b5061055760115481565b348015610bc657600080fd5b5061055760135481565b348015610bdc57600080fd5b50610557610beb366004614587565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c2257600080fd5b50610557601a5481565b348015610c3857600080fd5b50610557603a5481565b348015610c4e57600080fd5b50610514610c5d3660046146fb565b6126bf565b348015610c6e57600080fd5b5061055760195481565b348015610c8457600080fd5b50610514610c9336600461454d565b612775565b348015610ca457600080fd5b50610514610cb3366004614601565b612ba7565b348015610cc457600080fd5b5061055760315481565b348015610cda57600080fd5b50610514610ce9366004614755565b612c2c565b6060600d8054610cfd906149df565b80601f0160208091040260200160405190810160405280929190818152602001828054610d29906149df565b8015610d765780601f10610d4b57610100808354040283529160200191610d76565b820191906000526020600020905b815481529060010190602001808311610d5957829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604b811015610ded57600080fd5b610dfb81633b9aca006149a9565b603c5550565b6000610e0e338484612cc5565b5060015b92915050565b6000546001600160a01b03163314610e725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60018115151415610fbf576001600160a01b03821660009081526007602052604090205460ff1615610ee65760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dd6565b6001600160a01b03821660009081526001602052604090205415610f40576001600160a01b038216600090815260016020526040902054610f269061139e565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b80611180576001600160a01b03821660009081526007602052604090205460ff1661102c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dd6565b60005b60085481101561117e57826001600160a01b03166008828154811061105657611056614aef565b6000918252602090912001546001600160a01b0316141561116c5760088054611081906001906149c8565b8154811061109157611091614aef565b600091825260209091200154600880546001600160a01b0390921691839081106110bd576110bd614aef565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061112d5761112d614ac0565b600082815260209020810160001990810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905561117e565b8061117681614a33565b91505061102f565b505b5050565b6000546001600160a01b031633146111de5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6039541580156111ee5750603c54155b8015611203575060345462010000900460ff16155b61120c57600080fd5b60ff821660395561122181633b9aca006149a9565b603c555050565b6000611235848484612e1d565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461127191869161126c9086906149c8565b612cc5565b5060019392505050565b6000546001600160a01b031633146112d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b600081836024546112e691906149a9565b6112f091906148a7565b90506103e860245461130291906148a7565b8110156113775760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610dd6565b6030819055600c54829061138c9085906149a9565b61139691906148a7565b603155505050565b60006025548211156114185760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610dd6565b6000611422613372565b905061142e81846148a7565b9392505050565b6000546001600160a01b0316331461148f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60355415801561149f5750603854155b6114eb5760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610dd6565b603591909155603855600260395564ae9f7bcc00603c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e0e91859061126c90869061488f565b6000546001600160a01b031633146115955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b600081836024546115a691906149a9565b6115b091906148a7565b90506103e86024546115c291906148a7565b8110156116375760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610dd6565b602e819055600c54829061164c9085906149a9565b61165691906148a7565b602f55505050565b6000546001600160a01b031633146116b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b0381166117345760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd6565b602a546001600160a01b03828116911614156117b85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd6565b600080546117d1916001600160a01b039091169061190e565b6117dc81600161190e565b6117e7816001610e18565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610e1282600019610e01565b6000546001600160a01b031633146118b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b601b5483111580156118c65750601c548211155b80156118d45750601d548111155b6118dd57600080fd5b610d7a816118eb848661488f565b6118f5919061488f565b111561190057600080fd5b601892909255601955601a55565b6000546001600160a01b031633146119685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b601b548311158015611a015750601c548211155b8015611a0f5750601d548111155b611a1857600080fd5b610d7a81611a26848661488f565b611a30919061488f565b1115611a3b57600080fd5b601292909255601355601455565b6001600160a01b03811660009081526007602052604081205460ff1615611a8657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e129061139e565b6000546001600160a01b03163314611b025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60008054611b1b916001600160a01b039091169061190e565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611bc95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b603f5460ff1615611c1c5760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610dd6565b60408051808201909152600a8082527f4e4542554c4120494e55000000000000000000000000000000000000000000006020909201918252611c6091600d9161449f565b506040805180820190915260068082527f4e4542554c4100000000000000000000000000000000000000000000000000006020909201918252611ca591600e9161449f565b50655af3107a4000600c556022805460ff19166009908117909155611ccb90600a6148fe565b600c54611cd891906149a9565b6024819055611ce990600019614a4e565b611cf5906000196149c8565b602555602954602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b158015611d8057600080fd5b505afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db8919061456a565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1457600080fd5b505afa158015611e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4c919061456a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee3919061456a565b602880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556000908152600360209081526040808320805460ff191660011790553083526005808352818420602754909516845293909152902060001990556024546103e891611f6591906149a9565b611f6f91906148a7565b602e55602454611f81906032906148a7565b60305560245461271090611f969060056149a9565b611fa091906148a7565b6032556024546103e890611fb59060056149a9565b611fbf91906148a7565b603355602954611fda906001600160a01b0316600019610e01565b50603f805460ff191660019081179091556025549060006120036000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561202f6000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3565b6000546001600160a01b031633146120d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b806120fb57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156121625762093a806004544261211591906149c8565b116121625760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610dd6565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146121e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60345460ff161561223a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dd6565b612245306001610e18565b60285461225c906001600160a01b03166001610e18565b60395460021461227a57612272436101f461488f565b60365561227f565b436036555b6034805460ff19166001179055565b6060600e8054610cfd906149df565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e0e91859061126c9086906149c8565b6000611271338484612e1d565b6000546001600160a01b0316331461233b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b0382161580159061235b57506001600160a01b03811615155b61236457600080fd5b602c80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602d8054929093169116179055565b6000546001600160a01b031633146124045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60348054931515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90941693909317909255603b805491151560ff19928316179055603d805492151592909116919091179055565b6000546001600160a01b031633146124b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146125325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b602d80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906125ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b8161261c828561488f565b612626919061488f565b6104b01461263357600080fd5b601e92909255601f55602055565b6000546001600160a01b0316331461269b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146127195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b601b54831115801561272d5750601c548211155b801561273b5750601d548111155b61274457600080fd5b610d7a81612752848661488f565b61275c919061488f565b111561276757600080fd5b601592909255601655601755565b6000546001600160a01b031633146127cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561280f57600080fd5b505afa158015612823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612847919061456a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561288f57600080fd5b505afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061456a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561292557600080fd5b505afa158015612939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295d919061456a565b90506001600160a01b038116612b3357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156129a657600080fd5b505afa1580156129ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129de919061456a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a2657600080fd5b505afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e919061456a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af6919061456a565b602880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612b67565b602880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841617905561117e3084600019612cc5565b6000546001600160a01b03163314612c015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612c865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b8284602454612c9591906149a9565b612c9f91906148a7565b6032556024548190612cb29084906149a9565b612cbc91906148a7565b60335550505050565b6001600160a01b038316612d405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6001600160a01b038216612dbc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612e9b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6001600160a01b038316612f175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b60008211612f8d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610dd6565b603b5460ff1615612fea57603c543a1115612fea5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610dd6565b612ff48484613395565b156132775760345460ff1661304b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dd6565b603d5460ff16156130fd576001600160a01b03841660009081526003602052604090205460ff16156130bc576001600160a01b0383166000908152603e602052604090205443141561309c57600080fd5b6001600160a01b0383166000908152603e602052604090204390556130fd565b6001600160a01b0384166000908152603e60205260409020544314156130e157600080fd5b6001600160a01b0384166000908152603e602052604090204390555b6001600160a01b0384166000908152600b602052604090205460ff168061313c57506001600160a01b0383166000908152600b602052604090205460ff165b613277576001600160a01b03841660009081526003602052604090205460ff168061317f57506001600160a01b03831660009081526003602052604090205460ff165b156131d657602e548211156131d65760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610dd6565b6029546001600160a01b0384811691161480159061320d57506001600160a01b03831660009081526003602052604090205460ff16155b15613277576030548261321f85611a49565b613229919061488f565b11156132775760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610dd6565b6001600160a01b03841660009081526006602052604090205460019060ff16806132b957506001600160a01b03841660009081526006602052604090205460ff165b156132c2575060005b6001600160a01b03841660009081526003602052604090205460ff161561335d57602d5474010000000000000000000000000000000000000000900460ff161580156133295750602d547501000000000000000000000000000000000000000000900460ff165b1561335d57600061333930611a49565b9050603254811061335b57603354811061335257506033545b61335b81613455565b505b61336985858584613691565b95945050505050565b600080600061337f613c05565b909250905061338e81836148a7565b9250505090565b600080546001600160a01b038481169116148015906133c257506000546001600160a01b03838116911614155b80156133e757506001600160a01b0382166000908152600a602052604090205460ff16155b801561340c57506001600160a01b0383166000908152600a602052604090205460ff16155b80156134265750602a546001600160a01b03838116911614155b801561343a57506001600160a01b03821615155b801561142e57506001600160a01b0383163014159392505050565b602d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055602054601f54601e546134a7919061488f565b6134b1919061488f565b6134ba57613666565b60006002602054601f54601e546134d1919061488f565b6134db919061488f565b601e546134e890856149a9565b6134f291906148a7565b6134fc91906148a7565b9050600061350a82846149c8565b905061351581613d88565b60006002602054601f54601e5461352c919061488f565b613536919061488f565b601e5461354390476149a9565b61354d91906148a7565b61355791906148a7565b905082156135ab576135698382613f0a565b60408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60006135b784866149c8565b111561366257602054601f5447916000916135d2919061488f565b601f546135df90846149a9565b6135e991906148a7565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613624573d6000803e3d6000fd5b50602d546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561365e573d6000803e3d6000fd5b5050505b5050505b50602d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b603454600090610100900460ff16156138a9576001600160a01b03851660009081526009602052604090205460ff16806136e357506001600160a01b03841660009081526009602052604090205460ff165b156137305760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610dd6565b60345462010000900460ff166137e05761374a8585613fce565b60345462010000900460ff1615801561376857506137688585613395565b156137db5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6138a9565b600060365411801561380a57506001600160a01b03851660009081526003602052604090205460ff165b801561381b575061381b8585613395565b156138a95760395460365461383090436149c8565b10156138a9576001600160a01b0384166000908152600960205260408120805460ff19166001179055603a80549161386783614a33565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006138b78686868661414e565b60808101516001600160a01b0388166000908152600160205260409020549192506138e1916149c8565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613918919061488f565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561396c57506001600160a01b03851660009081526007602052604090205460ff16155b156139b3576001600160a01b0386166000908152600260205260409020546139959085906149c8565b6001600160a01b038716600090815260026020526040902055613af3565b6001600160a01b03861660009081526007602052604090205460ff161580156139f457506001600160a01b03851660009081526007602052604090205460ff165b15613a3c5780516001600160a01b038616600090815260026020526040902054613a1e919061488f565b6001600160a01b038616600090815260026020526040902055613af3565b6001600160a01b03861660009081526007602052604090205460ff168015613a7c57506001600160a01b03851660009081526007602052604090205460ff165b15613af3576001600160a01b038616600090815260026020526040902054613aa59085906149c8565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ad9919061488f565b6001600160a01b0386166000908152600260205260409020555b613afd8686613395565b15613b62576035541580613b15575060355461053914155b15613b625760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610dd6565b604081015115613b7a57613b7a8682604001516143ad565b60008160a001511180613b91575060008160200151115b15613ba857613ba88160a001518260200151614479565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613bf191815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b600854811015613d5757826001600060088481548110613c3457613c34614aef565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c9f5750816002600060088481548110613c7857613c78614aef565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613cb557602554602454945094505050509091565b6001600060088381548110613ccc57613ccc614aef565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cfb90846149c8565b92506002600060088381548110613d1457613d14614aef565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613d4390836149c8565b915080613d4f81614a33565b915050613c12565b50602454602554613d6891906148a7565b821015613d7f576025546024549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613dbd57613dbd614aef565b6001600160a01b03928316602091820292909201810191909152602754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613e2a57600080fd5b505afa158015613e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e62919061456a565b81600181518110613e7557613e75614aef565b6001600160a01b0392831660209182029290920101526027546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613ed490859060009086903090429060040161481e565b600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505050565b602754602a546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613f8e57600080fd5b505af1158015613fa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fc79190614727565b5050505050565b60345462010000900460ff161561404d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6140578282613395565b15801561407157506028546001600160a01b038281169116145b15611180576001600160a01b0382166000908152600a602052604090819020805460ff19166001908117909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905542603755602d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161414291901515815260200190565b60405180910390a15050565b6141876040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6141c06040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006141ca613372565b90506141d681866149a9565b608083015283156142e6576001600160a01b03861660009081526003602052604090205460ff161561421957601554600f55601654601055601754601155614264565b6001600160a01b03871660009081526003602052604090205460ff161561425157601254600f55601354601055601454601155614264565b601854600f55601954601055601a546011555b602154600f5461427490876149a9565b61427e91906148a7565b6020830152602154601154601054614296919061488f565b6142a090876149a9565b6142aa91906148a7565b6040830181905260208301516142c0919061488f565b6142ca90866149c8565b825260208201516142dc9082906149a9565b60a08301526142ff565b6000602083018190526040830181905285835260a08301525b6143098787613395565b801561432357506038541580614323575060385461053914155b156143705760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610dd6565b80826040015161438091906149a9565b8260a0015161438f919061488f565b826080015161439e91906149c8565b60608301525095945050505050565b60006143b7613372565b905060006143c582846149a9565b306000908152600160205260409020549091506143e390829061488f565b3060009081526001602090815260408083209390935560079052205460ff1615614433573060009081526002602052604090205461442290849061488f565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461448791906149c8565b60255560265461449890829061488f565b6026555050565b8280546144ab906149df565b90600052602060002090601f0160209004810192826144cd5760008555614513565b82601f106144e657805160ff1916838001178555614513565b82800160010185558215614513579182015b828111156145135782518255916020019190600101906144f8565b5061451f929150614523565b5090565b5b8082111561451f5760008155600101614524565b8035801515811461454857600080fd5b919050565b60006020828403121561455f57600080fd5b813561142e81614b1e565b60006020828403121561457c57600080fd5b815161142e81614b1e565b6000806040838503121561459a57600080fd5b82356145a581614b1e565b915060208301356145b581614b1e565b809150509250929050565b6000806000606084860312156145d557600080fd5b83356145e081614b1e565b925060208401356145f081614b1e565b929592945050506040919091013590565b6000806040838503121561461457600080fd5b823561461f81614b1e565b915061462d60208401614538565b90509250929050565b6000806040838503121561464957600080fd5b823561465481614b1e565b946020939093013593505050565b60006020828403121561467457600080fd5b61142e82614538565b60008060006060848603121561469257600080fd5b61469b84614538565b92506146a960208501614538565b91506146b760408501614538565b90509250925092565b6000602082840312156146d257600080fd5b5035919050565b600080604083850312156146ec57600080fd5b50508035926020909101359150565b60008060006060848603121561471057600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561473c57600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561476b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561479a57600080fd5b823560ff8116811461465457600080fd5b600060208083528351808285015260005b818110156147d8578581018301518582016040015282016147bc565b818111156147ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561486e5784516001600160a01b031683529383019391830191600101614849565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156148a2576148a2614a62565b500190565b6000826148b6576148b6614a91565b500490565b600181815b808511156148f65781600019048211156148dc576148dc614a62565b808516156148e957918102915b93841c93908002906148c0565b509250929050565b600061142e60ff84168360008261491757506001610e12565b8161492457506000610e12565b816001811461493a576002811461494457614960565b6001915050610e12565b60ff84111561495557614955614a62565b50506001821b610e12565b5060208310610133831016604e8410600b8410161715614983575081810a610e12565b61498d83836148bb565b80600019048211156149a1576149a1614a62565b029392505050565b60008160001904831182151516156149c3576149c3614a62565b500290565b6000828210156149da576149da614a62565b500390565b600181811c908216806149f357607f821691505b60208210811415614a2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000600019821415614a4757614a47614a62565b5060010190565b600082614a5d57614a5d614a91565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0381168114614b3357600080fd5b5056fea2646970667358221220426ad43d181616447f37f93cf176d7cdd575c7532905aa26594732fbd0f0bd4b64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104695760003560e01c8063715018a611610243578063b6f8f8dc11610143578063dd62ed3e116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610c98578063f6540ec714610cb8578063fb78680d14610cce57600080fd5b8063ea08d30b14610c62578063eafb5a3c14610c7857600080fd5b8063dd62ed3e14610bd0578063de5192a814610c16578063e79d416014610c2c578063e7c281d614610c4257600080fd5b8063cdfdb7dc11610112578063d038b07e116100f7578063d038b07e14610b8e578063dbd66dda14610ba4578063dc44b6a014610bba57600080fd5b8063cdfdb7dc14610b4e578063ce8b79c914610b6e57600080fd5b8063b6f8f8dc14610ad8578063bbcea6bf14610af8578063bc1323e814610b0e578063c49b9a8014610b2e57600080fd5b80638c7321ad116101d6578063a457c2d7116101a5578063a9059cbb1161018a578063a9059cbb14610a78578063ae81c32014610a98578063b47329f414610ab857600080fd5b8063a457c2d714610a42578063a83250ef14610a6257600080fd5b80638c7321ad146109e75780638da5cb5b1461097b57806395d89b4114610a175780639e55557814610a2c57600080fd5b806388f820201161021257806388f8202014610942578063893d20e81461097b57806389fd9bc1146109995780638a8c523c146109d257600080fd5b8063715018a6146108e25780637ed57c8b146108f757806380c581d11461090c57806388790a681461092c57600080fd5b80633865cf3f116103695780635342acb4116102e157806364038409116102b05780636bc87c3a116102955780636bc87c3a1461088c5780636c6d9fa1146108a257806370a08231146108c257600080fd5b806364038409146108565780636612e66f1461086c57600080fd5b80635342acb4146107bd578063571ac8b0146107f6578063575f18e51461081657806358fa63ca1461083657600080fd5b806345e8c85c116103385780634e732f7a1161031d5780634e732f7a146107675780634fb2e45d1461077d57806350a8e0161461079d57600080fd5b806345e8c85c1461071e5780634a74bb021461073457600080fd5b80633865cf3f1461069e57806339509351146106be5780633f3cf56c146106de578063452ed4f1146106fe57600080fd5b806318160ddd116103fc57806326003957116103cb578063313ce567116103b0578063313ce5671461064657806337e294d514610668578063384f6b511461068857600080fd5b806326003957146106065780632d8381191461062657600080fd5b806318160ddd1461059b5780631d881f9f146105b057806321207575146105c657806323b872dd146105e657600080fd5b8063095ea7b311610438578063095ea7b31461051657806313114a9d1461054657806313e461921461056557806315639c1b1461058557600080fd5b806303fd2a451461047557806306fdde03146104b25780630758d924146104d457806309231602146104f457600080fd5b3661047057005b600080fd5b34801561048157600080fd5b50602a54610495906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104be57600080fd5b506104c7610cee565b6040516104a991906147ab565b3480156104e057600080fd5b50602754610495906001600160a01b031681565b34801561050057600080fd5b5061051461050f3660046146c0565b610d80565b005b34801561052257600080fd5b50610536610531366004614636565b610e01565b60405190151581526020016104a9565b34801561055257600080fd5b506026545b6040519081526020016104a9565b34801561057157600080fd5b50610514610580366004614601565b610e18565b34801561059157600080fd5b50610557600f5481565b3480156105a757600080fd5b50602454610557565b3480156105bc57600080fd5b5061055760205481565b3480156105d257600080fd5b506105146105e1366004614787565b611184565b3480156105f257600080fd5b506105366106013660046145c0565b611228565b34801561061257600080fd5b506105146106213660046146d9565b61127b565b34801561063257600080fd5b506105576106413660046146c0565b61139e565b34801561065257600080fd5b5060225460405160ff90911681526020016104a9565b34801561067457600080fd5b50602d54610495906001600160a01b031681565b34801561069457600080fd5b50610557601e5481565b3480156106aa57600080fd5b506105146106b93660046146d9565b611435565b3480156106ca57600080fd5b506105366106d9366004614636565b611504565b3480156106ea57600080fd5b506105146106f93660046146d9565b61153b565b34801561070a57600080fd5b50602854610495906001600160a01b031681565b34801561072a57600080fd5b5061055760185481565b34801561074057600080fd5b50602d54610536907501000000000000000000000000000000000000000000900460ff1681565b34801561077357600080fd5b50610557601f5481565b34801561078957600080fd5b5061051461079836600461454d565b61165e565b3480156107a957600080fd5b506034546105369062010000900460ff1681565b3480156107c957600080fd5b506105366107d836600461454d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080257600080fd5b5061053661081136600461454d565b61184a565b34801561082257600080fd5b506105146108313660046146fb565b611858565b34801561084257600080fd5b50602b54610495906001600160a01b031681565b34801561086257600080fd5b50610557602f5481565b34801561087857600080fd5b50610514610887366004614601565b61190e565b34801561089857600080fd5b5061055760105481565b3480156108ae57600080fd5b506105146108bd3660046146fb565b611993565b3480156108ce57600080fd5b506105576108dd36600461454d565b611a49565b3480156108ee57600080fd5b50610514611aa8565b34801561090357600080fd5b50610514611b6f565b34801561091857600080fd5b50610514610927366004614601565b61207a565b34801561093857600080fd5b5061055760165481565b34801561094e57600080fd5b5061053661095d36600461454d565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561098757600080fd5b506000546001600160a01b0316610495565b3480156109a557600080fd5b506105366109b436600461454d565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109de57600080fd5b5061051461218d565b3480156109f357600080fd5b50610536610a0236600461454d565b600b6020526000908152604090205460ff1681565b348015610a2357600080fd5b506104c761228e565b348015610a3857600080fd5b5061055760145481565b348015610a4e57600080fd5b50610536610a5d366004614636565b61229d565b348015610a6e57600080fd5b5061055760175481565b348015610a8457600080fd5b50610536610a93366004614636565b6122d4565b348015610aa457600080fd5b50610514610ab3366004614587565b6122e1565b348015610ac457600080fd5b50602c54610495906001600160a01b031681565b348015610ae457600080fd5b50610514610af336600461467d565b6123aa565b348015610b0457600080fd5b5061055760155481565b348015610b1a57600080fd5b50610514610b2936600461454d565b61245d565b348015610b3a57600080fd5b50610514610b49366004614662565b6124d8565b348015610b5a57600080fd5b50610514610b693660046146fb565b6125b7565b348015610b7a57600080fd5b50610514610b8936600461454d565b612641565b348015610b9a57600080fd5b5061055760125481565b348015610bb057600080fd5b5061055760115481565b348015610bc657600080fd5b5061055760135481565b348015610bdc57600080fd5b50610557610beb366004614587565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c2257600080fd5b50610557601a5481565b348015610c3857600080fd5b50610557603a5481565b348015610c4e57600080fd5b50610514610c5d3660046146fb565b6126bf565b348015610c6e57600080fd5b5061055760195481565b348015610c8457600080fd5b50610514610c9336600461454d565b612775565b348015610ca457600080fd5b50610514610cb3366004614601565b612ba7565b348015610cc457600080fd5b5061055760315481565b348015610cda57600080fd5b50610514610ce9366004614755565b612c2c565b6060600d8054610cfd906149df565b80601f0160208091040260200160405190810160405280929190818152602001828054610d29906149df565b8015610d765780601f10610d4b57610100808354040283529160200191610d76565b820191906000526020600020905b815481529060010190602001808311610d5957829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604b811015610ded57600080fd5b610dfb81633b9aca006149a9565b603c5550565b6000610e0e338484612cc5565b5060015b92915050565b6000546001600160a01b03163314610e725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60018115151415610fbf576001600160a01b03821660009081526007602052604090205460ff1615610ee65760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dd6565b6001600160a01b03821660009081526001602052604090205415610f40576001600160a01b038216600090815260016020526040902054610f269061139e565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b80611180576001600160a01b03821660009081526007602052604090205460ff1661102c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dd6565b60005b60085481101561117e57826001600160a01b03166008828154811061105657611056614aef565b6000918252602090912001546001600160a01b0316141561116c5760088054611081906001906149c8565b8154811061109157611091614aef565b600091825260209091200154600880546001600160a01b0390921691839081106110bd576110bd614aef565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061112d5761112d614ac0565b600082815260209020810160001990810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905561117e565b8061117681614a33565b91505061102f565b505b5050565b6000546001600160a01b031633146111de5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6039541580156111ee5750603c54155b8015611203575060345462010000900460ff16155b61120c57600080fd5b60ff821660395561122181633b9aca006149a9565b603c555050565b6000611235848484612e1d565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461127191869161126c9086906149c8565b612cc5565b5060019392505050565b6000546001600160a01b031633146112d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b600081836024546112e691906149a9565b6112f091906148a7565b90506103e860245461130291906148a7565b8110156113775760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610dd6565b6030819055600c54829061138c9085906149a9565b61139691906148a7565b603155505050565b60006025548211156114185760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610dd6565b6000611422613372565b905061142e81846148a7565b9392505050565b6000546001600160a01b0316331461148f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60355415801561149f5750603854155b6114eb5760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610dd6565b603591909155603855600260395564ae9f7bcc00603c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e0e91859061126c90869061488f565b6000546001600160a01b031633146115955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b600081836024546115a691906149a9565b6115b091906148a7565b90506103e86024546115c291906148a7565b8110156116375760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610dd6565b602e819055600c54829061164c9085906149a9565b61165691906148a7565b602f55505050565b6000546001600160a01b031633146116b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b0381166117345760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd6565b602a546001600160a01b03828116911614156117b85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd6565b600080546117d1916001600160a01b039091169061190e565b6117dc81600161190e565b6117e7816001610e18565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610e1282600019610e01565b6000546001600160a01b031633146118b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b601b5483111580156118c65750601c548211155b80156118d45750601d548111155b6118dd57600080fd5b610d7a816118eb848661488f565b6118f5919061488f565b111561190057600080fd5b601892909255601955601a55565b6000546001600160a01b031633146119685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b601b548311158015611a015750601c548211155b8015611a0f5750601d548111155b611a1857600080fd5b610d7a81611a26848661488f565b611a30919061488f565b1115611a3b57600080fd5b601292909255601355601455565b6001600160a01b03811660009081526007602052604081205460ff1615611a8657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e129061139e565b6000546001600160a01b03163314611b025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60008054611b1b916001600160a01b039091169061190e565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611bc95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b603f5460ff1615611c1c5760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610dd6565b60408051808201909152600a8082527f4e4542554c4120494e55000000000000000000000000000000000000000000006020909201918252611c6091600d9161449f565b506040805180820190915260068082527f4e4542554c4100000000000000000000000000000000000000000000000000006020909201918252611ca591600e9161449f565b50655af3107a4000600c556022805460ff19166009908117909155611ccb90600a6148fe565b600c54611cd891906149a9565b6024819055611ce990600019614a4e565b611cf5906000196149c8565b602555602954602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b158015611d8057600080fd5b505afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db8919061456a565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1457600080fd5b505afa158015611e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4c919061456a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee3919061456a565b602880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556000908152600360209081526040808320805460ff191660011790553083526005808352818420602754909516845293909152902060001990556024546103e891611f6591906149a9565b611f6f91906148a7565b602e55602454611f81906032906148a7565b60305560245461271090611f969060056149a9565b611fa091906148a7565b6032556024546103e890611fb59060056149a9565b611fbf91906148a7565b603355602954611fda906001600160a01b0316600019610e01565b50603f805460ff191660019081179091556025549060006120036000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561202f6000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3565b6000546001600160a01b031633146120d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b806120fb57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156121625762093a806004544261211591906149c8565b116121625760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610dd6565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146121e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60345460ff161561223a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dd6565b612245306001610e18565b60285461225c906001600160a01b03166001610e18565b60395460021461227a57612272436101f461488f565b60365561227f565b436036555b6034805460ff19166001179055565b6060600e8054610cfd906149df565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e0e91859061126c9086906149c8565b6000611271338484612e1d565b6000546001600160a01b0316331461233b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b0382161580159061235b57506001600160a01b03811615155b61236457600080fd5b602c80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602d8054929093169116179055565b6000546001600160a01b031633146124045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60348054931515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90941693909317909255603b805491151560ff19928316179055603d805492151592909116919091179055565b6000546001600160a01b031633146124b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146125325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b602d80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906125ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b8161261c828561488f565b612626919061488f565b6104b01461263357600080fd5b601e92909255601f55602055565b6000546001600160a01b0316331461269b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146127195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b601b54831115801561272d5750601c548211155b801561273b5750601d548111155b61274457600080fd5b610d7a81612752848661488f565b61275c919061488f565b111561276757600080fd5b601592909255601655601755565b6000546001600160a01b031633146127cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561280f57600080fd5b505afa158015612823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612847919061456a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561288f57600080fd5b505afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061456a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561292557600080fd5b505afa158015612939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295d919061456a565b90506001600160a01b038116612b3357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156129a657600080fd5b505afa1580156129ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129de919061456a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a2657600080fd5b505afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e919061456a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af6919061456a565b602880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612b67565b602880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841617905561117e3084600019612cc5565b6000546001600160a01b03163314612c015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612c865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd6565b8284602454612c9591906149a9565b612c9f91906148a7565b6032556024548190612cb29084906149a9565b612cbc91906148a7565b60335550505050565b6001600160a01b038316612d405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6001600160a01b038216612dbc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612e9b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6001600160a01b038316612f175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b60008211612f8d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610dd6565b603b5460ff1615612fea57603c543a1115612fea5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610dd6565b612ff48484613395565b156132775760345460ff1661304b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dd6565b603d5460ff16156130fd576001600160a01b03841660009081526003602052604090205460ff16156130bc576001600160a01b0383166000908152603e602052604090205443141561309c57600080fd5b6001600160a01b0383166000908152603e602052604090204390556130fd565b6001600160a01b0384166000908152603e60205260409020544314156130e157600080fd5b6001600160a01b0384166000908152603e602052604090204390555b6001600160a01b0384166000908152600b602052604090205460ff168061313c57506001600160a01b0383166000908152600b602052604090205460ff165b613277576001600160a01b03841660009081526003602052604090205460ff168061317f57506001600160a01b03831660009081526003602052604090205460ff165b156131d657602e548211156131d65760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610dd6565b6029546001600160a01b0384811691161480159061320d57506001600160a01b03831660009081526003602052604090205460ff16155b15613277576030548261321f85611a49565b613229919061488f565b11156132775760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610dd6565b6001600160a01b03841660009081526006602052604090205460019060ff16806132b957506001600160a01b03841660009081526006602052604090205460ff165b156132c2575060005b6001600160a01b03841660009081526003602052604090205460ff161561335d57602d5474010000000000000000000000000000000000000000900460ff161580156133295750602d547501000000000000000000000000000000000000000000900460ff165b1561335d57600061333930611a49565b9050603254811061335b57603354811061335257506033545b61335b81613455565b505b61336985858584613691565b95945050505050565b600080600061337f613c05565b909250905061338e81836148a7565b9250505090565b600080546001600160a01b038481169116148015906133c257506000546001600160a01b03838116911614155b80156133e757506001600160a01b0382166000908152600a602052604090205460ff16155b801561340c57506001600160a01b0383166000908152600a602052604090205460ff16155b80156134265750602a546001600160a01b03838116911614155b801561343a57506001600160a01b03821615155b801561142e57506001600160a01b0383163014159392505050565b602d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055602054601f54601e546134a7919061488f565b6134b1919061488f565b6134ba57613666565b60006002602054601f54601e546134d1919061488f565b6134db919061488f565b601e546134e890856149a9565b6134f291906148a7565b6134fc91906148a7565b9050600061350a82846149c8565b905061351581613d88565b60006002602054601f54601e5461352c919061488f565b613536919061488f565b601e5461354390476149a9565b61354d91906148a7565b61355791906148a7565b905082156135ab576135698382613f0a565b60408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60006135b784866149c8565b111561366257602054601f5447916000916135d2919061488f565b601f546135df90846149a9565b6135e991906148a7565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613624573d6000803e3d6000fd5b50602d546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561365e573d6000803e3d6000fd5b5050505b5050505b50602d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b603454600090610100900460ff16156138a9576001600160a01b03851660009081526009602052604090205460ff16806136e357506001600160a01b03841660009081526009602052604090205460ff165b156137305760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610dd6565b60345462010000900460ff166137e05761374a8585613fce565b60345462010000900460ff1615801561376857506137688585613395565b156137db5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6138a9565b600060365411801561380a57506001600160a01b03851660009081526003602052604090205460ff165b801561381b575061381b8585613395565b156138a95760395460365461383090436149c8565b10156138a9576001600160a01b0384166000908152600960205260408120805460ff19166001179055603a80549161386783614a33565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006138b78686868661414e565b60808101516001600160a01b0388166000908152600160205260409020549192506138e1916149c8565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613918919061488f565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561396c57506001600160a01b03851660009081526007602052604090205460ff16155b156139b3576001600160a01b0386166000908152600260205260409020546139959085906149c8565b6001600160a01b038716600090815260026020526040902055613af3565b6001600160a01b03861660009081526007602052604090205460ff161580156139f457506001600160a01b03851660009081526007602052604090205460ff165b15613a3c5780516001600160a01b038616600090815260026020526040902054613a1e919061488f565b6001600160a01b038616600090815260026020526040902055613af3565b6001600160a01b03861660009081526007602052604090205460ff168015613a7c57506001600160a01b03851660009081526007602052604090205460ff165b15613af3576001600160a01b038616600090815260026020526040902054613aa59085906149c8565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ad9919061488f565b6001600160a01b0386166000908152600260205260409020555b613afd8686613395565b15613b62576035541580613b15575060355461053914155b15613b625760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610dd6565b604081015115613b7a57613b7a8682604001516143ad565b60008160a001511180613b91575060008160200151115b15613ba857613ba88160a001518260200151614479565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613bf191815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b600854811015613d5757826001600060088481548110613c3457613c34614aef565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c9f5750816002600060088481548110613c7857613c78614aef565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613cb557602554602454945094505050509091565b6001600060088381548110613ccc57613ccc614aef565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cfb90846149c8565b92506002600060088381548110613d1457613d14614aef565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613d4390836149c8565b915080613d4f81614a33565b915050613c12565b50602454602554613d6891906148a7565b821015613d7f576025546024549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613dbd57613dbd614aef565b6001600160a01b03928316602091820292909201810191909152602754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613e2a57600080fd5b505afa158015613e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e62919061456a565b81600181518110613e7557613e75614aef565b6001600160a01b0392831660209182029290920101526027546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613ed490859060009086903090429060040161481e565b600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505050565b602754602a546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613f8e57600080fd5b505af1158015613fa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fc79190614727565b5050505050565b60345462010000900460ff161561404d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610dd6565b6140578282613395565b15801561407157506028546001600160a01b038281169116145b15611180576001600160a01b0382166000908152600a602052604090819020805460ff19166001908117909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905542603755602d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161414291901515815260200190565b60405180910390a15050565b6141876040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6141c06040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006141ca613372565b90506141d681866149a9565b608083015283156142e6576001600160a01b03861660009081526003602052604090205460ff161561421957601554600f55601654601055601754601155614264565b6001600160a01b03871660009081526003602052604090205460ff161561425157601254600f55601354601055601454601155614264565b601854600f55601954601055601a546011555b602154600f5461427490876149a9565b61427e91906148a7565b6020830152602154601154601054614296919061488f565b6142a090876149a9565b6142aa91906148a7565b6040830181905260208301516142c0919061488f565b6142ca90866149c8565b825260208201516142dc9082906149a9565b60a08301526142ff565b6000602083018190526040830181905285835260a08301525b6143098787613395565b801561432357506038541580614323575060385461053914155b156143705760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610dd6565b80826040015161438091906149a9565b8260a0015161438f919061488f565b826080015161439e91906149c8565b60608301525095945050505050565b60006143b7613372565b905060006143c582846149a9565b306000908152600160205260409020549091506143e390829061488f565b3060009081526001602090815260408083209390935560079052205460ff1615614433573060009081526002602052604090205461442290849061488f565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461448791906149c8565b60255560265461449890829061488f565b6026555050565b8280546144ab906149df565b90600052602060002090601f0160209004810192826144cd5760008555614513565b82601f106144e657805160ff1916838001178555614513565b82800160010185558215614513579182015b828111156145135782518255916020019190600101906144f8565b5061451f929150614523565b5090565b5b8082111561451f5760008155600101614524565b8035801515811461454857600080fd5b919050565b60006020828403121561455f57600080fd5b813561142e81614b1e565b60006020828403121561457c57600080fd5b815161142e81614b1e565b6000806040838503121561459a57600080fd5b82356145a581614b1e565b915060208301356145b581614b1e565b809150509250929050565b6000806000606084860312156145d557600080fd5b83356145e081614b1e565b925060208401356145f081614b1e565b929592945050506040919091013590565b6000806040838503121561461457600080fd5b823561461f81614b1e565b915061462d60208401614538565b90509250929050565b6000806040838503121561464957600080fd5b823561465481614b1e565b946020939093013593505050565b60006020828403121561467457600080fd5b61142e82614538565b60008060006060848603121561469257600080fd5b61469b84614538565b92506146a960208501614538565b91506146b760408501614538565b90509250925092565b6000602082840312156146d257600080fd5b5035919050565b600080604083850312156146ec57600080fd5b50508035926020909101359150565b60008060006060848603121561471057600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561473c57600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561476b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561479a57600080fd5b823560ff8116811461465457600080fd5b600060208083528351808285015260005b818110156147d8578581018301518582016040015282016147bc565b818111156147ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561486e5784516001600160a01b031683529383019391830191600101614849565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156148a2576148a2614a62565b500190565b6000826148b6576148b6614a91565b500490565b600181815b808511156148f65781600019048211156148dc576148dc614a62565b808516156148e957918102915b93841c93908002906148c0565b509250929050565b600061142e60ff84168360008261491757506001610e12565b8161492457506000610e12565b816001811461493a576002811461494457614960565b6001915050610e12565b60ff84111561495557614955614a62565b50506001821b610e12565b5060208310610133831016604e8410600b8410161715614983575081810a610e12565b61498d83836148bb565b80600019048211156149a1576149a1614a62565b029392505050565b60008160001904831182151516156149c3576149c3614a62565b500290565b6000828210156149da576149da614a62565b500390565b600181811c908216806149f357607f821691505b60208210811415614a2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000600019821415614a4757614a47614a62565b5060010190565b600082614a5d57614a5d614a91565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0381168114614b3357600080fd5b5056fea2646970667358221220426ad43d181616447f37f93cf176d7cdd575c7532905aa26594732fbd0f0bd4b64736f6c63430008070033

Deployed Bytecode Sourcemap

8329:27465:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10515:64;;;;;;;;;;-1:-1:-1;10515:64:0;;;;-1:-1:-1;;;;;10515:64:0;;;;;;-1:-1:-1;;;;;5062:55:1;;;5044:74;;5032:2;5017:18;10515:64:0;;;;;;;;15854:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10340:35::-;;;;;;;;;;-1:-1:-1;10340:35:0;;;;-1:-1:-1;;;;;10340:35:0;;;20094:134;;;;;;;;;;-1:-1:-1;20094:134:0;;;;;:::i;:::-;;:::i;:::-;;16530:161;;;;;;;;;;-1:-1:-1;16530:161:0;;;;;:::i;:::-;;:::i;:::-;;;6508:14:1;;6501:22;6483:41;;6471:2;6456:18;16530:161:0;6343:187:1;24627:87:0;;;;;;;;;;-1:-1:-1;24696:10:0;;24627:87;;;16353:25:1;;;16341:2;16326:18;24627:87:0;16207:177:1;23713:906:0;;;;;;;;;;-1:-1:-1;23713:906:0;;;;;:::i;:::-;;:::i;9184:30::-;;;;;;;;;;;;;;;;15607:83;;;;;;;;;;-1:-1:-1;15680:7:0;;15607:83;;10042:31;;;;;;;;;;;;;;;;19619:241;;;;;;;;;;-1:-1:-1;19619:241:0;;;;;:::i;:::-;;:::i;16827:266::-;;;;;;;;;;-1:-1:-1;16827:266:0;;;;;:::i;:::-;;:::i;22446:340::-;;;;;;;;;;-1:-1:-1;22446:340:0;;;;;:::i;:::-;;:::i;25054:250::-;;;;;;;;;;-1:-1:-1;25054:250:0;;;;;:::i;:::-;;:::i;15696:71::-;;;;;;;;;;-1:-1:-1;15755:9:0;;15696:71;;15755:9;;;;17886:36:1;;17874:2;17859:18;15696:71:0;17744:184:1;10768:88:0;;;;;;;;;;-1:-1:-1;10768:88:0;;;;-1:-1:-1;;;;;10768:88:0;;;9945:36;;;;;;;;;;;;;;;;19289:322;;;;;;;;;;-1:-1:-1;19289:322:0;;;;;:::i;:::-;;:::i;17101:215::-;;;;;;;;;;-1:-1:-1;17101:215:0;;;;;:::i;:::-;;:::i;22098:340::-;;;;;;;;;;-1:-1:-1;22098:340:0;;;;;:::i;:::-;;:::i;10382:21::-;;;;;;;;;;-1:-1:-1;10382:21:0;;;;-1:-1:-1;;;;;10382:21:0;;;9615:51;;;;;;;;;;;;;;;;10897:41;;;;;;;;;;-1:-1:-1;10897:41:0;;;;;;;;;;;9988:47;;;;;;;;;;;;;;;;14535:517;;;;;;;;;;-1:-1:-1;14535:517:0;;;;;:::i;:::-;;:::i;11249:36::-;;;;;;;;;;-1:-1:-1;11249:36:0;;;;;;;;;;;19018:123;;;;;;;;;;-1:-1:-1;19018:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;19106:27:0;19082:4;19106:27;;;:18;:27;;;;;;;;;19018:123;16699:120;;;;;;;;;;-1:-1:-1;16699:120:0;;;;;:::i;:::-;;:::i;21315:461::-;;;;;;;;;;-1:-1:-1;21315:461:0;;;;;:::i;:::-;;:::i;10586:64::-;;;;;;;;;;-1:-1:-1;10586:64:0;;;;-1:-1:-1;;;;;10586:64:0;;;10986:28;;;;;;;;;;;;;;;;23573:132;;;;;;;;;;-1:-1:-1;23573:132:0;;;;;:::i;:::-;;:::i;9221:34::-;;;;;;;;;;;;;;;;20389:453;;;;;;;;;;-1:-1:-1;20389:453:0;;;;;:::i;:::-;;:::i;16149:198::-;;;;;;;;;;-1:-1:-1;16149:198:0;;;;;:::i;:::-;;:::i;15060:194::-;;;;;;;;;;;;;:::i;12853:1042::-;;;;;;;;;;;;;:::i;18118:424::-;;;;;;;;;;-1:-1:-1;18118:424:0;;;;;:::i;:::-;;:::i;9515:38::-;;;;;;;;;;;;;;;;18890:120;;;;;;;;;;-1:-1:-1;18890:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18982:20:0;18958:4;18982:20;;;:11;:20;;;;;;;;;18890:120;15931:71;;;;;;;;;;-1:-1:-1;15974:7:0;14513:6;-1:-1:-1;;;;;14513:6:0;15931:71;;19149:132;;;;;;;;;;-1:-1:-1;19149:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;19242:31:0;19218:4;19242:31;;;:22;:31;;;;;;;;;19149:132;30145:398;;;;;;;;;;;;;:::i;9010:68::-;;;;;;;;;;-1:-1:-1;9010:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15773:75;;;;;;;;;;;;;:::i;9412:53::-;;;;;;;;;;;;;;;;17324:225;;;;;;;;;;-1:-1:-1;17324:225:0;;;;;:::i;:::-;;:::i;9560:42::-;;;;;;;;;;;;;;;;16355:167;;;;;;;;;;-1:-1:-1;16355:167:0;;;;;:::i;:::-;;:::i;23091:295::-;;;;;;;;;;-1:-1:-1;23091:295:0;;;;;:::i;:::-;;:::i;10657:104::-;;;;;;;;;;-1:-1:-1;10657:104:0;;;;-1:-1:-1;;;;;10657:104:0;;;19868:218;;;;;;;;;;-1:-1:-1;19868:218:0;;;;;:::i;:::-;;:::i;9474:34::-;;;;;;;;;;;;;;;;18716:166;;;;;;;;;;-1:-1:-1;18716:166:0;;;;;:::i;:::-;;:::i;23394:171::-;;;;;;;;;;-1:-1:-1;23394:171:0;;;;;:::i;:::-;;:::i;21784:306::-;;;;;;;;;;-1:-1:-1;21784:306:0;;;;;:::i;:::-;;:::i;18550:158::-;;;;;;;;;;-1:-1:-1;18550:158:0;;;;;:::i;:::-;;:::i;9308:43::-;;;;;;;;;;;;;;;;9262:37;;;;;;;;;;;;;;;;9358:47;;;;;;;;;;;;;;;;16008:133;;;;;;;;;;-1:-1:-1;16008:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16110:19:0;;;16092:7;16110:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16008:133;9735:61;;;;;;;;;;;;;;;;11500:32;;;;;;;;;;;;;;;;20850:457;;;;;;;;;;-1:-1:-1;20850:457:0;;;;;:::i;:::-;;:::i;9673:55::-;;;;;;;;;;;;;;;;17557:553;;;;;;;;;;-1:-1:-1;17557:553:0;;;;;:::i;:::-;;:::i;20236:141::-;;;;;;;;;;-1:-1:-1;20236:141:0;;;;;:::i;:::-;;:::i;11060:30::-;;;;;;;;;;;;;;;;22794:289;;;;;;;;;;-1:-1:-1;22794:289:0;;;;;:::i;:::-;;:::i;15854:71::-;15893:13;15917:5;15910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15854:71;:::o;20094:134::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;;;;;;;;;20178:2:::1;20171:3;:9;;20163:18;;;::::0;::::1;;20208:12;:3:::0;20214:6:::1;20208:12;:::i;:::-;20192:13;:28:::0;-1:-1:-1;20094:134:0:o;16530:161::-;16605:4;16622:39;315:10;16645:7;16654:6;16622:8;:39::i;:::-;-1:-1:-1;16679:4:0;16530:161;;;;;:::o;23713:906::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;23818:4:::1;23807:15:::0;::::1;;;23803:809;;;-1:-1:-1::0;;;;;23848:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23847:21;23839:62;;;::::0;-1:-1:-1;;;23839:62:0;;11950:2:1;23839:62:0::1;::::0;::::1;11932:21:1::0;11989:2;11969:18;;;11962:30;12028;12008:18;;;12001:58;12076:18;;23839:62:0::1;11748:352:1::0;23839:62:0::1;-1:-1:-1::0;;;;;23919:16:0;::::1;23938:1;23919:16:::0;;;:7:::1;:16;::::0;;;;;:20;23916:116:::1;;-1:-1:-1::0;;;;;23999:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23979:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23960:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23916:116:::1;-1:-1:-1::0;;;;;;24046:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24046:27:0::1;24069:4;24046:27:::0;;::::1;::::0;;;24088:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;23713:906::o;23803:809::-:1;24133:16:::0;24129:483:::1;;-1:-1:-1::0;;;;;24174:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24166:61;;;::::0;-1:-1:-1;;;24166:61:0;;9991:2:1;24166:61:0::1;::::0;::::1;9973:21:1::0;10030:2;10010:18;;;10003:30;10069;10049:18;;;10042:58;10117:18;;24166:61:0::1;9789:352:1::0;24166:61:0::1;24247:9;24242:359;24266:9;:16:::0;24262:20;::::1;24242:359;;;24328:7;-1:-1:-1::0;;;;;24312:23:0::1;:9;24322:1;24312:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24312:12:0::1;:23;24308:278;;;24375:9;24385:16:::0;;:20:::1;::::0;24404:1:::1;::::0;24385:20:::1;:::i;:::-;24375:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24360:9:::1;:12:::0;;-1:-1:-1;;;;;24375:31:0;;::::1;::::0;24370:1;;24360:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;24360:46:0;;::::1;;::::0;;24429:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24472:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24472:28:0::1;::::0;;24523:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24523:15:0;;;;;;::::1;::::0;;;;;24561:5:::1;;24308:278;24284:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24242:359;;;;24129:483;23713:906:::0;;:::o;19619:241::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;19717:13:::1;::::0;:18;:40;::::1;;;-1:-1:-1::0;19739:13:0::1;::::0;:18;19717:40:::1;:61;;;;-1:-1:-1::0;19762:16:0::1;::::0;;;::::1;;;19761:17;19717:61;19708:71;;;::::0;::::1;;19790:22;::::0;::::1;:13;:22:::0;19839:13:::1;:4:::0;19846:6:::1;19839:13;:::i;:::-;19823;:29:::0;-1:-1:-1;;19619:241:0:o;16827:266::-;16925:4;16942:36;16952:6;16960:9;16971:6;16942:9;:36::i;:::-;-1:-1:-1;;;;;;17020:19:0;;;;;;:11;:19;;;;;;;;315:10;17020:33;;;;;;;;;16989:74;;16998:6;;17020:42;;17056:6;;17020:42;:::i;:::-;16989:8;:74::i;:::-;-1:-1:-1;17081:4:0;16827:266;;;;;:::o;22446:340::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;22536:13:::1;22574:7;22563;22553;;:17;;;;:::i;:::-;22552:29;;;;:::i;:::-;22536:45;;22620:4;22610:7;;:14;;;;:::i;:::-;22600:5;:25;;22592:88;;;::::0;-1:-1:-1;;;22592:88:0;;11178:2:1;22592:88:0::1;::::0;::::1;11160:21:1::0;11217:2;11197:18;;;11190:30;11256:34;11236:18;;;11229:62;11327:20;11307:18;;;11300:48;11365:19;;22592:88:0::1;10976:414:1::0;22592:88:0::1;22691:14;:22:::0;;;22743:14:::1;::::0;22771:7;;22743:24:::1;::::0;22760:7;;22743:24:::1;:::i;:::-;22742:36;;;;:::i;:::-;22724:15;:54:::0;-1:-1:-1;;;22446:340:0:o;25054:250::-;25120:7;25159;;25148;:18;;25140:73;;;;-1:-1:-1;;;25140:73:0;;8412:2:1;25140:73:0;;;8394:21:1;8451:2;8431:18;;;8424:30;8490:34;8470:18;;;8463:62;8561:12;8541:18;;;8534:40;8591:19;;25140:73:0;8210:406:1;25140:73:0;25224:19;25247:10;:8;:10::i;:::-;25224:33;-1:-1:-1;25275:21:0;25224:33;25275:7;:21;:::i;:::-;25268:28;25054:250;-1:-1:-1;;;25054:250:0:o;19289:322::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;19392:13:::1;::::0;:18;:50;::::1;;;-1:-1:-1::0;19414:23:0::1;::::0;:28;19392:50:::1;19383:70;;;::::0;-1:-1:-1;;;19383:70:0;;14179:2:1;19383:70:0::1;::::0;::::1;14161:21:1::0;14218:1;14198:18;;;14191:29;14256:8;14236:18;;;14229:36;14282:18;;19383:70:0::1;13977:329:1::0;19383:70:0::1;19464:13;:28:::0;;;;19503:23:::1;:37:::0;19567:1:::1;19551:13;:17:::0;19595:8:::1;19579:13;:24:::0;19289:322::o;17101:215::-;315:10;17189:4;17238:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17238:34:0;;;;;;;;;;17189:4;;17206:80;;17229:7;;17238:47;;17275:10;;17238:47;:::i;22098:340::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;22187:13:::1;22225:7;22214;22204;;:17;;;;:::i;:::-;22203:29;;;;:::i;:::-;22187:45;;22271:4;22261:7;;:14;;;;:::i;:::-;22251:5;:25;;22243:93;;;::::0;-1:-1:-1;;;22243:93:0;;10348:2:1;22243:93:0::1;::::0;::::1;10330:21:1::0;10387:2;10367:18;;;10360:30;10426:34;10406:18;;;10399:62;10497:25;10477:18;;;10470:53;10540:19;;22243:93:0::1;10146:419:1::0;22243:93:0::1;22347:12;:20:::0;;;22395:14:::1;::::0;22423:7;;22395:24:::1;::::0;22412:7;;22395:24:::1;:::i;:::-;22394:36;;;;:::i;:::-;22378:13;:52:::0;-1:-1:-1;;;22098:340:0:o;14535:517::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;-1:-1:-1;;;;;14616:22:0;::::1;14608:96;;;::::0;-1:-1:-1;;;14608:96:0;;15979:2:1;14608:96:0::1;::::0;::::1;15961:21:1::0;16018:2;15998:18;;;15991:30;16057:34;16037:18;;;16030:62;16128:31;16108:18;;;16101:59;16177:19;;14608:96:0::1;15777:425:1::0;14608:96:0::1;14735:4;::::0;-1:-1:-1;;;;;14723:16:0;;::::1;14735:4:::0;::::1;14723:16;;14715:90;;;::::0;-1:-1:-1;;;14715:90:0;;15979:2:1;14715:90:0::1;::::0;::::1;15961:21:1::0;16018:2;15998:18;;;15991:30;16057:34;16037:18;;;16030:62;16128:31;16108:18;;;16101:59;16177:19;;14715:90:0::1;15777:425:1::0;14715:90:0::1;14835:6;::::0;;14816:33:::1;::::0;-1:-1:-1;;;;;14835:6:0;;::::1;::::0;14816:18:::1;:33::i;:::-;14860:34;14879:8;14889:4;14860:18;:34::i;:::-;14905:37;14927:8;14937:4;14905:21;:37::i;:::-;14963:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;14963:17:0;::::1;::::0;;::::1;::::0;;14996:38:::1;::::0;14963:17;;;;14996:38:::1;::::0;14963:6;14996:38:::1;14535:517:::0;:::o;16699:120::-;16752:4;16776:35;16784:7;-1:-1:-1;;16776:7:0;:35::i;21315:461::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;21445:13:::1;;21434:7;:24;;:73;;;;;21492:15;;21479:9;:28;;21434:73;:125;;;;;21541:18;;21528:9;:31;;21434:125;21426:152;;;::::0;::::1;;21632:4;21619:9:::0;21597:19:::1;21607:9:::0;21597:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;21589:48;;;::::0;::::1;;21648:19;:29:::0;;;;21688:21:::1;:33:::0;21732:24:::1;:36:::0;21315:461::o;23573:132::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;-1:-1:-1;;;;;23660:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;23660:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23573:132::o;20389:453::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;20517:13:::1;;20506:7;:24;;:73;;;;;20564:15;;20551:9;:28;;20506:73;:128;;;;;20616:18;;20600:12;:34;;20506:128;20498:155;;;::::0;::::1;;20710:4;20694:12:::0;20672:19:::1;20682:9:::0;20672:7;:19:::1;:::i;:::-;:34;;;;:::i;:::-;:42;;20664:51;;;::::0;::::1;;20726:14;:24:::0;;;;20761:16:::1;:28:::0;20800:19:::1;:34:::0;20389:453::o;16149:198::-;-1:-1:-1;;;;;16239:20:0;;16215:7;16239:20;;;:11;:20;;;;;;;;16235:49;;;-1:-1:-1;;;;;;16268:16:0;;;;;:7;:16;;;;;;;16149:198::o;16235:49::-;-1:-1:-1;;;;;16322:16:0;;;;;;:7;:16;;;;;;16302:37;;:19;:37::i;15060:194::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;15146:6:::1;::::0;;15127:33:::1;::::0;-1:-1:-1;;;;;15146:6:0;;::::1;::::0;15127:18:::1;:33::i;:::-;15188:1;15171:19:::0;;;::::1;::::0;;15206:40:::1;::::0;15188:1;;15206:40:::1;::::0;15188:1;;15206:40:::1;15060:194::o:0;12853:1042::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;12921:19:::1;::::0;::::1;;12920:20;12912:62;;;::::0;-1:-1:-1;;;12912:62:0;;12644:2:1;12912:62:0::1;::::0;::::1;12626:21:1::0;12683:2;12663:18;;;12656:30;12722:31;12702:18;;;12695:59;12771:18;;12912:62:0::1;12442:353:1::0;12912:62:0::1;12985:20;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:20:::1;:::i;:::-;-1:-1:-1::0;13016:18:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;13062:19:0::1;13045:14;:36:::0;13092:9:::1;:13:::0;;-1:-1:-1;;13092:13:0::1;13104:1;13092:13:::0;;::::1;::::0;;;13148::::1;::::0;:2:::1;:13;:::i;:::-;13130:14;;:32;;;;:::i;:::-;13120:7;:42:::0;;;13191:13:::1;::::0;-1:-1:-1;;13191:13:0::1;:::i;:::-;13184:21;::::0;-1:-1:-1;;13184:21:0::1;:::i;:::-;13173:7;:33:::0;13250:14:::1;::::0;13219:9:::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;13250:14:0;;::::1;13219:46:::0;;::::1;::::0;;13303:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13250:14;13303:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13285:49:0::1;;13335:9;;;;;;;;;-1:-1:-1::0;;;;;13335:9:0::1;-1:-1:-1::0;;;;;13335:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13285:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5629:15:1;;;13285:82:0::1;::::0;::::1;5611:34:1::0;13361:4:0::1;5661:18:1::0;;;5654:43;5523:18;;13285:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13276:6;:91:::0;;;::::1;-1:-1:-1::0;;;;;13276:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13378:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13378:22:0::1;-1:-1:-1::0;13378:22:0::1;::::0;;13431:4:::1;13411:26:::0;;:11:::1;:26:::0;;;;;;13446:9:::1;::::0;;;::::1;13411:46:::0;;;;;;;;-1:-1:-1;;13411:66:0;;13533:7:::1;::::0;13545:4:::1;::::0;13533:11:::1;::::0;:7;:11:::1;:::i;:::-;:16;;;;:::i;:::-;13518:12;:31:::0;13577:7:::1;::::0;:10:::1;::::0;13585:2:::1;::::0;13577:10:::1;:::i;:::-;13560:14;:27:::0;13642:7:::1;::::0;13657:6:::1;::::0;13642:11:::1;::::0;13652:1:::1;13642:11;:::i;:::-;13641:22;;;;:::i;:::-;13625:13;:38:::0;13688:7:::1;::::0;13703:5:::1;::::0;13688:11:::1;::::0;13698:1:::1;13688:11;:::i;:::-;13687:21;;;;:::i;:::-;13674:10;:34:::0;13729:14:::1;::::0;13721:42:::1;::::0;-1:-1:-1;;;;;13729:14:0::1;-1:-1:-1::0;;13721:7:0::1;:42::i;:::-;-1:-1:-1::0;13776:19:0::1;:26:::0;;-1:-1:-1;;13776:26:0::1;13798:4;13776:26:::0;;::::1;::::0;;;13832:7:::1;::::0;;13776:19:::1;13821:7;14486::::0;14513:6;-1:-1:-1;;;;;14513:6:0;;14448:79;13821:7:::1;-1:-1:-1::0;;;;;13813:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13813:16:0;:26;13870:7:::1;14486::::0;14513:6;-1:-1:-1;;;;;14513:6:0;;14448:79;13870:7:::1;13864:4;::::0;13879:7:::1;::::0;13855:32:::1;::::0;16353:25:1;;;-1:-1:-1;;;;;13855:32:0;;::::1;::::0;13864:4;;::::1;::::0;13855:32:::1;::::0;16341:2:1;16326:18;13855:32:0::1;;;;;;;12853:1042::o:0;18118:424::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;18199:16;18195:340:::1;;-1:-1:-1::0;;;;;;18232:13:0::1;18248:5;18232:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;18232:21:0::1;::::0;;23713:906::o;18195:340::-:1;18290:17;::::0;:22;18286:153:::1;;18379:7;18359:17;;18341:15;:35;;;;:::i;:::-;:45;18333:90;;;::::0;-1:-1:-1;;;18333:90:0;;9630:2:1;18333:90:0::1;::::0;::::1;9612:21:1::0;;;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;9760:18;;18333:90:0::1;9428:356:1::0;18333:90:0::1;-1:-1:-1::0;;;;;18453:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;18453:20:0::1;18469:4;18453:20;::::0;;18508:15:::1;18488:17;:35:::0;18118:424;;:::o;30145:398::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;30207:14:::1;::::0;::::1;;30206:15;30198:52;;;::::0;-1:-1:-1;;;30198:52:0;;15273:2:1;30198:52:0::1;::::0;::::1;15255:21:1::0;15312:2;15292:18;;;15285:30;15351:26;15331:18;;;15324:54;15395:18;;30198:52:0::1;15071:348:1::0;30198:52:0::1;30261:42;30291:4;30298;30261:21;:42::i;:::-;30336:6;::::0;30314:35:::1;::::0;-1:-1:-1;;;;;30336:6:0::1;::::0;30314:21:::1;:35::i;:::-;30364:13;;30381:1;30364:18;30360:144;;30414:18;:12;30429:3;30414:18;:::i;:::-;30399:12;:33:::0;30360:144:::1;;;30480:12;30465;:27:::0;30360:144:::1;30514:14;:21:::0;;-1:-1:-1;;30514:21:0::1;30531:4;30514:21;::::0;;30145:398::o;15773:75::-;15814:13;15838:7;15831:14;;;;;:::i;17324:225::-;315:10;17417:4;17466:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17466:34:0;;;;;;;;;;17417:4;;17434:85;;17457:7;;17466:52;;17503:15;;17466:52;:::i;16355:167::-;16433:4;16450:42;315:10;16474:9;16485:6;16450:9;:42::i;23091:295::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;-1:-1:-1;;;;;23223:23:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;;;;;;23250:24:0;::::1;::::0;::::1;23223:51;23215:60;;;::::0;::::1;;23286:27;:48:::0;;-1:-1:-1;;;;;23286:48:0;;::::1;::::0;;;::::1;;::::0;;;23345:11:::1;:33:::0;;;;;::::1;::::0;::::1;;::::0;;23091:295::o;19868:218::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;19977:16:::1;:28:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;;20016:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;20016:24:0;;::::1;;::::0;;20051:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19868:218::o;18716:166::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;-1:-1:-1;;;;;18814:52:0::1;18869:5;18814:52:::0;;;:35:::1;:52;::::0;;;;:60;;-1:-1:-1;;18814:60:0::1;::::0;;18716:166::o;23394:171::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;23471:21:::1;:32:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;23519:38:::1;::::0;::::1;::::0;::::1;::::0;23495:8;6508:14:1;6501:22;6483:41;;6471:2;6456:18;;6343:187;23519:38:0::1;;;;;;;;23394:171:::0;:::o;21784:306::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;21926:20;21907:16:::1;21919:4:::0;21907:9;:16:::1;:::i;:::-;:39;;;;:::i;:::-;21951:4;21906:49;21896:60;;;::::0;::::1;;21967:15;:27:::0;;;;22005:26:::1;:49:::0;22065:10:::1;:17:::0;21784:306::o;18550:158::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;-1:-1:-1;;;;;18641:52:0::1;;::::0;;;:35:::1;:52;::::0;;;;:59;;-1:-1:-1;;18641:59:0::1;18696:4;18641:59;::::0;;18550:158::o;20850:457::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;20979:13:::1;;20968:7;:24;;:73;;;;;21026:15;;21013:9;:28;;20968:73;:128;;;;;21078:18;;21062:12;:34;;20968:128;20960:155;;;::::0;::::1;;21172:4;21156:12:::0;21134:19:::1;21144:9:::0;21134:7;:19:::1;:::i;:::-;:34;;;;:::i;:::-;:42;;21126:51;;;::::0;::::1;;21188:15;:25:::0;;;;21224:17:::1;:29:::0;21264:20:::1;:35:::0;20850:457::o;17557:553::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;17630:29:::1;17681:9;17630:61;;17702:16;17739:10;-1:-1:-1::0;;;;;17739:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17721:47:0::1;;17777:4;17784:10;-1:-1:-1::0;;;;;17784:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17721:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5629:15:1;;;17721:81:0::1;::::0;::::1;5611:34:1::0;5681:15;;5661:18;;;5654:43;5523:18;;17721:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17702:100:::0;-1:-1:-1;;;;;;17817:22:0;::::1;17813:207;;17883:10;-1:-1:-1::0;;;;;17883:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17865:50:0::1;;17924:4;17931:10;-1:-1:-1::0;;;;;17931:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17865:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5629:15:1;;;17865:84:0::1;::::0;::::1;5611:34:1::0;5681:15;;5661:18;;;5654:43;5523:18;;17865:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17856:6;:93:::0;;;::::1;-1:-1:-1::0;;;;;17856:93:0;;;::::1;::::0;;;::::1;::::0;;17813:207:::1;;;17991:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;17991:17:0;::::1;;::::0;;17813:207:::1;18030:9;:22:::0;;;::::1;-1:-1:-1::0;;;;;18030:22:0;::::1;;::::0;;18063:39:::1;18080:4;18087:9:::0;-1:-1:-1;;18063:8:0::1;:39::i;20236:141::-:0;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;-1:-1:-1;;;;;20328:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;20328:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20236:141::o;22794:289::-;12316:6;;-1:-1:-1;;;;;12316:6:0;315:10;12316:22;12308:67;;;;-1:-1:-1;;;12308:67:0;;13002:2:1;12308:67:0;;;12984:21:1;;;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;13132:18;;12308:67:0;12800:356:1;12308:67:0;22994:16:::1;22974;22964:7;;:26;;;;:::i;:::-;22963:47;;;;:::i;:::-;22947:13;:63:::0;23035:7:::1;::::0;23062:13;;23035:23:::1;::::0;23045:13;;23035:23:::1;:::i;:::-;23034:41;;;;:::i;:::-;23021:10;:54:::0;-1:-1:-1;;;;22794:289:0:o;25316:342::-;-1:-1:-1;;;;;25411:20:0;;25403:69;;;;-1:-1:-1;;;25403:69:0;;14868:2:1;25403:69:0;;;14850:21:1;14907:2;14887:18;;;14880:30;14946:34;14926:18;;;14919:62;15017:6;14997:18;;;14990:34;15041:19;;25403:69:0;14666:400:1;25403:69:0;-1:-1:-1;;;;;25491:21:0;;25483:68;;;;-1:-1:-1;;;25483:68:0;;8823:2:1;25483:68:0;;;8805:21:1;8862:2;8842:18;;;8835:30;8901:34;8881:18;;;8874:62;8972:4;8952:18;;;8945:32;8994:19;;25483:68:0;8621:398:1;25483:68:0;-1:-1:-1;;;;;25564:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;25617:33;;16353:25:1;;;25617:33:0;;16326:18:1;25617:33:0;;;;;;;25316:342;;;:::o;25666:2079::-;25745:4;-1:-1:-1;;;;;25770:18:0;;25762:68;;;;-1:-1:-1;;;25762:68:0;;13773:2:1;25762:68:0;;;13755:21:1;13812:2;13792:18;;;13785:30;13851:34;13831:18;;;13824:62;13922:7;13902:18;;;13895:35;13947:19;;25762:68:0;13571:401:1;25762:68:0;-1:-1:-1;;;;;25849:16:0;;25841:64;;;;-1:-1:-1;;;25841:64:0;;7655:2:1;25841:64:0;;;7637:21:1;7694:2;7674:18;;;7667:30;7733:34;7713:18;;;7706:62;7804:5;7784:18;;;7777:33;7827:19;;25841:64:0;7453:399:1;25841:64:0;25933:1;25924:6;:10;25916:64;;;;-1:-1:-1;;;25916:64:0;;13363:2:1;25916:64:0;;;13345:21:1;13402:2;13382:18;;;13375:30;13441:34;13421:18;;;13414:62;13512:11;13492:18;;;13485:39;13541:19;;25916:64:0;13161:405:1;25916:64:0;25995:14;;;;25991:112;;;26049:13;;26034:11;:28;;26026:65;;;;-1:-1:-1;;;26026:65:0;;11597:2:1;26026:65:0;;;11579:21:1;11636:2;11616:18;;;11609:30;11675:26;11655:18;;;11648:54;11719:18;;26026:65:0;11395:348:1;26026:65:0;26116:20;26127:4;26133:2;26116:10;:20::i;:::-;26113:955;;;26157:14;;;;26153:89;;26192:34;;-1:-1:-1;;;26192:34:0;;8059:2:1;26192:34:0;;;8041:21:1;8098:2;8078:18;;;8071:30;8137:26;8117:18;;;8110:54;8181:18;;26192:34:0;7857:348:1;26153:89:0;26260:15;;;;26256:347;;;-1:-1:-1;;;;;26300:13:0;;;;;;:7;:13;;;;;;;;26296:292;;;-1:-1:-1;;;;;26345:13:0;;;;;;:9;:13;;;;;;26362:12;26345:29;;26337:38;;;;;;-1:-1:-1;;;;;26398:13:0;;;;;;:9;:13;;;;;26414:12;26398:28;;26296:292;;;-1:-1:-1;;;;;26483:15:0;;;;;;:9;:15;;;;;;26502:12;26483:31;;26475:40;;;;;;-1:-1:-1;;;;;26538:15:0;;;;;;:9;:15;;;;;26556:12;26538:30;;26296:292;-1:-1:-1;;;;;26622:41:0;;;;;;:35;:41;;;;;;;;;:84;;-1:-1:-1;;;;;;26667:39:0;;;;;;:35;:39;;;;;;;;26622:84;26617:440;;-1:-1:-1;;;;;26730:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;26747:11:0;;;;;;:7;:11;;;;;;;;26730:28;26727:134;;;26800:12;;26790:6;:22;;26782:59;;;;-1:-1:-1;;;26782:59:0;;15626:2:1;26782:59:0;;;15608:21:1;15665:2;15645:18;;;15638:30;15704:26;15684:18;;;15677:54;15748:18;;26782:59:0;15424:348:1;26782:59:0;26888:14;;-1:-1:-1;;;;;26882:20:0;;;26888:14;;26882:20;;;;:36;;-1:-1:-1;;;;;;26907:11:0;;;;;;:7;:11;;;;;;;;26906:12;26882:36;26879:163;;;26977:14;;26967:6;26951:13;26961:2;26951:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26943:79;;;;-1:-1:-1;;;26943:79:0;;14513:2:1;26943:79:0;;;14495:21:1;14552:2;14532:18;;;14525:30;14591:28;14571:18;;;14564:56;14637:18;;26943:79:0;14311:350:1;26943:79:0;-1:-1:-1;;;;;27113:24:0;;27080:12;27113:24;;;:18;:24;;;;;;27095:4;;27113:24;;;:50;;-1:-1:-1;;;;;;27141:22:0;;;;;;:18;:22;;;;;;;;27113:50;27110:96;;;-1:-1:-1;27189:5:0;27110:96;-1:-1:-1;;;;;27222:11:0;;;;;;:7;:11;;;;;;;;27218:457;;;27255:16;;;;;;;27254:17;:59;;;;-1:-1:-1;27292:21:0;;;;;;;27254:59;27250:408;;;27348:28;27379:24;27397:4;27379:9;:24::i;:::-;27348:55;;27450:13;;27426:20;:37;27422:221;;27515:10;;27491:20;:34;27488:77;;-1:-1:-1;27552:10:0;;27488:77;27587:36;27602:20;27587:14;:36::i;:::-;27329:329;27250:408;27693:44;27711:4;27717:2;27721:6;27729:7;27693:17;:44::i;:::-;27686:51;25666:2079;-1:-1:-1;;;;;25666:2079:0:o;34447:161::-;34489:7;34510:15;34527;34546:19;:17;:19::i;:::-;34509:56;;-1:-1:-1;34509:56:0;-1:-1:-1;34583:17:0;34509:56;;34583:17;:::i;:::-;34576:24;;;;34447:161;:::o;24722:324::-;24791:4;14513:6;;-1:-1:-1;;;;;24815:15:0;;;14513:6;;24815:15;;;;:45;;-1:-1:-1;14486:7:0;14513:6;-1:-1:-1;;;;;24847:13:0;;;14513:6;;24847:13;;24815:45;:84;;;;-1:-1:-1;;;;;;24878:21:0;;;;;;:17;:21;;;;;;;;24877:22;24815:84;:125;;;;-1:-1:-1;;;;;;24917:23:0;;;;;;:17;:23;;;;;;;;24916:24;24815:125;:152;;;;-1:-1:-1;24963:4:0;;-1:-1:-1;;;;;24957:10:0;;;24963:4;;24957:10;;24815:152;:185;;;;-1:-1:-1;;;;;;24984:16:0;;;;24815:185;:223;;;;-1:-1:-1;;;;;;25017:21:0;;25033:4;25017:21;;24808:230;24722:324;-1:-1:-1;;;24722:324:0:o;27753:1199::-;12190:16;:23;;;;;;;;27890:10:::1;::::0;27861:26:::1;::::0;27843:15:::1;::::0;:44:::1;::::0;27861:26;27843:44:::1;:::i;:::-;:57;;;;:::i;:::-;27839:88;;27920:7;;27839:88;27937:17;28064:1;28049:10;;28020:26;;28002:15;;:44;;;;:::i;:::-;:57;;;;:::i;:::-;27982:15;::::0;27959:38:::1;::::0;:20;:38:::1;:::i;:::-;27958:102;;;;:::i;:::-;27957:108;;;;:::i;:::-;27937:128:::0;-1:-1:-1;28078:20:0::1;28101:32;27937:128:::0;28101:20;:32:::1;:::i;:::-;28078:55;;28144:30;28161:12;28144:16;:30::i;:::-;28246:24;28382:1;28366:10;;28337:26;;28319:15;;:44;;;;:::i;:::-;:57;;;;:::i;:::-;28299:15;::::0;28275:39:::1;::::0;:21:::1;:39;:::i;:::-;28274:104;;;;:::i;:::-;28273:110;;;;:::i;:::-;28246:137:::0;-1:-1:-1;28400:13:0;;28396:161:::1;;28430:41;28443:9;28454:16;28430:12;:41::i;:::-;28491:54;::::0;;17622:25:1;;;17678:2;17663:18;;17656:34;;;17706:18;;;17699:34;;;28491:54:0::1;::::0;17610:2:1;17595:18;28491:54:0::1;;;;;;;28396:161;28606:1;28571:32;28594:9:::0;28571:20;:32:::1;:::i;:::-;:36;28567:378;;;28786:10;::::0;28757:26:::1;::::0;28643:21:::1;::::0;28624:16:::1;::::0;28757:39:::1;::::0;28786:10;28757:39:::1;:::i;:::-;28726:26;::::0;28716:36:::1;::::0;:8;:36:::1;:::i;:::-;28715:82;;;;:::i;:::-;28812:27;::::0;:63:::1;::::0;28679:118;;-1:-1:-1;;;;;;28812:27:0::1;::::0;:63;::::1;;;::::0;28679:118;;28812:27:::1;:63:::0;:27;:63;28679:118;28812:27;:63;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28890:11:0::1;::::0;:43:::1;::::0;-1:-1:-1;;;;;28890:11:0;;::::1;::::0;28911:21:::1;28890:43:::0;::::1;;;::::0;:11:::1;:43:::0;:11;:43;28911:21;28890:11;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28609:336;;28567:378;27828:1124;;;12224:1;-1:-1:-1::0;12236:16:0;:24;;;;;;27753:1199::o;30757:2043::-;30880:16;;30859:4;;30880:16;;;;;30876:851;;;-1:-1:-1;;;;;19242:31:0;;19218:4;19242:31;;;:22;:31;;;;;;;;30916:56;;;-1:-1:-1;;;;;;19242:31:0;;19218:4;19242:31;;;:22;:31;;;;;;;;30947:25;30912:116;;;30993:19;;-1:-1:-1;;;30993:19:0;;12307:2:1;30993:19:0;;;12289:21:1;12346:1;12326:18;;;12319:29;12384:11;12364:18;;;12357:39;12413:18;;30993:19:0;12105:332:1;30912:116:0;31049:16;;;;;;;31044:672;;31086:28;31105:4;31111:2;31086:18;:28::i;:::-;31138:16;;;;;;;31137:17;:41;;;;;31158:20;31169:4;31175:2;31158:10;:20::i;:::-;31133:137;;;31203:47;;-1:-1:-1;;;31203:47:0;;10772:2:1;31203:47:0;;;10754:21:1;10811:2;10791:18;;;10784:30;10850:34;10830:18;;;10823:62;10921:7;10901:18;;;10894:35;10946:19;;31203:47:0;10570:401:1;31133:137:0;31044:672;;;31329:1;31314:12;;:16;:55;;;;-1:-1:-1;;;;;;31356:13:0;;;;;;:7;:13;;;;;;;;31314:55;:101;;;;;31395:20;31406:4;31412:2;31395:10;:20::i;:::-;31310:391;;;31492:13;;31477:12;;31462:27;;:12;:27;:::i;:::-;:43;31458:224;;;-1:-1:-1;;;;;31534:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;31534:33:0;31563:4;31534:33;;;31594:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;31642:16:0;;-1:-1:-1;;;;;5062:55:1;;5044:74;;31642:16:0;;5032:2:1;5017:18;31642:16:0;;;;;;;31458:224;31739:25;31767:38;31778:4;31784:2;31788:7;31797;31767:10;:38::i;:::-;31850:14;;;;-1:-1:-1;;;;;31834:13:0;;;;;;:7;:13;;;;;;31739:66;;-1:-1:-1;31834:30:0;;;:::i;:::-;-1:-1:-1;;;;;31818:13:0;;;;;;;:7;:13;;;;;;:46;;;;31903:22;;;;31889:11;;;;;;;;;;:36;;31903:22;31889:36;:::i;:::-;-1:-1:-1;;;;;31875:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;31942:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;31964:15:0;;;;;;:11;:15;;;;;;;;31963:16;31942:37;31938:416;;;-1:-1:-1;;;;;32012:13:0;;;;;;:7;:13;;;;;;:23;;32028:7;;32012:23;:::i;:::-;-1:-1:-1;;;;;31996:13:0;;;;;;:7;:13;;;;;:39;31938:416;;;-1:-1:-1;;;;;32058:17:0;;;;;;:11;:17;;;;;;;;32057:18;:37;;;;-1:-1:-1;;;;;;32079:15:0;;;;;;:11;:15;;;;;;;;32057:37;32053:301;;;32139:22;;-1:-1:-1;;;;;32125:11:0;;32139:22;32125:11;;;:7;:11;;;;;;:36;;32139:22;32125:36;:::i;:::-;-1:-1:-1;;;;;32111:11:0;;;;;;:7;:11;;;;;:50;32053:301;;;-1:-1:-1;;;;;32185:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;32206:15:0;;;;;;:11;:15;;;;;;;;32185:36;32181:173;;;-1:-1:-1;;;;;32254:13:0;;;;;;:7;:13;;;;;;:23;;32270:7;;32254:23;:::i;:::-;-1:-1:-1;;;;;32238:13:0;;;;;;;:7;:13;;;;;;:39;;;;32320:22;;32306:11;;;;;;;;;;:36;;32320:22;32306:36;:::i;:::-;-1:-1:-1;;;;;32292:11:0;;;;;;:7;:11;;;;;:50;32181:173;32370:20;32381:4;32387:2;32370:10;:20::i;:::-;32366:151;;;32410:13;;:18;;:43;;;32432:13;;32449:4;32432:21;;32410:43;32406:100;;;32474:16;;-1:-1:-1;;;32474:16:0;;14179:2:1;32474:16:0;;;14161:21:1;14218:1;14198:18;;;14191:29;14256:8;14236:18;;;14229:36;14282:18;;32474:16:0;13977:329:1;32406:100:0;32533:17;;;;:21;32529:79;;32569:39;32584:4;32590:6;:17;;;32569:14;:39::i;:::-;32637:1;32623:6;:11;;;:15;:34;;;;32656:1;32642:6;:11;;;:15;32623:34;32619:91;;;32672:38;32685:6;:11;;;32698:6;:11;;;32672:12;:38::i;:::-;32743:2;-1:-1:-1;;;;;32728:42:0;32737:4;-1:-1:-1;;;;;32728:42:0;;32747:6;:22;;;32728:42;;;;16353:25:1;;16341:2;16326:18;;16207:177;32728:42:0;;;;;;;;-1:-1:-1;32788:4:0;;30757:2043;-1:-1:-1;;;;;30757:2043:0:o;34616:547::-;34714:7;;34750;;34667;;;;;34768:283;34792:9;:16;34788:20;;34768:283;;;34858:7;34834;:21;34842:9;34852:1;34842:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34842:12:0;34834:21;;;;;;;;;;;;;:31;;:66;;;34893:7;34869;:21;34877:9;34887:1;34877:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34877:12:0;34869:21;;;;;;;;;;;;;:31;34834:66;34830:97;;;34910:7;;34919;;34902:25;;;;;;;34616:547;;:::o;34830:97::-;34962:7;:21;34970:9;34980:1;34970:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34970:12:0;34962:21;;;;;;;;;;;;;34952:31;;:7;:31;:::i;:::-;34942:41;;35018:7;:21;35026:9;35036:1;35026:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35026:12:0;35018:21;;;;;;;;;;;;;35008:31;;:7;:31;:::i;:::-;34998:41;-1:-1:-1;34810:3:0;;;;:::i;:::-;;;;34768:283;;;;35085:7;;35075;;:17;;;;:::i;:::-;35065:7;:27;35061:58;;;35102:7;;35111;;35094:25;;;;;;34616:547;;:::o;35061:58::-;35138:7;;35147;;-1:-1:-1;34616:547:0;-1:-1:-1;34616:547:0:o;28960:389::-;29051:16;;;29065:1;29051:16;;;;;;;;29027:21;;29051:16;;;;;;;;;;-1:-1:-1;29051:16:0;29027:40;;29096:4;29078;29083:1;29078:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29078:23:0;;;:7;;;;;;;;;;:23;;;;29122:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;29078:7;;29122:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29112:4;29117:1;29112:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29112:26:0;;;:7;;;;;;;;;:26;29151:9;;:190;;;;;:9;;;:60;;:190;;29226:11;;29151:9;;29268:4;;29295;;29315:15;;29151:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29016:333;28960:389;:::o;29357:333::-;29439:9;;29637:4;;29439:243;;;;;29505:4;29439:243;;;6072:34:1;6122:18;;;6115:34;;;29439:9:0;6165:18:1;;;6158:34;;;6208:18;;;6201:34;-1:-1:-1;;;;;29637:4:0;;;6251:19:1;;;6244:44;29656:15:0;6304:19:1;;;6297:35;29439:9:0;;;:25;;29472:9;;5983:19:1;;29439:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29357:333;;:::o;29698:439::-;29781:16;;;;;;;29780:17;29772:65;;;;-1:-1:-1;;;29772:65:0;;9226:2:1;29772:65:0;;;9208:21:1;9265:2;9245:18;;;9238:30;9304:34;9284:18;;;9277:62;9375:5;9355:18;;;9348:33;9398:19;;29772:65:0;9024:399:1;29772:65:0;29853:20;29864:4;29870:2;29853:10;:20::i;:::-;29852:21;:37;;;;-1:-1:-1;29883:6:0;;-1:-1:-1;;;;;29877:12:0;;;29883:6;;29877:12;29852:37;29848:282;;;-1:-1:-1;;;;;29906:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;29906:30:0;29932:4;29906:30;;;;;;29951:16;:23;;;;;;;;30004:15;29989:12;:30;30036:21;:28;;;;;;;;30084:34;;;;;;6508:14:1;;6501:22;6483:41;;6471:2;6456:18;;6343:187;30084:34:0;;;;;;;;29698:439;;:::o;32808:1631::-;32903:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32903:18:0;32934:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32934:25:0;32970:19;32992:10;:8;:10::i;:::-;32970:32;-1:-1:-1;33032:21:0;32970:32;33032:7;:21;:::i;:::-;33015:14;;;:38;33066:1092;;;;-1:-1:-1;;;;;33097:11:0;;;;;;:7;:11;;;;;;;;33093:579;;;33143:15;;33129:11;:29;33193:17;;33177:13;:33;33248:20;;33229:16;:39;33093:579;;;-1:-1:-1;;;;;33294:13:0;;;;;;:7;:13;;;;;;;;33290:382;;;33342:14;;33328:11;:28;33391:16;;33375:13;:32;33445:19;;33426:16;:38;33290:382;;;33519:19;;33505:11;:33;33573:21;;33557:13;:37;33632:24;;33613:16;:43;33290:382;33728:16;;33713:11;;33703:21;;:7;:21;:::i;:::-;33702:42;;;;:::i;:::-;33688:11;;;:56;33828:16;;33807;;33791:13;;:32;;33807:16;33791:32;:::i;:::-;33780:44;;:7;:44;:::i;:::-;33779:65;;;;:::i;:::-;33759:17;;;:85;;;33895:11;;;;:31;;33759:85;33895:31;:::i;:::-;33884:43;;:7;:43;:::i;:::-;33859:68;;33958:11;;;;:25;;33972:11;;33958:25;:::i;:::-;33944:11;;;:39;33066:1092;;;34030:1;34016:11;;;:15;;;34046:17;;;:21;;;34082:32;;;34131:11;;;:15;33066:1092;34172:20;34183:4;34189:2;34172:10;:20::i;:::-;:89;;;;-1:-1:-1;34197:23:0;;:28;;:63;;;34229:23;;34256:4;34229:31;;34197:63;34168:138;;;34278:16;;-1:-1:-1;;;34278:16:0;;14179:2:1;34278:16:0;;;14161:21:1;14218:1;14198:18;;;14191:29;14256:8;14236:18;;;14229:36;14282:18;;34278:16:0;13977:329:1;34168:138:0;34394:11;34374:6;:17;;;:31;;;;:::i;:::-;34359:6;:11;;;:47;;;;:::i;:::-;34341:6;:14;;;:66;;;;:::i;:::-;34316:22;;;:91;-1:-1:-1;34316:22:0;32808:1631;-1:-1:-1;;;;;32808:1631:0:o;35330:461::-;35410:19;35433:10;:8;:10::i;:::-;35410:33;-1:-1:-1;35454:18:0;35475:24;35410:33;35475:10;:24;:::i;:::-;35551:4;35535:22;;;;:7;:22;;;;;;35454:45;;-1:-1:-1;35535:35:0;;35454:45;;35535:35;:::i;:::-;35526:4;35510:22;;;;:7;:22;;;;;;;;:60;;;;35584:11;:26;;;;;;35581:104;;;35666:4;35650:22;;;;:7;:22;;;;;;:35;;35675:10;;35650:35;:::i;:::-;35641:4;35625:22;;;;:7;:22;;;;;:60;35581:104;35701:43;;16353:25:1;;;35726:4:0;;-1:-1:-1;;;;;35701:43:0;;;;;16341:2:1;16326:18;35701:43:0;;;;;;;35399:392;;35330:461;;:::o;35175:143::-;35265:4;35255:7;;:14;;;;:::i;:::-;35245:7;:24;35293:10;;:17;;35306:4;;35293:17;:::i;:::-;35280:10;:30;-1:-1:-1;;35175:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:160:1;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:404::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;-1:-1:-1;1013:2:1;998:18;;985:32;1026:33;985:32;1026:33;:::i;:::-;1078:7;1068:17;;;687:404;;;;;:::o;1489:456::-;1566:6;1574;1582;1635:2;1623:9;1614:7;1610:23;1606:32;1603:52;;;1651:1;1648;1641:12;1603:52;1690:9;1677:23;1709:31;1734:5;1709:31;:::i;:::-;1759:5;-1:-1:-1;1816:2:1;1801:18;;1788:32;1829:33;1788:32;1829:33;:::i;:::-;1489:456;;1881:7;;-1:-1:-1;;;1935:2:1;1920:18;;;;1907:32;;1489:456::o;1950:315::-;2015:6;2023;2076:2;2064:9;2055:7;2051:23;2047:32;2044:52;;;2092:1;2089;2082:12;2044:52;2131:9;2118:23;2150:31;2175:5;2150:31;:::i;:::-;2200:5;-1:-1:-1;2224:35:1;2255:2;2240:18;;2224:35;:::i;:::-;2214:45;;1950:315;;;;;:::o;2270:::-;2338:6;2346;2399:2;2387:9;2378:7;2374:23;2370:32;2367:52;;;2415:1;2412;2405:12;2367:52;2454:9;2441:23;2473:31;2498:5;2473:31;:::i;:::-;2523:5;2575:2;2560:18;;;;2547:32;;-1:-1:-1;;;2270:315:1:o;2590:180::-;2646:6;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2738:26;2754:9;2738:26;:::i;2775:316::-;2843:6;2851;2859;2912:2;2900:9;2891:7;2887:23;2883:32;2880:52;;;2928:1;2925;2918:12;2880:52;2951:26;2967:9;2951:26;:::i;:::-;2941:36;;2996:35;3027:2;3016:9;3012:18;2996:35;:::i;:::-;2986:45;;3050:35;3081:2;3070:9;3066:18;3050:35;:::i;:::-;3040:45;;2775:316;;;;;:::o;3096:180::-;3155:6;3208:2;3196:9;3187:7;3183:23;3179:32;3176:52;;;3224:1;3221;3214:12;3176:52;-1:-1:-1;3247:23:1;;3096:180;-1:-1:-1;3096:180:1:o;3281:248::-;3349:6;3357;3410:2;3398:9;3389:7;3385:23;3381:32;3378:52;;;3426:1;3423;3416:12;3378:52;-1:-1:-1;;3449:23:1;;;3519:2;3504:18;;;3491:32;;-1:-1:-1;3281:248:1:o;3534:316::-;3611:6;3619;3627;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;-1:-1:-1;;3719:23:1;;;3789:2;3774:18;;3761:32;;-1:-1:-1;3840:2:1;3825:18;;;3812:32;;3534:316;-1:-1:-1;3534:316:1:o;3855:306::-;3943:6;3951;3959;4012:2;4000:9;3991:7;3987:23;3983:32;3980:52;;;4028:1;4025;4018:12;3980:52;4057:9;4051:16;4041:26;;4107:2;4096:9;4092:18;4086:25;4076:35;;4151:2;4140:9;4136:18;4130:25;4120:35;;3855:306;;;;;:::o;4166:385::-;4252:6;4260;4268;4276;4329:3;4317:9;4308:7;4304:23;4300:33;4297:53;;;4346:1;4343;4336:12;4297:53;-1:-1:-1;;4369:23:1;;;4439:2;4424:18;;4411:32;;-1:-1:-1;4490:2:1;4475:18;;4462:32;;4541:2;4526:18;4513:32;;-1:-1:-1;4166:385:1;-1:-1:-1;4166:385:1:o;4556:337::-;4622:6;4630;4683:2;4671:9;4662:7;4658:23;4654:32;4651:52;;;4699:1;4696;4689:12;4651:52;4738:9;4725:23;4788:4;4781:5;4777:16;4770:5;4767:27;4757:55;;4808:1;4805;4798:12;6792:656;6904:4;6933:2;6962;6951:9;6944:21;6994:6;6988:13;7037:6;7032:2;7021:9;7017:18;7010:34;7062:1;7072:140;7086:6;7083:1;7080:13;7072:140;;;7181:14;;;7177:23;;7171:30;7147:17;;;7166:2;7143:26;7136:66;7101:10;;7072:140;;;7230:6;7227:1;7224:13;7221:91;;;7300:1;7295:2;7286:6;7275:9;7271:22;7267:31;7260:42;7221:91;-1:-1:-1;7364:2:1;7352:15;7369:66;7348:88;7333:104;;;;7439:2;7329:113;;6792:656;-1:-1:-1;;;6792:656:1:o;16389:1026::-;16651:4;16699:3;16688:9;16684:19;16730:6;16719:9;16712:25;16756:2;16794:6;16789:2;16778:9;16774:18;16767:34;16837:3;16832:2;16821:9;16817:18;16810:31;16861:6;16896;16890:13;16927:6;16919;16912:22;16965:3;16954:9;16950:19;16943:26;;17004:2;16996:6;16992:15;16978:29;;17025:1;17035:218;17049:6;17046:1;17043:13;17035:218;;;17114:13;;-1:-1:-1;;;;;17110:62:1;17098:75;;17228:15;;;;17193:12;;;;17071:1;17064:9;17035:218;;;-1:-1:-1;;;;;;;17309:55:1;;;;17304:2;17289:18;;17282:83;-1:-1:-1;;;17396:3:1;17381:19;17374:35;17270:3;16389:1026;-1:-1:-1;;;16389:1026:1:o;17933:128::-;17973:3;18004:1;18000:6;17997:1;17994:13;17991:39;;;18010:18;;:::i;:::-;-1:-1:-1;18046:9:1;;17933:128::o;18066:120::-;18106:1;18132;18122:35;;18137:18;;:::i;:::-;-1:-1:-1;18171:9:1;;18066:120::o;18191:482::-;18280:1;18323:5;18280:1;18337:330;18358:7;18348:8;18345:21;18337:330;;;18477:4;-1:-1:-1;;18405:77:1;18399:4;18396:87;18393:113;;;18486:18;;:::i;:::-;18536:7;18526:8;18522:22;18519:55;;;18556:16;;;;18519:55;18635:22;;;;18595:15;;;;18337:330;;;18341:3;18191:482;;;;;:::o;18678:140::-;18736:5;18765:47;18806:4;18796:8;18792:19;18786:4;18872:5;18902:8;18892:80;;-1:-1:-1;18943:1:1;18957:5;;18892:80;18991:4;18981:76;;-1:-1:-1;19028:1:1;19042:5;;18981:76;19073:4;19091:1;19086:59;;;;19159:1;19154:130;;;;19066:218;;19086:59;19116:1;19107:10;;19130:5;;;19154:130;19191:3;19181:8;19178:17;19175:43;;;19198:18;;:::i;:::-;-1:-1:-1;;19254:1:1;19240:16;;19269:5;;19066:218;;19368:2;19358:8;19355:16;19349:3;19343:4;19340:13;19336:36;19330:2;19320:8;19317:16;19312:2;19306:4;19303:12;19299:35;19296:77;19293:159;;;-1:-1:-1;19405:19:1;;;19437:5;;19293:159;19484:34;19509:8;19503:4;19484:34;:::i;:::-;19614:6;-1:-1:-1;;19542:79:1;19533:7;19530:92;19527:118;;;19625:18;;:::i;:::-;19663:20;;18823:866;-1:-1:-1;;;18823:866:1:o;19694:228::-;19734:7;19860:1;-1:-1:-1;;19788:74:1;19785:1;19782:81;19777:1;19770:9;19763:17;19759:105;19756:131;;;19867:18;;:::i;:::-;-1:-1:-1;19907:9:1;;19694:228::o;19927:125::-;19967:4;19995:1;19992;19989:8;19986:34;;;20000:18;;:::i;:::-;-1:-1:-1;20037:9:1;;19927:125::o;20057:437::-;20136:1;20132:12;;;;20179;;;20200:61;;20254:4;20246:6;20242:17;20232:27;;20200:61;20307:2;20299:6;20296:14;20276:18;20273:38;20270:218;;;20344:77;20341:1;20334:88;20445:4;20442:1;20435:15;20473:4;20470:1;20463:15;20270:218;;20057:437;;;:::o;20499:195::-;20538:3;-1:-1:-1;;20562:5:1;20559:77;20556:103;;;20639:18;;:::i;:::-;-1:-1:-1;20686:1:1;20675:13;;20499:195::o;20699:112::-;20731:1;20757;20747:35;;20762:18;;:::i;:::-;-1:-1:-1;20796:9:1;;20699:112::o;20816:184::-;20868:77;20865:1;20858:88;20965:4;20962:1;20955:15;20989:4;20986:1;20979:15;21005:184;21057:77;21054:1;21047:88;21154:4;21151:1;21144:15;21178:4;21175:1;21168:15;21194:184;21246:77;21243:1;21236:88;21343:4;21340:1;21333:15;21367:4;21364:1;21357:15;21383:184;21435:77;21432:1;21425:88;21532:4;21529:1;21522:15;21556:4;21553:1;21546:15;21761:154;-1:-1:-1;;;;;21840:5:1;21836:54;21829:5;21826:65;21816:93;;21905:1;21902;21895:12;21816:93;21761:154;:::o

Swarm Source

ipfs://426ad43d181616447f37f93cf176d7cdd575c7532905aa26594732fbd0f0bd4b
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.