ETH Price: $2,679.12 (-0.67%)

Token

888 Inu (888)
 

Overview

Max Total Supply

88,888,888,888 888

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,166,100,805.85541897 888

Value
$0.00
0xfcf6a3d7eb8c62a5256a020e48f153c6d5dd6909
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Triple8Inu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*

888 Inu
https://t.me/Triple8InuETH

*/

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/trip/8/inu/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

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

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

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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 MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    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);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

interface Mary {
    function getRandomNumber() external view returns (uint256);
}

contract Triple8Inu 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 _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 88_888_888_888;

    string private _name = "888 Inu";
    string private _symbol = "888";

    uint256 private _buyLiquidityFee = 100;
    uint256 private _buyMarketingFee = 500;
    uint256 private _buyJackpotFee = 300;

    uint256 private _sellLiquidityFee = _buyLiquidityFee;
    uint256 private _sellMarketingFee = _buyMarketingFee;
    uint256 private _sellJackpotFee = _buyJackpotFee;

    uint256 private _transferLiquidityFee = _buyLiquidityFee;
    uint256 private _transferMarketingFee = _buyMarketingFee;
    uint256 private _transferJackpotFee = _buyJackpotFee;

    uint256 public _buyFee = _buyLiquidityFee + _buyMarketingFee + _buyJackpotFee;
    uint256 public _sellFee = _buyFee;
    uint256 public _transferFee = _buyFee;

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

    uint256 public _liquidityRatio = _buyLiquidityFee;
    uint256 public _marketingRatio = _buyMarketingFee;
    uint256 public _jackpotRatio = _buyJackpotFee;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 9;
    uint256 private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet = payable(0xB224D1a6Cb6fC3Db3d48Af156a5B5c2Be15EcAAb);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent = 3;
    uint256 private maxTxDivisor = 100;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 3;
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

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

    bool tradingEnabled = false;

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

    address[] private pairPath;

    Mary mary;
    bool public lotteryEnabled = true;
    uint256 private currentTxIndex = 0;
    uint256 private jackpotModifier = 250;
    uint256 private randomRange = 100;
    uint256 private winningNumber = 0;
    uint256 public buyAmtNeeded = 9*(10**16);
    address public lastJackpotWinner;
    uint256 public lastJackpotWinAmt;

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

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

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

        mary = Mary(marsense);

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

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[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.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

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

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

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

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

    function setNewRouter(address newRouter) 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 == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

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

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

    function isSniper(address account) public view returns (bool) {
        return _isSniper[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 (snipeBlockAmt == 0 && gasPriceLimit == 0 && !_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);
        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, uint256 _jackpot) external onlyOwner {
        require (liquidity + marketing + _jackpot == 100, "Must add up to 100%");
        if (marketing > 0) {
            require(marketing <= 40 
                    && liquidity > 0
                    && _jackpot > 0
                    );
        }
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
        _jackpotRatio = _jackpot;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) public 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) public 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 _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 setLotteryEnabled(bool enabled) external onlyOwner {
        lotteryEnabled = enabled;
    }

    function setLotterySettings(uint256 _jackpotModifier, uint256 _randomRange, uint256 _buyAmtNeeded, uint256 buyAmtMultiplier) external onlyOwner {
        jackpotModifier = _jackpotModifier;
        randomRange = _randomRange;
        buyAmtNeeded = _buyAmtNeeded * (10**buyAmtMultiplier);
    }

    function setStartingWin() external onlyOwner{
        require (winningNumber == 0, "Already initialized!");
        winningNumber = mary.getRandomNumber() % randomRange + jackpotModifier;
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            if (_initialLiquidityAmount == 0 || _initialLiquidityAmount != _decimals * 10) {
                revert();
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }

            if(lpPairs[from]) {
                if (lotteryEnabled) {
                    if (dexRouter.getAmountsOut(amount, pairPath)[1] >= buyAmtNeeded) {
                        currentTxIndex++;
                        if(currentTxIndex == winningNumber) {
                            jackpot(payable(to));
                            currentTxIndex = 0;
                            winningNumber = mary.getRandomNumber() % randomRange + jackpotModifier;
                        }
                    }
                }
            }
        }

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

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

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

        uint256 initialBalance = address(this).balance;

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

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

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer((currentBalance * _marketingRatio) / totalFee);
        }
    }

    function jackpot(address payable account) internal {
        lastJackpotWinAmt = address(this).balance;
        lastJackpotWinner = account;
        account.transfer(address(this).balance);
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            pairPath,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

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

        pairPath = new address[](2);
        pairPath[0] = address(this);
        pairPath[1] = dexRouter.WETH();
    }

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

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

            swapAndLiquifyEnabled = true;
            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 / 8) {
                revert();
            }
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

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

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marsense","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_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":"_jackpotRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmtNeeded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"isExcludedFromFees","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":[],"name":"lastJackpotWinAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastJackpotWinner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryEnabled","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":"view","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":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_jackpotModifier","type":"uint256"},{"internalType":"uint256","name":"_randomRange","type":"uint256"},{"internalType":"uint256","name":"_buyAmtNeeded","type":"uint256"},{"internalType":"uint256","name":"buyAmtMultiplier","type":"uint256"}],"name":"setLotterySettings","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"},{"internalType":"uint256","name":"_jackpot","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":[],"name":"setStartingWin","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":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003556414b230ce38600a5560c0604052600760808190526638383820496e7560c81b60a09081526200003891600b919062000b08565b506040805180820190915260038082526207070760eb1b60209092019182526200006591600c9162000b08565b506064600d556101f4600e5561012c600f55600d54601055600e54601155600f54601255600d54601355600e54601455600f54601555600f54600e54600d54620000b0919062000bc4565b620000bc919062000bc4565b60168190556017819055601855600d54601955600e54601a55600f54601b55612710601c55601d805460ff19166009908117909155601e8190556200010390600a62000cde565b600a5462000112919062000cf3565b601f819055602380546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560248054821661dead17905560258054909116905560268054600161ff0160a01b03191673b224d1a6cb6fc3db3d48af156a5b5c2be15ecaab17905560036027819055606460288190559162000197919062000cf3565b620001a3919062000d15565b602955602854602754600a54620001bb919062000cf3565b620001c7919062000d15565b602a556003602b556064602c55602c54602b54601f54620001e9919062000cf3565b620001f5919062000d15565b602d55602c54602b54600a546200020d919062000cf3565b62000219919062000d15565b602e55612710601f54600562000230919062000cf3565b6200023c919062000d15565b602f556103e8601f54600562000253919062000cf3565b6200025f919062000d15565b6030556031805462ffffff191661010017905560006032819055603381905560348190556035819055603681905560378190556038805460ff199081166001908117909255603a80549091169091179055603d805460ff60a01b1916600160a01b179055603e81905560fa603f556064604090815560419190915567013fbe85edc90000604255516200439338819003908190833981016040819052620003069162000d38565b601f543360008181526001602090815260408083209490945581546001600160a01b0319908116909317909155603d805483166001600160a01b03868116919091179091556023546021805491909216931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200038e57600080fd5b505afa158015620003a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c9919062000d38565b6001600160a01b031663c9c65396602160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042657600080fd5b505afa1580156200043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000461919062000d38565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620004a957600080fd5b505af1158015620004be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e4919062000d38565b602280546001600160a01b0319166001600160a01b039283169081179091556000908152600260209081526040808320805460ff191660019081179091553084526004835281842060215490951684529390915281206000199055600590620005556000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080549092166001908117909255600990620005ae6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005fa620005e23390565b602354601f546001600160a01b0390911690620009dc565b60086020527fa4a318a4ba833d535a213782db534d83019119799cafae11f04d1dba93ee7b408054600160ff1991821681179092557f2baaa8ba932e4195b3c3afd7682e52ef9560eb2fbf378948591149dea582df9280548216831790557f194d9d8ead9150018922e8ff214ac528f5d5eb8a25d0a8a20d6d1e0608edb96880548216831790557f2a93823f95923881912000576c000db402f9fee399435451fb800d180562f6c180548216831790557fa4927cac2a2355e3be249733827023d6a2c706d349f9c8a191da7115a133adb380548216831790557fa181d2a67a526e539cc5a65befb6c72b2cc999e2addf395aee2f19b96da50e5b80548216831790557f12d8608112bb818ff1ed30b92bb56960590fe20bca7be7305c97df444ebd136380548216831790557f1404537361a41d763b83a307967861eb529f800e555ff5d152096a878636eabd80548216831790557f375015a6034648b595434d1c4e912171c67c8c2b1b604e4ab4fd782bbec44e1980548216831790557f4cc7186aa80e93208dcf4fc6f4c551ab950f0efcb1ff176b599eb799015901f180548216831790557fdde3677c91f0b25e4400fbd1cc0edb46285f0369ce9451d82d6f43064b56971c80548216831790557f3b6af5fc420f776b778596a0bcc73d6adc4fff7c7163619756f13e590ac978dc80548216831790557f480c851f0e84e7f7c9baff396b078162aa38ff0ba7d4ce8363b4a945410a137880548216831790557fa8c7228726786b9f078ecea7941df4545a4add61b380f39fd9c17e27e190144080548216831790557fce3babc048507e519795f49418b8c65c437b34c78ddabae209e2d66c5780690d80548216831790557f436ffe8bdea4657fa68c03200cb0daaaeb5425b8ea7f5e85d0dbcfa9cf2a839880548216831790557fc176b6f3361986bd01de80c291c2f2a860bdb256ba7a87125d9d122bafaf039a80548216831790557f066a718b6735d6a1ba6aa5507a8c8a7af10d75ceabf44195203889824001ff9a80548216831790557ff271c9ee5919962cb4b24503c44cea103b09f853490191ad520c14ee6b998dd580548216831790557f4c40f10c0fbc9d9c18fe12f4f1dd853c4ce5e935d5184ccd1379f7bc986a7e3b805482168317905573725ad056625326b490b128e02759007ba5e4ebf16000527f41057a762b86dca4c8762d416bcef8785bb9df9d3281db22a22d067309861b5080549091169091179055620009853390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601f54604051620009cd91815260200190565b60405180910390a35062000da0565b6001600160a01b03831662000a445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b03821662000aa75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000a3b565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b82805462000b169062000d63565b90600052602060002090601f01602090048101928262000b3a576000855562000b85565b82601f1062000b5557805160ff191683800117855562000b85565b8280016001018555821562000b85579182015b8281111562000b8557825182559160200191906001019062000b68565b5062000b9392915062000b97565b5090565b5b8082111562000b93576000815560010162000b98565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000bda5762000bda62000bae565b500190565b600181815b8085111562000c2057816000190482111562000c045762000c0462000bae565b8085161562000c1257918102915b93841c939080029062000be4565b509250929050565b60008262000c395750600162000cd8565b8162000c485750600062000cd8565b816001811462000c61576002811462000c6c5762000c8c565b600191505062000cd8565b60ff84111562000c805762000c8062000bae565b50506001821b62000cd8565b5060208310610133831016604e8410600b841016171562000cb1575081810a62000cd8565b62000cbd838362000bdf565b806000190482111562000cd45762000cd462000bae565b0290505b92915050565b600062000cec838362000c28565b9392505050565b600081600019048311821515161562000d105762000d1062000bae565b500290565b60008262000d3357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000d4b57600080fd5b81516001600160a01b038116811462000cec57600080fd5b600181811c9082168062000d7857607f821691505b6020821081141562000d9a57634e487b7160e01b600052602260045260246000fd5b50919050565b6135e38062000db06000396000f3fe6080604052600436106103905760003560e01c8063590f897e116101dc578063b1b08f7111610102578063dd62ed3e116100a0578063eb50e70e1161006f578063eb50e70e14610a2c578063f3cf4d4114610a4c578063f6540ec714610a62578063fb78680d14610a7857600080fd5b8063dd62ed3e14610990578063e79d4160146109d6578063e9dae5ed146109ec578063eafb5a3c14610a0c57600080fd5b8063b6f8f8dc116100dc578063b6f8f8dc1461091a578063c49b9a801461093a578063cdfdb7dc1461095a578063dc397a1e1461097a57600080fd5b8063b1b08f7114610545578063b1f007c1146108fa578063b3d514fb1461054557600080fd5b8063893d20e81161017a5780639863c2ee116101495780639863c2ee14610884578063a457c2d7146108a4578063a9059cbb146108c4578063ab8e95a6146108e457600080fd5b8063893d20e81461083c5780638a8c523c1461085a5780638da5cb5b1461083c57806395d89b411461086f57600080fd5b80636a63ce88116101b65780636a63ce88146107b057806370a08231146107d1578063715018a61461080757806380c581d11461081c57600080fd5b8063590f897e14610764578063590ffdce1461077a578063640384091461079a57600080fd5b8063384f6b51116102c15780634a74bb021161025f57806350a8e0161161022e57806350a8e016146106ef578063571ac8b01461070f578063575d29a91461072f57806358fa63ca1461074457600080fd5b80634a74bb021461065f5780634ef3cce5146106805780634fb2e45d146106965780634fbee193146106b657600080fd5b80633df9a8d21161029b5780633df9a8d2146105f35780633f3cf56c1461060957806340b9a54b14610629578063452ed4f11461063f57600080fd5b8063384f6b511461059d5780633865cf3f146105b357806339509351146105d357600080fd5b8063212075751161032e578063260039571161030857806326003957146105255780632b28fc7a14610545578063313ce5671461055b57806333251a0b1461057d57600080fd5b806321207575146104c557806323b872dd146104e55780632583de651461050557600080fd5b8063092316021161036a578063092316021461041b578063095ea7b31461043d5780630f3a325f1461046d57806318160ddd146104a657600080fd5b806303fd2a451461039c57806306fdde03146103d95780630758d924146103fb57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506024546103bc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e557600080fd5b506103ee610a98565b6040516103d09190612e89565b34801561040757600080fd5b506021546103bc906001600160a01b031681565b34801561042757600080fd5b5061043b610436366004612ede565b610b2a565b005b34801561044957600080fd5b5061045d610458366004612f0f565b610b7f565b60405190151581526020016103d0565b34801561047957600080fd5b5061045d610488366004612f3b565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156104b257600080fd5b50601f545b6040519081526020016103d0565b3480156104d157600080fd5b5061043b6104e0366004612f58565b610b96565b3480156104f157600080fd5b5061045d610500366004612f7c565b610c0a565b34801561051157600080fd5b5061043b610520366004612fd2565b610c5d565b34801561053157600080fd5b5061043b610540366004612fed565b610ca5565b34801561055157600080fd5b506104b76107d081565b34801561056757600080fd5b50601d5460405160ff90911681526020016103d0565b34801561058957600080fd5b5061043b610598366004612f3b565b610d8d565b3480156105a957600080fd5b506104b760195481565b3480156105bf57600080fd5b5061043b6105ce366004612fed565b610e4a565b3480156105df57600080fd5b5061045d6105ee366004612f0f565b610ec4565b3480156105ff57600080fd5b506104b760185481565b34801561061557600080fd5b5061043b610624366004612fed565b610efb565b34801561063557600080fd5b506104b760165481565b34801561064b57600080fd5b506022546103bc906001600160a01b031681565b34801561066b57600080fd5b5060265461045d90600160a81b900460ff1681565b34801561068c57600080fd5b506104b7601a5481565b3480156106a257600080fd5b5061043b6106b1366004612f3b565b610fee565b3480156106c257600080fd5b5061045d6106d1366004612f3b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106fb57600080fd5b5060315461045d9062010000900460ff1681565b34801561071b57600080fd5b5061045d61072a366004612f3b565b611179565b34801561073b57600080fd5b5061043b611187565b34801561075057600080fd5b506025546103bc906001600160a01b031681565b34801561077057600080fd5b506104b760175481565b34801561078657600080fd5b5061043b61079536600461300f565b61129d565b3480156107a657600080fd5b506104b7602a5481565b3480156107bc57600080fd5b50603d5461045d90600160a01b900460ff1681565b3480156107dd57600080fd5b506104b76107ec366004612f3b565b6001600160a01b031660009081526001602052604090205490565b34801561081357600080fd5b5061043b6112f2565b34801561082857600080fd5b5061043b61083736600461300f565b611371565b34801561084857600080fd5b506000546001600160a01b03166103bc565b34801561086657600080fd5b5061043b611455565b34801561087b57600080fd5b506103ee611668565b34801561089057600080fd5b5061043b61089f366004613044565b611677565b3480156108b057600080fd5b5061045d6108bf366004612f0f565b6116c9565b3480156108d057600080fd5b5061045d6108df366004612f0f565b611700565b3480156108f057600080fd5b506104b7601b5481565b34801561090657600080fd5b506043546103bc906001600160a01b031681565b34801561092657600080fd5b5061043b610935366004613076565b61170d565b34801561094657600080fd5b5061043b610955366004612fd2565b611773565b34801561096657600080fd5b5061043b6109753660046130b9565b6117f5565b34801561098657600080fd5b506104b760445481565b34801561099c57600080fd5b506104b76109ab3660046130e5565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109e257600080fd5b506104b760375481565b3480156109f857600080fd5b5061043b610a073660046130b9565b6118b3565b348015610a1857600080fd5b5061043b610a27366004612f3b565b611959565b348015610a3857600080fd5b5061043b610a47366004612f3b565b611cdf565b348015610a5857600080fd5b506104b760425481565b348015610a6e57600080fd5b506104b7602e5481565b348015610a8457600080fd5b5061043b610a93366004613044565b611d2b565b6060600b8054610aa79061311e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad39061311e565b8015610b205780601f10610af557610100808354040283529160200191610b20565b820191906000526020600020905b815481529060010190602001808311610b0357829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b5d5760405162461bcd60e51b8152600401610b5490613159565b60405180910390fd5b604b811015610b6b57600080fd5b610b7981633b9aca006131a4565b60395550565b6000610b8c338484611d94565b5060015b92915050565b6000546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610b5490613159565b603654158015610bd05750603954155b8015610be5575060315462010000900460ff16155b610bee57600080fd5b60ff8216603655610c0381633b9aca006131a4565b6039555050565b6000610c17848484611eb8565b506001600160a01b038416600090815260046020908152604080832033808552925290912054610c53918691610c4e9086906131c3565b611d94565b5060019392505050565b6000546001600160a01b03163314610c875760405162461bcd60e51b8152600401610b5490613159565b603d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610b5490613159565b60008183601f54610ce091906131a4565b610cea91906131f0565b90506103e8601f54610cfc91906131f0565b811015610d665760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610b54565b602d819055600a548290610d7b9085906131a4565b610d8591906131f0565b602e55505050565b6000546001600160a01b03163314610db75760405162461bcd60e51b8152600401610b5490613159565b6001600160a01b03811660009081526008602052604090205460ff16610e295760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610b54565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610e745760405162461bcd60e51b8152600401610b5490613159565b603254158015610e845750603554155b610eb95760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610b54565b603291909155603555565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8c918590610c4e908690613204565b6000546001600160a01b03163314610f255760405162461bcd60e51b8152600401610b5490613159565b60008183601f54610f3691906131a4565b610f4091906131f0565b90506103e8601f54610f5291906131f0565b811015610fc75760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b54565b6029819055600a548290610fdc9085906131a4565b610fe691906131f0565b602a55505050565b6000546001600160a01b031633146110185760405162461bcd60e51b8152600401610b5490613159565b6001600160a01b03811661103e5760405162461bcd60e51b8152600401610b549061321c565b6024546001600160a01b038281169116141561106c5760405162461bcd60e51b8152600401610b549061321c565b60008054611085916001600160a01b039091169061129d565b61109081600161129d565b6000546026546001600160a01b03908116911614156110c557602680546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b0390811682526001602081815260408085205460048352818620878616875283528186205584549093168452529020541561112e57600080546001600160a01b0316808252600160205260409091205461112c91908390611eb8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610b9082600019610b7f565b6000546001600160a01b031633146111b15760405162461bcd60e51b8152600401610b5490613159565b604154156111f85760405162461bcd60e51b8152602060048201526014602482015273416c726561647920696e697469616c697a65642160601b6044820152606401610b54565b603f54604054603d60009054906101000a90046001600160a01b03166001600160a01b031663dbdff2c16040518163ffffffff1660e01b815260040160206040518083038186803b15801561124c57600080fd5b505afa158015611260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112849190613279565b61128e9190613292565b6112989190613204565b604155565b6000546001600160a01b031633146112c75760405162461bcd60e51b8152600401610b5490613159565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461131c5760405162461bcd60e51b8152600401610b5490613159565b60008054611335916001600160a01b039091169061129d565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610b5490613159565b806113c257506001600160a01b03166000908152600260205260409020805460ff19169055565b600354156114295762093a80600354426113dc91906131c3565b116114295760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610b54565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610b5490613159565b60315460ff16156114d25760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b54565b6041546115175760405162461bcd60e51b81526020600482015260136024820152724e65656420746f20696e697469616c697a652160681b6044820152606401610b54565b6036546001146115355761152d436101f4613204565b60335561153a565b436033555b6031805460ff1916600117905560408051600280825260608201835290916020830190803683375050815161157692603c925060200190612e0f565b5030603c60008154811061158c5761158c6132bc565b60009182526020918290200180546001600160a01b0319166001600160a01b03938416179055602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156115ec57600080fd5b505afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162491906132d2565b603c600181548110611638576116386132bc565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b6060600c8054610aa79061311e565b6000546001600160a01b031633146116a15760405162461bcd60e51b8152600401610b5490613159565b603f84905560408390556116b681600a6133d3565b6116c090836131a4565b60425550505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8c918590610c4e9086906131c3565b6000610c53338484611eb8565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610b5490613159565b603180549315156101000261ff0019909416939093179092556038805491151560ff19928316179055603a805492151592909116919091179055565b6000546001600160a01b0316331461179d5760405162461bcd60e51b8152600401610b5490613159565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117ea90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461181f5760405162461bcd60e51b8152600401610b5490613159565b8061182a8385613204565b6118349190613204565b6064146118795760405162461bcd60e51b81526020600482015260136024820152724d7573742061646420757020746f203130302560681b6044820152606401610b54565b81156118a557602882111580156118905750600083115b801561189c5750600081115b6118a557600080fd5b601992909255601a55601b55565b6000546001600160a01b031633146118dd5760405162461bcd60e51b8152600401610b5490613159565b6107d083111580156118f157506107d08211155b80156118ff57506107d08111155b61194b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b54565b601692909255601755601855565b6000546001600160a01b031633146119835760405162461bcd60e51b8152600401610b5490613159565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c357600080fd5b505afa1580156119d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fb91906132d2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b91906132d2565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ac157600080fd5b505afa158015611ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af991906132d2565b90506001600160a01b038116611c9f57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4257600080fd5b505afa158015611b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7a91906132d2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc257600080fd5b505afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa91906132d2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7a91906132d2565b602280546001600160a01b0319166001600160a01b0392909216919091179055611cbb565b602280546001600160a01b0319166001600160a01b0383161790555b50602180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d095760405162461bcd60e51b8152600401610b5490613159565b602680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d555760405162461bcd60e51b8152600401610b5490613159565b8284601f54611d6491906131a4565b611d6e91906131f0565b602f55601f548190611d819084906131a4565b611d8b91906131f0565b60305550505050565b6001600160a01b038316611df65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b54565b6001600160a01b038216611e575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b54565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611f1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b54565b6001600160a01b038316611f805760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b54565b60008211611fe25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b54565b60385460ff161561203f576039543a111561203f5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610b54565b612049848461252f565b156124545760315460ff166120a05760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b54565b603a5460ff1615612152576001600160a01b03841660009081526002602052604090205460ff1615612111576001600160a01b0383166000908152603b60205260409020544314156120f157600080fd5b6001600160a01b0383166000908152603b60205260409020439055612152565b6001600160a01b0384166000908152603b602052604090205443141561213657600080fd5b6001600160a01b0384166000908152603b602052604090204390555b60355415806121765750601d5461216d9060ff16600a6133df565b60ff1660355414155b1561218057600080fd5b6029548211156121e35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b54565b6023546001600160a01b0384811691161480159061221a57506001600160a01b03831660009081526002602052604090205460ff16155b156122ad57602d5482612242856001600160a01b031660009081526001602052604090205490565b61224c9190613204565b11156122ad5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b54565b6001600160a01b03841660009081526002602052604090205460ff161561245457603d54600160a01b900460ff16156124545760425460215460405163d06ca61f60e01b81526001600160a01b039091169063d06ca61f90612316908690603c90600401613449565b60006040518083038186803b15801561232e57600080fd5b505afa158015612342573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236a919081019061346a565b60018151811061237c5761237c6132bc565b60200260200101511061245457603e805490600061239983613528565b9190505550604154603e541415612454576123b3836125f0565b6000603e55603f5460408054603d54825163dbdff2c160e01b8152925191926001600160a01b039091169163dbdff2c191600480820192602092909190829003018186803b15801561240457600080fd5b505afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190613279565b6124469190613292565b6124509190613204565b6041555b6001600160a01b03841660009081526005602052604090205460019060ff168061249657506001600160a01b03841660009081526005602052604090205460ff165b1561249f575060005b6001600160a01b03841660009081526002602052604090205460ff161561251a57602654600160a01b900460ff161580156124e35750602654600160a81b900460ff165b1561251a5730600090815260016020526040902054602f54811061251857603054811061250f57506030545b6125188161263d565b505b612526858585846127c6565b95945050505050565b600080546001600160a01b0384811691161480159061255c57506000546001600160a01b03838116911614155b801561258157506001600160a01b03821660009081526009602052604090205460ff16155b80156125a657506001600160a01b03831660009081526009602052604090205460ff16155b80156125c057506024546001600160a01b03838116911614155b80156125d457506001600160a01b03821615155b80156125e957506001600160a01b0383163014155b9392505050565b47604455604380546001600160a01b0383166001600160a01b031990911681179091556040514780156108fc02916000818181858888f19350505050158015611451573d6000803e3d6000fd5b6026805460ff60a01b1916600160a01b179055601b54601a546019546000929161266691613204565b6126709190613204565b90508061267d57506127b6565b60006002826019548561269091906131a4565b61269a91906131f0565b6126a491906131f0565b90504760006126b383866131c3565b90506126be81612a8c565b60006126ca83476131c3565b90506000600286601954846126df91906131a4565b6126e991906131f0565b6126f391906131f0565b90508415612747576127058582612afb565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600061275386896131c3565b11156127af57602654601a546001600160a01b03909116906108fc90889061277b90866131a4565b61278591906131f0565b6040518115909202916000818181858888f193505050501580156127ad573d6000803e3d6000fd5b505b5050505050505b506026805460ff60a01b19169055565b603154600090610100900460ff16156129b9576001600160a01b03851660009081526008602052604090205460ff168061281857506001600160a01b03841660009081526008602052604090205460ff165b156128585760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610b54565b60315462010000900460ff166128f0576128728585612bb8565b60315462010000900460ff161580156128905750612890858561252f565b156128eb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610b54565b6129b9565b600060335411801561291a57506001600160a01b03851660009081526002602052604090205460ff165b801561292b575061292b858561252f565b156129b95760365460335461294090436131c3565b10156129b9576001600160a01b0384166000908152600860205260408120805460ff19166001179055603780549161297783613528565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b038516600090815260016020526040812080548592906129e19084906131c3565b9091555060009050826129f457836129ff565b6129ff868686612cf8565b6001600160a01b038616600090815260016020526040812080549293508392909190612a2c908490613204565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a7891815260200190565b60405180910390a350600195945050505050565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ac6908490600090603c9030904290600401613543565b600060405180830381600087803b158015612ae057600080fd5b505af1158015612af4573d6000803e3d6000fd5b5050505050565b602154612b139030906001600160a01b031684611d94565b6021546024805460405163f305d71960e01b815230600482015291820185905260006044830181905260648301526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c4016060604051808303818588803b158015612b7f57600080fd5b505af1158015612b93573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af4919061357f565b60315462010000900460ff1615612c1d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b54565b612c27828261252f565b158015612c4157506022546001600160a01b038281169116145b1561145157603654600114612c6457612c5c436101f4613204565b603355612c69565b436033555b6001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556031805462ff0000191662010000179055426034556026805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991612cec91901515815260200190565b60405180910390a15050565b60225460009081906001600160a01b0386811691161415612d1c5750601654612d40565b6022546001600160a01b0385811691161415612d3b5750601754612d40565b506018545b612d4a858561252f565b15612d78576032541580612d6e57506008600a54612d6891906131f0565b60325414155b15612d7857600080fd5b601c54600090612d8883866131a4565b612d9291906131f0565b30600090815260016020526040812080549293508392909190612db6908490613204565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612e0581856131c3565b9695505050505050565b828054828255906000526020600020908101928215612e64579160200282015b82811115612e6457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612e2f565b50612e70929150612e74565b5090565b5b80821115612e705760008155600101612e75565b600060208083528351808285015260005b81811015612eb657858101830151858201604001528201612e9a565b81811115612ec8576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215612ef057600080fd5b5035919050565b6001600160a01b0381168114612f0c57600080fd5b50565b60008060408385031215612f2257600080fd5b8235612f2d81612ef7565b946020939093013593505050565b600060208284031215612f4d57600080fd5b81356125e981612ef7565b60008060408385031215612f6b57600080fd5b823560ff81168114612f2d57600080fd5b600080600060608486031215612f9157600080fd5b8335612f9c81612ef7565b92506020840135612fac81612ef7565b929592945050506040919091013590565b80358015158114612fcd57600080fd5b919050565b600060208284031215612fe457600080fd5b6125e982612fbd565b6000806040838503121561300057600080fd5b50508035926020909101359150565b6000806040838503121561302257600080fd5b823561302d81612ef7565b915061303b60208401612fbd565b90509250929050565b6000806000806080858703121561305a57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561308b57600080fd5b61309484612fbd565b92506130a260208501612fbd565b91506130b060408501612fbd565b90509250925092565b6000806000606084860312156130ce57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156130f857600080fd5b823561310381612ef7565b9150602083013561311381612ef7565b809150509250929050565b600181811c9082168061313257607f821691505b6020821081141561315357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156131be576131be61318e565b500290565b6000828210156131d5576131d561318e565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826131ff576131ff6131da565b500490565b600082198211156132175761321761318e565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561328b57600080fd5b5051919050565b6000826132a1576132a16131da565b500690565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132e457600080fd5b81516125e981612ef7565b600181815b8085111561332a5781600019048211156133105761331061318e565b8085161561331d57918102915b93841c93908002906132f4565b509250929050565b60008261334157506001610b90565b8161334e57506000610b90565b8160018114613364576002811461336e5761338a565b6001915050610b90565b60ff84111561337f5761337f61318e565b50506001821b610b90565b5060208310610133831016604e8410600b84101617156133ad575081810a610b90565b6133b783836132ef565b80600019048211156133cb576133cb61318e565b029392505050565b60006125e98383613332565b600060ff821660ff84168160ff04811182151516156133cb576133cb61318e565b6000815480845260208085019450836000528060002060005b8381101561343e5781546001600160a01b031687529582019560019182019101613419565b509495945050505050565b8281526040602082015260006134626040830184613400565b949350505050565b6000602080838503121561347d57600080fd5b825167ffffffffffffffff8082111561349557600080fd5b818501915085601f8301126134a957600080fd5b8151818111156134bb576134bb6132a6565b8060051b604051601f19603f830116810181811085821117156134e0576134e06132a6565b6040529182528482019250838101850191888311156134fe57600080fd5b938501935b8285101561351c57845184529385019392850192613503565b98975050505050505050565b600060001982141561353c5761353c61318e565b5060010190565b85815284602082015260a06040820152600061356260a0830186613400565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561359457600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122080546da4d04cd2ebbb2539d617d93997bd304acb242f89fac3b1be9b832be89a64736f6c63430008090033000000000000000000000000d2619f2a2af9129a3424c743c3b37b965be770c6

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063590f897e116101dc578063b1b08f7111610102578063dd62ed3e116100a0578063eb50e70e1161006f578063eb50e70e14610a2c578063f3cf4d4114610a4c578063f6540ec714610a62578063fb78680d14610a7857600080fd5b8063dd62ed3e14610990578063e79d4160146109d6578063e9dae5ed146109ec578063eafb5a3c14610a0c57600080fd5b8063b6f8f8dc116100dc578063b6f8f8dc1461091a578063c49b9a801461093a578063cdfdb7dc1461095a578063dc397a1e1461097a57600080fd5b8063b1b08f7114610545578063b1f007c1146108fa578063b3d514fb1461054557600080fd5b8063893d20e81161017a5780639863c2ee116101495780639863c2ee14610884578063a457c2d7146108a4578063a9059cbb146108c4578063ab8e95a6146108e457600080fd5b8063893d20e81461083c5780638a8c523c1461085a5780638da5cb5b1461083c57806395d89b411461086f57600080fd5b80636a63ce88116101b65780636a63ce88146107b057806370a08231146107d1578063715018a61461080757806380c581d11461081c57600080fd5b8063590f897e14610764578063590ffdce1461077a578063640384091461079a57600080fd5b8063384f6b51116102c15780634a74bb021161025f57806350a8e0161161022e57806350a8e016146106ef578063571ac8b01461070f578063575d29a91461072f57806358fa63ca1461074457600080fd5b80634a74bb021461065f5780634ef3cce5146106805780634fb2e45d146106965780634fbee193146106b657600080fd5b80633df9a8d21161029b5780633df9a8d2146105f35780633f3cf56c1461060957806340b9a54b14610629578063452ed4f11461063f57600080fd5b8063384f6b511461059d5780633865cf3f146105b357806339509351146105d357600080fd5b8063212075751161032e578063260039571161030857806326003957146105255780632b28fc7a14610545578063313ce5671461055b57806333251a0b1461057d57600080fd5b806321207575146104c557806323b872dd146104e55780632583de651461050557600080fd5b8063092316021161036a578063092316021461041b578063095ea7b31461043d5780630f3a325f1461046d57806318160ddd146104a657600080fd5b806303fd2a451461039c57806306fdde03146103d95780630758d924146103fb57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506024546103bc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e557600080fd5b506103ee610a98565b6040516103d09190612e89565b34801561040757600080fd5b506021546103bc906001600160a01b031681565b34801561042757600080fd5b5061043b610436366004612ede565b610b2a565b005b34801561044957600080fd5b5061045d610458366004612f0f565b610b7f565b60405190151581526020016103d0565b34801561047957600080fd5b5061045d610488366004612f3b565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156104b257600080fd5b50601f545b6040519081526020016103d0565b3480156104d157600080fd5b5061043b6104e0366004612f58565b610b96565b3480156104f157600080fd5b5061045d610500366004612f7c565b610c0a565b34801561051157600080fd5b5061043b610520366004612fd2565b610c5d565b34801561053157600080fd5b5061043b610540366004612fed565b610ca5565b34801561055157600080fd5b506104b76107d081565b34801561056757600080fd5b50601d5460405160ff90911681526020016103d0565b34801561058957600080fd5b5061043b610598366004612f3b565b610d8d565b3480156105a957600080fd5b506104b760195481565b3480156105bf57600080fd5b5061043b6105ce366004612fed565b610e4a565b3480156105df57600080fd5b5061045d6105ee366004612f0f565b610ec4565b3480156105ff57600080fd5b506104b760185481565b34801561061557600080fd5b5061043b610624366004612fed565b610efb565b34801561063557600080fd5b506104b760165481565b34801561064b57600080fd5b506022546103bc906001600160a01b031681565b34801561066b57600080fd5b5060265461045d90600160a81b900460ff1681565b34801561068c57600080fd5b506104b7601a5481565b3480156106a257600080fd5b5061043b6106b1366004612f3b565b610fee565b3480156106c257600080fd5b5061045d6106d1366004612f3b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106fb57600080fd5b5060315461045d9062010000900460ff1681565b34801561071b57600080fd5b5061045d61072a366004612f3b565b611179565b34801561073b57600080fd5b5061043b611187565b34801561075057600080fd5b506025546103bc906001600160a01b031681565b34801561077057600080fd5b506104b760175481565b34801561078657600080fd5b5061043b61079536600461300f565b61129d565b3480156107a657600080fd5b506104b7602a5481565b3480156107bc57600080fd5b50603d5461045d90600160a01b900460ff1681565b3480156107dd57600080fd5b506104b76107ec366004612f3b565b6001600160a01b031660009081526001602052604090205490565b34801561081357600080fd5b5061043b6112f2565b34801561082857600080fd5b5061043b61083736600461300f565b611371565b34801561084857600080fd5b506000546001600160a01b03166103bc565b34801561086657600080fd5b5061043b611455565b34801561087b57600080fd5b506103ee611668565b34801561089057600080fd5b5061043b61089f366004613044565b611677565b3480156108b057600080fd5b5061045d6108bf366004612f0f565b6116c9565b3480156108d057600080fd5b5061045d6108df366004612f0f565b611700565b3480156108f057600080fd5b506104b7601b5481565b34801561090657600080fd5b506043546103bc906001600160a01b031681565b34801561092657600080fd5b5061043b610935366004613076565b61170d565b34801561094657600080fd5b5061043b610955366004612fd2565b611773565b34801561096657600080fd5b5061043b6109753660046130b9565b6117f5565b34801561098657600080fd5b506104b760445481565b34801561099c57600080fd5b506104b76109ab3660046130e5565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109e257600080fd5b506104b760375481565b3480156109f857600080fd5b5061043b610a073660046130b9565b6118b3565b348015610a1857600080fd5b5061043b610a27366004612f3b565b611959565b348015610a3857600080fd5b5061043b610a47366004612f3b565b611cdf565b348015610a5857600080fd5b506104b760425481565b348015610a6e57600080fd5b506104b7602e5481565b348015610a8457600080fd5b5061043b610a93366004613044565b611d2b565b6060600b8054610aa79061311e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad39061311e565b8015610b205780601f10610af557610100808354040283529160200191610b20565b820191906000526020600020905b815481529060010190602001808311610b0357829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b5d5760405162461bcd60e51b8152600401610b5490613159565b60405180910390fd5b604b811015610b6b57600080fd5b610b7981633b9aca006131a4565b60395550565b6000610b8c338484611d94565b5060015b92915050565b6000546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610b5490613159565b603654158015610bd05750603954155b8015610be5575060315462010000900460ff16155b610bee57600080fd5b60ff8216603655610c0381633b9aca006131a4565b6039555050565b6000610c17848484611eb8565b506001600160a01b038416600090815260046020908152604080832033808552925290912054610c53918691610c4e9086906131c3565b611d94565b5060019392505050565b6000546001600160a01b03163314610c875760405162461bcd60e51b8152600401610b5490613159565b603d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610b5490613159565b60008183601f54610ce091906131a4565b610cea91906131f0565b90506103e8601f54610cfc91906131f0565b811015610d665760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610b54565b602d819055600a548290610d7b9085906131a4565b610d8591906131f0565b602e55505050565b6000546001600160a01b03163314610db75760405162461bcd60e51b8152600401610b5490613159565b6001600160a01b03811660009081526008602052604090205460ff16610e295760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610b54565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610e745760405162461bcd60e51b8152600401610b5490613159565b603254158015610e845750603554155b610eb95760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610b54565b603291909155603555565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8c918590610c4e908690613204565b6000546001600160a01b03163314610f255760405162461bcd60e51b8152600401610b5490613159565b60008183601f54610f3691906131a4565b610f4091906131f0565b90506103e8601f54610f5291906131f0565b811015610fc75760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b54565b6029819055600a548290610fdc9085906131a4565b610fe691906131f0565b602a55505050565b6000546001600160a01b031633146110185760405162461bcd60e51b8152600401610b5490613159565b6001600160a01b03811661103e5760405162461bcd60e51b8152600401610b549061321c565b6024546001600160a01b038281169116141561106c5760405162461bcd60e51b8152600401610b549061321c565b60008054611085916001600160a01b039091169061129d565b61109081600161129d565b6000546026546001600160a01b03908116911614156110c557602680546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b0390811682526001602081815260408085205460048352818620878616875283528186205584549093168452529020541561112e57600080546001600160a01b0316808252600160205260409091205461112c91908390611eb8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610b9082600019610b7f565b6000546001600160a01b031633146111b15760405162461bcd60e51b8152600401610b5490613159565b604154156111f85760405162461bcd60e51b8152602060048201526014602482015273416c726561647920696e697469616c697a65642160601b6044820152606401610b54565b603f54604054603d60009054906101000a90046001600160a01b03166001600160a01b031663dbdff2c16040518163ffffffff1660e01b815260040160206040518083038186803b15801561124c57600080fd5b505afa158015611260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112849190613279565b61128e9190613292565b6112989190613204565b604155565b6000546001600160a01b031633146112c75760405162461bcd60e51b8152600401610b5490613159565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461131c5760405162461bcd60e51b8152600401610b5490613159565b60008054611335916001600160a01b039091169061129d565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610b5490613159565b806113c257506001600160a01b03166000908152600260205260409020805460ff19169055565b600354156114295762093a80600354426113dc91906131c3565b116114295760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610b54565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610b5490613159565b60315460ff16156114d25760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b54565b6041546115175760405162461bcd60e51b81526020600482015260136024820152724e65656420746f20696e697469616c697a652160681b6044820152606401610b54565b6036546001146115355761152d436101f4613204565b60335561153a565b436033555b6031805460ff1916600117905560408051600280825260608201835290916020830190803683375050815161157692603c925060200190612e0f565b5030603c60008154811061158c5761158c6132bc565b60009182526020918290200180546001600160a01b0319166001600160a01b03938416179055602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156115ec57600080fd5b505afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162491906132d2565b603c600181548110611638576116386132bc565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b6060600c8054610aa79061311e565b6000546001600160a01b031633146116a15760405162461bcd60e51b8152600401610b5490613159565b603f84905560408390556116b681600a6133d3565b6116c090836131a4565b60425550505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8c918590610c4e9086906131c3565b6000610c53338484611eb8565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610b5490613159565b603180549315156101000261ff0019909416939093179092556038805491151560ff19928316179055603a805492151592909116919091179055565b6000546001600160a01b0316331461179d5760405162461bcd60e51b8152600401610b5490613159565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117ea90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461181f5760405162461bcd60e51b8152600401610b5490613159565b8061182a8385613204565b6118349190613204565b6064146118795760405162461bcd60e51b81526020600482015260136024820152724d7573742061646420757020746f203130302560681b6044820152606401610b54565b81156118a557602882111580156118905750600083115b801561189c5750600081115b6118a557600080fd5b601992909255601a55601b55565b6000546001600160a01b031633146118dd5760405162461bcd60e51b8152600401610b5490613159565b6107d083111580156118f157506107d08211155b80156118ff57506107d08111155b61194b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b54565b601692909255601755601855565b6000546001600160a01b031633146119835760405162461bcd60e51b8152600401610b5490613159565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c357600080fd5b505afa1580156119d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fb91906132d2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b91906132d2565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ac157600080fd5b505afa158015611ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af991906132d2565b90506001600160a01b038116611c9f57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4257600080fd5b505afa158015611b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7a91906132d2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc257600080fd5b505afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa91906132d2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7a91906132d2565b602280546001600160a01b0319166001600160a01b0392909216919091179055611cbb565b602280546001600160a01b0319166001600160a01b0383161790555b50602180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d095760405162461bcd60e51b8152600401610b5490613159565b602680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d555760405162461bcd60e51b8152600401610b5490613159565b8284601f54611d6491906131a4565b611d6e91906131f0565b602f55601f548190611d819084906131a4565b611d8b91906131f0565b60305550505050565b6001600160a01b038316611df65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b54565b6001600160a01b038216611e575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b54565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611f1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b54565b6001600160a01b038316611f805760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b54565b60008211611fe25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b54565b60385460ff161561203f576039543a111561203f5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610b54565b612049848461252f565b156124545760315460ff166120a05760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b54565b603a5460ff1615612152576001600160a01b03841660009081526002602052604090205460ff1615612111576001600160a01b0383166000908152603b60205260409020544314156120f157600080fd5b6001600160a01b0383166000908152603b60205260409020439055612152565b6001600160a01b0384166000908152603b602052604090205443141561213657600080fd5b6001600160a01b0384166000908152603b602052604090204390555b60355415806121765750601d5461216d9060ff16600a6133df565b60ff1660355414155b1561218057600080fd5b6029548211156121e35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b54565b6023546001600160a01b0384811691161480159061221a57506001600160a01b03831660009081526002602052604090205460ff16155b156122ad57602d5482612242856001600160a01b031660009081526001602052604090205490565b61224c9190613204565b11156122ad5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b54565b6001600160a01b03841660009081526002602052604090205460ff161561245457603d54600160a01b900460ff16156124545760425460215460405163d06ca61f60e01b81526001600160a01b039091169063d06ca61f90612316908690603c90600401613449565b60006040518083038186803b15801561232e57600080fd5b505afa158015612342573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236a919081019061346a565b60018151811061237c5761237c6132bc565b60200260200101511061245457603e805490600061239983613528565b9190505550604154603e541415612454576123b3836125f0565b6000603e55603f5460408054603d54825163dbdff2c160e01b8152925191926001600160a01b039091169163dbdff2c191600480820192602092909190829003018186803b15801561240457600080fd5b505afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190613279565b6124469190613292565b6124509190613204565b6041555b6001600160a01b03841660009081526005602052604090205460019060ff168061249657506001600160a01b03841660009081526005602052604090205460ff165b1561249f575060005b6001600160a01b03841660009081526002602052604090205460ff161561251a57602654600160a01b900460ff161580156124e35750602654600160a81b900460ff165b1561251a5730600090815260016020526040902054602f54811061251857603054811061250f57506030545b6125188161263d565b505b612526858585846127c6565b95945050505050565b600080546001600160a01b0384811691161480159061255c57506000546001600160a01b03838116911614155b801561258157506001600160a01b03821660009081526009602052604090205460ff16155b80156125a657506001600160a01b03831660009081526009602052604090205460ff16155b80156125c057506024546001600160a01b03838116911614155b80156125d457506001600160a01b03821615155b80156125e957506001600160a01b0383163014155b9392505050565b47604455604380546001600160a01b0383166001600160a01b031990911681179091556040514780156108fc02916000818181858888f19350505050158015611451573d6000803e3d6000fd5b6026805460ff60a01b1916600160a01b179055601b54601a546019546000929161266691613204565b6126709190613204565b90508061267d57506127b6565b60006002826019548561269091906131a4565b61269a91906131f0565b6126a491906131f0565b90504760006126b383866131c3565b90506126be81612a8c565b60006126ca83476131c3565b90506000600286601954846126df91906131a4565b6126e991906131f0565b6126f391906131f0565b90508415612747576127058582612afb565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600061275386896131c3565b11156127af57602654601a546001600160a01b03909116906108fc90889061277b90866131a4565b61278591906131f0565b6040518115909202916000818181858888f193505050501580156127ad573d6000803e3d6000fd5b505b5050505050505b506026805460ff60a01b19169055565b603154600090610100900460ff16156129b9576001600160a01b03851660009081526008602052604090205460ff168061281857506001600160a01b03841660009081526008602052604090205460ff165b156128585760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610b54565b60315462010000900460ff166128f0576128728585612bb8565b60315462010000900460ff161580156128905750612890858561252f565b156128eb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610b54565b6129b9565b600060335411801561291a57506001600160a01b03851660009081526002602052604090205460ff165b801561292b575061292b858561252f565b156129b95760365460335461294090436131c3565b10156129b9576001600160a01b0384166000908152600860205260408120805460ff19166001179055603780549161297783613528565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b038516600090815260016020526040812080548592906129e19084906131c3565b9091555060009050826129f457836129ff565b6129ff868686612cf8565b6001600160a01b038616600090815260016020526040812080549293508392909190612a2c908490613204565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a7891815260200190565b60405180910390a350600195945050505050565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ac6908490600090603c9030904290600401613543565b600060405180830381600087803b158015612ae057600080fd5b505af1158015612af4573d6000803e3d6000fd5b5050505050565b602154612b139030906001600160a01b031684611d94565b6021546024805460405163f305d71960e01b815230600482015291820185905260006044830181905260648301526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c4016060604051808303818588803b158015612b7f57600080fd5b505af1158015612b93573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af4919061357f565b60315462010000900460ff1615612c1d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b54565b612c27828261252f565b158015612c4157506022546001600160a01b038281169116145b1561145157603654600114612c6457612c5c436101f4613204565b603355612c69565b436033555b6001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556031805462ff0000191662010000179055426034556026805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991612cec91901515815260200190565b60405180910390a15050565b60225460009081906001600160a01b0386811691161415612d1c5750601654612d40565b6022546001600160a01b0385811691161415612d3b5750601754612d40565b506018545b612d4a858561252f565b15612d78576032541580612d6e57506008600a54612d6891906131f0565b60325414155b15612d7857600080fd5b601c54600090612d8883866131a4565b612d9291906131f0565b30600090815260016020526040812080549293508392909190612db6908490613204565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612e0581856131c3565b9695505050505050565b828054828255906000526020600020908101928215612e64579160200282015b82811115612e6457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612e2f565b50612e70929150612e74565b5090565b5b80821115612e705760008155600101612e75565b600060208083528351808285015260005b81811015612eb657858101830151858201604001528201612e9a565b81811115612ec8576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215612ef057600080fd5b5035919050565b6001600160a01b0381168114612f0c57600080fd5b50565b60008060408385031215612f2257600080fd5b8235612f2d81612ef7565b946020939093013593505050565b600060208284031215612f4d57600080fd5b81356125e981612ef7565b60008060408385031215612f6b57600080fd5b823560ff81168114612f2d57600080fd5b600080600060608486031215612f9157600080fd5b8335612f9c81612ef7565b92506020840135612fac81612ef7565b929592945050506040919091013590565b80358015158114612fcd57600080fd5b919050565b600060208284031215612fe457600080fd5b6125e982612fbd565b6000806040838503121561300057600080fd5b50508035926020909101359150565b6000806040838503121561302257600080fd5b823561302d81612ef7565b915061303b60208401612fbd565b90509250929050565b6000806000806080858703121561305a57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561308b57600080fd5b61309484612fbd565b92506130a260208501612fbd565b91506130b060408501612fbd565b90509250925092565b6000806000606084860312156130ce57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156130f857600080fd5b823561310381612ef7565b9150602083013561311381612ef7565b809150509250929050565b600181811c9082168061313257607f821691505b6020821081141561315357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156131be576131be61318e565b500290565b6000828210156131d5576131d561318e565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826131ff576131ff6131da565b500490565b600082198211156132175761321761318e565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561328b57600080fd5b5051919050565b6000826132a1576132a16131da565b500690565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132e457600080fd5b81516125e981612ef7565b600181815b8085111561332a5781600019048211156133105761331061318e565b8085161561331d57918102915b93841c93908002906132f4565b509250929050565b60008261334157506001610b90565b8161334e57506000610b90565b8160018114613364576002811461336e5761338a565b6001915050610b90565b60ff84111561337f5761337f61318e565b50506001821b610b90565b5060208310610133831016604e8410600b84101617156133ad575081810a610b90565b6133b783836132ef565b80600019048211156133cb576133cb61318e565b029392505050565b60006125e98383613332565b600060ff821660ff84168160ff04811182151516156133cb576133cb61318e565b6000815480845260208085019450836000528060002060005b8381101561343e5781546001600160a01b031687529582019560019182019101613419565b509495945050505050565b8281526040602082015260006134626040830184613400565b949350505050565b6000602080838503121561347d57600080fd5b825167ffffffffffffffff8082111561349557600080fd5b818501915085601f8301126134a957600080fd5b8151818111156134bb576134bb6132a6565b8060051b604051601f19603f830116810181811085821117156134e0576134e06132a6565b6040529182528482019250838101850191888311156134fe57600080fd5b938501935b8285101561351c57845184529385019392850192613503565b98975050505050505050565b600060001982141561353c5761353c61318e565b5060010190565b85815284602082015260a06040820152600061356260a0830186613400565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561359457600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122080546da4d04cd2ebbb2539d617d93997bd304acb242f89fac3b1be9b832be89a64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d2619f2a2af9129a3424c743c3b37b965be770c6

