ETH Price: $3,467.83 (+2.17%)
Gas: 10 Gwei

Token

BabelFish (BABEL)
 

Overview

Max Total Supply

42,000,000,000,000 BABEL

Holders

652

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
z00t.eth
Balance
971,987,967.147023887 BABEL

Value
$0.00
0x634ffd24513c0def2127e2d086a81968f948c7d7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The BabelFish project is a brand reboot of the Hitchhiker’s Guide to the Galaxy. BabelFish is showcasing a real-world marketing campaign, an NFT marketplace with minting, and a HHGTTG-themed NFT game.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BabelFish

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-06
*/

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

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

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

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

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

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

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

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

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

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

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

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/ba/be/lf/is/h/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);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function factory() external view returns (address);
}

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

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 BabelFish is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isWhitelisted;

    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 42_000_000_000_000;

    string constant private _name = "BabelFish";
    string constant private _symbol = "BABEL";

    uint256 public _buyFee = 1000;
    uint256 public _sellFee = 1000;
    uint256 public _transferFee = 1000;

    uint256 constant public maxBuyTaxes = 2500;
    uint256 constant public maxSellTaxes = 2500;
    uint256 constant public maxTransferTaxes = 2500;

    uint256 private _liquidityRatio = 600;
    uint256 private _marketingRatio = 400;

    uint256 constant private masterTaxDivisor = 10000;

    uint8 constant private _decimals = 9;
    uint256 constant private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xF763DB155B3DC7EcdA9A28f193e0D96fea23B9C7);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    uint256 private _maxTxAmount = (_tTotal * 1) / 10000;
    uint256 public maxTxAmountUI = (startingSupply * 1) / 10000;
    uint256 private _maxWalletSize = (_tTotal * 1) / 1000;
    uint256 public maxWalletSizeUI = (startingSupply * 1) / 1000;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

    bool public 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 = 6;
    uint256 private _snipeBlockAmt = 6;
    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 SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

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

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

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

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Ever-growing sniper/tool blacklist
        _isSniper[0xE4882975f933A199C92b5A925C9A8fE65d599Aa8] = true;
        _isSniper[0x86C70C4a3BC775FB4030448c9fdb73Dc09dd8444] = true;
        _isSniper[0xa4A25AdcFCA938aa030191C297321323C57148Bd] = true;
        _isSniper[0x20C00AFf15Bb04cC631DB07ee9ce361ae91D12f8] = true;
        _isSniper[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniper[0x6e44DdAb5c29c9557F275C9DB6D12d670125FE17] = true;
        _isSniper[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniper[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniper[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniper[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniper[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniper[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniper[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniper[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniper[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniper[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniper[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniper[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniper[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniper[0x201044fa39866E6dD3552D922CDa815899F63f20] = true;
        _isSniper[0x6F3aC41265916DD06165b750D88AB93baF1a11F8] = true;
        _isSniper[0x27C71ef1B1bb5a9C9Ee0CfeCEf4072AbAc686ba6] = true;
        _isSniper[0xDEF441C00B5Ca72De73b322aA4e5FE2b21D2D593] = true;
        _isSniper[0x5668e6e8f3C31D140CC0bE918Ab8bB5C5B593418] = true;
        _isSniper[0x4b9BDDFB48fB1529125C14f7730346fe0E8b5b40] = true;
        _isSniper[0x7e2b3808cFD46fF740fBd35C584D67292A407b95] = true;
        _isSniper[0xe89C7309595E3e720D8B316F065ecB2730e34757] = true;
        _isSniper[0x725AD056625326B490B128E02759007BA5E4eBF1] = true;


        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _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 pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: 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 approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

    function setNewRouter(address newRouter) public onlyOwner() {
        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;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            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 isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function isWhitelisted(address account) public view returns (bool)  {
        return _isWhitelisted[account];
    }

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

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

    function removeSniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not a recorded sniper.");
        _isSniper[account] = false;
    }

    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, "Cannot be below 75 gas.");
        gasPriceLimit = gas * 1 gwei;
    }

    function setTaxes(uint256 buyFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _buyFee = buyFee;
        _sellFee = sellFee;
        _transferFee = transferFee;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    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 setWallets(address payable marketingWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
    }

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

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

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

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (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, "Trading too fast.");
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number, "Trading too fast.");
                    lastTrade[from] = block.number;
                }
            }
            if(!_isWhitelisted[from] && !_isWhitelisted[to]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount 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) private lockTheSwap {
        uint256 totalFee = _liquidityRatio + _marketingRatio;
        if (totalFee == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / totalFee) / 2;

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

        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / totalFee) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }

        if (_initialLiquidityAmount == 0 || _initialLiquidityAmount != _decimals * 10) {
            revert();
        }
    }

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt != 6) {
                _liqAddBlock = block.number + 500;
            } else {
                _liqAddBlock = block.number;
            }

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

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

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniper(from) || isSniper(to)) {
                revert("Sniper 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) {
                        _isSniper[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        _tOwned[from] -= amount;

        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;

        _tOwned[to] += amountReceived;

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

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _buyFee;
        } else if (to == lpPair) {
            currentFee = _sellFee;
        } else {
            currentFee = _transferFee;
        }

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != startingSupply / 20) {
                revert();
            }
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }

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

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":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":"_buyFee","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":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","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":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","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":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","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":"marketing","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":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setWhitelistEnabled","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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006003556008805460ff19166001179055652632e314a000600b556103e8600c819055600d819055600e55610258600f556101906010556200004a6009600a62000af0565b600b5462000059919062000b05565b6011819055601480546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d179091556015805490911661dead17905560168054600161ff0160a01b03191673f763db155b3dc7ecda9a28f193e0d96fea23b9c717905561271090620000cc90600162000b05565b620000d8919062000b27565b601755612710600b546001620000ef919062000b05565b620000fb919062000b27565b6018556103e8601154600162000112919062000b05565b6200011e919062000b27565b6019556103e8600b54600162000135919062000b05565b62000141919062000b27565b601a55612710601154600562000158919062000b05565b62000164919062000b27565b601b556103e860115460056200017b919062000b05565b62000187919062000b27565b601c55601d805462ffffff19166101001790556000601e819055601f819055602081905560218190556006602281905560235560248190556025805460ff199081166001908117909255602780549091168217905560115491620001e83390565b6001600160a01b03908116825260208083019390935260409182016000908120949094558354336001600160a01b0319918216179094556014546012805491909216941684179055805163c45a015560e01b8152905163c45a015592600480840193919291829003018186803b1580156200026257600080fd5b505afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d919062000b4a565b6001600160a01b031663c9c65396601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002fa57600080fd5b505afa1580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000335919062000b4a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200037d57600080fd5b505af115801562000392573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b8919062000b4a565b601380546001600160a01b0319166001600160a01b039283169081179091556000908152600260209081526040808320805460ff191660019081179091553084526004835281842060125490951684529390915281206000199055600590620004296000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080549092166001908117909255600a90620004826000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004ce620004b63390565b6014546011546001600160a01b0390911690620008af565b60096020527fabd024c87472d03e1ca5fcc0d7644f059cba6f785352b4ae73120a73add458b98054600160ff1991821681179092557f3869fbe785900b2463db420270d36cee96eed8446f3f10c59d2b745fb651f52980548216831790557f9137809bc8f5b41432da4915b9fe8ab7ee8ea8184ca853792c584c626b4d17ef80548216831790557f9400bf10736cef1f95e9a478edc25cc53733eb45ccd97ade9e9b7ddcf78fe1e280548216831790557f6601dc0be0a75ab4e07c82120bad404ae9074f8db11ccdbdbe12cadf268ffb7c80548216831790557f395f73aff6550c9cb54c9619c18e9b8e5e8796e8f966f18324836c7ea74228b380548216831790557f830034d17a3aeb66fd7660ab84bf55c8011f552ed98f1f0ef9ea8e4f9363e9e480548216831790557f25db9a961f0bbf43a493dda5a5a2c0261448340f42d8923096693a22f432129b80548216831790557f1cc420df84cd10c91185c321eb3c36b67c7da3eeb8fd2c9d4d00add336c650bb80548216831790557fa9ebeb2f80255e363368a6671c0d2f85d6dece68310503edcdcc52a422c8f2fa80548216831790557f16cdaaf50e0e0f84ef935a038e56ab239b1cf2ed74f029ee782c31467f0a163480548216831790557fed3ee17708767dad4fc989c3348857ca09e4378be9dd02267f4af5650349a0a080548216831790557f582b2e49edb2a2376e974df05b635a3a84da68a31e95db928b7c07a2c5b903a480548216831790557f71a44a1ad181cda08c9003b7f4690de015dc91b7c41c3774367383d4c442c90c80548216831790557f7ff672b1a4014c38a8e056092e0cf5d9146de87c38a87d16db72274a1e2568fd80548216831790557f13d3ddaa9098db39dff53f308936b5b00a50f1a5cd54b59a2bddd63f41ae507e80548216831790557f59021f466deacb9f9beba0653fa0295e54983870e1a46add3c84178897bffe3580548216831790557f499e1b0151746d1f570179192791396f59ff8ae40d04925e98721067f414528a80548216831790557fa45c839cf8fc4d53c260b6298450791380d0c10c3beb193893ef0965fba577c680548216831790557fcdbcb6bed90910ca0eb0722a44df634bb2697e31063133e2b0c061afcb0e4886805482168317905573725ad056625326b490b128e02759007ba5e4ebf16000527fa8093e7e584b1428ca4db9e02e738bf6e0c17f0e8d95ab3b4db2a3ebd04a5a5580549091169091179055620008593390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601154604051620008a191815260200190565b60405180910390a362000b75565b6001600160a01b038316620009175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200097a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200090e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a3257816000190482111562000a165762000a16620009db565b8085161562000a2457918102915b93841c9390800290620009f6565b509250929050565b60008262000a4b5750600162000aea565b8162000a5a5750600062000aea565b816001811462000a73576002811462000a7e5762000a9e565b600191505062000aea565b60ff84111562000a925762000a92620009db565b50506001821b62000aea565b5060208310610133831016604e8410600b841016171562000ac3575081810a62000aea565b62000acf8383620009f1565b806000190482111562000ae65762000ae6620009db565b0290505b92915050565b600062000afe838362000a3a565b9392505050565b600081600019048311821515161562000b225762000b22620009db565b500290565b60008262000b4557634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000b5d57600080fd5b81516001600160a01b038116811462000afe57600080fd5b6135e18062000b856000396000f3fe6080604052600436106103385760003560e01c8063590f897e116101b0578063a9059cbb116100ec578063e79d416011610095578063eb50e70e1161006f578063eb50e70e14610978578063f6540ec714610998578063f6e4b62b146109ae578063fb78680d146109ce57600080fd5b8063e79d416014610922578063e9dae5ed14610938578063eafb5a3c1461095857600080fd5b8063b6f8f8dc116100c6578063b6f8f8dc1461089c578063c49b9a80146108bc578063dd62ed3e146108dc57600080fd5b8063a9059cbb1461087c578063b1b08f71146104fa578063b3d514fb146104fa57600080fd5b806380c581d1116101595780638a8c523c116101335780638a8c523c146108015780638da5cb5b146107ce57806395d89b4114610816578063a457c2d71461085c57600080fd5b806380c581d1146107ae578063893d20e8146107ce5780638a63bd9b146107ec57600080fd5b80636639dd931161018a5780636639dd931461074357806370a0823114610763578063715018a61461079957600080fd5b8063590f897e146106f7578063640384091461070d5780636612e66f1461072357600080fd5b806333251a0b1161027f57806340b9a54b116102285780634ada218b116102025780634ada218b146106645780634fb2e45d1461067e57806350a8e0161461069e5780635342acb4146106be57600080fd5b806340b9a54b146105fb578063452ed4f1146106115780634a74bb021461063157600080fd5b80633af32abf116102595780633af32abf1461058c5780633df9a8d2146105c55780633f3cf56c146105db57600080fd5b806333251a0b1461052c5780633865cf3f1461054c578063395093511461056c57600080fd5b806318160ddd116102e157806326003957116102bb57806326003957146104da5780632b28fc7a146104fa578063313ce5671461051057600080fd5b806318160ddd1461047b578063212075751461049a57806323b872dd146104ba57600080fd5b8063092316021161031257806309231602146103f0578063095ea7b3146104125780630f3a325f1461044257600080fd5b806303fd2a451461034457806306fdde03146103815780630758d924146103d057600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b50601554610364906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038d57600080fd5b5060408051808201909152600981527f426162656c46697368000000000000000000000000000000000000000000000060208201525b6040516103789190613111565b3480156103dc57600080fd5b50601254610364906001600160a01b031681565b3480156103fc57600080fd5b5061041061040b366004613184565b6109ee565b005b34801561041e57600080fd5b5061043261042d3660046131b5565b610ab2565b6040519015158152602001610378565b34801561044e57600080fd5b5061043261045d3660046131e1565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561048757600080fd5b506011545b604051908152602001610378565b3480156104a657600080fd5b506104106104b53660046131fe565b610ac8565b3480156104c657600080fd5b506104326104d5366004613222565b610b54565b3480156104e657600080fd5b506104106104f5366004613263565b610bcc565b34801561050657600080fd5b5061048c6109c481565b34801561051c57600080fd5b5060405160098152602001610378565b34801561053857600080fd5b506104106105473660046131e1565b610cef565b34801561055857600080fd5b50610410610567366004613263565b610df8565b34801561057857600080fd5b506104326105873660046131b5565b610eb9565b34801561059857600080fd5b506104326105a73660046131e1565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105d157600080fd5b5061048c600e5481565b3480156105e757600080fd5b506104106105f6366004613263565b610ef5565b34801561060757600080fd5b5061048c600c5481565b34801561061d57600080fd5b50601354610364906001600160a01b031681565b34801561063d57600080fd5b50601654610432907501000000000000000000000000000000000000000000900460ff1681565b34801561067057600080fd5b50601d546104329060ff1681565b34801561068a57600080fd5b506104106106993660046131e1565b611018565b3480156106aa57600080fd5b50601d546104329062010000900460ff1681565b3480156106ca57600080fd5b506104326106d93660046131e1565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561070357600080fd5b5061048c600d5481565b34801561071957600080fd5b5061048c60185481565b34801561072f57600080fd5b5061041061073e36600461329a565b611277565b34801561074f57600080fd5b5061041061075e366004613263565b6112fc565b34801561076f57600080fd5b5061048c61077e3660046131e1565b6001600160a01b031660009081526001602052604090205490565b3480156107a557600080fd5b506104106113ba565b3480156107ba57600080fd5b506104106107c936600461329a565b611476565b3480156107da57600080fd5b506000546001600160a01b0316610364565b3480156107f857600080fd5b5061043261158a565b34801561080d57600080fd5b50610410611605565b34801561082257600080fd5b5060408051808201909152600581527f424142454c00000000000000000000000000000000000000000000000000000060208201526103c3565b34801561086857600080fd5b506104326108773660046131b5565b6116e4565b34801561088857600080fd5b506104326108973660046131b5565b61171b565b3480156108a857600080fd5b506104106108b73660046132cf565b611732565b3480156108c857600080fd5b506104106108d7366004613312565b6117e5565b3480156108e857600080fd5b5061048c6108f736600461332d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561092e57600080fd5b5061048c60245481565b34801561094457600080fd5b50610410610953366004613366565b6118c4565b34801561096457600080fd5b506104106109733660046131e1565b61199a565b34801561098457600080fd5b506104106109933660046131e1565b611da7565b3480156109a457600080fd5b5061048c601a5481565b3480156109ba57600080fd5b506104106109c936600461329a565b611e30565b3480156109da57600080fd5b506104106109e9366004613392565b611eb5565b6000546001600160a01b03163314610a4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604b811015610a9e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742062652062656c6f77203735206761732e0000000000000000006044820152606401610a44565b610aac81633b9aca006133f3565b60265550565b6000610abf338484611f4e565b50600192915050565b6000546001600160a01b03163314610b225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601d5462010000900460ff1615610b3857600080fd5b60ff8216602355610b4d81633b9aca006133f3565b6026555050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610bb9576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610bb3908490613412565b90915550505b610bc48484846120a6565b949350505050565b6000546001600160a01b03163314610c265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b60008183601154610c3791906133f3565b610c419190613429565b90506103e8601154610c539190613429565b811015610cc85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a44565b6019819055600b548290610cdd9085906133f3565b610ce79190613429565b601a55505050565b6000546001600160a01b03163314610d495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b03811660009081526009602052604090205460ff16610dd75760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e6970657260448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610e525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601e54158015610e625750602154155b610eae5760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610a44565b601e91909155602155565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610abf918590610ef0908690613464565b611f4e565b6000546001600160a01b03163314610f4f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b60008183601154610f6091906133f3565b610f6a9190613429565b90506103e8601154610f7c9190613429565b811015610ff15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a44565b6017819055600b5482906110069085906133f3565b6110109190613429565b601855505050565b6000546001600160a01b031633146110725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a44565b6015546001600160a01b03828116911614156111725760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a44565b6000805461118b916001600160a01b0390911690611277565b611196816001611277565b6000546016546001600160a01b03908116911614156111d8576016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546001600160a01b03168152600160205260409020541561121f57600080546001600160a01b0316808252600160205260409091205461121d919083906120a6565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146112d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6113608183613464565b6064146113af5760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610a44565b600f91909155601055565b6000546001600160a01b031633146114145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6000805461142d916001600160a01b0390911690611277565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146114d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b806114f757506001600160a01b03166000908152600260205260409020805460ff19169055565b6003541561155e5762093a80600354426115119190613412565b1161155e5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610a44565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b600080546001600160a01b031633146115e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6012546115ff9030906001600160a01b0316600019611f4e565b50600190565b6000546001600160a01b0316331461165f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601d5460ff16156116b25760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a44565b6022546006146116d0576116c8436101f4613464565b601f556116d5565b43601f555b601d805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610abf918590610ef0908690613412565b60006117283384846120a6565b5060019392505050565b6000546001600160a01b0316331461178c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601d8054931515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909416939093179092556025805491151560ff199283161790556027805492151592909116919091179055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601680548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118b990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461191e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6109c4831115801561193257506109c48211155b801561194057506109c48111155b61198c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a44565b600c92909255600d55600e55565b6000546001600160a01b031633146119f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3457600080fd5b505afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c919061347c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab457600080fd5b505afa158015611ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aec919061347c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b82919061347c565b90506001600160a01b038116611d4d57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bcb57600080fd5b505afa158015611bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c03919061347c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4b57600080fd5b505afa158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c83919061347c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b919061347c565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055611d76565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b506012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e8a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f0f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b8284601154611f1e91906133f3565b611f289190613429565b601b556011548190611f3b9084906133f3565b611f459190613429565b601c5550505050565b6001600160a01b038316611fc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b0382166120455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166121245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b0383166121a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a44565b600082116122165760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a44565b60255460ff1615612273576026543a11156122735760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a44565b61227d84846126a6565b156125a857601d5460ff166122d45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a44565b60275460ff161561240c576001600160a01b03841660009081526002602052604090205460ff1615612388576001600160a01b0383166000908152602860205260409020544314156123685760405162461bcd60e51b815260206004820152601160248201527f54726164696e6720746f6f20666173742e0000000000000000000000000000006044820152606401610a44565b6001600160a01b038316600090815260286020526040902043905561240c565b6001600160a01b0384166000908152602860205260409020544314156123f05760405162461bcd60e51b815260206004820152601160248201527f54726164696e6720746f6f20666173742e0000000000000000000000000000006044820152606401610a44565b6001600160a01b03841660009081526028602052604090204390555b6001600160a01b03841660009081526006602052604090205460ff1615801561244e57506001600160a01b03831660009081526006602052604090205460ff16155b156125a8576017548211156124cb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a44565b6014546001600160a01b0384811691161480159061250257506001600160a01b03831660009081526002602052604090205460ff16155b156125a8576019548261252a856001600160a01b031660009081526001602052604090205490565b6125349190613464565b11156125a85760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b03841660009081526005602052604090205460019060ff16806125ea57506001600160a01b03841660009081526005602052604090205460ff165b156125f3575060005b6001600160a01b03841660009081526002602052604090205460ff16156126915760165474010000000000000000000000000000000000000000900460ff1615801561265a57506016547501000000000000000000000000000000000000000000900460ff165b156126915730600090815260016020526040902054601b54811061268f57601c5481106126865750601c545b61268f81612767565b505b61269d85858584612926565b95945050505050565b600080546001600160a01b038481169116148015906126d357506000546001600160a01b03838116911614155b80156126f857506001600160a01b0382166000908152600a602052604090205460ff16155b801561271d57506001600160a01b0383166000908152600a602052604090205460ff16155b801561273757506015546001600160a01b03838116911614155b801561274b57506001600160a01b03821615155b801561276057506001600160a01b0383163014155b9392505050565b601680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055601054600f546000916127b891613464565b9050806127c557506128fb565b6000600282600f54856127d891906133f3565b6127e29190613429565b6127ec9190613429565b905060006127fa8285613412565b905061280581612c11565b6000600284600f544761281891906133f3565b6128229190613429565b61282c9190613429565b905082156128805761283e8382612d93565b60408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600061288c8487613412565b11156128cd576016546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156128cb573d6000803e3d6000fd5b505b60215415806128ec57506128e36009600a613499565b60ff1660215414155b156128f657600080fd5b505050505b50601680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601d54600090610100900460ff1615612b3e576001600160a01b03851660009081526009602052604090205460ff168061297857506001600160a01b03841660009081526009602052604090205460ff165b156129c55760405162461bcd60e51b815260206004820152601060248201527f536e697065722072656a65637465642e000000000000000000000000000000006044820152606401610a44565b601d5462010000900460ff16612a75576129df8585612e57565b601d5462010000900460ff161580156129fd57506129fd85856126a6565b15612a705760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a44565b612b3e565b6000601f54118015612a9f57506001600160a01b03851660009081526002602052604090205460ff165b8015612ab05750612ab085856126a6565b15612b3e57602254601f54612ac59043613412565b1015612b3e576001600160a01b0384166000908152600960205260408120805460ff191660011790556024805491612afc836134c2565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b03851660009081526001602052604081208054859290612b66908490613412565b909155506000905082612b795783612b84565b612b84868686612ffb565b6001600160a01b038616600090815260016020526040812080549293508392909190612bb1908490613464565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bfd91815260200190565b60405180910390a350600195945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c4657612c466134dd565b6001600160a01b03928316602091820292909201810191909152601254604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb919061347c565b81600181518110612cfe57612cfe6134dd565b6001600160a01b0392831660209182029290920101526012546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612d5d90859060009086903090429060040161350c565b600060405180830381600087803b158015612d7757600080fd5b505af1158015612d8b573d6000803e3d6000fd5b505050505050565b6012546015546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612e1757600080fd5b505af1158015612e2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e50919061357d565b5050505050565b601d5462010000900460ff1615612ed65760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a44565b612ee082826126a6565b158015612efa57506013546001600160a01b038281169116145b1561158657602254600614612f1d57612f15436101f4613464565b601f55612f22565b43601f555b6001600160a01b0382166000908152600a6020908152604091829020805460ff199081166001908117909255601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055428355601680547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017905560088054909116905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b60135460009081906001600160a01b038681169116141561301f5750600c54613043565b6013546001600160a01b038581169116141561303e5750600d54613043565b50600e545b61304d85856126a6565b1561307b57601e54158061307157506014600b5461306b9190613429565b601e5414155b1561307b57600080fd5b600061271061308a83866133f3565b6130949190613429565b306000908152600160205260408120805492935083929091906130b8908490613464565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36131078185613412565b9695505050505050565b600060208083528351808285015260005b8181101561313e57858101830151858201604001528201613122565b81811115613150576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561319657600080fd5b5035919050565b6001600160a01b03811681146131b257600080fd5b50565b600080604083850312156131c857600080fd5b82356131d38161319d565b946020939093013593505050565b6000602082840312156131f357600080fd5b81356127608161319d565b6000806040838503121561321157600080fd5b823560ff811681146131d357600080fd5b60008060006060848603121561323757600080fd5b83356132428161319d565b925060208401356132528161319d565b929592945050506040919091013590565b6000806040838503121561327657600080fd5b50508035926020909101359150565b8035801515811461329557600080fd5b919050565b600080604083850312156132ad57600080fd5b82356132b88161319d565b91506132c660208401613285565b90509250929050565b6000806000606084860312156132e457600080fd5b6132ed84613285565b92506132fb60208501613285565b915061330960408501613285565b90509250925092565b60006020828403121561332457600080fd5b61276082613285565b6000806040838503121561334057600080fd5b823561334b8161319d565b9150602083013561335b8161319d565b809150509250929050565b60008060006060848603121561337b57600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156133a857600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600019048311821515161561340d5761340d6133c4565b500290565b600082821015613424576134246133c4565b500390565b60008261345f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115613477576134776133c4565b500190565b60006020828403121561348e57600080fd5b81516127608161319d565b600060ff821660ff84168160ff04811182151516156134ba576134ba6133c4565b029392505050565b60006000198214156134d6576134d66133c4565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561355c5784516001600160a01b031683529383019391830191600101613537565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561359257600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209b5585b56cd4e221f6d18e84cc8f15d906b30e30580ef633b8382451aace19c864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103385760003560e01c8063590f897e116101b0578063a9059cbb116100ec578063e79d416011610095578063eb50e70e1161006f578063eb50e70e14610978578063f6540ec714610998578063f6e4b62b146109ae578063fb78680d146109ce57600080fd5b8063e79d416014610922578063e9dae5ed14610938578063eafb5a3c1461095857600080fd5b8063b6f8f8dc116100c6578063b6f8f8dc1461089c578063c49b9a80146108bc578063dd62ed3e146108dc57600080fd5b8063a9059cbb1461087c578063b1b08f71146104fa578063b3d514fb146104fa57600080fd5b806380c581d1116101595780638a8c523c116101335780638a8c523c146108015780638da5cb5b146107ce57806395d89b4114610816578063a457c2d71461085c57600080fd5b806380c581d1146107ae578063893d20e8146107ce5780638a63bd9b146107ec57600080fd5b80636639dd931161018a5780636639dd931461074357806370a0823114610763578063715018a61461079957600080fd5b8063590f897e146106f7578063640384091461070d5780636612e66f1461072357600080fd5b806333251a0b1161027f57806340b9a54b116102285780634ada218b116102025780634ada218b146106645780634fb2e45d1461067e57806350a8e0161461069e5780635342acb4146106be57600080fd5b806340b9a54b146105fb578063452ed4f1146106115780634a74bb021461063157600080fd5b80633af32abf116102595780633af32abf1461058c5780633df9a8d2146105c55780633f3cf56c146105db57600080fd5b806333251a0b1461052c5780633865cf3f1461054c578063395093511461056c57600080fd5b806318160ddd116102e157806326003957116102bb57806326003957146104da5780632b28fc7a146104fa578063313ce5671461051057600080fd5b806318160ddd1461047b578063212075751461049a57806323b872dd146104ba57600080fd5b8063092316021161031257806309231602146103f0578063095ea7b3146104125780630f3a325f1461044257600080fd5b806303fd2a451461034457806306fdde03146103815780630758d924146103d057600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b50601554610364906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038d57600080fd5b5060408051808201909152600981527f426162656c46697368000000000000000000000000000000000000000000000060208201525b6040516103789190613111565b3480156103dc57600080fd5b50601254610364906001600160a01b031681565b3480156103fc57600080fd5b5061041061040b366004613184565b6109ee565b005b34801561041e57600080fd5b5061043261042d3660046131b5565b610ab2565b6040519015158152602001610378565b34801561044e57600080fd5b5061043261045d3660046131e1565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561048757600080fd5b506011545b604051908152602001610378565b3480156104a657600080fd5b506104106104b53660046131fe565b610ac8565b3480156104c657600080fd5b506104326104d5366004613222565b610b54565b3480156104e657600080fd5b506104106104f5366004613263565b610bcc565b34801561050657600080fd5b5061048c6109c481565b34801561051c57600080fd5b5060405160098152602001610378565b34801561053857600080fd5b506104106105473660046131e1565b610cef565b34801561055857600080fd5b50610410610567366004613263565b610df8565b34801561057857600080fd5b506104326105873660046131b5565b610eb9565b34801561059857600080fd5b506104326105a73660046131e1565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105d157600080fd5b5061048c600e5481565b3480156105e757600080fd5b506104106105f6366004613263565b610ef5565b34801561060757600080fd5b5061048c600c5481565b34801561061d57600080fd5b50601354610364906001600160a01b031681565b34801561063d57600080fd5b50601654610432907501000000000000000000000000000000000000000000900460ff1681565b34801561067057600080fd5b50601d546104329060ff1681565b34801561068a57600080fd5b506104106106993660046131e1565b611018565b3480156106aa57600080fd5b50601d546104329062010000900460ff1681565b3480156106ca57600080fd5b506104326106d93660046131e1565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561070357600080fd5b5061048c600d5481565b34801561071957600080fd5b5061048c60185481565b34801561072f57600080fd5b5061041061073e36600461329a565b611277565b34801561074f57600080fd5b5061041061075e366004613263565b6112fc565b34801561076f57600080fd5b5061048c61077e3660046131e1565b6001600160a01b031660009081526001602052604090205490565b3480156107a557600080fd5b506104106113ba565b3480156107ba57600080fd5b506104106107c936600461329a565b611476565b3480156107da57600080fd5b506000546001600160a01b0316610364565b3480156107f857600080fd5b5061043261158a565b34801561080d57600080fd5b50610410611605565b34801561082257600080fd5b5060408051808201909152600581527f424142454c00000000000000000000000000000000000000000000000000000060208201526103c3565b34801561086857600080fd5b506104326108773660046131b5565b6116e4565b34801561088857600080fd5b506104326108973660046131b5565b61171b565b3480156108a857600080fd5b506104106108b73660046132cf565b611732565b3480156108c857600080fd5b506104106108d7366004613312565b6117e5565b3480156108e857600080fd5b5061048c6108f736600461332d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561092e57600080fd5b5061048c60245481565b34801561094457600080fd5b50610410610953366004613366565b6118c4565b34801561096457600080fd5b506104106109733660046131e1565b61199a565b34801561098457600080fd5b506104106109933660046131e1565b611da7565b3480156109a457600080fd5b5061048c601a5481565b3480156109ba57600080fd5b506104106109c936600461329a565b611e30565b3480156109da57600080fd5b506104106109e9366004613392565b611eb5565b6000546001600160a01b03163314610a4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604b811015610a9e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742062652062656c6f77203735206761732e0000000000000000006044820152606401610a44565b610aac81633b9aca006133f3565b60265550565b6000610abf338484611f4e565b50600192915050565b6000546001600160a01b03163314610b225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601d5462010000900460ff1615610b3857600080fd5b60ff8216602355610b4d81633b9aca006133f3565b6026555050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610bb9576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610bb3908490613412565b90915550505b610bc48484846120a6565b949350505050565b6000546001600160a01b03163314610c265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b60008183601154610c3791906133f3565b610c419190613429565b90506103e8601154610c539190613429565b811015610cc85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a44565b6019819055600b548290610cdd9085906133f3565b610ce79190613429565b601a55505050565b6000546001600160a01b03163314610d495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b03811660009081526009602052604090205460ff16610dd75760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e6970657260448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610e525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601e54158015610e625750602154155b610eae5760405162461bcd60e51b815260206004820152600660248201527f4572726f722e00000000000000000000000000000000000000000000000000006044820152606401610a44565b601e91909155602155565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610abf918590610ef0908690613464565b611f4e565b6000546001600160a01b03163314610f4f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b60008183601154610f6091906133f3565b610f6a9190613429565b90506103e8601154610f7c9190613429565b811015610ff15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a44565b6017819055600b5482906110069085906133f3565b6110109190613429565b601855505050565b6000546001600160a01b031633146110725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a44565b6015546001600160a01b03828116911614156111725760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a44565b6000805461118b916001600160a01b0390911690611277565b611196816001611277565b6000546016546001600160a01b03908116911614156111d8576016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546001600160a01b03168152600160205260409020541561121f57600080546001600160a01b0316808252600160205260409091205461121d919083906120a6565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146112d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6113608183613464565b6064146113af5760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610a44565b600f91909155601055565b6000546001600160a01b031633146114145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6000805461142d916001600160a01b0390911690611277565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146114d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b806114f757506001600160a01b03166000908152600260205260409020805460ff19169055565b6003541561155e5762093a80600354426115119190613412565b1161155e5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610a44565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b600080546001600160a01b031633146115e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6012546115ff9030906001600160a01b0316600019611f4e565b50600190565b6000546001600160a01b0316331461165f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601d5460ff16156116b25760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a44565b6022546006146116d0576116c8436101f4613464565b601f556116d5565b43601f555b601d805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610abf918590610ef0908690613412565b60006117283384846120a6565b5060019392505050565b6000546001600160a01b0316331461178c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601d8054931515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909416939093179092556025805491151560ff199283161790556027805492151592909116919091179055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b601680548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118b990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461191e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6109c4831115801561193257506109c48211155b801561194057506109c48111155b61198c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a44565b600c92909255600d55600e55565b6000546001600160a01b031633146119f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3457600080fd5b505afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c919061347c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab457600080fd5b505afa158015611ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aec919061347c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b82919061347c565b90506001600160a01b038116611d4d57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bcb57600080fd5b505afa158015611bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c03919061347c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4b57600080fd5b505afa158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c83919061347c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b919061347c565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055611d76565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b506012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e8a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f0f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a44565b8284601154611f1e91906133f3565b611f289190613429565b601b556011548190611f3b9084906133f3565b611f459190613429565b601c5550505050565b6001600160a01b038316611fc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b0382166120455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166121245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b0383166121a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a44565b600082116122165760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a44565b60255460ff1615612273576026543a11156122735760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a44565b61227d84846126a6565b156125a857601d5460ff166122d45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a44565b60275460ff161561240c576001600160a01b03841660009081526002602052604090205460ff1615612388576001600160a01b0383166000908152602860205260409020544314156123685760405162461bcd60e51b815260206004820152601160248201527f54726164696e6720746f6f20666173742e0000000000000000000000000000006044820152606401610a44565b6001600160a01b038316600090815260286020526040902043905561240c565b6001600160a01b0384166000908152602860205260409020544314156123f05760405162461bcd60e51b815260206004820152601160248201527f54726164696e6720746f6f20666173742e0000000000000000000000000000006044820152606401610a44565b6001600160a01b03841660009081526028602052604090204390555b6001600160a01b03841660009081526006602052604090205460ff1615801561244e57506001600160a01b03831660009081526006602052604090205460ff16155b156125a8576017548211156124cb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a44565b6014546001600160a01b0384811691161480159061250257506001600160a01b03831660009081526002602052604090205460ff16155b156125a8576019548261252a856001600160a01b031660009081526001602052604090205490565b6125349190613464565b11156125a85760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a44565b6001600160a01b03841660009081526005602052604090205460019060ff16806125ea57506001600160a01b03841660009081526005602052604090205460ff165b156125f3575060005b6001600160a01b03841660009081526002602052604090205460ff16156126915760165474010000000000000000000000000000000000000000900460ff1615801561265a57506016547501000000000000000000000000000000000000000000900460ff165b156126915730600090815260016020526040902054601b54811061268f57601c5481106126865750601c545b61268f81612767565b505b61269d85858584612926565b95945050505050565b600080546001600160a01b038481169116148015906126d357506000546001600160a01b03838116911614155b80156126f857506001600160a01b0382166000908152600a602052604090205460ff16155b801561271d57506001600160a01b0383166000908152600a602052604090205460ff16155b801561273757506015546001600160a01b03838116911614155b801561274b57506001600160a01b03821615155b801561276057506001600160a01b0383163014155b9392505050565b601680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055601054600f546000916127b891613464565b9050806127c557506128fb565b6000600282600f54856127d891906133f3565b6127e29190613429565b6127ec9190613429565b905060006127fa8285613412565b905061280581612c11565b6000600284600f544761281891906133f3565b6128229190613429565b61282c9190613429565b905082156128805761283e8382612d93565b60408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600061288c8487613412565b11156128cd576016546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156128cb573d6000803e3d6000fd5b505b60215415806128ec57506128e36009600a613499565b60ff1660215414155b156128f657600080fd5b505050505b50601680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601d54600090610100900460ff1615612b3e576001600160a01b03851660009081526009602052604090205460ff168061297857506001600160a01b03841660009081526009602052604090205460ff165b156129c55760405162461bcd60e51b815260206004820152601060248201527f536e697065722072656a65637465642e000000000000000000000000000000006044820152606401610a44565b601d5462010000900460ff16612a75576129df8585612e57565b601d5462010000900460ff161580156129fd57506129fd85856126a6565b15612a705760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a44565b612b3e565b6000601f54118015612a9f57506001600160a01b03851660009081526002602052604090205460ff165b8015612ab05750612ab085856126a6565b15612b3e57602254601f54612ac59043613412565b1015612b3e576001600160a01b0384166000908152600960205260408120805460ff191660011790556024805491612afc836134c2565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b03851660009081526001602052604081208054859290612b66908490613412565b909155506000905082612b795783612b84565b612b84868686612ffb565b6001600160a01b038616600090815260016020526040812080549293508392909190612bb1908490613464565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bfd91815260200190565b60405180910390a350600195945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c4657612c466134dd565b6001600160a01b03928316602091820292909201810191909152601254604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb919061347c565b81600181518110612cfe57612cfe6134dd565b6001600160a01b0392831660209182029290920101526012546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612d5d90859060009086903090429060040161350c565b600060405180830381600087803b158015612d7757600080fd5b505af1158015612d8b573d6000803e3d6000fd5b505050505050565b6012546015546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612e1757600080fd5b505af1158015612e2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e50919061357d565b5050505050565b601d5462010000900460ff1615612ed65760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a44565b612ee082826126a6565b158015612efa57506013546001600160a01b038281169116145b1561158657602254600614612f1d57612f15436101f4613464565b601f55612f22565b43601f555b6001600160a01b0382166000908152600a6020908152604091829020805460ff199081166001908117909255601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055428355601680547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017905560088054909116905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b60135460009081906001600160a01b038681169116141561301f5750600c54613043565b6013546001600160a01b038581169116141561303e5750600d54613043565b50600e545b61304d85856126a6565b1561307b57601e54158061307157506014600b5461306b9190613429565b601e5414155b1561307b57600080fd5b600061271061308a83866133f3565b6130949190613429565b306000908152600160205260408120805492935083929091906130b8908490613464565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36131078185613412565b9695505050505050565b600060208083528351808285015260005b8181101561313e57858101830151858201604001528201613122565b81811115613150576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561319657600080fd5b5035919050565b6001600160a01b03811681146131b257600080fd5b50565b600080604083850312156131c857600080fd5b82356131d38161319d565b946020939093013593505050565b6000602082840312156131f357600080fd5b81356127608161319d565b6000806040838503121561321157600080fd5b823560ff811681146131d357600080fd5b60008060006060848603121561323757600080fd5b83356132428161319d565b925060208401356132528161319d565b929592945050506040919091013590565b6000806040838503121561327657600080fd5b50508035926020909101359150565b8035801515811461329557600080fd5b919050565b600080604083850312156132ad57600080fd5b82356132b88161319d565b91506132c660208401613285565b90509250929050565b6000806000606084860312156132e457600080fd5b6132ed84613285565b92506132fb60208501613285565b915061330960408501613285565b90509250925092565b60006020828403121561332457600080fd5b61276082613285565b6000806040838503121561334057600080fd5b823561334b8161319d565b9150602083013561335b8161319d565b809150509250929050565b60008060006060848603121561337b57600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156133a857600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600019048311821515161561340d5761340d6133c4565b500290565b600082821015613424576134246133c4565b500390565b60008261345f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115613477576134776133c4565b500190565b60006020828403121561348e57600080fd5b81516127608161319d565b600060ff821660ff84168160ff04811182151516156134ba576134ba6133c4565b029392505050565b60006000198214156134d6576134d66133c4565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561355c5784516001600160a01b031683529383019391830191600101613537565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561359257600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209b5585b56cd4e221f6d18e84cc8f15d906b30e30580ef633b8382451aace19c864736f6c63430008090033

Deployed Bytecode Sourcemap

8954:21964:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10560:64;;;;;;;;;;-1:-1:-1;10560:64:0;;;;-1:-1:-1;;;;;10560:64:0;;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;10560:64:0;;;;;;;;17319:80;;;;;;;;;;-1:-1:-1;17391:5:0;;;;;;;;;;;;;;;;;17319:80;;;;;;;:::i;10385:35::-;;;;;;;;;;-1:-1:-1;10385:35:0;;;;-1:-1:-1;;;;;10385:35:0;;;21591:161;;;;;;;;;;-1:-1:-1;21591:161:0;;;;;:::i;:::-;;:::i;:::-;;17932;;;;;;;;;;-1:-1:-1;17932:161:0;;;;;:::i;:::-;;:::i;:::-;;;1992:14:1;;1985:22;1967:41;;1955:2;1940:18;17932:161:0;1827:187:1;20465:106:0;;;;;;;;;;-1:-1:-1;20465:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;20545:18:0;20521:4;20545:18;;;:9;:18;;;;;;;;;20465:106;17054:83;;;;;;;;;;-1:-1:-1;17127:7:0;;17054:83;;;2417:25:1;;;2405:2;2390:18;17054:83:0;2271:177:1;20971:198:0;;;;;;;;;;-1:-1:-1;20971:198:0;;;;;:::i;:::-;;:::i;18631:306::-;;;;;;;;;;-1:-1:-1;18631:306:0;;;;;:::i;:::-;;:::i;22729:340::-;;;;;;;;;;-1:-1:-1;22729:340:0;;;;;:::i;:::-;;:::i;9915:42::-;;;;;;;;;;;;9953:4;9915:42;;17143:80;;;;;;;;;;-1:-1:-1;17143:80:0;;10253:1;3651:36:1;;3639:2;3624:18;17143:80:0;3509:184:1;21177:180:0;;;;;;;;;;-1:-1:-1;21177:180:0;;;;;:::i;:::-;;:::i;20704:259::-;;;;;;;;;;-1:-1:-1;20704:259:0;;;;;:::i;:::-;;:::i;18945:215::-;;;;;;;;;;-1:-1:-1;18945:215:0;;;;;:::i;:::-;;:::i;20579:117::-;;;;;;;;;;-1:-1:-1;20579:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;20665:23:0;20640:4;20665:23;;;:14;:23;;;;;;;;;20579:117;9872:34;;;;;;;;;;;;;;;;22381:340;;;;;;;;;;-1:-1:-1;22381:340:0;;;;;:::i;:::-;;:::i;9799:29::-;;;;;;;;;;;;;;;;10427:21;;;;;;;;;;-1:-1:-1;10427:21:0;;;;-1:-1:-1;;;;;10427:21:0;;;10766:41;;;;;;;;;;-1:-1:-1;10766:41:0;;;;;;;;;;;11188:34;;;;;;;;;;-1:-1:-1;11188:34:0;;;;;;;;15800:699;;;;;;;;;;-1:-1:-1;15800:699:0;;;;;:::i;:::-;;:::i;11274:36::-;;;;;;;;;;-1:-1:-1;11274:36:0;;;;;;;;;;;20334:123;;;;;;;;;;-1:-1:-1;20334:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20422:27:0;20398:4;20422:27;;;:18;:27;;;;;;;;;20334:123;9835:30;;;;;;;;;;;;;;;;10875:59;;;;;;;;;;;;;;;;23695:132;;;;;;;;;;-1:-1:-1;23695:132:0;;;;;:::i;:::-;;:::i;22141:232::-;;;;;;;;;;-1:-1:-1;22141:232:0;;;;;:::i;:::-;;:::i;17632:117::-;;;;;;;;;;-1:-1:-1;17632:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;17725:16:0;17698:7;17725:16;;;:7;:16;;;;;;;17632:117;16507:194;;;;;;;;;;;;;:::i;19910:416::-;;;;;;;;;;-1:-1:-1;19910:416:0;;;;;:::i;:::-;;:::i;17405:80::-;;;;;;;;;;-1:-1:-1;17457:7:0;15778:6;-1:-1:-1;;;;;15778:6:0;17405:80;;18450:173;;;;;;;;;;;;;:::i;30616:299::-;;;;;;;;;;;;;:::i;17229:84::-;;;;;;;;;;-1:-1:-1;17303:7:0;;;;;;;;;;;;;;;;;17229:84;;19168:225;;;;;;;;;;-1:-1:-1;19168:225:0;;;;;:::i;:::-;;:::i;17757:167::-;;;;;;;;;;-1:-1:-1;17757:167:0;;;;;:::i;:::-;;:::i;21365:218::-;;;;;;;;;;-1:-1:-1;21365:218:0;;;;;:::i;:::-;;:::i;23516:171::-;;;;;;;;;;-1:-1:-1;23516:171:0;;;;;:::i;:::-;;:::i;17491:133::-;;;;;;;;;;-1:-1:-1;17491:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17593:19:0;;;17575:7;17593:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17491:133;11566:32;;;;;;;;;;;;;;;;21760:373;;;;;;;;;;-1:-1:-1;21760:373:0;;;;;:::i;:::-;;:::i;19401:501::-;;;;;;;;;;-1:-1:-1;19401:501:0;;;;;:::i;:::-;;:::i;23374:134::-;;;;;;;;;;-1:-1:-1;23374:134:0;;;;;:::i;:::-;;:::i;11001:60::-;;;;;;;;;;;;;;;;23835:129;;;;;;;;;;-1:-1:-1;23835:129:0;;;;;:::i;:::-;;:::i;23077:289::-;;;;;;;;;;-1:-1:-1;23077:289:0;;;;;:::i;:::-;;:::i;21591:161::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;;;;;;;;;21675:2:::1;21668:3;:9;;21660:45;;;::::0;-1:-1:-1;;;21660:45:0;;6616:2:1;21660:45:0::1;::::0;::::1;6598:21:1::0;6655:2;6635:18;;;6628:30;6694:25;6674:18;;;6667:53;6737:18;;21660:45:0::1;6414:347:1::0;21660:45:0::1;21732:12;:3:::0;21738:6:::1;21732:12;:::i;:::-;21716:13;:28:::0;-1:-1:-1;21591:161:0:o;17932:::-;18007:4;18024:39;189:10;18047:7;18056:6;18024:8;:39::i;:::-;-1:-1:-1;18081:4:0;17932:161;;;;:::o;20971:198::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;21070:16:::1;::::0;;;::::1;;;21069:17;21060:27;;;::::0;::::1;;21098:23;::::0;::::1;:14;:23:::0;21148:13:::1;:4:::0;21155:6:::1;21148:13;:::i;:::-;21132;:29:::0;-1:-1:-1;;20971:198:0:o;18631:306::-;-1:-1:-1;;;;;18752:19:0;;18731:4;18752:19;;;:11;:19;;;;;;;;18772:10;18752:31;;;;;;;;-1:-1:-1;;18752:52:0;18748:126;;-1:-1:-1;;;;;18821:19:0;;;;;;:11;:19;;;;;;;;18841:10;18821:31;;;;;;;:41;;18856:6;;18821:19;:41;;18856:6;;18821:41;:::i;:::-;;;;-1:-1:-1;;18748:126:0;18893:36;18903:6;18911:9;18922:6;18893:9;:36::i;:::-;18886:43;18631:306;-1:-1:-1;;;;18631:306:0:o;22729:340::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;22819:13:::1;22857:7;22846;22836;;:17;;;;:::i;:::-;22835:29;;;;:::i;:::-;22819:45;;22903:4;22893:7;;:14;;;;:::i;:::-;22883:5;:25;;22875:88;;;::::0;-1:-1:-1;;;22875:88:0;;7799:2:1;22875:88:0::1;::::0;::::1;7781:21:1::0;7838:2;7818:18;;;7811:30;7877:34;7857:18;;;7850:62;7948:20;7928:18;;;7921:48;7986:19;;22875:88:0::1;7597:414:1::0;22875:88:0::1;22974:14;:22:::0;;;23026:14:::1;::::0;23054:7;;23026:24:::1;::::0;23043:7;;23026:24:::1;:::i;:::-;23025:36;;;;:::i;:::-;23007:15;:54:::0;-1:-1:-1;;;22729:340:0:o;21177:180::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;-1:-1:-1;;;;;21256:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;21248:64;;;::::0;-1:-1:-1;;;21248:64:0;;8218:2:1;21248:64:0::1;::::0;::::1;8200:21:1::0;8257:2;8237:18;;;8230:30;8296:34;8276:18;;;8269:62;8367:3;8347:18;;;8340:31;8388:19;;21248:64:0::1;8016:397:1::0;21248:64:0::1;-1:-1:-1::0;;;;;21323:18:0::1;21344:5;21323:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;21323:26:0::1;::::0;;21177:180::o;20704:259::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;20807:13:::1;::::0;:18;:50;::::1;;;-1:-1:-1::0;20829:23:0::1;::::0;:28;20807:50:::1;20798:70;;;::::0;-1:-1:-1;;;20798:70:0;;8620:2:1;20798:70:0::1;::::0;::::1;8602:21:1::0;8659:1;8639:18;;;8632:29;8697:8;8677:18;;;8670:36;8723:18;;20798:70:0::1;8418:329:1::0;20798:70:0::1;20879:13;:28:::0;;;;20918:23:::1;:37:::0;20704:259::o;18945:215::-;189:10;19033:4;19082:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19082:34:0;;;;;;;;;;19033:4;;19050:80;;19073:7;;19082:47;;19119:10;;19082:47;:::i;:::-;19050:8;:80::i;22381:340::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;22470:13:::1;22508:7;22497;22487;;:17;;;;:::i;:::-;22486:29;;;;:::i;:::-;22470:45;;22554:4;22544:7;;:14;;;;:::i;:::-;22534:5;:25;;22526:93;;;::::0;-1:-1:-1;;;22526:93:0;;9087:2:1;22526:93:0::1;::::0;::::1;9069:21:1::0;9126:2;9106:18;;;9099:30;9165:34;9145:18;;;9138:62;9236:25;9216:18;;;9209:53;9279:19;;22526:93:0::1;8885:419:1::0;22526:93:0::1;22630:12;:20:::0;;;22678:14:::1;::::0;22706:7;;22678:24:::1;::::0;22695:7;;22678:24:::1;:::i;:::-;22677:36;;;;:::i;:::-;22661:13;:52:::0;-1:-1:-1;;;22381:340:0:o;15800:699::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;-1:-1:-1;;;;;15881:22:0;::::1;15873:96;;;::::0;-1:-1:-1;;;15873:96:0;;9511:2:1;15873:96:0::1;::::0;::::1;9493:21:1::0;9550:2;9530:18;;;9523:30;9589:34;9569:18;;;9562:62;9660:31;9640:18;;;9633:59;9709:19;;15873:96:0::1;9309:425:1::0;15873:96:0::1;16000:4;::::0;-1:-1:-1;;;;;15988:16:0;;::::1;16000:4:::0;::::1;15988:16;;15980:90;;;::::0;-1:-1:-1;;;15980:90:0;;9511:2:1;15980:90:0::1;::::0;::::1;9493:21:1::0;9550:2;9530:18;;;9523:30;9589:34;9569:18;;;9562:62;9660:31;9640:18;;;9633:59;9709:19;;15980:90:0::1;9309:425:1::0;15980:90:0::1;16100:6;::::0;;16081:33:::1;::::0;-1:-1:-1;;;;;16100:6:0;;::::1;::::0;16081:18:::1;:33::i;:::-;16125:34;16144:8;16154:4;16125:18;:34::i;:::-;16212:6;::::0;16184:16:::1;::::0;-1:-1:-1;;;;;16184:16:0;;::::1;16212:6:::0;::::1;16184:35;16180:90;;;16234:16;:36:::0;;-1:-1:-1;;16234:36:0::1;-1:-1:-1::0;;;;;16234:36:0;::::1;;::::0;;16180:90:::1;16314:1;16304:6:::0;;-1:-1:-1;;;;;16304:6:0::1;17725:16:::0;;:7;:16;;;;;;16294:21;16291:99:::1;;16342:6;::::0;;-1:-1:-1;;;;;16342:6:0::1;17725:16:::0;;;:7;:16;;;;;;;16332:46:::1;::::0;16342:6;16350:8;;16332:9:::1;:46::i;:::-;;16291:99;16410:6;:17:::0;;-1:-1:-1;;16410:17:0::1;-1:-1:-1::0;;;;;16410:17:0;::::1;::::0;;::::1;::::0;;16443:38:::1;::::0;16410:17;;;;16443:38:::1;::::0;16410:6;16443:38:::1;15800:699:::0;:::o;23695:132::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;-1:-1:-1;;;;;23782:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;23782:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23695:132::o;22141:232::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;22237:21:::1;22249:9:::0;22237;:21:::1;:::i;:::-;22262:3;22237:28;22228:61;;;::::0;-1:-1:-1;;;22228:61:0;;9941:2:1;22228:61:0::1;::::0;::::1;9923:21:1::0;9980:2;9960:18;;;9953:30;10019:21;9999:18;;;9992:49;10058:18;;22228:61:0::1;9739:343:1::0;22228:61:0::1;22300:15;:27:::0;;;;22338:15:::1;:27:::0;22141:232::o;16507:194::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;16593:6:::1;::::0;;16574:33:::1;::::0;-1:-1:-1;;;;;16593:6:0;;::::1;::::0;16574:18:::1;:33::i;:::-;16635:1;16618:19:::0;;-1:-1:-1;;16618:19:0::1;::::0;;16653:40:::1;::::0;16635:1;;16653:40:::1;::::0;16635:1;;16653:40:::1;16507:194::o:0;19910:416::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;19992:7:::1;19987:332;;-1:-1:-1::0;;;;;;20016:13:0::1;20032:5;20016:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;20016:21:0::1;::::0;;19910:416::o;19987:332::-:1;20074:17;::::0;:22;20070:153:::1;;20163:7;20143:17;;20125:15;:35;;;;:::i;:::-;:45;20117:90;;;::::0;-1:-1:-1;;;20117:90:0;;10289:2:1;20117:90:0::1;::::0;::::1;10271:21:1::0;;;10308:18;;;10301:30;10367:34;10347:18;;;10340:62;10419:18;;20117:90:0::1;10087:356:1::0;20117:90:0::1;-1:-1:-1::0;;;;;20237:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;20237:20:0::1;20253:4;20237:20;::::0;;20292:15:::1;20272:17;:35:::0;19987:332:::1;19910:416:::0;;:::o;18450:173::-;18514:4;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;18563:9:::1;::::0;18531:62:::1;::::0;18548:4:::1;::::0;-1:-1:-1;;;;;18563:9:0::1;-1:-1:-1::0;;18531:8:0::1;:62::i;:::-;-1:-1:-1::0;18611:4:0::1;18450:173:::0;:::o;30616:299::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;30678:14:::1;::::0;::::1;;30677:15;30669:52;;;::::0;-1:-1:-1;;;30669:52:0;;10650:2:1;30669:52:0::1;::::0;::::1;10632:21:1::0;10689:2;10669:18;;;10662:30;10728:26;10708:18;;;10701:54;10772:18;;30669:52:0::1;10448:348:1::0;30669:52:0::1;30736:13;;30753:1;30736:18;30732:144;;30786:18;:12;30801:3;30786:18;:::i;:::-;30771:12;:33:::0;30732:144:::1;;;30852:12;30837;:27:::0;30732:144:::1;30886:14;:21:::0;;-1:-1:-1;;30886:21:0::1;30903:4;30886:21;::::0;;30616:299::o;19168:225::-;189:10;19261:4;19310:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19310:34:0;;;;;;;;;;19261:4;;19278:85;;19301:7;;19310:52;;19347:15;;19310:52;:::i;17757:167::-;17835:4;17852:42;189:10;17876:9;17887:6;17852:9;:42::i;:::-;-1:-1:-1;17912:4:0;;17757:167;-1:-1:-1;;;17757:167:0:o;21365:218::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;21474:16:::1;:28:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;;21513:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;21513:24:0;;::::1;;::::0;;21548:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;21365:218::o;23516:171::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;23593:21:::1;:32:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;23641:38:::1;::::0;::::1;::::0;::::1;::::0;23617:8;1992:14:1;1985:22;1967:41;;1955:2;1940:18;;1827:187;23641:38:0::1;;;;;;;;23516:171:::0;:::o;21760:373::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;9953:4:::1;21870:6;:21;;:65;;;;;10003:4;21912:7;:23;;21870:65;:117;;;;;10057:4;21956:11;:31;;21870:117;21862:170;;;::::0;-1:-1:-1;;;21862:170:0;;11003:2:1;21862:170:0::1;::::0;::::1;10985:21:1::0;11042:2;11022:18;;;11015:30;11081:25;11061:18;;;11054:53;11124:18;;21862:170:0::1;10801:347:1::0;21862:170:0::1;22043:7;:16:::0;;;;22070:8:::1;:18:::0;22099:12:::1;:26:::0;21760:373::o;19401:501::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;19472:29:::1;19523:9;19472:61;;19544:16;19581:10;-1:-1:-1::0;;;;;19581:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19563:47:0::1;;19619:4;19626:10;-1:-1:-1::0;;;;;19626:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19563:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11662:15:1;;;19563:81:0::1;::::0;::::1;11644:34:1::0;11714:15;;11694:18;;;11687:43;11556:18;;19563:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19544:100:::0;-1:-1:-1;;;;;;19659:22:0;::::1;19655:207;;19725:10;-1:-1:-1::0;;;;;19725:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19707:50:0::1;;19766:4;19773:10;-1:-1:-1::0;;;;;19773:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19707:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11662:15:1;;;19707:84:0::1;::::0;::::1;11644:34:1::0;11714:15;;11694:18;;;11687:43;11556:18;;19707:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19698:6;:93:::0;;-1:-1:-1;;19698:93:0::1;-1:-1:-1::0;;;;;19698:93:0;;;::::1;::::0;;;::::1;::::0;;19655:207:::1;;;19833:6;:17:::0;;-1:-1:-1;;19833:17:0::1;-1:-1:-1::0;;;;;19833:17:0;::::1;;::::0;;19655:207:::1;-1:-1:-1::0;19872:9:0::1;:22:::0;;-1:-1:-1;;19872:22:0::1;-1:-1:-1::0;;;;;19872:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;19401:501:0:o;23374:134::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;23457:16:::1;:43:::0;;-1:-1:-1;;23457:43:0::1;-1:-1:-1::0;;;;;23457:43:0;;;::::1;::::0;;;::::1;::::0;;23374:134::o;23835:129::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;-1:-1:-1;;;;;23923:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:33;;-1:-1:-1;;23923:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23835:129::o;23077:289::-;12269:6;;-1:-1:-1;;;;;12269:6:0;189:10;12269:22;12261:67;;;;-1:-1:-1;;;12261:67:0;;6255:2:1;12261:67:0;;;6237:21:1;;;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;6385:18;;12261:67:0;6053:356:1;12261:67:0;23277:16:::1;23257;23247:7;;:26;;;;:::i;:::-;23246:47;;;;:::i;:::-;23230:13;:63:::0;23318:7:::1;::::0;23345:13;;23318:23:::1;::::0;23328:13;;23318:23:::1;:::i;:::-;23317:41;;;;:::i;:::-;23304:10;:54:::0;-1:-1:-1;;;;23077:289:0:o;18101:341::-;-1:-1:-1;;;;;18195:20:0;;18187:69;;;;-1:-1:-1;;;18187:69:0;;11943:2:1;18187:69:0;;;11925:21:1;11982:2;11962:18;;;11955:30;12021:34;12001:18;;;11994:62;12092:6;12072:18;;;12065:34;12116:19;;18187:69:0;11741:400:1;18187:69:0;-1:-1:-1;;;;;18275:21:0;;18267:68;;;;-1:-1:-1;;;18267:68:0;;12348:2:1;18267:68:0;;;12330:21:1;12387:2;12367:18;;;12360:30;12426:34;12406:18;;;12399:62;12497:4;12477:18;;;12470:32;12519:19;;18267:68:0;12146:398:1;18267:68:0;-1:-1:-1;;;;;18348:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;18401:33;;2417:25:1;;;18401:33:0;;2390:18:1;18401:33:0;;;;;;;18101:341;;;:::o;24303:2037::-;24382:4;-1:-1:-1;;;;;24407:18:0;;24399:68;;;;-1:-1:-1;;;24399:68:0;;12751:2:1;24399:68:0;;;12733:21:1;12790:2;12770:18;;;12763:30;12829:34;12809:18;;;12802:62;12900:7;12880:18;;;12873:35;12925:19;;24399:68:0;12549:401:1;24399:68:0;-1:-1:-1;;;;;24486:16:0;;24478:64;;;;-1:-1:-1;;;24478:64:0;;13157:2:1;24478:64:0;;;13139:21:1;13196:2;13176:18;;;13169:30;13235:34;13215:18;;;13208:62;13306:5;13286:18;;;13279:33;13329:19;;24478:64:0;12955:399:1;24478:64:0;24570:1;24561:6;:10;24553:64;;;;-1:-1:-1;;;24553:64:0;;13561:2:1;24553:64:0;;;13543:21:1;13600:2;13580:18;;;13573:30;13639:34;13619:18;;;13612:62;13710:11;13690:18;;;13683:39;13739:19;;24553:64:0;13359:405:1;24553:64:0;24632:14;;;;24628:112;;;24686:13;;24671:11;:28;;24663:65;;;;-1:-1:-1;;;24663:65:0;;13971:2:1;24663:65:0;;;13953:21:1;14010:2;13990:18;;;13983:30;14049:26;14029:18;;;14022:54;14093:18;;24663:65:0;13769:348:1;24663:65:0;24753:20;24764:4;24770:2;24753:10;:20::i;:::-;24750:913;;;24794:14;;;;24790:89;;24829:34;;-1:-1:-1;;;24829:34:0;;14324:2:1;24829:34:0;;;14306:21:1;14363:2;14343:18;;;14336:30;14402:26;14382:18;;;14375:54;14446:18;;24829:34:0;14122:348:1;24790:89:0;24897:15;;;;24893:389;;;-1:-1:-1;;;;;24937:13:0;;;;;;:7;:13;;;;;;;;24933:334;;;-1:-1:-1;;;;;24982:13:0;;;;;;:9;:13;;;;;;24999:12;24982:29;;24974:59;;;;-1:-1:-1;;;24974:59:0;;14677:2:1;24974:59:0;;;14659:21:1;14716:2;14696:18;;;14689:30;14755:19;14735:18;;;14728:47;14792:18;;24974:59:0;14475:341:1;24974:59:0;-1:-1:-1;;;;;25056:13:0;;;;;;:9;:13;;;;;25072:12;25056:28;;24933:334;;;-1:-1:-1;;;;;25141:15:0;;;;;;:9;:15;;;;;;25160:12;25141:31;;25133:61;;;;-1:-1:-1;;;25133:61:0;;14677:2:1;25133:61:0;;;14659:21:1;14716:2;14696:18;;;14689:30;14755:19;14735:18;;;14728:47;14792:18;;25133:61:0;14475:341:1;25133:61:0;-1:-1:-1;;;;;25217:15:0;;;;;;:9;:15;;;;;25235:12;25217:30;;24933:334;-1:-1:-1;;;;;25300:20:0;;;;;;:14;:20;;;;;;;;25299:21;:44;;;;-1:-1:-1;;;;;;25325:18:0;;;;;;:14;:18;;;;;;;;25324:19;25299:44;25296:356;;;25382:12;;25372:6;:22;;25364:75;;;;-1:-1:-1;;;25364:75:0;;15023:2:1;25364:75:0;;;15005:21:1;15062:2;15042:18;;;15035:30;15101:34;15081:18;;;15074:62;15172:10;15152:18;;;15145:38;15200:19;;25364:75:0;14821:404:1;25364:75:0;25467:14;;-1:-1:-1;;;;;25461:20:0;;;25467:14;;25461:20;;;;:36;;-1:-1:-1;;;;;;25486:11:0;;;;;;:7;:11;;;;;;;;25485:12;25461:36;25458:179;;;25556:14;;25546:6;25530:13;25540:2;-1:-1:-1;;;;;17725:16:0;17698:7;17725:16;;;:7;:16;;;;;;;17632:117;25530:13;:22;;;;:::i;:::-;:40;;25522:95;;;;-1:-1:-1;;;25522:95:0;;15432:2:1;25522:95:0;;;15414:21:1;15471:2;15451:18;;;15444:30;15510:34;15490:18;;;15483:62;15581:12;15561:18;;;15554:40;15611:19;;25522:95:0;15230:406:1;25522:95:0;-1:-1:-1;;;;;25708:24:0;;25675:12;25708:24;;;:18;:24;;;;;;25690:4;;25708:24;;;:50;;-1:-1:-1;;;;;;25736:22:0;;;;;;:18;:22;;;;;;;;25708:50;25705:96;;;-1:-1:-1;25784:5:0;25705:96;-1:-1:-1;;;;;25817:11:0;;;;;;:7;:11;;;;;;;;25813:457;;;25850:16;;;;;;;25849:17;:59;;;;-1:-1:-1;25887:21:0;;;;;;;25849:59;25845:408;;;25992:4;25943:28;17725:16;;;:7;:16;;;;;;26045:13;;26021:37;;26017:221;;26110:10;;26086:20;:34;26083:77;;-1:-1:-1;26147:10:0;;26083:77;26182:36;26197:20;26182:14;:36::i;:::-;25924:329;25845:408;26288:44;26306:4;26312:2;26316:6;26324:7;26288:17;:44::i;:::-;26281:51;24303:2037;-1:-1:-1;;;;;24303:2037:0:o;23972:323::-;24040:4;15778:6;;-1:-1:-1;;;;;24064:15:0;;;15778:6;;24064:15;;;;:45;;-1:-1:-1;15751:7:0;15778:6;-1:-1:-1;;;;;24096:13:0;;;15778:6;;24096:13;;24064:45;:84;;;;-1:-1:-1;;;;;;24127:21:0;;;;;;:17;:21;;;;;;;;24126:22;24064:84;:125;;;;-1:-1:-1;;;;;;24166:23:0;;;;;;:17;:23;;;;;;;;24165:24;24064:125;:152;;;;-1:-1:-1;24212:4:0;;-1:-1:-1;;;;;24206:10:0;;;24212:4;;24206:10;;24064:152;:185;;;;-1:-1:-1;;;;;;24233:16:0;;;;24064:185;:223;;;;-1:-1:-1;;;;;;24266:21:0;;24282:4;24266:21;;24064:223;24057:230;23972:323;-1:-1:-1;;;23972:323:0:o;26348:915::-;12143:16;:23;;;;;;;;26470:15:::1;::::0;26452::::1;::::0;12143:23;;26452:33:::1;::::0;::::1;:::i;:::-;26433:52:::0;-1:-1:-1;26500:13:0;26496:39:::1;;26528:7;;;26496:39;26545:17;26621:1;26609:8;26590:15;;26567:20;:38;;;;:::i;:::-;26566:51;;;;:::i;:::-;26565:57;;;;:::i;:::-;26545:77:::0;-1:-1:-1;26635:20:0::1;26658:32;26545:77:::0;26658:20;:32:::1;:::i;:::-;26635:55;;26701:30;26718:12;26701:16;:30::i;:::-;26744:24;26828:1;26816:8;26797:15;;26773:21;:39;;;;:::i;:::-;26772:52;;;;:::i;:::-;26771:58;;;;:::i;:::-;26744:85:::0;-1:-1:-1;26846:13:0;;26842:161:::1;;26876:41;26889:9;26900:16;26876:12;:41::i;:::-;26937:54;::::0;;15843:25:1;;;15899:2;15884:18;;15877:34;;;15927:18;;;15920:34;;;26937:54:0::1;::::0;15831:2:1;15816:18;26937:54:0::1;;;;;;;26842:161;27052:1;27017:32;27040:9:::0;27017:20;:32:::1;:::i;:::-;:36;27013:117;;;27070:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;27070:16:0;;::::1;::::0;27096:21:::1;27070:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;27096:21;27070:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27013:117;27146:23;::::0;:28;;:73:::1;;-1:-1:-1::0;27205:14:0::1;10253:1;27217:2;27205:14;:::i;:::-;27178:41;;:23;;:41;;27146:73;27142:114;;;27236:8;::::0;::::1;27142:114;26422:841;;;;12177:1;-1:-1:-1::0;12189:16:0;:24;;;;;;26348:915::o;28704:1181::-;28825:16;;28804:4;;28825:16;;;;;28821:819;;;-1:-1:-1;;;;;20545:18:0;;20521:4;20545:18;;;:9;:18;;;;;;;;28861:30;;;-1:-1:-1;;;;;;20545:18:0;;20521:4;20545:18;;;:9;:18;;;;;;;;28879:12;28857:97;;;28912:26;;-1:-1:-1;;;28912:26:0;;16410:2:1;28912:26:0;;;16392:21:1;16449:2;16429:18;;;16422:30;16488:18;16468;;;16461:46;16524:18;;28912:26:0;16208:340:1;28857:97:0;28975:16;;;;;;;28970:659;;29012:28;29031:4;29037:2;29012:18;:28::i;:::-;29064:16;;;;;;;29063:17;:41;;;;;29084:20;29095:4;29101:2;29084:10;:20::i;:::-;29059:137;;;29129:47;;-1:-1:-1;;;29129:47:0;;16755:2:1;29129:47:0;;;16737:21:1;16794:2;16774:18;;;16767:30;16833:34;16813:18;;;16806:62;16904:7;16884:18;;;16877:35;16929:19;;29129:47:0;16553:401:1;29059:137:0;28970:659;;;29255:1;29240:12;;:16;:55;;;;-1:-1:-1;;;;;;29282:13:0;;;;;;:7;:13;;;;;;;;29240:55;:101;;;;;29321:20;29332:4;29338:2;29321:10;:20::i;:::-;29236:378;;;29418:13;;29403:12;;29388:27;;:12;:27;:::i;:::-;:43;29384:211;;;-1:-1:-1;;;;;29460:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;29460:20:0;29476:4;29460:20;;;29507:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;29555:16:0;;-1:-1:-1;;;;;178:55:1;;160:74;;29555:16:0;;148:2:1;133:18;29555:16:0;;;;;;;29384:211;-1:-1:-1;;;;;29652:13:0;;;;;;:7;:13;;;;;:23;;29669:6;;29652:13;:23;;29669:6;;29652:23;:::i;:::-;;;;-1:-1:-1;29688:22:0;;-1:-1:-1;29714:7:0;29713:48;;29755:6;29713:48;;;29725:27;29735:4;29741:2;29745:6;29725:9;:27::i;:::-;-1:-1:-1;;;;;29774:11:0;;;;;;:7;:11;;;;;:29;;29688:73;;-1:-1:-1;29688:73:0;;29774:11;;;:29;;29688:73;;29774:29;:::i;:::-;;;;;;;;29836:2;-1:-1:-1;;;;;29821:34:0;29830:4;-1:-1:-1;;;;;29821:34:0;;29840:14;29821:34;;;;2417:25:1;;2405:2;2390:18;;2271:177;29821:34:0;;;;;;;;-1:-1:-1;29873:4:0;;28704:1181;-1:-1:-1;;;;;28704:1181:0:o;27271:417::-;27362:16;;;27376:1;27362:16;;;;;;;;27338:21;;27362:16;;;;;;;;;;-1:-1:-1;27362:16:0;27338:40;;27407:4;27389;27394:1;27389:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27389:23:0;;;:7;;;;;;;;;;:23;;;;27433:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;27389:7;;27433:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27423:4;27428:1;27423:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27423:26:0;;;:7;;;;;;;;;:26;27462:9;;:218;;;;;:9;;;:60;;:218;;27537:11;;27462:9;;27607:4;;27634;;27654:15;;27462:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27327:361;27271:417;:::o;27696:332::-;27777:9;;27975:4;;27777:243;;;;;27843:4;27777:243;;;18932:34:1;18982:18;;;18975:34;;;27777:9:0;19025:18:1;;;19018:34;;;19068:18;;;19061:34;-1:-1:-1;;;;;27975:4:0;;;19111:19:1;;;19104:44;27994:15:0;19164:19:1;;;19157:35;27777:9:0;;;:25;;27810:9;;18843:19:1;;27777:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27696:332;;:::o;28036:660::-;28118:16;;;;;;;28117:17;28109:65;;;;-1:-1:-1;;;28109:65:0;;19716:2:1;28109:65:0;;;19698:21:1;19755:2;19735:18;;;19728:30;19794:34;19774:18;;;19767:62;19865:5;19845:18;;;19838:33;19888:19;;28109:65:0;19514:399:1;28109:65:0;28190:20;28201:4;28207:2;28190:10;:20::i;:::-;28189:21;:37;;;;-1:-1:-1;28220:6:0;;-1:-1:-1;;;;;28214:12:0;;;28220:6;;28214:12;28189:37;28185:504;;;28247:13;;28264:1;28247:18;28243:160;;28301:18;:12;28316:3;28301:18;:::i;:::-;28286:12;:33;28243:160;;;28375:12;28360;:27;28243:160;-1:-1:-1;;;;;28419:23:0;;;;;;:17;:23;;;;;;;;;:30;;-1:-1:-1;;28419:30:0;;;28445:4;28419:30;;;;;;28464:16;:23;;;;;;;;28517:15;28502:30;;28549:21;:28;;;;;;;;28592:23;:31;;;;;;;28643:34;;1967:41:1;;;28643:34:0;;1940:18:1;28643:34:0;;;;;;;28036:660;;:::o;29893:715::-;30033:6;;29972:7;;;;-1:-1:-1;;;;;30025:14:0;;;30033:6;;30025:14;30021:197;;;-1:-1:-1;30069:7:0;;30021:197;;;30104:6;;-1:-1:-1;;;;;30098:12:0;;;30104:6;;30098:12;30094:124;;;-1:-1:-1;30140:8:0;;30094:124;;;-1:-1:-1;30194:12:0;;30094:124;30234:20;30245:4;30251:2;30234:10;:20::i;:::-;30230:158;;;30274:13;;:18;;:58;;;30330:2;30313:14;;:19;;;;:::i;:::-;30296:13;;:36;;30274:58;30270:107;;;30353:8;;;30270:107;30400:17;10204:5;30420:19;30429:10;30420:6;:19;:::i;:::-;:38;;;;:::i;:::-;30487:4;30471:22;;;;:7;:22;;;;;:35;;30400:58;;-1:-1:-1;30400:58:0;;30471:22;;;:35;;30400:58;;30471:35;:::i;:::-;;;;-1:-1:-1;;30522:40:0;;2417:25:1;;;30545:4:0;;-1:-1:-1;;;;;30522:40:0;;;;;2405:2:1;2390:18;30522:40:0;;;;;;;30582:18;30591:9;30582:6;:18;:::i;:::-;30575:25;29893:715;-1:-1:-1;;;;;;29893:715:0:o;245:656:1:-;357:4;386:2;415;404:9;397:21;447:6;441:13;490:6;485:2;474:9;470:18;463:34;515:1;525:140;539:6;536:1;533:13;525:140;;;634:14;;;630:23;;624:30;600:17;;;619:2;596:26;589:66;554:10;;525:140;;;683:6;680:1;677:13;674:91;;;753:1;748:2;739:6;728:9;724:22;720:31;713:42;674:91;-1:-1:-1;817:2:1;805:15;822:66;801:88;786:104;;;;892:2;782:113;;245:656;-1:-1:-1;;;245:656:1:o;1163:180::-;1222:6;1275:2;1263:9;1254:7;1250:23;1246:32;1243:52;;;1291:1;1288;1281:12;1243:52;-1:-1:-1;1314:23:1;;1163:180;-1:-1:-1;1163:180:1:o;1348:154::-;-1:-1:-1;;;;;1427:5:1;1423:54;1416:5;1413:65;1403:93;;1492:1;1489;1482:12;1403:93;1348:154;:::o;1507:315::-;1575:6;1583;1636:2;1624:9;1615:7;1611:23;1607:32;1604:52;;;1652:1;1649;1642:12;1604:52;1691:9;1678:23;1710:31;1735:5;1710:31;:::i;:::-;1760:5;1812:2;1797:18;;;;1784:32;;-1:-1:-1;;;1507:315:1:o;2019:247::-;2078:6;2131:2;2119:9;2110:7;2106:23;2102:32;2099:52;;;2147:1;2144;2137:12;2099:52;2186:9;2173:23;2205:31;2230:5;2205:31;:::i;2453:337::-;2519:6;2527;2580:2;2568:9;2559:7;2555:23;2551:32;2548:52;;;2596:1;2593;2586:12;2548:52;2635:9;2622:23;2685:4;2678:5;2674:16;2667:5;2664:27;2654:55;;2705:1;2702;2695:12;2795:456;2872:6;2880;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2996:9;2983:23;3015:31;3040:5;3015:31;:::i;:::-;3065:5;-1:-1:-1;3122:2:1;3107:18;;3094:32;3135:33;3094:32;3135:33;:::i;:::-;2795:456;;3187:7;;-1:-1:-1;;;3241:2:1;3226:18;;;;3213:32;;2795:456::o;3256:248::-;3324:6;3332;3385:2;3373:9;3364:7;3360:23;3356:32;3353:52;;;3401:1;3398;3391:12;3353:52;-1:-1:-1;;3424:23:1;;;3494:2;3479:18;;;3466:32;;-1:-1:-1;3256:248:1:o;3698:160::-;3763:20;;3819:13;;3812:21;3802:32;;3792:60;;3848:1;3845;3838:12;3792:60;3698:160;;;:::o;3863:315::-;3928:6;3936;3989:2;3977:9;3968:7;3964:23;3960:32;3957:52;;;4005:1;4002;3995:12;3957:52;4044:9;4031:23;4063:31;4088:5;4063:31;:::i;:::-;4113:5;-1:-1:-1;4137:35:1;4168:2;4153:18;;4137:35;:::i;:::-;4127:45;;3863:315;;;;;:::o;4183:316::-;4251:6;4259;4267;4320:2;4308:9;4299:7;4295:23;4291:32;4288:52;;;4336:1;4333;4326:12;4288:52;4359:26;4375:9;4359:26;:::i;:::-;4349:36;;4404:35;4435:2;4424:9;4420:18;4404:35;:::i;:::-;4394:45;;4458:35;4489:2;4478:9;4474:18;4458:35;:::i;:::-;4448:45;;4183:316;;;;;:::o;4504:180::-;4560:6;4613:2;4601:9;4592:7;4588:23;4584:32;4581:52;;;4629:1;4626;4619:12;4581:52;4652:26;4668:9;4652:26;:::i;4689:388::-;4757:6;4765;4818:2;4806:9;4797:7;4793:23;4789:32;4786:52;;;4834:1;4831;4824:12;4786:52;4873:9;4860:23;4892:31;4917:5;4892:31;:::i;:::-;4942:5;-1:-1:-1;4999:2:1;4984:18;;4971:32;5012:33;4971:32;5012:33;:::i;:::-;5064:7;5054:17;;;4689:388;;;;;:::o;5082:316::-;5159:6;5167;5175;5228:2;5216:9;5207:7;5203:23;5199:32;5196:52;;;5244:1;5241;5234:12;5196:52;-1:-1:-1;;5267:23:1;;;5337:2;5322:18;;5309:32;;-1:-1:-1;5388:2:1;5373:18;;;5360:32;;5082:316;-1:-1:-1;5082:316:1:o;5663:385::-;5749:6;5757;5765;5773;5826:3;5814:9;5805:7;5801:23;5797:33;5794:53;;;5843:1;5840;5833:12;5794:53;-1:-1:-1;;5866:23:1;;;5936:2;5921:18;;5908:32;;-1:-1:-1;5987:2:1;5972:18;;5959:32;;6038:2;6023:18;6010:32;;-1:-1:-1;5663:385:1;-1:-1:-1;5663:385:1:o;6766:184::-;6818:77;6815:1;6808:88;6915:4;6912:1;6905:15;6939:4;6936:1;6929:15;6955:228;6995:7;7121:1;-1:-1:-1;;7049:74:1;7046:1;7043:81;7038:1;7031:9;7024:17;7020:105;7017:131;;;7128:18;;:::i;:::-;-1:-1:-1;7168:9:1;;6955:228::o;7188:125::-;7228:4;7256:1;7253;7250:8;7247:34;;;7261:18;;:::i;:::-;-1:-1:-1;7298:9:1;;7188:125::o;7318:274::-;7358:1;7384;7374:189;;7419:77;7416:1;7409:88;7520:4;7517:1;7510:15;7548:4;7545:1;7538:15;7374:189;-1:-1:-1;7577:9:1;;7318:274::o;8752:128::-;8792:3;8823:1;8819:6;8816:1;8813:13;8810:39;;;8829:18;;:::i;:::-;-1:-1:-1;8865:9:1;;8752:128::o;11153:251::-;11223:6;11276:2;11264:9;11255:7;11251:23;11247:32;11244:52;;;11292:1;11289;11282:12;11244:52;11324:9;11318:16;11343:31;11368:5;11343:31;:::i;15965:238::-;16003:7;16043:4;16040:1;16036:12;16075:4;16072:1;16068:12;16135:3;16129:4;16125:14;16120:3;16117:23;16110:3;16103:11;16096:19;16092:49;16089:75;;;16144:18;;:::i;:::-;16184:13;;15965:238;-1:-1:-1;;;15965:238:1:o;16959:195::-;16998:3;-1:-1:-1;;17022:5:1;17019:77;17016:103;;;17099:18;;:::i;:::-;-1:-1:-1;17146:1:1;17135:13;;16959:195::o;17348:184::-;17400:77;17397:1;17390:88;17497:4;17494:1;17487:15;17521:4;17518:1;17511:15;17537:1026;17799:4;17847:3;17836:9;17832:19;17878:6;17867:9;17860:25;17904:2;17942:6;17937:2;17926:9;17922:18;17915:34;17985:3;17980:2;17969:9;17965:18;17958:31;18009:6;18044;18038:13;18075:6;18067;18060:22;18113:3;18102:9;18098:19;18091:26;;18152:2;18144:6;18140:15;18126:29;;18173:1;18183:218;18197:6;18194:1;18191:13;18183:218;;;18262:13;;-1:-1:-1;;;;;18258:62:1;18246:75;;18376:15;;;;18341:12;;;;18219:1;18212:9;18183:218;;;-1:-1:-1;;;;;;;18457:55:1;;;;18452:2;18437:18;;18430:83;-1:-1:-1;;;18544:3:1;18529:19;18522:35;18418:3;17537:1026;-1:-1:-1;;;17537:1026:1:o;19203:306::-;19291:6;19299;19307;19360:2;19348:9;19339:7;19335:23;19331:32;19328:52;;;19376:1;19373;19366:12;19328:52;19405:9;19399:16;19389:26;;19455:2;19444:9;19440:18;19434:25;19424:35;;19499:2;19488:9;19484:18;19478:25;19468:35;;19203:306;;;;;:::o

Swarm Source

ipfs://9b5585b56cd4e221f6d18e84cc8f15d906b30e30580ef633b8382451aace19c8
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.