-----Decoded View---------------
Arg [0] : marsense (address): 0xD2619F2A2AF9129a3424C743c3b37b965be770c6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d2619f2a2af9129a3424c743c3b37b965be770c6


Deployed Bytecode Sourcemap

11392:24912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13580:64;;;;;;;;;;-1:-1:-1;13580:64:0;;;;-1:-1:-1;;;;;13580:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;13580:64:0;;;;;;;;21192:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13405:35::-;;;;;;;;;;-1:-1:-1;13405:35:0;;;;-1:-1:-1;;;;;13405:35:0;;;25441:134;;;;;;;;;;-1:-1:-1;25441:134:0;;;;;:::i;:::-;;:::i;:::-;;21805:161;;;;;;;;;;-1:-1:-1;21805:161:0;;;;;:::i;:::-;;:::i;:::-;;;1864:14:1;;1857:22;1839:41;;1827:2;1812:18;21805:161:0;1699:187:1;24397:106:0;;;;;;;;;;-1:-1:-1;24397:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;24477:18:0;24453:4;24477:18;;;:9;:18;;;;;;;;;24397:106;20927:83;;;;;;;;;;-1:-1:-1;21000:7:0;;20927:83;;;2289:25:1;;;2277:2;2262:18;20927:83:0;2143:177:1;24778:241:0;;;;;;;;;;-1:-1:-1;24778:241:0;;;;;:::i;:::-;;:::i;22451:266::-;;;;;;;;;;-1:-1:-1;22451:266:0;;;;;:::i;:::-;;:::i;28087:103::-;;;;;;;;;;-1:-1:-1;28087:103:0;;;;;:::i;:::-;;:::i;26792:338::-;;;;;;;;;;-1:-1:-1;26792:338:0;;;;;:::i;:::-;;:::i;12804:42::-;;;;;;;;;;;;12842:4;12804:42;;21016:80;;;;;;;;;;-1:-1:-1;21084:9:0;;21016:80;;21084:9;;;;3873:36:1;;3861:2;3846:18;21016:80:0;3731:184:1;25027:180:0;;;;;;;;;;-1:-1:-1;25027:180:0;;;;;:::i;:::-;;:::i;12959:49::-;;;;;;;;;;;;;;;;24511:259;;;;;;;;;;-1:-1:-1;24511:259:0;;;;;:::i;:::-;;:::i;22725:215::-;;;;;;;;;;-1:-1:-1;22725:215:0;;;;;:::i;:::-;;:::i;12758:37::-;;;;;;;;;;;;;;;;26446:338;;;;;;;;;;-1:-1:-1;26446:338:0;;;;;:::i;:::-;;:::i;12634:77::-;;;;;;;;;;;;;;;;13447:21;;;;;;;;;;-1:-1:-1;13447:21:0;;;;-1:-1:-1;;;;;13447:21:0;;;13857:41;;;;;;;;;;-1:-1:-1;13857:41:0;;;;-1:-1:-1;;;13857:41:0;;;;;;13015:49;;;;;;;;;;;;;;;;19610:761;;;;;;;;;;-1:-1:-1;19610:761:0;;;;;:::i;:::-;;:::i;24122:125::-;;;;;;;;;;-1:-1:-1;24122:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;24211:28:0;24187:4;24211:28;;;:19;:28;;;;;;;;;24122:125;14622:36;;;;;;;;;;-1:-1:-1;14622:36:0;;;;;;;;;;;22323:120;;;;;;;;;;-1:-1:-1;22323:120:0;;;;;:::i;:::-;;:::i;28504:196::-;;;;;;;;;;;;;:::i;13651:64::-;;;;;;;;;;-1:-1:-1;13651:64:0;;;;-1:-1:-1;;;;;13651:64:0;;;12718:33;;;;;;;;;;;;;;;;24255:134;;;;;;;;;;-1:-1:-1;24255:134:0;;;;;:::i;:::-;;:::i;14068:77::-;;;;;;;;;;;;;;;;15137:33;;;;;;;;;;-1:-1:-1;15137:33:0;;;;-1:-1:-1;;;15137:33:0;;;;;;21505:117;;;;;;;;;;-1:-1:-1;21505:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;21598:16:0;21571:7;21598:16;;;:7;:16;;;;;;;21505:117;20379:195;;;;;;;;;;;;;:::i;23690:424::-;;;;;;;;;;-1:-1:-1;23690:424:0;;;;;:::i;:::-;;:::i;21278:80::-;;;;;;;;;;-1:-1:-1;21330:7:0;19588:6;-1:-1:-1;;;;;19588:6:0;21278:80;;33289:479;;;;;;;;;;;;;:::i;21102:84::-;;;;;;;;;;;;;:::i;28198:298::-;;;;;;;;;;-1:-1:-1;28198:298:0;;;;;:::i;:::-;;:::i;22948:225::-;;;;;;;;;;-1:-1:-1;22948:225:0;;;;;:::i;:::-;;:::i;21630:167::-;;;;;;;;;;-1:-1:-1;21630:167:0;;;;;:::i;:::-;;:::i;13071:45::-;;;;;;;;;;;;;;;;15389:32;;;;;;;;;;-1:-1:-1;15389:32:0;;;;-1:-1:-1;;;;;15389:32:0;;;25215:218;;;;;;;;;;-1:-1:-1;25215:218:0;;;;;:::i;:::-;;:::i;27577:171::-;;;;;;;;;;-1:-1:-1;27577:171:0;;;;;:::i;:::-;;:::i;25964:474::-;;;;;;;;;;-1:-1:-1;25964:474:0;;;;;:::i;:::-;;:::i;15428:32::-;;;;;;;;;;;;;;;;21364:133;;;;;;;;;;-1:-1:-1;21364:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21466:19:0;;;21448:7;21466:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21364:133;14873:32;;;;;;;;;;;;;;;;25583:373;;;;;;;;;;-1:-1:-1;25583:373:0;;;;;:::i;:::-;;:::i;23181:501::-;;;;;;;;;;-1:-1:-1;23181:501:0;;;;;:::i;:::-;;:::i;27435:134::-;;;;;;;;;;-1:-1:-1;27435:134:0;;;;;:::i;:::-;;:::i;15342:40::-;;;;;;;;;;;;;;;;14329:87;;;;;;;;;;;;;;;;27138:289;;;;;;;;;;-1:-1:-1;27138:289:0;;;;;:::i;:::-;;:::i;21192:80::-;21240:13;21264:5;21257:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21192:80;:::o;25441:134::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;;;;;;;;;25525:2:::1;25518:3;:9;;25510:18;;;::::0;::::1;;25555:12;:3:::0;25561:6:::1;25555:12;:::i;:::-;25539:13;:28:::0;-1:-1:-1;25441:134:0:o;21805:161::-;21880:4;21897:39;242:10;21920:7;21929:6;21897:8;:39::i;:::-;-1:-1:-1;21954:4:0;21805:161;;;;;:::o;24778:241::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;24876:13:::1;::::0;:18;:40;::::1;;;-1:-1:-1::0;24898:13:0::1;::::0;:18;24876:40:::1;:61;;;;-1:-1:-1::0;24921:16:0::1;::::0;;;::::1;;;24920:17;24876:61;24867:71;;;::::0;::::1;;24949:22;::::0;::::1;:13;:22:::0;24998:13:::1;:4:::0;25005:6:::1;24998:13;:::i;:::-;24982;:29:::0;-1:-1:-1;;24778:241:0:o;22451:266::-;22549:4;22566:36;22576:6;22584:9;22595:6;22566:9;:36::i;:::-;-1:-1:-1;;;;;;22644:19:0;;;;;;:11;:19;;;;;;;;242:10;22644:33;;;;;;;;;22613:74;;22622:6;;22644:42;;22680:6;;22644:42;:::i;:::-;22613:8;:74::i;:::-;-1:-1:-1;22705:4:0;22451:266;;;;;:::o;28087:103::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;28158:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;28158:24:0::1;-1:-1:-1::0;;;;28158:24:0;;::::1;::::0;;;::::1;::::0;;28087:103::o;26792:338::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;26880:13:::1;26918:7;26907;26897;;:17;;;;:::i;:::-;26896:29;;;;:::i;:::-;26880:45;;26964:4;26954:7;;:14;;;;:::i;:::-;26944:5;:25;;26936:88;;;::::0;-1:-1:-1;;;26936:88:0;;7565:2:1;26936:88:0::1;::::0;::::1;7547:21:1::0;7604:2;7584:18;;;7577:30;7643:34;7623:18;;;7616:62;-1:-1:-1;;;7694:18:1;;;7687:48;7752:19;;26936:88:0::1;7363:414:1::0;26936:88:0::1;27035:14;:22:::0;;;27087:14:::1;::::0;27115:7;;27087:24:::1;::::0;27104:7;;27087:24:::1;:::i;:::-;27086:36;;;;:::i;:::-;27068:15;:54:::0;-1:-1:-1;;;26792:338:0:o;25027:180::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25106:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;25098:64;;;::::0;-1:-1:-1;;;25098:64:0;;7984:2:1;25098:64:0::1;::::0;::::1;7966:21:1::0;8023:2;8003:18;;;7996:30;8062:34;8042:18;;;8035:62;-1:-1:-1;;;8113:18:1;;;8106:31;8154:19;;25098:64:0::1;7782:397:1::0;25098:64:0::1;-1:-1:-1::0;;;;;25173:18:0::1;25194:5;25173:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;25173:26:0::1;::::0;;25027:180::o;24511:259::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;24614:13:::1;::::0;:18;:50;::::1;;;-1:-1:-1::0;24636:23:0::1;::::0;:28;24614:50:::1;24605:70;;;::::0;-1:-1:-1;;;24605:70:0;;8386:2:1;24605:70:0::1;::::0;::::1;8368:21:1::0;8425:1;8405:18;;;8398:29;-1:-1:-1;;;8443:18:1;;;8436:36;8489:18;;24605:70:0::1;8184:329:1::0;24605:70:0::1;24686:13;:28:::0;;;;24725:23:::1;:37:::0;24511:259::o;22725:215::-;242:10;22813:4;22862:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22862:34:0;;;;;;;;;;22813:4;;22830:80;;22853:7;;22862:47;;22899:10;;22862:47;:::i;26446:338::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;26533:13:::1;26571:7;26560;26550;;:17;;;;:::i;:::-;26549:29;;;;:::i;:::-;26533:45;;26617:4;26607:7;;:14;;;;:::i;:::-;26597:5;:25;;26589:93;;;::::0;-1:-1:-1;;;26589:93:0;;8853:2:1;26589:93:0::1;::::0;::::1;8835:21:1::0;8892:2;8872:18;;;8865:30;8931:34;8911:18;;;8904:62;9002:25;8982:18;;;8975:53;9045:19;;26589:93:0::1;8651:419:1::0;26589:93:0::1;26693:12;:20:::0;;;26741:14:::1;::::0;26769:7;;26741:24:::1;::::0;26758:7;;26741:24:::1;:::i;:::-;26740:36;;;;:::i;:::-;26724:13;:52:::0;-1:-1:-1;;;26446:338:0:o;19610:761::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19691:22:0;::::1;19683:96;;;;-1:-1:-1::0;;;19683:96:0::1;;;;;;;:::i;:::-;19810:4;::::0;-1:-1:-1;;;;;19798:16:0;;::::1;19810:4:::0;::::1;19798:16;;19790:90;;;;-1:-1:-1::0;;;19790:90:0::1;;;;;;;:::i;:::-;19911:6;::::0;;19891:34:::1;::::0;-1:-1:-1;;;;;19911:6:0;;::::1;::::0;19891:19:::1;:34::i;:::-;19936:35;19956:8;19966:4;19936:19;:35::i;:::-;20024:6;::::0;19996:16:::1;::::0;-1:-1:-1;;;;;19996:16:0;;::::1;20024:6:::0;::::1;19996:35;19992:90;;;20046:16;:36:::0;;-1:-1:-1;;;;;;20046:36:0::1;-1:-1:-1::0;;;;;20046:36:0;::::1;;::::0;;19992:90:::1;20145:6;::::0;;-1:-1:-1;;;;;20145:6:0;;::::1;21598:16:::0;;:7;:16;;;;;;;;;20103:11:::1;:19:::0;;;;;:29;;::::1;::::0;;;;;;;:49;20176:6;;;;::::1;21598:16:::0;;;;;;20166:21;20163:99:::1;;20214:6;::::0;;-1:-1:-1;;;;;20214:6:0::1;21598:16:::0;;;:7;:16;;;;;;;20204:46:::1;::::0;20214:6;20222:8;;20204:9:::1;:46::i;:::-;;20163:99;20282:6;:17:::0;;-1:-1:-1;;;;;;20282:17:0::1;-1:-1:-1::0;;;;;20282:17:0;::::1;::::0;;::::1;::::0;;20315:38:::1;::::0;20282:17;;;;20315:38:::1;::::0;20282:6;20315:38:::1;19610:761:::0;:::o;22323:120::-;22376:4;22400:35;22408:7;-1:-1:-1;;22400:7:0;:35::i;28504:196::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;28568:13:::1;::::0;:18;28559:52:::1;;;::::0;-1:-1:-1;;;28559:52:0;;9707:2:1;28559:52:0::1;::::0;::::1;9689:21:1::0;9746:2;9726:18;;;9719:30;-1:-1:-1;;;9765:18:1;;;9758:50;9825:18;;28559:52:0::1;9505:344:1::0;28559:52:0::1;28677:15;;28663:11;;28638:4;;;;;;;;;-1:-1:-1::0;;;;;28638:4:0::1;-1:-1:-1::0;;;;;28638:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;;:::i;:::-;:54;;;;:::i;:::-;28622:13;:70:::0;28504:196::o;24255:134::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24343:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;24343:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24255:134::o;20379:195::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;20466:6:::1;::::0;;20446:34:::1;::::0;-1:-1:-1;;;;;20466:6:0;;::::1;::::0;20446:19:::1;:34::i;:::-;20508:1;20491:19:::0;;-1:-1:-1;;;;;;20491:19:0::1;::::0;;20526:40:::1;::::0;20508:1;;20526:40:::1;::::0;20508:1;;20526:40:::1;20379:195::o:0;23690:424::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;23771:16;23767:340:::1;;-1:-1:-1::0;;;;;;23804:13:0::1;23820:5;23804:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;23804:21:0::1;::::0;;23690:424::o;23767:340::-:1;23862:17;::::0;:22;23858:153:::1;;23951:7;23931:17;;23913:15;:35;;;;:::i;:::-;:45;23905:90;;;::::0;-1:-1:-1;;;23905:90:0;;10362:2:1;23905:90:0::1;::::0;::::1;10344:21:1::0;;;10381:18;;;10374:30;10440:34;10420:18;;;10413:62;10492:18;;23905:90:0::1;10160:356:1::0;23905:90:0::1;-1:-1:-1::0;;;;;24025:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;24025:20:0::1;24041:4;24025:20;::::0;;24080:15:::1;24060:17;:35:::0;23767:340:::1;23690:424:::0;;:::o;33289:479::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;33351:14:::1;::::0;::::1;;33350:15;33342:52;;;::::0;-1:-1:-1;;;33342:52:0;;10723:2:1;33342:52:0::1;::::0;::::1;10705:21:1::0;10762:2;10742:18;;;10735:30;10801:26;10781:18;;;10774:54;10845:18;;33342:52:0::1;10521:348:1::0;33342:52:0::1;33413:13;::::0;33405:50:::1;;;::::0;-1:-1:-1;;;33405:50:0;;11076:2:1;33405:50:0::1;::::0;::::1;11058:21:1::0;11115:2;11095:18;;;11088:30;-1:-1:-1;;;11134:18:1;;;11127:49;11193:18;;33405:50:0::1;10874:343:1::0;33405:50:0::1;33470:13;;33487:1;33470:18;33466:144;;33520:18;:12;33535:3;33520:18;:::i;:::-;33505:12;:33:::0;33466:144:::1;;;33586:12;33571;:27:::0;33466:144:::1;33620:14;:21:::0;;-1:-1:-1;;33620:21:0::1;33637:4;33620:21;::::0;;33665:16:::1;::::0;;33679:1:::1;33665:16:::0;;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;33654:27:0;;::::1;::::0;:8:::1;::::0;-1:-1:-1;33654:27:0::1;;::::0;::::1;:::i;:::-;;33714:4;33692:8;33701:1;33692:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;:27:::0;;-1:-1:-1;;;;;;33692:27:0::1;-1:-1:-1::0;;;;;33692:27:0;;::::1;;::::0;;33744:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;33744:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;33692:11;;33744:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33730:8;33739:1;33730:11;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;;-1:-1:-1::0;;;;;33730:30:0::1;;;;;-1:-1:-1::0;;;;;33730:30:0::1;;;;;;33289:479::o:0;21102:84::-;21152:13;21176:7;21169:14;;;;;:::i;28198:298::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;28353:15:::1;:34:::0;;;28398:11:::1;:26:::0;;;28467:20:::1;28471:16:::0;28467:2:::1;:20;:::i;:::-;28450:38;::::0;:13;:38:::1;:::i;:::-;28435:12;:53:::0;-1:-1:-1;;;;28198:298:0:o;22948:225::-;242:10;23041:4;23090:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23090:34:0;;;;;;;;;;23041:4;;23058:85;;23081:7;;23090:52;;23127:15;;23090:52;:::i;21630:167::-;21708:4;21725:42;242:10;21749:9;21760:6;21725:9;:42::i;25215:218::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;25324:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;25324:28:0;;::::1;::::0;;;::::1;::::0;;;25363:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;25363:24:0;;::::1;;::::0;;25398:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;25215:218::o;27577:171::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;27654:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27654:32:0::1;-1:-1:-1::0;;;;27654:32:0;;::::1;;::::0;;27702:38:::1;::::0;::::1;::::0;::::1;::::0;27678:8;1864:14:1;1857:22;1839:41;;1827:2;1812:18;;1699:187;27702:38:0::1;;;;;;;;27577:171:::0;:::o;25964:474::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;26102:8;26078:21:::1;26090:9:::0;26078;:21:::1;:::i;:::-;:32;;;;:::i;:::-;26114:3;26078:39;26069:72;;;::::0;-1:-1:-1;;;26069:72:0;;13318:2:1;26069:72:0::1;::::0;::::1;13300:21:1::0;13357:2;13337:18;;;13330:30;-1:-1:-1;;;13376:18:1;;;13369:49;13435:18;;26069:72:0::1;13116:343:1::0;26069:72:0::1;26156:13:::0;;26152:168:::1;;26207:2;26194:9;:15;;:54;;;;;26247:1;26235:9;:13;26194:54;:91;;;;;26284:1;26273:8;:12;26194:91;26186:122;;;::::0;::::1;;26330:15;:27:::0;;;;26368:15:::1;:27:::0;26406:13:::1;:24:::0;25964:474::o;25583:373::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;12842:4:::1;25693:6;:21;;:65;;;;;12892:4;25735:7;:23;;25693:65;:117;;;;;12946:4;25779:11;:31;;25693:117;25685:170;;;::::0;-1:-1:-1;;;25685:170:0;;13666:2:1;25685:170:0::1;::::0;::::1;13648:21:1::0;13705:2;13685:18;;;13678:30;13744:25;13724:18;;;13717:53;13787:18;;25685:170:0::1;13464:347:1::0;25685:170:0::1;25866:7;:16:::0;;;;25893:8:::1;:18:::0;25922:12:::1;:26:::0;25583:373::o;23181:501::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;23252:29:::1;23303:9;23252:61;;23324:16;23361:10;-1:-1:-1::0;;;;;23361:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23343:47:0::1;;23399:4;23406:10;-1:-1:-1::0;;;;;23406:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23343:81;::::0;-1:-1:-1;;;;;;23343:81:0::1;::::0;;;;;;-1:-1:-1;;;;;14046:15:1;;;23343:81:0::1;::::0;::::1;14028:34:1::0;14098:15;;14078:18;;;14071:43;13963:18;;23343:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23324:100:::0;-1:-1:-1;;;;;;23439:22:0;::::1;23435:207;;23505:10;-1:-1:-1::0;;;;;23505:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23487:50:0::1;;23546:4;23553:10;-1:-1:-1::0;;;;;23553:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23487:84;::::0;-1:-1:-1;;;;;;23487:84:0::1;::::0;;;;;;-1:-1:-1;;;;;14046:15:1;;;23487:84:0::1;::::0;::::1;14028:34:1::0;14098:15;;14078:18;;;14071:43;13963:18;;23487:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23478:6;:93:::0;;-1:-1:-1;;;;;;23478:93:0::1;-1:-1:-1::0;;;;;23478:93:0;;;::::1;::::0;;;::::1;::::0;;23435:207:::1;;;23613:6;:17:::0;;-1:-1:-1;;;;;;23613:17:0::1;-1:-1:-1::0;;;;;23613:17:0;::::1;;::::0;;23435:207:::1;-1:-1:-1::0;23652:9:0::1;:22:::0;;-1:-1:-1;;;;;;23652:22:0::1;-1:-1:-1::0;;;;;23652:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;23181:501:0:o;27435:134::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;27518:16:::1;:43:::0;;-1:-1:-1;;;;;;27518:43:0::1;-1:-1:-1::0;;;;;27518:43:0;;;::::1;::::0;;;::::1;::::0;;27435:134::o;27138:289::-;16027:6;;-1:-1:-1;;;;;16027:6:0;242:10;16027:22;16019:67;;;;-1:-1:-1;;;16019:67:0;;;;;;;:::i;:::-;27338:16:::1;27318;27308:7;;:26;;;;:::i;:::-;27307:47;;;;:::i;:::-;27291:13;:63:::0;27379:7:::1;::::0;27406:13;;27379:23:::1;::::0;27389:13;;27379:23:::1;:::i;:::-;27378:41;;;;:::i;:::-;27365:10;:54:::0;-1:-1:-1;;;;27138:289:0:o;21974:341::-;-1:-1:-1;;;;;22068:20:0;;22060:69;;;;-1:-1:-1;;;22060:69:0;;14327:2:1;22060:69:0;;;14309:21:1;14366:2;14346:18;;;14339:30;14405:34;14385:18;;;14378:62;-1:-1:-1;;;14456:18:1;;;14449:34;14500:19;;22060:69:0;14125:400:1;22060:69:0;-1:-1:-1;;;;;22148:21:0;;22140:68;;;;-1:-1:-1;;;22140:68:0;;14732:2:1;22140:68:0;;;14714:21:1;14771:2;14751:18;;;14744:30;14810:34;14790:18;;;14783:62;-1:-1:-1;;;14861:18:1;;;14854:32;14903:19;;22140:68:0;14530:398:1;22140:68:0;-1:-1:-1;;;;;22221:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;22274:33;;2289:25:1;;;22274:33:0;;2262:18:1;22274:33:0;;;;;;;21974:341;;;:::o;28708:2591::-;28787:4;-1:-1:-1;;;;;28812:18:0;;28804:68;;;;-1:-1:-1;;;28804:68:0;;15135:2:1;28804:68:0;;;15117:21:1;15174:2;15154:18;;;15147:30;15213:34;15193:18;;;15186:62;-1:-1:-1;;;15264:18:1;;;15257:35;15309:19;;28804:68:0;14933:401:1;28804:68:0;-1:-1:-1;;;;;28891:16:0;;28883:64;;;;-1:-1:-1;;;28883:64:0;;15541:2:1;28883:64:0;;;15523:21:1;15580:2;15560:18;;;15553:30;15619:34;15599:18;;;15592:62;-1:-1:-1;;;15670:18:1;;;15663:33;15713:19;;28883:64:0;15339:399:1;28883:64:0;28975:1;28966:6;:10;28958:64;;;;-1:-1:-1;;;28958:64:0;;15945:2:1;28958:64:0;;;15927:21:1;15984:2;15964:18;;;15957:30;16023:34;16003:18;;;15996:62;-1:-1:-1;;;16074:18:1;;;16067:39;16123:19;;28958:64:0;15743:405:1;28958:64:0;29037:14;;;;29033:112;;;29091:13;;29076:11;:28;;29068:65;;;;-1:-1:-1;;;29068:65:0;;16355:2:1;29068:65:0;;;16337:21:1;16394:2;16374:18;;;16367:30;16433:26;16413:18;;;16406:54;16477:18;;29068:65:0;16153:348:1;29068:65:0;29158:20;29169:4;29175:2;29158:10;:20::i;:::-;29155:1466;;;29199:14;;;;29195:89;;29234:34;;-1:-1:-1;;;29234:34:0;;16708:2:1;29234:34:0;;;16690:21:1;16747:2;16727:18;;;16720:30;16786:26;16766:18;;;16759:54;16830:18;;29234:34:0;16506:348:1;29195:89:0;29302:15;;;;29298:347;;;-1:-1:-1;;;;;29342:13:0;;;;;;:7;:13;;;;;;;;29338:292;;;-1:-1:-1;;;;;29387:13:0;;;;;;:9;:13;;;;;;29404:12;29387:29;;29379:38;;;;;;-1:-1:-1;;;;;29440:13:0;;;;;;:9;:13;;;;;29456:12;29440:28;;29338:292;;;-1:-1:-1;;;;;29525:15:0;;;;;;:9;:15;;;;;;29544:12;29525:31;;29517:40;;;;;;-1:-1:-1;;;;;29580:15:0;;;;;;:9;:15;;;;;29598:12;29580:30;;29338:292;29663:23;;:28;;:73;;-1:-1:-1;29722:9:0;;:14;;:9;;29734:2;29722:14;:::i;:::-;29695:41;;:23;;:41;;29663:73;29659:122;;;29757:8;;;29659:122;29813:12;;29803:6;:22;;29795:75;;;;-1:-1:-1;;;29795:75:0;;17304:2:1;29795:75:0;;;17286:21:1;17343:2;17323:18;;;17316:30;17382:34;17362:18;;;17355:62;-1:-1:-1;;;17433:18:1;;;17426:38;17481:19;;29795:75:0;17102:404:1;29795:75:0;29894:14;;-1:-1:-1;;;;;29888:20:0;;;29894:14;;29888:20;;;;:36;;-1:-1:-1;;;;;;29913:11:0;;;;;;:7;:11;;;;;;;;29912:12;29888:36;29885:171;;;29979:14;;29969:6;29953:13;29963:2;-1:-1:-1;;;;;21598:16:0;21571:7;21598:16;;;:7;:16;;;;;;;21505:117;29953:13;:22;;;;:::i;:::-;:40;;29945:95;;;;-1:-1:-1;;;29945:95:0;;17713:2:1;29945:95:0;;;17695:21:1;17752:2;17732:18;;;17725:30;17791:34;17771:18;;;17764:62;-1:-1:-1;;;17842:18:1;;;17835:40;17892:19;;29945:95:0;17511:406:1;29945:95:0;-1:-1:-1;;;;;30075:13:0;;;;;;:7;:13;;;;;;;;30072:538;;;30113:14;;-1:-1:-1;;;30113:14:0;;;;30109:486;;;30204:12;;30156:9;;:41;;-1:-1:-1;;;30156:41:0;;-1:-1:-1;;;;;30156:9:0;;;;:23;;:41;;30180:6;;30188:8;;30156:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30156:41:0;;;;;;;;;;;;:::i;:::-;30198:1;30156:44;;;;;;;;:::i;:::-;;;;;;;:60;30152:424;;30245:14;:16;;;:14;:16;;;:::i;:::-;;;;;;30309:13;;30291:14;;:31;30288:265;;;30355:20;30371:2;30355:7;:20::i;:::-;30423:1;30406:14;:18;30510:15;;30496:11;;;30471:4;;:22;;-1:-1:-1;;;30471:22:0;;;;30496:11;;-1:-1:-1;;;;;30471:4:0;;;;:20;;:22;;;;;;;;;;;;;;;:4;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;;:::i;:::-;:54;;;;:::i;:::-;30455:13;:70;30288:265;-1:-1:-1;;;;;30666:25:0;;30633:12;30666:25;;;:19;:25;;;;;;30648:4;;30666:25;;;:52;;-1:-1:-1;;;;;;30695:23:0;;;;;;:19;:23;;;;;;;;30666:52;30663:98;;;-1:-1:-1;30744:5:0;30663:98;-1:-1:-1;;;;;30777:11:0;;;;;;:7;:11;;;;;;;;30773:457;;;30810:16;;-1:-1:-1;;;30810:16:0;;;;30809:17;:59;;;;-1:-1:-1;30847:21:0;;-1:-1:-1;;;30847:21:0;;;;30809:59;30805:408;;;30952:4;30903:28;21598:16;;;:7;:16;;;;;;31005:13;;30981:37;;30977:221;;31070:10;;31046:20;:34;31043:77;;-1:-1:-1;31107:10:0;;31043:77;31142:36;31157:20;31142:14;:36::i;:::-;30884:329;30805:408;31247:44;31265:4;31271:2;31275:6;31283:7;31247:17;:44::i;:::-;31240:51;28708:2591;-1:-1:-1;;;;;28708:2591:0:o;27756:323::-;27824:4;19588:6;;-1:-1:-1;;;;;27848:15:0;;;19588:6;;27848:15;;;;:45;;-1:-1:-1;19561:7:0;19588:6;-1:-1:-1;;;;;27880:13:0;;;19588:6;;27880:13;;27848:45;:84;;;;-1:-1:-1;;;;;;27911:21:0;;;;;;:17;:21;;;;;;;;27910:22;27848:84;:125;;;;-1:-1:-1;;;;;;27950:23:0;;;;;;:17;:23;;;;;;;;27949:24;27848:125;:152;;;;-1:-1:-1;27996:4:0;;-1:-1:-1;;;;;27990:10:0;;;27996:4;;27990:10;;27848:152;:185;;;;-1:-1:-1;;;;;;28017:16:0;;;;27848:185;:223;;;;-1:-1:-1;;;;;;28050:21:0;;28066:4;28050:21;;27848:223;27841:230;27756:323;-1:-1:-1;;;27756:323:0:o;32271:199::-;32353:21;32333:17;:41;32385:17;:27;;-1:-1:-1;;;;;32385:27:0;;-1:-1:-1;;;;;;32385:27:0;;;;;;;;32423:39;;32440:21;32423:39;;;;;32385:17;32423:39;32385:17;32423:39;32440:21;32385:27;32423:39;;;;;;;;;;;;;;;;;;;31307:956;15901:16;:23;;-1:-1:-1;;;;15901:23:0;-1:-1:-1;;;15901:23:0;;;31448:13:::1;::::0;31430:15:::1;::::0;31412::::1;::::0;15901:23;;31448:13;31412:33:::1;::::0;::::1;:::i;:::-;:49;;;;:::i;:::-;31393:68:::0;-1:-1:-1;31476:13:0;31472:39:::1;;31504:7;;;31472:39;31521:17;31597:1;31585:8;31566:15;;31543:20;:38;;;;:::i;:::-;31542:51;;;;:::i;:::-;31541:57;;;;:::i;:::-;31521:77:::0;-1:-1:-1;31636:21:0::1;31611:22;31693:32;31521:77:::0;31693:20;:32:::1;:::i;:::-;31670:55;;31736:30;31753:12;31736:16;:30::i;:::-;31779:22;31804:38;31828:14:::0;31804:21:::1;:38;:::i;:::-;31779:63;;31853:24;31930:1;31918:8;31899:15;;31882:14;:32;;;;:::i;:::-;31881:45;;;;:::i;:::-;31880:51;;;;:::i;:::-;31853:78:::0;-1:-1:-1;31948:13:0;;31944:161:::1;;31978:41;31991:9;32002:16;31978:12;:41::i;:::-;32039:54;::::0;;20216:25:1;;;20272:2;20257:18;;20250:34;;;20300:18;;;20293:34;;;32039:54:0::1;::::0;20204:2:1;20189:18;32039:54:0::1;;;;;;;31944:161;32154:1;32119:32;32142:9:::0;32119:20;:32:::1;:::i;:::-;:36;32115:141;;;32172:16;::::0;32216:15:::1;::::0;-1:-1:-1;;;;;32172:16:0;;::::1;::::0;:72:::1;::::0;32235:8;;32199:32:::1;::::0;:14;:32:::1;:::i;:::-;32198:45;;;;:::i;:::-;32172:72;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32115:141;31382:881;;;;;;15935:1;-1:-1:-1::0;15947:16:0;:24;;-1:-1:-1;;;;15947:24:0;;;31307:956::o;34398:1181::-;34519:16;;34498:4;;34519:16;;;;;34515:819;;;-1:-1:-1;;;;;24477:18:0;;24453:4;24477:18;;;:9;:18;;;;;;;;34555:30;;;-1:-1:-1;;;;;;24477:18:0;;24453:4;24477:18;;;:9;:18;;;;;;;;34573:12;34551:97;;;34606:26;;-1:-1:-1;;;34606:26:0;;20540:2:1;34606:26:0;;;20522:21:1;20579:2;20559:18;;;20552:30;-1:-1:-1;;;20598:18:1;;;20591:46;20654:18;;34606:26:0;20338:340:1;34551:97:0;34669:16;;;;;;;34664:659;;34706:28;34725:4;34731:2;34706:18;:28::i;:::-;34758:16;;;;;;;34757:17;:41;;;;;34778:20;34789:4;34795:2;34778:10;:20::i;:::-;34753:137;;;34823:47;;-1:-1:-1;;;34823:47:0;;20885:2:1;34823:47:0;;;20867:21:1;20924:2;20904:18;;;20897:30;20963:34;20943:18;;;20936:62;-1:-1:-1;;;21014:18:1;;;21007:35;21059:19;;34823:47:0;20683:401:1;34753:137:0;34664:659;;;34949:1;34934:12;;:16;:55;;;;-1:-1:-1;;;;;;34976:13:0;;;;;;:7;:13;;;;;;;;34934:55;:101;;;;;35015:20;35026:4;35032:2;35015:10;:20::i;:::-;34930:378;;;35112:13;;35097:12;;35082:27;;:12;:27;:::i;:::-;:43;35078:211;;;-1:-1:-1;;;;;35154:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;35154:20:0;35170:4;35154:20;;;35201:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;35249:16:0;;-1:-1:-1;;;;;178:32:1;;160:51;;35249:16:0;;148:2:1;133:18;35249:16:0;;;;;;;35078:211;-1:-1:-1;;;;;35346:13:0;;;;;;:7;:13;;;;;:23;;35363:6;;35346:13;:23;;35363:6;;35346:23;:::i;:::-;;;;-1:-1:-1;35382:22:0;;-1:-1:-1;35408:7:0;35407:48;;35449:6;35407:48;;;35419:27;35429:4;35435:2;35439:6;35419:9;:27::i;:::-;-1:-1:-1;;;;;35468:11:0;;;;;;:7;:11;;;;;:29;;35382:73;;-1:-1:-1;35382:73:0;;35468:11;;;:29;;35382:73;;35468:29;:::i;:::-;;;;;;;;35530:2;-1:-1:-1;;;;;35515:34:0;35524:4;-1:-1:-1;;;;;35515:34:0;;35534:14;35515:34;;;;2289:25:1;;2277:2;2262:18;;2143:177;35515:34:0;;;;;;;;-1:-1:-1;35567:4:0;;34398:1181;-1:-1:-1;;;;;34398:1181:0:o;32478:297::-;32545:9;;:222;;-1:-1:-1;;;32545:222:0;;-1:-1:-1;;;;;32545:9:0;;;;:60;;:222;;32620:11;;32545:9;;32690:8;;32721:4;;32741:15;;32545:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32478:297;:::o;32783:498::-;32963:9;;32931:56;;32948:4;;-1:-1:-1;;;;;32963:9:0;32975:11;32931:8;:56::i;:::-;33030:9;;33228:4;;;33030:243;;-1:-1:-1;;;33030:243:0;;33096:4;33030:243;;;22022:34:1;22072:18;;;22065:34;;;33030:9:0;22115:18:1;;;22108:34;;;22158:18;;;22151:34;-1:-1:-1;;;;;33228:4:0;;;22201:19:1;;;22194:44;33247:15:0;22254:19:1;;;22247:35;33030:9:0;;;;:25;;33063:9;;21956:19:1;;33030:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33776:614::-;33858:16;;;;;;;33857:17;33849:65;;;;-1:-1:-1;;;33849:65:0;;22806:2:1;33849:65:0;;;22788:21:1;22845:2;22825:18;;;22818:30;22884:34;22864:18;;;22857:62;-1:-1:-1;;;22935:18:1;;;22928:33;22978:19;;33849:65:0;22604:399:1;33849:65:0;33930:20;33941:4;33947:2;33930:10;:20::i;:::-;33929:21;:37;;;;-1:-1:-1;33960:6:0;;-1:-1:-1;;;;;33954:12:0;;;33960:6;;33954:12;33929:37;33925:458;;;33987:13;;34004:1;33987:18;33983:160;;34041:18;:12;34056:3;34041:18;:::i;:::-;34026:12;:33;33983:160;;;34115:12;34100;:27;33983:160;-1:-1:-1;;;;;34159:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;34159:30:0;34185:4;34159:30;;;;;;34204:16;:23;;-1:-1:-1;;34204:23:0;;;;;34257:15;34242:12;:30;34289:21;:28;;-1:-1:-1;;;;34289:28:0;-1:-1:-1;;;34289:28:0;;;34337:34;;;;;;1864:14:1;;1857:22;1839:41;;1827:2;1812:18;;1699:187;34337:34:0;;;;;;;;33776:614;;:::o;35587:714::-;35727:6;;35666:7;;;;-1:-1:-1;;;;;35719:14:0;;;35727:6;;35719:14;35715:197;;;-1:-1:-1;35763:7:0;;35715:197;;;35798:6;;-1:-1:-1;;;;;35792:12:0;;;35798:6;;35792:12;35788:124;;;-1:-1:-1;35834:8:0;;35788:124;;;-1:-1:-1;35888:12:0;;35788:124;35928:20;35939:4;35945:2;35928:10;:20::i;:::-;35924:157;;;35968:13;;:18;;:57;;;36024:1;36007:14;;:18;;;;:::i;:::-;35990:13;;:35;;35968:57;35964:106;;;36046:8;;;35964:106;36135:16;;36093:17;;36113:19;36122:10;36113:6;:19;:::i;:::-;:38;;;;:::i;:::-;36180:4;36164:22;;;;:7;:22;;;;;:35;;36093:58;;-1:-1:-1;36093:58:0;;36164:22;;;:35;;36093:58;;36164:35;:::i;:::-;;;;-1:-1:-1;;36215:40:0;;2289:25:1;;;36238:4:0;;-1:-1:-1;;;;;36215:40:0;;;;;2277:2:1;2262:18;36215:40:0;;;;;;;36275:18;36284:9;36275:6;:18;:::i;:::-;36268:25;35587:714;-1:-1:-1;;;;;;35587:714:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:180::-;1117:6;1170:2;1158:9;1149:7;1145:23;1141:32;1138:52;;;1186:1;1183;1176:12;1138:52;-1:-1:-1;1209:23:1;;1058:180;-1:-1:-1;1058:180:1:o;1243:131::-;-1:-1:-1;;;;;1318:31:1;;1308:42;;1298:70;;1364:1;1361;1354:12;1298:70;1243:131;:::o;1379:315::-;1447:6;1455;1508:2;1496:9;1487:7;1483:23;1479:32;1476:52;;;1524:1;1521;1514:12;1476:52;1563:9;1550:23;1582:31;1607:5;1582:31;:::i;:::-;1632:5;1684:2;1669:18;;;;1656:32;;-1:-1:-1;;;1379:315:1:o;1891:247::-;1950:6;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;2325:337::-;2391:6;2399;2452:2;2440:9;2431:7;2427:23;2423:32;2420:52;;;2468:1;2465;2458:12;2420:52;2507:9;2494:23;2557:4;2550:5;2546:16;2539:5;2536:27;2526:55;;2577:1;2574;2567:12;2667:456;2744:6;2752;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;:::-;2937:5;-1:-1:-1;2994:2:1;2979:18;;2966:32;3007:33;2966:32;3007:33;:::i;:::-;2667:456;;3059:7;;-1:-1:-1;;;3113:2:1;3098:18;;;;3085:32;;2667:456::o;3128:160::-;3193:20;;3249:13;;3242:21;3232:32;;3222:60;;3278:1;3275;3268:12;3222:60;3128:160;;;:::o;3293:180::-;3349:6;3402:2;3390:9;3381:7;3377:23;3373:32;3370:52;;;3418:1;3415;3408:12;3370:52;3441:26;3457:9;3441:26;:::i;3478:248::-;3546:6;3554;3607:2;3595:9;3586:7;3582:23;3578:32;3575:52;;;3623:1;3620;3613:12;3575:52;-1:-1:-1;;3646:23:1;;;3716:2;3701:18;;;3688:32;;-1:-1:-1;3478:248:1:o;3920:315::-;3985:6;3993;4046:2;4034:9;4025:7;4021:23;4017:32;4014:52;;;4062:1;4059;4052:12;4014:52;4101:9;4088:23;4120:31;4145:5;4120:31;:::i;:::-;4170:5;-1:-1:-1;4194:35:1;4225:2;4210:18;;4194:35;:::i;:::-;4184:45;;3920:315;;;;;:::o;4240:385::-;4326:6;4334;4342;4350;4403:3;4391:9;4382:7;4378:23;4374:33;4371:53;;;4420:1;4417;4410:12;4371:53;-1:-1:-1;;4443:23:1;;;4513:2;4498:18;;4485:32;;-1:-1:-1;4564:2:1;4549:18;;4536:32;;4615:2;4600:18;4587:32;;-1:-1:-1;4240:385:1;-1:-1:-1;4240:385:1:o;4630:316::-;4698:6;4706;4714;4767:2;4755:9;4746:7;4742:23;4738:32;4735:52;;;4783:1;4780;4773:12;4735:52;4806:26;4822:9;4806:26;:::i;:::-;4796:36;;4851:35;4882:2;4871:9;4867:18;4851:35;:::i;:::-;4841:45;;4905:35;4936:2;4925:9;4921:18;4905:35;:::i;:::-;4895:45;;4630:316;;;;;:::o;4951:::-;5028:6;5036;5044;5097:2;5085:9;5076:7;5072:23;5068:32;5065:52;;;5113:1;5110;5103:12;5065:52;-1:-1:-1;;5136:23:1;;;5206:2;5191:18;;5178:32;;-1:-1:-1;5257:2:1;5242:18;;;5229:32;;4951:316;-1:-1:-1;4951:316:1:o;5272:388::-;5340:6;5348;5401:2;5389:9;5380:7;5376:23;5372:32;5369:52;;;5417:1;5414;5407:12;5369:52;5456:9;5443:23;5475:31;5500:5;5475:31;:::i;:::-;5525:5;-1:-1:-1;5582:2:1;5567:18;;5554:32;5595:33;5554:32;5595:33;:::i;:::-;5647:7;5637:17;;;5272:388;;;;;:::o;5925:380::-;6004:1;6000:12;;;;6047;;;6068:61;;6122:4;6114:6;6110:17;6100:27;;6068:61;6175:2;6167:6;6164:14;6144:18;6141:38;6138:161;;;6221:10;6216:3;6212:20;6209:1;6202:31;6256:4;6253:1;6246:15;6284:4;6281:1;6274:15;6138:161;;5925:380;;;:::o;6310:356::-;6512:2;6494:21;;;6531:18;;;6524:30;6590:34;6585:2;6570:18;;6563:62;6657:2;6642:18;;6310:356::o;6671:127::-;6732:10;6727:3;6723:20;6720:1;6713:31;6763:4;6760:1;6753:15;6787:4;6784:1;6777:15;6803:168;6843:7;6909:1;6905;6901:6;6897:14;6894:1;6891:21;6886:1;6879:9;6872:17;6868:45;6865:71;;;6916:18;;:::i;:::-;-1:-1:-1;6956:9:1;;6803:168::o;6976:125::-;7016:4;7044:1;7041;7038:8;7035:34;;;7049:18;;:::i;:::-;-1:-1:-1;7086:9:1;;6976:125::o;7106:127::-;7167:10;7162:3;7158:20;7155:1;7148:31;7198:4;7195:1;7188:15;7222:4;7219:1;7212:15;7238:120;7278:1;7304;7294:35;;7309:18;;:::i;:::-;-1:-1:-1;7343:9:1;;7238:120::o;8518:128::-;8558:3;8589:1;8585:6;8582:1;8579:13;8576:39;;;8595:18;;:::i;:::-;-1:-1:-1;8631:9:1;;8518:128::o;9075:425::-;9277:2;9259:21;;;9316:2;9296:18;;;9289:30;9355:34;9350:2;9335:18;;9328:62;9426:31;9421:2;9406:18;;9399:59;9490:3;9475:19;;9075:425::o;9854:184::-;9924:6;9977:2;9965:9;9956:7;9952:23;9948:32;9945:52;;;9993:1;9990;9983:12;9945:52;-1:-1:-1;10016:16:1;;9854:184;-1:-1:-1;9854:184:1:o;10043:112::-;10075:1;10101;10091:35;;10106:18;;:::i;:::-;-1:-1:-1;10140:9:1;;10043:112::o;11222:127::-;11283:10;11278:3;11274:20;11271:1;11264:31;11314:4;11311:1;11304:15;11338:4;11335:1;11328:15;11354:127;11415:10;11410:3;11406:20;11403:1;11396:31;11446:4;11443:1;11436:15;11470:4;11467:1;11460:15;11486:251;11556:6;11609:2;11597:9;11588:7;11584:23;11580:32;11577:52;;;11625:1;11622;11615:12;11577:52;11657:9;11651:16;11676:31;11701:5;11676:31;:::i;11742:422::-;11831:1;11874:5;11831:1;11888:270;11909:7;11899:8;11896:21;11888:270;;;11968:4;11964:1;11960:6;11956:17;11950:4;11947:27;11944:53;;;11977:18;;:::i;:::-;12027:7;12017:8;12013:22;12010:55;;;12047:16;;;;12010:55;12126:22;;;;12086:15;;;;11888:270;;;11892:3;11742:422;;;;;:::o;12169:806::-;12218:5;12248:8;12238:80;;-1:-1:-1;12289:1:1;12303:5;;12238:80;12337:4;12327:76;;-1:-1:-1;12374:1:1;12388:5;;12327:76;12419:4;12437:1;12432:59;;;;12505:1;12500:130;;;;12412:218;;12432:59;12462:1;12453:10;;12476:5;;;12500:130;12537:3;12527:8;12524:17;12521:43;;;12544:18;;:::i;:::-;-1:-1:-1;;12600:1:1;12586:16;;12615:5;;12412:218;;12714:2;12704:8;12701:16;12695:3;12689:4;12686:13;12682:36;12676:2;12666:8;12663:16;12658:2;12652:4;12649:12;12645:35;12642:77;12639:159;;;-1:-1:-1;12751:19:1;;;12783:5;;12639:159;12830:34;12855:8;12849:4;12830:34;:::i;:::-;12900:6;12896:1;12892:6;12888:19;12879:7;12876:32;12873:58;;;12911:18;;:::i;:::-;12949:20;;12169:806;-1:-1:-1;;;12169:806:1:o;12980:131::-;13040:5;13069:36;13096:8;13090:4;13069:36;:::i;16859:238::-;16897:7;16937:4;16934:1;16930:12;16969:4;16966:1;16962:12;17029:3;17023:4;17019:14;17014:3;17011:23;17004:3;16997:11;16990:19;16986:49;16983:75;;;17038:18;;:::i;17922:495::-;17983:3;18021:5;18015:12;18048:6;18043:3;18036:19;18074:4;18103:2;18098:3;18094:12;18087:19;;18125:5;18122:1;18115:16;18167:2;18164:1;18154:16;18188:1;18198:194;18212:6;18209:1;18206:13;18198:194;;;18277:13;;-1:-1:-1;;;;;18273:39:1;18261:52;;18333:12;;;;18309:1;18368:14;;;;18227:9;18198:194;;;-1:-1:-1;18408:3:1;;17922:495;-1:-1:-1;;;;;17922:495:1:o;18422:337::-;18626:6;18615:9;18608:25;18669:2;18664;18653:9;18649:18;18642:30;18589:4;18689:64;18749:2;18738:9;18734:18;18726:6;18689:64;:::i;:::-;18681:72;18422:337;-1:-1:-1;;;;18422:337:1:o;18764:1105::-;18859:6;18890:2;18933;18921:9;18912:7;18908:23;18904:32;18901:52;;;18949:1;18946;18939:12;18901:52;18982:9;18976:16;19011:18;19052:2;19044:6;19041:14;19038:34;;;19068:1;19065;19058:12;19038:34;19106:6;19095:9;19091:22;19081:32;;19151:7;19144:4;19140:2;19136:13;19132:27;19122:55;;19173:1;19170;19163:12;19122:55;19202:2;19196:9;19224:2;19220;19217:10;19214:36;;;19230:18;;:::i;:::-;19276:2;19273:1;19269:10;19308:2;19302:9;19371:2;19367:7;19362:2;19358;19354:11;19350:25;19342:6;19338:38;19426:6;19414:10;19411:22;19406:2;19394:10;19391:18;19388:46;19385:72;;;19437:18;;:::i;:::-;19473:2;19466:22;19523:18;;;19557:15;;;;-1:-1:-1;19599:11:1;;;19595:20;;;19627:19;;;19624:39;;;19659:1;19656;19649:12;19624:39;19683:11;;;;19703:135;19719:6;19714:3;19711:15;19703:135;;;19785:10;;19773:23;;19736:12;;;;19816;;;;19703:135;;;19857:6;18764:1105;-1:-1:-1;;;;;;;;18764:1105:1:o;19874:135::-;19913:3;-1:-1:-1;;19934:17:1;;19931:43;;;19954:18;;:::i;:::-;-1:-1:-1;20001:1:1;19990:13;;19874:135::o;21089:587::-;21385:6;21374:9;21367:25;21428:6;21423:2;21412:9;21408:18;21401:34;21471:3;21466:2;21455:9;21451:18;21444:31;21348:4;21492:65;21552:3;21541:9;21537:19;21529:6;21492:65;:::i;:::-;-1:-1:-1;;;;;21593:32:1;;;;21588:2;21573:18;;21566:60;-1:-1:-1;21657:3:1;21642:19;21635:35;21484:73;21089:587;-1:-1:-1;;;21089:587:1:o;22293:306::-;22381:6;22389;22397;22450:2;22438:9;22429:7;22425:23;22421:32;22418:52;;;22466:1;22463;22456:12;22418:52;22495:9;22489:16;22479:26;;22545:2;22534:9;22530:18;22524:25;22514:35;;22589:2;22578:9;22574:18;22568:25;22558:35;;22293:306;;;;;:::o

Swarm Source

ipfs://80546da4d04cd2ebbb2539d617d93997bd304acb242f89fac3b1be9b832be89a
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.