ETH Price: $2,378.45 (-11.15%)

Token

BasedSwap (BASED)

Overview

Max Total Supply

1,000,000 BASED

Holders

396

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BasedSwap

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-02-23
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/x/sa/fe/ma/rs/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     * x_s_af_e/m_ar_s
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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

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

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

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


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

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

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

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

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

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

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

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

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
}

contract BasedSwap is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 1000000;
   
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 9;
    uint256 private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "BasedSwap";
    string private _symbol = "BASED";
    
    uint256 public _reflectFee = 0; // All taxes are divided by 100 for more accuracy.
    uint256 private _previousReflectFee = _reflectFee;
    uint256 private maxReflectFee = 10000;
    
    uint256 public _liquidityFee = 100; // All taxes are divided by 100 for more accuracy.
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private maxLiquidityFee = 10000;

    uint256 public _marketingFee = 2400; // All taxes are divided by 100 for more accuracy.
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private maxMarketingFee = 10000;

    uint256 private masterTaxDivisor = 10000; // All tax calculations are divided by this number.

    IRouter02 public dexRouter;
    address public lpPair;

    // SUSHI ROUTER
    address private _routerAddress = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;

    address public burnAddress = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0x2D3944826c55d6bA54bEFA74727993076D7F893D);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    // Max TX amount is 1% of the total supply.
    uint256 private maxTxPercent = 100; // Less fields to edit
    uint256 private maxTxDivisor = 10000;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 private _previousMaxTxAmount = _maxTxAmount;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor; // Actual amount for UI's
    // Maximum wallet size is 1% of the total supply.
    uint256 private maxWalletPercent = 100; // Less fields to edit
    uint256 private maxWalletDivisor = 10000;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 private _previousMaxWalletSize = _maxWalletSize;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor; // Actual amount for UI's
    // 0.05% of Total Supply
    uint256 private numTokensSellToAddToLiquidity = (_tTotal * 5) / 10000;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private immutable snipeBlockAmt;
    uint256 public snipersCaught = 0;
    
    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;
    }
    
    constructor (uint256 _snipeBlockAmt) payable {
        _tOwned[_msgSender()] = _tTotal;
        _rOwned[_msgSender()] = _rTotal;

        // Set the amount of blocks to count a sniper.
        snipeBlockAmt = _snipeBlockAmt;

        IRouter02 _dexRouter = IRouter02(_routerAddress);
        lpPair = IFactoryV2(_dexRouter.factory())
            .createPair(address(this), _dexRouter.WETH());

        dexRouter = _dexRouter;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0xeBb415084Ce323338CFD3174162964CC23753dFD)] = true;
        _liquidityHolders[owner()] = true;
        _isExcluded[address(this)] = true;
        _excluded.push(address(this));
        _isExcluded[address(0xeBb415084Ce323338CFD3174162964CC23753dFD)] = true;
        _excluded.push(address(0xeBb415084Ce323338CFD3174162964CC23753dFD));
        _isExcluded[owner()] = true;
        _excluded.push(owner());
        _isExcluded[burnAddress] = true;
        _excluded.push(burnAddress);
        _isExcluded[_marketingWallet] = true;
        _excluded.push(_marketingWallet);
        _isExcluded[lpPair] = true;
        _excluded.push(lpPair);

        _approve(_msgSender(), _routerAddress, _tTotal);

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

    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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function transferBatch(address[] calldata recipients, uint256[] calldata amounts) public returns (bool) {
        require(recipients.length == amounts.length, 
        "Must be matching argument lengths");
        
        uint256 length = recipients.length;
        
        for (uint i = 0; i < length; i++) {
            require(transfer(recipients[i], amounts[i]));
        }
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function setLPPair(address pair) external onlyOwner {
        lpPair = pair;
    }

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

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

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

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

    function setSniperProtectionEnabled(bool enabled) external onlyOwner() {
        require(enabled != sniperProtection, "Already set.");
        sniperProtection = enabled;
    }
    
    function setTaxFeePercent(uint256 reflectFee) external onlyOwner() {
        require(reflectFee <= maxReflectFee); // Prevents owner from abusing fees.
        _reflectFee = reflectFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee <= maxLiquidityFee); // Prevents owner from abusing fees.
        _liquidityFee = liquidityFee;
    }

    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        require(marketingFee <= maxMarketingFee); // Prevents owner from abusing fees.
        _marketingFee = marketingFee;
    }

    function setPostLaunchFeePercents() external onlyOwner() {
        _marketingFee = 300;
        _liquidityFee = 100;
        _reflectFee = 0;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 10000); // Cannot set lower than 0.01%
        _maxTxAmount = _tTotal.mul(percent).div(divisor);
        maxTxAmountUI = startingSupply.mul(percent).div(divisor);
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 1000); // Cannot set lower than 0.1%
        _maxWalletSize = _tTotal.mul(percent).div(divisor);
        maxWalletSizeUI = startingSupply.mul(percent).div(divisor);
    }

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
     //to recieve ETH from dexRouter when swaping
    receive() external payable {}

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from
,        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to))
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        if(_hasLimits(from, to)
            && to != _routerAddress 
            && to != lpPair
        ) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (!inSwapAndLiquify
            && to == lpPair
            && swapAndLiquifyEnabled
        ) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;
                swapAndLiquify(contractTokenBalance);
            }
        }
        
        bool takeFee = true;
        
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (_marketingFee + _liquidityFee == 0)
            return;
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth);

        // how much ETH did we just swap into?
        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 liquidityBalance = fromSwap.mul(half).div(toSwapForEth);

        addLiquidity(otherHalf, liquidityBalance);

        emit SwapAndLiquify(half, liquidityBalance, otherHalf);

        _marketingWallet.transfer(fromSwap.sub(liquidityBalance));
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap lpPair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            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
            _marketingWallet,
            block.timestamp
        );
    }

    function _tokenTransfer(address from, address to, uint256 amount,bool takeFee) private {
        // Failsafe, disable the whole system if needed.
        if (sniperProtection){
            // If sender is a sniper address, reject the transfer.
            if (isSniper(from) || isSniper(to)) {
                revert("Sniper rejected.");
            }

            // Check if this is the liquidity adding tx to startup.
            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                    if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                        revert("Only owner can transfer at this time.");
                    }
            } else {
                if (_liqAddBlock > 0 
                    && from == lpPair 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniper[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        if(!takeFee)
            removeAllFee();
        
        _finalizeTransfer(from, to, amount);
        
        if(!takeFee)
            restoreAllFee();
    }

    function _finalizeTransfer(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender].sub(tAmount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);  
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender].sub(tAmount);
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        }

        if (tLiquidity > 0)
            _takeLiquidity(sender, tLiquidity);
        if (rFee > 0 || tFee > 0)
            _takeReflect(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }


    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeReflect(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectFee).div(masterTaxDivisor);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee.add(_marketingFee)).div(masterTaxDivisor);
    }

    function removeAllFee() private {
        if(_reflectFee == 0 && _liquidityFee == 0) return;
        
        _previousReflectFee = _reflectFee;
        _previousLiquidityFee = _liquidityFee;
        _previousMarketingFee = _marketingFee;

        _reflectFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
        _reflectFee = _previousReflectFee;
        _liquidityFee = _previousLiquidityFee;
        _marketingFee = _previousMarketingFee;
    }

    function withdrawETH (address payable recipient) public onlyOwner {
        (bool success,) = address(recipient).call{value: address(this).balance}("");
        require(success, "Failed to withdraw ETH");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"_snipeBlockAmt","type":"uint256"}],"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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setLPPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","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":[],"name":"setPostLaunchFeePercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"transferBatch","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620f42406009908155600a805460ff191682178155600b8290556200002a919062000996565b600954620000399190620009ab565b600c8190556200004c90600019620009db565b6200005a90600019620009f2565b600d5560408051808201909152600981526804261736564537761760bc1b6020820152600f906200008c908262000aad565b50604080518082019091526005815264109054d15160da1b6020820152601090620000b8908262000aad565b50600060118190556012556127106013819055606460148190556015819055601682905561096060178190556018556019829055601a829055601d80546001600160a01b0319908116731b02da8cb0d097eb8d57a175b88c7d8b4799750617909155601e805490911661dead179055601f8054600161ff0160a01b031916732d3944826c55d6ba54befa74727993076d7f893d17905560208190556021829055600c54620001679190620009ab565b62000173919062000b79565b602255602254602355602154602054600954620001919190620009ab565b6200019d919062000b79565b6024556064602555612710602655602654602554600c54620001c09190620009ab565b620001cc919062000b79565b602755602754602855602654602554600954620001ea9190620009ab565b620001f6919062000b79565b602955612710600c5460056200020d9190620009ab565b62000219919062000b79565b602a55602b805461ffff191660011790556000602c819055602d819055602e5560405162003db8388190039081908339810160408190526200025b9162000b90565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5433600090815260026020908152604080832093909355600d546001825291839020919091556080839052601d54825163c45a015560e01b815292516001600160a01b0390911692839263c45a0155926004808401938290030181865afa1580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000334919062000baa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a8919062000baa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041c919062000baa565b601c80546001600160a01b03199081166001600160a01b0393841617909155601b8054909116918316919091179055600160046000620004646000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252812080548316600190811790915573ebb415084ce323338cfd3174162964cc23753dfd82527f6b2598e28cbe88f18b5046672f2b9c1c422c67a4dca00ba189a6c5fa4c30822280549093168117909255600890620004fe6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553080825260059384905291812080548516600190811790915560068054808301825560008051602062003d9883398151915290810180546001600160a01b031990811690961790557f94f08f7af7c89cf1865ff4814ea71942df3b5ee927e1e08a48f4ac4ce98e278c8054909716831790965580548083018255908352909401805490921673ebb415084ce323338cfd3174162964cc23753dfd17909155620005db6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556006620006186000546001600160a01b031690565b8154600181810184556000938452602080852090920180546001600160a01b039485166001600160a01b031991821617909155601e80548516865260059093526040808620805460ff199081168517909155935460068054808601825560008051602062003d988339815191529081018054861693891693909317909255601f80548816895283892080548816871790555481548087018355830180548616918916919091179055601c805488168952928820805490961685179095559054845493840185559390955293018054909316911617905562000712620006fa3390565b601d54600c546001600160a01b039091169062000755565b600c5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505062000bd5565b6001600160a01b038316620007bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620008205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620007b4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008d8578160001904821115620008bc57620008bc62000881565b80851615620008ca57918102915b93841c93908002906200089c565b509250929050565b600082620008f15750600162000990565b81620009005750600062000990565b8160018114620009195760028114620009245762000944565b600191505062000990565b60ff84111562000938576200093862000881565b50506001821b62000990565b5060208310610133831016604e8410600b841016171562000969575081810a62000990565b62000975838362000897565b80600019048211156200098c576200098c62000881565b0290505b92915050565b6000620009a48383620008e0565b9392505050565b808202811582820484141762000990576200099062000881565b634e487b7160e01b600052601260045260246000fd5b600082620009ed57620009ed620009c5565b500690565b8181038181111562000990576200099062000881565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a3357607f821691505b60208210810362000a5457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000aa857600081815260208120601f850160051c8101602086101562000a835750805b601f850160051c820191505b8181101562000aa45782815560010162000a8f565b5050505b505050565b81516001600160401b0381111562000ac95762000ac962000a08565b62000ae18162000ada845462000a1e565b8462000a5a565b602080601f83116001811462000b19576000841562000b005750858301515b600019600386901b1c1916600185901b17855562000aa4565b600085815260208120601f198616915b8281101562000b4a5788860151825594840194600190910190840162000b29565b508582101562000b695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008262000b8b5762000b8b620009c5565b500490565b60006020828403121562000ba357600080fd5b5051919050565b60006020828403121562000bbd57600080fd5b81516001600160a01b0381168114620009a457600080fd5b6080516131a762000bf1600039600061224901526131a76000f3fe6080604052600436106102cd5760003560e01c806350a8e016116101755780638da5cb5b116100dc578063d7124d9f11610095578063e79d41601161006f578063e79d4160146108ca578063ea2f0b37146108e0578063f2fde38b14610900578063f6540ec71461092057600080fd5b8063d7124d9f14610844578063dd62ed3e14610864578063de1c24d0146108aa57600080fd5b80638da5cb5b146107915780638ee88c53146107af57806395d89b41146107cf578063a457c2d7146107e4578063a9059cbb14610804578063c49b9a801461082457600080fd5b80636bc87c3a1161012e5780636bc87c3a146106ed57806370a082311461070357806370d5ae0514610723578063715018a61461074357806388f8202014610758578063893d20e81461079157600080fd5b806350a8e0161461061f57806352390c021461063e5780635342acb41461065e5780635d098b381461069757806364038409146106b7578063690d8320146106cd57600080fd5b80632d838119116102345780633bd5d173116101ed578063452ed4f1116101c7578063452ed4f11461059e5780634549b039146105be578063457c194c146105de5780634a74bb02146105fe57600080fd5b80633bd5d1731461053e5780633f3cf56c1461055e578063437823ec1461057e57600080fd5b80632d8381191461047c578063313ce5671461049c57806333251a0b146104be5780633685d419146104de57806339509351146104fe5780633b3e672f1461051e57600080fd5b806313114a9d1161028657806313114a9d146103dc57806315639c1b146103fb57806318160ddd1461041157806322976e0d1461042657806323b872dd1461043c578063260039571461045c57600080fd5b8063061c82d0146102d957806306fdde03146102fb5780630758d92414610326578063095ea7b31461035e5780630a32eb1a1461038e5780630f3a325f146103a357600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612cc7565b610936565b005b34801561030757600080fd5b5061031061097d565b60405161031d9190612ce0565b60405180910390f35b34801561033257600080fd5b50601b54610346906001600160a01b031681565b6040516001600160a01b03909116815260200161031d565b34801561036a57600080fd5b5061037e610379366004612d46565b610a0f565b604051901515815260200161031d565b34801561039a57600080fd5b506102f9610a26565b3480156103af57600080fd5b5061037e6103be366004612d72565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156103e857600080fd5b50600e545b60405190815260200161031d565b34801561040757600080fd5b506103ed60115481565b34801561041d57600080fd5b50600c546103ed565b34801561043257600080fd5b506103ed60175481565b34801561044857600080fd5b5061037e610457366004612d8f565b610a62565b34801561046857600080fd5b506102f9610477366004612dd0565b610acb565b34801561048857600080fd5b506103ed610497366004612cc7565b610b40565b3480156104a857600080fd5b50600a5460405160ff909116815260200161031d565b3480156104ca57600080fd5b506102f96104d9366004612d72565b610bc4565b3480156104ea57600080fd5b506102f96104f9366004612d72565b610c81565b34801561050a57600080fd5b5061037e610519366004612d46565b610e37565b34801561052a57600080fd5b5061037e610539366004612e3e565b610e6d565b34801561054a57600080fd5b506102f9610559366004612cc7565b610f44565b34801561056a57600080fd5b506102f9610579366004612dd0565b61102e565b34801561058a57600080fd5b506102f9610599366004612d72565b61109d565b3480156105aa57600080fd5b50601c54610346906001600160a01b031681565b3480156105ca57600080fd5b506103ed6105d9366004612ebf565b6110eb565b3480156105ea57600080fd5b506102f96105f9366004612cc7565b611178565b34801561060a57600080fd5b50601f5461037e90600160a81b900460ff1681565b34801561062b57600080fd5b50602b5461037e90610100900460ff1681565b34801561064a57600080fd5b506102f9610659366004612d72565b6111b6565b34801561066a57600080fd5b5061037e610679366004612d72565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a357600080fd5b506102f96106b2366004612d72565b611309565b3480156106c357600080fd5b506103ed60245481565b3480156106d957600080fd5b506102f96106e8366004612d72565b6113a8565b3480156106f957600080fd5b506103ed60145481565b34801561070f57600080fd5b506103ed61071e366004612d72565b61146e565b34801561072f57600080fd5b50601e54610346906001600160a01b031681565b34801561074f57600080fd5b506102f96114cd565b34801561076457600080fd5b5061037e610773366004612d72565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561079d57600080fd5b506000546001600160a01b0316610346565b3480156107bb57600080fd5b506102f96107ca366004612cc7565b611541565b3480156107db57600080fd5b5061031061157f565b3480156107f057600080fd5b5061037e6107ff366004612d46565b61158e565b34801561081057600080fd5b5061037e61081f366004612d46565b6115dd565b34801561083057600080fd5b506102f961083f366004612eeb565b6115ea565b34801561085057600080fd5b506102f961085f366004612eeb565b61166c565b34801561087057600080fd5b506103ed61087f366004612f06565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108b657600080fd5b506102f96108c5366004612d72565b6116f0565b3480156108d657600080fd5b506103ed602e5481565b3480156108ec57600080fd5b506102f96108fb366004612d72565b61173c565b34801561090c57600080fd5b506102f961091b366004612d72565b611787565b34801561092c57600080fd5b506103ed60295481565b6000546001600160a01b031633146109695760405162461bcd60e51b815260040161096090612f3f565b60405180910390fd5b60135481111561097857600080fd5b601155565b6060600f805461098c90612f74565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890612f74565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b5050505050905090565b6000610a1c338484611871565b5060015b92915050565b6000546001600160a01b03163314610a505760405162461bcd60e51b815260040161096090612f3f565b61012c60175560646014556000601155565b6000610a6f848484611995565b610ac18433610abc85604051806060016040528060288152602001613125602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611cc7565b611871565b5060019392505050565b6000546001600160a01b03163314610af55760405162461bcd60e51b815260040161096090612f3f565b6103e8811115610b0457600080fd5b610b2381610b1d84600c54611d0190919063ffffffff16565b90611d83565b602755600954610b39908290610b1d9085611d01565b6029555050565b6000600d54821115610ba75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610960565b6000610bb1611dc5565b9050610bbd8382611d83565b9392505050565b6000546001600160a01b03163314610bee5760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03811660009081526007602052604090205460ff16610c605760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610960565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610cab5760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03811660009081526005602052604090205460ff16610d135760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610960565b60005b600654811015610e3357816001600160a01b031660068281548110610d3d57610d3d612fae565b6000918252602090912001546001600160a01b031603610e215760068054610d6790600190612fda565b81548110610d7757610d77612fae565b600091825260209091200154600680546001600160a01b039092169183908110610da357610da3612fae565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dfb57610dfb612fed565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e2b81613003565b915050610d16565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a1c918590610abc9086611de8565b6000838214610ec85760405162461bcd60e51b815260206004820152602160248201527f4d757374206265206d61746368696e6720617267756d656e74206c656e6774686044820152607360f81b6064820152608401610960565b8360005b81811015610f3757610f1c878783818110610ee957610ee9612fae565b9050602002016020810190610efe9190612d72565b868684818110610f1057610f10612fae565b905060200201356115dd565b610f2557600080fd5b80610f2f81613003565b915050610ecc565b5060019695505050505050565b3360008181526005602052604090205460ff1615610fb95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610960565b6000610fc483611e47565b505050506001600160a01b038416600090815260016020526040902054919250610ff091905082611e96565b6001600160a01b038316600090815260016020526040902055600d546110169082611e96565b600d55600e546110269084611de8565b600e55505050565b6000546001600160a01b031633146110585760405162461bcd60e51b815260040161096090612f3f565b61271081111561106757600080fd5b61108081610b1d84600c54611d0190919063ffffffff16565b602255600954611096908290610b1d9085611d01565b6024555050565b6000546001600160a01b031633146110c75760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c5483111561113f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610960565b8161115e57600061114f84611e47565b50939550610a20945050505050565b600061116984611e47565b50929550610a20945050505050565b6000546001600160a01b031633146111a25760405162461bcd60e51b815260040161096090612f3f565b6019548111156111b157600080fd5b601755565b6000546001600160a01b031633146111e05760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03811660009081526005602052604090205460ff16156112495760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610960565b6001600160a01b038116600090815260016020526040902054156112a3576001600160a01b03811660009081526001602052604090205461128990610b40565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113335760405162461bcd60e51b815260040161096090612f3f565b601f546001600160a01b038083169116036113865760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610960565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113d25760405162461bcd60e51b815260040161096090612f3f565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461141f576040519150601f19603f3d011682016040523d82523d6000602084013e611424565b606091505b5050905080610e335760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610960565b6001600160a01b03811660009081526005602052604081205460ff16156114ab57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a2090610b40565b6000546001600160a01b031633146114f75760405162461bcd60e51b815260040161096090612f3f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461156b5760405162461bcd60e51b815260040161096090612f3f565b60165481111561157a57600080fd5b601455565b60606010805461098c90612f74565b6000610a1c3384610abc8560405180606001604052806025815260200161314d602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611cc7565b6000610a1c338484611995565b6000546001600160a01b031633146116145760405162461bcd60e51b815260040161096090612f3f565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061166190831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116965760405162461bcd60e51b815260040161096090612f3f565b602b5460ff161515811515036116dd5760405162461bcd60e51b815260206004820152600c60248201526b20b63932b0b23c9039b2ba1760a11b6044820152606401610960565b602b805460ff1916911515919091179055565b6000546001600160a01b0316331461171a5760405162461bcd60e51b815260040161096090612f3f565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117665760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146117b15760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b0381166118165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610960565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118d35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610960565b6001600160a01b0382166119345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610960565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610960565b6001600160a01b038216611a5b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610960565b60008111611abd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610960565b611ac78383611ed8565b15611b2f57602254811115611b2f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610960565b611b398383611ed8565b8015611b535750601d546001600160a01b03838116911614155b8015611b6d5750601c546001600160a01b03838116911614155b15611bf0576000611b7d8361146e565b602754909150611b8d838361301c565b1115611bee5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610960565b505b6000611bfb3061146e565b90506022548110611c0b57506022545b602a54601f549082101590600160a01b900460ff16158015611c3a5750601c546001600160a01b038581169116145b8015611c4f5750601f54600160a81b900460ff165b15611c68578015611c6857602a549150611c6882611f95565b6001600160a01b03851660009081526004602052604090205460019060ff1680611caa57506001600160a01b03851660009081526004602052604090205460ff165b15611cb3575060005b611cbf868686846120f2565b505050505050565b60008184841115611ceb5760405162461bcd60e51b81526004016109609190612ce0565b506000611cf88486612fda565b95945050505050565b600082600003611d1357506000610a20565b6000611d1f838561302f565b905082611d2c8583613046565b14610bbd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610960565b6000610bbd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612329565b6000806000611dd2612357565b9092509050611de18282611d83565b9250505090565b600080611df5838561301c565b905083811015610bbd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610960565b6000806000806000806000806000611e5e8a6124d9565b9250925092506000806000611e7c8d8686611e77611dc5565b61251b565b919f909e50909c50959a5093985091965092945050505050565b6000610bbd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cc7565b600080546001600160a01b03848116911614801590611f0557506000546001600160a01b03838116911614155b8015611f2a57506001600160a01b03821660009081526008602052604090205460ff16155b8015611f4f57506001600160a01b03831660009081526008602052604090205460ff16155b8015611f695750601e546001600160a01b03838116911614155b8015611f7d57506001600160a01b03821615155b8015610bbd575050506001600160a01b031630141590565b601f805460ff60a01b1916600160a01b179055601454601754611fb8919061301c565b156120e2576000611fe7611fd9601454601754611de890919063ffffffff16565b601754610b1d908590611d01565b90506000611ff58383611e96565b90506000612004826002611d83565b905060006120128383611e96565b90504760006120218487611de8565b905061202c8161256b565b60006120384784611e96565b9050600061204a83610b1d8489611d01565b905061205685826126bd565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1601f546001600160a01b03166108fc6120b08484611e96565b6040518115909202916000818181858888f193505050501580156120d8573d6000803e3d6000fd5b5050505050505050505b50601f805460ff60a01b19169055565b602b5460ff16156122ef576001600160a01b03841660009081526007602052604090205460ff168061213c57506001600160a01b03831660009081526007602052604090205460ff165b1561217c5760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610960565b602b54610100900460ff16612212576121958484612771565b602b54610100900460ff161580156121b257506121b28484611ed8565b1561220d5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610960565b6122ef565b6000602c541180156122315750601c546001600160a01b038581169116145b801561224257506122428484611ed8565b156122ef577f0000000000000000000000000000000000000000000000000000000000000000602c54436122769190612fda565b10156122ef576001600160a01b0383166000908152600760205260408120805460ff19166001179055602e8054916122ad83613003565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b806122fc576122fc61288f565b6123078484846128c8565b8061232357612323601254601155601554601455601854601755565b50505050565b6000818361234a5760405162461bcd60e51b81526004016109609190612ce0565b506000611cf88486613046565b600d54600c546000918291825b6006548110156124a95782600160006006848154811061238657612386612fae565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123f157508160026000600684815481106123ca576123ca612fae565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561240757600d54600c54945094505050509091565b61244d600160006006848154811061242157612421612fae565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e96565b9250612495600260006006848154811061246957612469612fae565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e96565b9150806124a181613003565b915050612364565b50600c54600d546124b991611d83565b8210156124d057600d54600c549350935050509091565b90939092509050565b6000806000806124e885612b93565b905060006124f586612bb0565b9050600061250d826125078986611e96565b90611e96565b979296509094509092505050565b600080808061252a8886611d01565b905060006125388887611d01565b905060006125468888611d01565b90506000612558826125078686611e96565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125a0576125a0612fae565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261d9190613068565b8160018151811061263057612630612fae565b6001600160a01b039283166020918202929092010152601b546126569130911684611871565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061268f908590600090869030904290600401613085565b600060405180830381600087803b1580156126a957600080fd5b505af1158015611cbf573d6000803e3d6000fd5b601b546126d59030906001600160a01b031684611871565b601b54601f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612745573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061276a91906130f6565b5050505050565b602b54610100900460ff16156127d55760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610960565b6127df8282611ed8565b1580156127f95750601c546001600160a01b038281169116145b15610e33576001600160a01b03821660009081526008602052604090819020805460ff19166001908117909155602b805461ff00191661010017905543602c5542602d55601f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161288391901515815260200190565b60405180910390a15050565b60115415801561289f5750601454155b156128a657565b6011805460125560148054601555601780546018556000928390559082905555565b6000806000806000806128da87611e47565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061290c9087611e96565b6001600160a01b03808b1660009081526001602052604080822093909355908a168152205461293b9086611de8565b6001600160a01b03808a16600090815260016020908152604080832094909455918c1681526005909152205460ff16801561298f57506001600160a01b03881660009081526005602052604090205460ff16155b156129d5576001600160a01b0389166000908152600260205260409020546129b79088611e96565b6001600160a01b038a16600090815260026020526040902055612b0d565b6001600160a01b03891660009081526005602052604090205460ff16158015612a1657506001600160a01b03881660009081526005602052604090205460ff165b15612a5c576001600160a01b038816600090815260026020526040902054612a3e9084611de8565b6001600160a01b038916600090815260026020526040902055612b0d565b6001600160a01b03891660009081526005602052604090205460ff168015612a9c57506001600160a01b03881660009081526005602052604090205460ff165b15612b0d576001600160a01b038916600090815260026020526040902054612ac49088611e96565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054612af39084611de8565b6001600160a01b0389166000908152600260205260409020555b8015612b1d57612b1d8982612bd9565b6000841180612b2c5750600082115b15612b3b57612b3b8483612ca3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b8091815260200190565b60405180910390a3505050505050505050565b6000610a20601a54610b1d60115485611d0190919063ffffffff16565b6000610a20601a54610b1d612bd2601754601454611de890919063ffffffff16565b8590611d01565b6000612be3611dc5565b90506000612bf18383611d01565b30600090815260016020526040902054909150612c0e9082611de8565b3060009081526001602090815260408083209390935560059052205460ff1615612c5d5730600090815260026020526040902054612c4c9084611de8565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b600d54612cb09083611e96565b600d55600e54612cc09082611de8565b600e555050565b600060208284031215612cd957600080fd5b5035919050565b600060208083528351808285015260005b81811015612d0d57858101830151858201604001528201612cf1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612d4357600080fd5b50565b60008060408385031215612d5957600080fd5b8235612d6481612d2e565b946020939093013593505050565b600060208284031215612d8457600080fd5b8135610bbd81612d2e565b600080600060608486031215612da457600080fd5b8335612daf81612d2e565b92506020840135612dbf81612d2e565b929592945050506040919091013590565b60008060408385031215612de357600080fd5b50508035926020909101359150565b60008083601f840112612e0457600080fd5b50813567ffffffffffffffff811115612e1c57600080fd5b6020830191508360208260051b8501011115612e3757600080fd5b9250929050565b60008060008060408587031215612e5457600080fd5b843567ffffffffffffffff80821115612e6c57600080fd5b612e7888838901612df2565b90965094506020870135915080821115612e9157600080fd5b50612e9e87828801612df2565b95989497509550505050565b80358015158114612eba57600080fd5b919050565b60008060408385031215612ed257600080fd5b82359150612ee260208401612eaa565b90509250929050565b600060208284031215612efd57600080fd5b610bbd82612eaa565b60008060408385031215612f1957600080fd5b8235612f2481612d2e565b91506020830135612f3481612d2e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f8857607f821691505b602082108103612fa857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a2057610a20612fc4565b634e487b7160e01b600052603160045260246000fd5b60006001820161301557613015612fc4565b5060010190565b80820180821115610a2057610a20612fc4565b8082028115828204841417610a2057610a20612fc4565b60008261306357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561307a57600080fd5b8151610bbd81612d2e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130d55784516001600160a01b0316835293830193918301916001016130b0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561310b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077ef100cfef7e9d4aeabbbee83e764f671b75cb48926201888e93c362ad8af5264736f6c63430008110033f652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0000000000000000000000000000000000000000000000000000000000000003

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806350a8e016116101755780638da5cb5b116100dc578063d7124d9f11610095578063e79d41601161006f578063e79d4160146108ca578063ea2f0b37146108e0578063f2fde38b14610900578063f6540ec71461092057600080fd5b8063d7124d9f14610844578063dd62ed3e14610864578063de1c24d0146108aa57600080fd5b80638da5cb5b146107915780638ee88c53146107af57806395d89b41146107cf578063a457c2d7146107e4578063a9059cbb14610804578063c49b9a801461082457600080fd5b80636bc87c3a1161012e5780636bc87c3a146106ed57806370a082311461070357806370d5ae0514610723578063715018a61461074357806388f8202014610758578063893d20e81461079157600080fd5b806350a8e0161461061f57806352390c021461063e5780635342acb41461065e5780635d098b381461069757806364038409146106b7578063690d8320146106cd57600080fd5b80632d838119116102345780633bd5d173116101ed578063452ed4f1116101c7578063452ed4f11461059e5780634549b039146105be578063457c194c146105de5780634a74bb02146105fe57600080fd5b80633bd5d1731461053e5780633f3cf56c1461055e578063437823ec1461057e57600080fd5b80632d8381191461047c578063313ce5671461049c57806333251a0b146104be5780633685d419146104de57806339509351146104fe5780633b3e672f1461051e57600080fd5b806313114a9d1161028657806313114a9d146103dc57806315639c1b146103fb57806318160ddd1461041157806322976e0d1461042657806323b872dd1461043c578063260039571461045c57600080fd5b8063061c82d0146102d957806306fdde03146102fb5780630758d92414610326578063095ea7b31461035e5780630a32eb1a1461038e5780630f3a325f146103a357600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612cc7565b610936565b005b34801561030757600080fd5b5061031061097d565b60405161031d9190612ce0565b60405180910390f35b34801561033257600080fd5b50601b54610346906001600160a01b031681565b6040516001600160a01b03909116815260200161031d565b34801561036a57600080fd5b5061037e610379366004612d46565b610a0f565b604051901515815260200161031d565b34801561039a57600080fd5b506102f9610a26565b3480156103af57600080fd5b5061037e6103be366004612d72565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156103e857600080fd5b50600e545b60405190815260200161031d565b34801561040757600080fd5b506103ed60115481565b34801561041d57600080fd5b50600c546103ed565b34801561043257600080fd5b506103ed60175481565b34801561044857600080fd5b5061037e610457366004612d8f565b610a62565b34801561046857600080fd5b506102f9610477366004612dd0565b610acb565b34801561048857600080fd5b506103ed610497366004612cc7565b610b40565b3480156104a857600080fd5b50600a5460405160ff909116815260200161031d565b3480156104ca57600080fd5b506102f96104d9366004612d72565b610bc4565b3480156104ea57600080fd5b506102f96104f9366004612d72565b610c81565b34801561050a57600080fd5b5061037e610519366004612d46565b610e37565b34801561052a57600080fd5b5061037e610539366004612e3e565b610e6d565b34801561054a57600080fd5b506102f9610559366004612cc7565b610f44565b34801561056a57600080fd5b506102f9610579366004612dd0565b61102e565b34801561058a57600080fd5b506102f9610599366004612d72565b61109d565b3480156105aa57600080fd5b50601c54610346906001600160a01b031681565b3480156105ca57600080fd5b506103ed6105d9366004612ebf565b6110eb565b3480156105ea57600080fd5b506102f96105f9366004612cc7565b611178565b34801561060a57600080fd5b50601f5461037e90600160a81b900460ff1681565b34801561062b57600080fd5b50602b5461037e90610100900460ff1681565b34801561064a57600080fd5b506102f9610659366004612d72565b6111b6565b34801561066a57600080fd5b5061037e610679366004612d72565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a357600080fd5b506102f96106b2366004612d72565b611309565b3480156106c357600080fd5b506103ed60245481565b3480156106d957600080fd5b506102f96106e8366004612d72565b6113a8565b3480156106f957600080fd5b506103ed60145481565b34801561070f57600080fd5b506103ed61071e366004612d72565b61146e565b34801561072f57600080fd5b50601e54610346906001600160a01b031681565b34801561074f57600080fd5b506102f96114cd565b34801561076457600080fd5b5061037e610773366004612d72565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561079d57600080fd5b506000546001600160a01b0316610346565b3480156107bb57600080fd5b506102f96107ca366004612cc7565b611541565b3480156107db57600080fd5b5061031061157f565b3480156107f057600080fd5b5061037e6107ff366004612d46565b61158e565b34801561081057600080fd5b5061037e61081f366004612d46565b6115dd565b34801561083057600080fd5b506102f961083f366004612eeb565b6115ea565b34801561085057600080fd5b506102f961085f366004612eeb565b61166c565b34801561087057600080fd5b506103ed61087f366004612f06565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108b657600080fd5b506102f96108c5366004612d72565b6116f0565b3480156108d657600080fd5b506103ed602e5481565b3480156108ec57600080fd5b506102f96108fb366004612d72565b61173c565b34801561090c57600080fd5b506102f961091b366004612d72565b611787565b34801561092c57600080fd5b506103ed60295481565b6000546001600160a01b031633146109695760405162461bcd60e51b815260040161096090612f3f565b60405180910390fd5b60135481111561097857600080fd5b601155565b6060600f805461098c90612f74565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890612f74565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b5050505050905090565b6000610a1c338484611871565b5060015b92915050565b6000546001600160a01b03163314610a505760405162461bcd60e51b815260040161096090612f3f565b61012c60175560646014556000601155565b6000610a6f848484611995565b610ac18433610abc85604051806060016040528060288152602001613125602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611cc7565b611871565b5060019392505050565b6000546001600160a01b03163314610af55760405162461bcd60e51b815260040161096090612f3f565b6103e8811115610b0457600080fd5b610b2381610b1d84600c54611d0190919063ffffffff16565b90611d83565b602755600954610b39908290610b1d9085611d01565b6029555050565b6000600d54821115610ba75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610960565b6000610bb1611dc5565b9050610bbd8382611d83565b9392505050565b6000546001600160a01b03163314610bee5760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03811660009081526007602052604090205460ff16610c605760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610960565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610cab5760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03811660009081526005602052604090205460ff16610d135760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610960565b60005b600654811015610e3357816001600160a01b031660068281548110610d3d57610d3d612fae565b6000918252602090912001546001600160a01b031603610e215760068054610d6790600190612fda565b81548110610d7757610d77612fae565b600091825260209091200154600680546001600160a01b039092169183908110610da357610da3612fae565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dfb57610dfb612fed565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e2b81613003565b915050610d16565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a1c918590610abc9086611de8565b6000838214610ec85760405162461bcd60e51b815260206004820152602160248201527f4d757374206265206d61746368696e6720617267756d656e74206c656e6774686044820152607360f81b6064820152608401610960565b8360005b81811015610f3757610f1c878783818110610ee957610ee9612fae565b9050602002016020810190610efe9190612d72565b868684818110610f1057610f10612fae565b905060200201356115dd565b610f2557600080fd5b80610f2f81613003565b915050610ecc565b5060019695505050505050565b3360008181526005602052604090205460ff1615610fb95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610960565b6000610fc483611e47565b505050506001600160a01b038416600090815260016020526040902054919250610ff091905082611e96565b6001600160a01b038316600090815260016020526040902055600d546110169082611e96565b600d55600e546110269084611de8565b600e55505050565b6000546001600160a01b031633146110585760405162461bcd60e51b815260040161096090612f3f565b61271081111561106757600080fd5b61108081610b1d84600c54611d0190919063ffffffff16565b602255600954611096908290610b1d9085611d01565b6024555050565b6000546001600160a01b031633146110c75760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c5483111561113f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610960565b8161115e57600061114f84611e47565b50939550610a20945050505050565b600061116984611e47565b50929550610a20945050505050565b6000546001600160a01b031633146111a25760405162461bcd60e51b815260040161096090612f3f565b6019548111156111b157600080fd5b601755565b6000546001600160a01b031633146111e05760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03811660009081526005602052604090205460ff16156112495760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610960565b6001600160a01b038116600090815260016020526040902054156112a3576001600160a01b03811660009081526001602052604090205461128990610b40565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113335760405162461bcd60e51b815260040161096090612f3f565b601f546001600160a01b038083169116036113865760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610960565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113d25760405162461bcd60e51b815260040161096090612f3f565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461141f576040519150601f19603f3d011682016040523d82523d6000602084013e611424565b606091505b5050905080610e335760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610960565b6001600160a01b03811660009081526005602052604081205460ff16156114ab57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a2090610b40565b6000546001600160a01b031633146114f75760405162461bcd60e51b815260040161096090612f3f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461156b5760405162461bcd60e51b815260040161096090612f3f565b60165481111561157a57600080fd5b601455565b60606010805461098c90612f74565b6000610a1c3384610abc8560405180606001604052806025815260200161314d602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611cc7565b6000610a1c338484611995565b6000546001600160a01b031633146116145760405162461bcd60e51b815260040161096090612f3f565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061166190831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116965760405162461bcd60e51b815260040161096090612f3f565b602b5460ff161515811515036116dd5760405162461bcd60e51b815260206004820152600c60248201526b20b63932b0b23c9039b2ba1760a11b6044820152606401610960565b602b805460ff1916911515919091179055565b6000546001600160a01b0316331461171a5760405162461bcd60e51b815260040161096090612f3f565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117665760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146117b15760405162461bcd60e51b815260040161096090612f3f565b6001600160a01b0381166118165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610960565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118d35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610960565b6001600160a01b0382166119345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610960565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610960565b6001600160a01b038216611a5b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610960565b60008111611abd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610960565b611ac78383611ed8565b15611b2f57602254811115611b2f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610960565b611b398383611ed8565b8015611b535750601d546001600160a01b03838116911614155b8015611b6d5750601c546001600160a01b03838116911614155b15611bf0576000611b7d8361146e565b602754909150611b8d838361301c565b1115611bee5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610960565b505b6000611bfb3061146e565b90506022548110611c0b57506022545b602a54601f549082101590600160a01b900460ff16158015611c3a5750601c546001600160a01b038581169116145b8015611c4f5750601f54600160a81b900460ff165b15611c68578015611c6857602a549150611c6882611f95565b6001600160a01b03851660009081526004602052604090205460019060ff1680611caa57506001600160a01b03851660009081526004602052604090205460ff165b15611cb3575060005b611cbf868686846120f2565b505050505050565b60008184841115611ceb5760405162461bcd60e51b81526004016109609190612ce0565b506000611cf88486612fda565b95945050505050565b600082600003611d1357506000610a20565b6000611d1f838561302f565b905082611d2c8583613046565b14610bbd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610960565b6000610bbd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612329565b6000806000611dd2612357565b9092509050611de18282611d83565b9250505090565b600080611df5838561301c565b905083811015610bbd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610960565b6000806000806000806000806000611e5e8a6124d9565b9250925092506000806000611e7c8d8686611e77611dc5565b61251b565b919f909e50909c50959a5093985091965092945050505050565b6000610bbd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cc7565b600080546001600160a01b03848116911614801590611f0557506000546001600160a01b03838116911614155b8015611f2a57506001600160a01b03821660009081526008602052604090205460ff16155b8015611f4f57506001600160a01b03831660009081526008602052604090205460ff16155b8015611f695750601e546001600160a01b03838116911614155b8015611f7d57506001600160a01b03821615155b8015610bbd575050506001600160a01b031630141590565b601f805460ff60a01b1916600160a01b179055601454601754611fb8919061301c565b156120e2576000611fe7611fd9601454601754611de890919063ffffffff16565b601754610b1d908590611d01565b90506000611ff58383611e96565b90506000612004826002611d83565b905060006120128383611e96565b90504760006120218487611de8565b905061202c8161256b565b60006120384784611e96565b9050600061204a83610b1d8489611d01565b905061205685826126bd565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1601f546001600160a01b03166108fc6120b08484611e96565b6040518115909202916000818181858888f193505050501580156120d8573d6000803e3d6000fd5b5050505050505050505b50601f805460ff60a01b19169055565b602b5460ff16156122ef576001600160a01b03841660009081526007602052604090205460ff168061213c57506001600160a01b03831660009081526007602052604090205460ff165b1561217c5760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610960565b602b54610100900460ff16612212576121958484612771565b602b54610100900460ff161580156121b257506121b28484611ed8565b1561220d5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610960565b6122ef565b6000602c541180156122315750601c546001600160a01b038581169116145b801561224257506122428484611ed8565b156122ef577f0000000000000000000000000000000000000000000000000000000000000003602c54436122769190612fda565b10156122ef576001600160a01b0383166000908152600760205260408120805460ff19166001179055602e8054916122ad83613003565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b806122fc576122fc61288f565b6123078484846128c8565b8061232357612323601254601155601554601455601854601755565b50505050565b6000818361234a5760405162461bcd60e51b81526004016109609190612ce0565b506000611cf88486613046565b600d54600c546000918291825b6006548110156124a95782600160006006848154811061238657612386612fae565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123f157508160026000600684815481106123ca576123ca612fae565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561240757600d54600c54945094505050509091565b61244d600160006006848154811061242157612421612fae565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e96565b9250612495600260006006848154811061246957612469612fae565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e96565b9150806124a181613003565b915050612364565b50600c54600d546124b991611d83565b8210156124d057600d54600c549350935050509091565b90939092509050565b6000806000806124e885612b93565b905060006124f586612bb0565b9050600061250d826125078986611e96565b90611e96565b979296509094509092505050565b600080808061252a8886611d01565b905060006125388887611d01565b905060006125468888611d01565b90506000612558826125078686611e96565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125a0576125a0612fae565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261d9190613068565b8160018151811061263057612630612fae565b6001600160a01b039283166020918202929092010152601b546126569130911684611871565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061268f908590600090869030904290600401613085565b600060405180830381600087803b1580156126a957600080fd5b505af1158015611cbf573d6000803e3d6000fd5b601b546126d59030906001600160a01b031684611871565b601b54601f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612745573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061276a91906130f6565b5050505050565b602b54610100900460ff16156127d55760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610960565b6127df8282611ed8565b1580156127f95750601c546001600160a01b038281169116145b15610e33576001600160a01b03821660009081526008602052604090819020805460ff19166001908117909155602b805461ff00191661010017905543602c5542602d55601f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161288391901515815260200190565b60405180910390a15050565b60115415801561289f5750601454155b156128a657565b6011805460125560148054601555601780546018556000928390559082905555565b6000806000806000806128da87611e47565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061290c9087611e96565b6001600160a01b03808b1660009081526001602052604080822093909355908a168152205461293b9086611de8565b6001600160a01b03808a16600090815260016020908152604080832094909455918c1681526005909152205460ff16801561298f57506001600160a01b03881660009081526005602052604090205460ff16155b156129d5576001600160a01b0389166000908152600260205260409020546129b79088611e96565b6001600160a01b038a16600090815260026020526040902055612b0d565b6001600160a01b03891660009081526005602052604090205460ff16158015612a1657506001600160a01b03881660009081526005602052604090205460ff165b15612a5c576001600160a01b038816600090815260026020526040902054612a3e9084611de8565b6001600160a01b038916600090815260026020526040902055612b0d565b6001600160a01b03891660009081526005602052604090205460ff168015612a9c57506001600160a01b03881660009081526005602052604090205460ff165b15612b0d576001600160a01b038916600090815260026020526040902054612ac49088611e96565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054612af39084611de8565b6001600160a01b0389166000908152600260205260409020555b8015612b1d57612b1d8982612bd9565b6000841180612b2c5750600082115b15612b3b57612b3b8483612ca3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b8091815260200190565b60405180910390a3505050505050505050565b6000610a20601a54610b1d60115485611d0190919063ffffffff16565b6000610a20601a54610b1d612bd2601754601454611de890919063ffffffff16565b8590611d01565b6000612be3611dc5565b90506000612bf18383611d01565b30600090815260016020526040902054909150612c0e9082611de8565b3060009081526001602090815260408083209390935560059052205460ff1615612c5d5730600090815260026020526040902054612c4c9084611de8565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b600d54612cb09083611e96565b600d55600e54612cc09082611de8565b600e555050565b600060208284031215612cd957600080fd5b5035919050565b600060208083528351808285015260005b81811015612d0d57858101830151858201604001528201612cf1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612d4357600080fd5b50565b60008060408385031215612d5957600080fd5b8235612d6481612d2e565b946020939093013593505050565b600060208284031215612d8457600080fd5b8135610bbd81612d2e565b600080600060608486031215612da457600080fd5b8335612daf81612d2e565b92506020840135612dbf81612d2e565b929592945050506040919091013590565b60008060408385031215612de357600080fd5b50508035926020909101359150565b60008083601f840112612e0457600080fd5b50813567ffffffffffffffff811115612e1c57600080fd5b6020830191508360208260051b8501011115612e3757600080fd5b9250929050565b60008060008060408587031215612e5457600080fd5b843567ffffffffffffffff80821115612e6c57600080fd5b612e7888838901612df2565b90965094506020870135915080821115612e9157600080fd5b50612e9e87828801612df2565b95989497509550505050565b80358015158114612eba57600080fd5b919050565b60008060408385031215612ed257600080fd5b82359150612ee260208401612eaa565b90509250929050565b600060208284031215612efd57600080fd5b610bbd82612eaa565b60008060408385031215612f1957600080fd5b8235612f2481612d2e565b91506020830135612f3481612d2e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f8857607f821691505b602082108103612fa857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a2057610a20612fc4565b634e487b7160e01b600052603160045260246000fd5b60006001820161301557613015612fc4565b5060010190565b80820180821115610a2057610a20612fc4565b8082028115828204841417610a2057610a20612fc4565b60008261306357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561307a57600080fd5b8151610bbd81612d2e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130d55784516001600160a01b0316835293830193918301916001016130b0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561310b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077ef100cfef7e9d4aeabbbee83e764f671b75cb48926201888e93c362ad8af5264736f6c63430008110033

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

0000000000000000000000000000000000000000000000000000000000000003

-----Decoded View---------------
Arg [0] : _snipeBlockAmt (uint256): 3

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


Deployed Bytecode Sourcemap

15235:23826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23574:194;;;;;;;;;;-1:-1:-1;23574:194:0;;;;;:::i;:::-;;:::i;:::-;;20619:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16917:26;;;;;;;;;;-1:-1:-1;16917:26:0;;;;-1:-1:-1;;;;;16917:26:0;;;;;;-1:-1:-1;;;;;933:32:1;;;915:51;;903:2;888:18;16917:26:0;752:220:1;21313:161:0;;;;;;;;;;-1:-1:-1;21313:161:0;;;;;:::i;:::-;;:::i;:::-;;;1598:14:1;;1591:22;1573:41;;1561:2;1546:18;21313:161:0;1433:187:1;24216:151:0;;;;;;;;;;;;;:::i;23081:106::-;;;;;;;;;;-1:-1:-1;23081:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;23161:18:0;23137:4;23161:18;;;:9;:18;;;;;;;;;23081:106;25588:87;;;;;;;;;;-1:-1:-1;25657:10:0;;25588:87;;;2023:25:1;;;2011:2;1996:18;25588:87:0;1877:177:1;16221:30:0;;;;;;;;;;;;;;;;20354:83;;;;;;;;;;-1:-1:-1;20427:7:0;;20354:83;;16615:35;;;;;;;;;;;;;;;;21482:313;;;;;;;;;;-1:-1:-1;21482:313:0;;;;;:::i;:::-;;:::i;24664:284::-;;;;;;;;;;-1:-1:-1;24664:284:0;;;;;:::i;:::-;;:::i;26850:253::-;;;;;;;;;;-1:-1:-1;26850:253:0;;;;;:::i;:::-;;:::i;20443:80::-;;;;;;;;;;-1:-1:-1;20511:9:0;;20443:80;;20511:9;;;;2915:36:1;;2903:2;2888:18;20443:80:0;2773:184:1;23195:180:0;;;;;;;;;;-1:-1:-1;23195:180:0;;;;;:::i;:::-;;:::i;27566:479::-;;;;;;;;;;-1:-1:-1;27566:479:0;;;;;:::i;:::-;;:::i;22227:218::-;;;;;;;;;;-1:-1:-1;22227:218:0;;;;;:::i;:::-;;:::i;21803:416::-;;;;;;;;;;-1:-1:-1;21803:416:0;;;;;:::i;:::-;;:::i;26021:377::-;;;;;;;;;;-1:-1:-1;26021:377:0;;;;;:::i;:::-;;:::i;24375:281::-;;;;;;;;;;-1:-1:-1;24375:281:0;;;;;:::i;:::-;;:::i;25345:111::-;;;;;;;;;;-1:-1:-1;25345:111:0;;;;;:::i;:::-;;:::i;16950:21::-;;;;;;;;;;-1:-1:-1;16950:21:0;;;;-1:-1:-1;;;;;16950:21:0;;;26406:436;;;;;;;;;;-1:-1:-1;26406:436:0;;;;;:::i;:::-;;:::i;23998:210::-;;;;;;;;;;-1:-1:-1;23998:210:0;;;;;:::i;:::-;;:::i;17298:41::-;;;;;;;;;;-1:-1:-1;17298:41:0;;;;-1:-1:-1;;;17298:41:0;;;;;;18343:36;;;;;;;;;;-1:-1:-1;18343:36:0;;;;;;;;;;;27111:447;;;;;;;;;;-1:-1:-1;27111:447:0;;;;;:::i;:::-;;:::i;22950:123::-;;;;;;;;;;-1:-1:-1;22950:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23038:27:0;23014:4;23038:27;;;:18;:27;;;;;;;;;22950:123;24956:202;;;;;;;;;;-1:-1:-1;24956:202:0;;;;;:::i;:::-;;:::i;17643:77::-;;;;;;;;;;;;;;;;38845:213;;;;;;;;;;-1:-1:-1;38845:213:0;;;;;:::i;:::-;;:::i;16415:34::-;;;;;;;;;;;;;;;;20932:198;;;;;;;;;;-1:-1:-1;20932:198:0;;;;;:::i;:::-;;:::i;17085:71::-;;;;;;;;;;-1:-1:-1;17085:71:0;;;;-1:-1:-1;;;;;17085:71:0;;;14812:148;;;;;;;;;;;;;:::i;22822:120::-;;;;;;;;;;-1:-1:-1;22822:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22914:20:0;22890:4;22914:20;;;:11;:20;;;;;;;;;22822:120;20705:80;;;;;;;;;;-1:-1:-1;20757:7:0;14663:6;-1:-1:-1;;;;;14663:6:0;20705:80;;23780:210;;;;;;;;;;-1:-1:-1;23780:210:0;;;;;:::i;:::-;;:::i;20529:84::-;;;;;;;;;;;;;:::i;22453:269::-;;;;;;;;;;-1:-1:-1;22453:269:0;;;;;:::i;:::-;;:::i;21138:167::-;;;;;;;;;;-1:-1:-1;21138:167:0;;;;;:::i;:::-;;:::i;25166:171::-;;;;;;;;;;-1:-1:-1;25166:171:0;;;;;:::i;:::-;;:::i;23383:179::-;;;;;;;;;;-1:-1:-1;23383:179:0;;;;;:::i;:::-;;:::i;20791:133::-;;;;;;;;;;-1:-1:-1;20791:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20893:19:0;;;20875:7;20893:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20791:133;22730:84;;;;;;;;;;-1:-1:-1;22730:84:0;;;;;:::i;:::-;;:::i;18510:32::-;;;;;;;;;;;;;;;;25468:112;;;;;;;;;;-1:-1:-1;25468:112:0;;;;;:::i;:::-;;:::i;14968:254::-;;;;;;;;;;-1:-1:-1;14968:254:0;;;;;:::i;:::-;;:::i;18072:87::-;;;;;;;;;;;;;;;;23574:194;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;;;;;;;;;23674:13:::1;;23660:10;:27;;23652:36;;;::::0;::::1;;23736:11;:24:::0;23574:194::o;20619:80::-;20667:13;20691:5;20684:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20619:80;:::o;21313:161::-;21388:4;21405:39;189:10;21428:7;21437:6;21405:8;:39::i;:::-;-1:-1:-1;21462:4:0;21313:161;;;;;:::o;24216:151::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;24300:3:::1;24284:13;:19:::0;24330:3:::1;24314:13;:19:::0;-1:-1:-1;24344:11:0::1;:15:::0;24216:151::o;21482:313::-;21580:4;21597:36;21607:6;21615:9;21626:6;21597:9;:36::i;:::-;21644:121;21653:6;189:10;21675:89;21713:6;21675:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21675:19:0;;;;;;:11;:19;;;;;;;;189:10;21675:33;;;;;;;;;;:37;:89::i;:::-;21644:8;:121::i;:::-;-1:-1:-1;21783:4:0;21482:313;;;;;:::o;24664:284::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;24775:4:::1;24764:7;:15;;24756:24;;;::::0;::::1;;24838:33;24863:7;24838:20;24850:7;24838;;:11;;:20;;;;:::i;:::-;:24:::0;::::1;:33::i;:::-;24821:14;:50:::0;24900:14:::1;::::0;:40:::1;::::0;24932:7;;24900:27:::1;::::0;24919:7;24900:18:::1;:27::i;:40::-;24882:15;:58:::0;-1:-1:-1;;24664:284:0:o;26850:253::-;26916:7;26955;;26944;:18;;26936:73;;;;-1:-1:-1;;;26936:73:0;;6524:2:1;26936:73:0;;;6506:21:1;6563:2;6543:18;;;6536:30;6602:34;6582:18;;;6575:62;-1:-1:-1;;;6653:18:1;;;6646:40;6703:19;;26936:73:0;6322:406:1;26936:73:0;27020:19;27043:10;:8;:10::i;:::-;27020:33;-1:-1:-1;27071:24:0;:7;27020:33;27071:11;:24::i;:::-;27064:31;26850:253;-1:-1:-1;;;26850:253:0:o;23195:180::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23274:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;23266:64;;;::::0;-1:-1:-1;;;23266:64:0;;6935:2:1;23266:64:0::1;::::0;::::1;6917:21:1::0;6974:2;6954:18;;;6947:30;7013:34;6993:18;;;6986:62;-1:-1:-1;;;7064:18:1;;;7057:31;7105:19;;23266:64:0::1;6733:397:1::0;23266:64:0::1;-1:-1:-1::0;;;;;23341:18:0::1;23362:5;23341:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;23341:26:0::1;::::0;;23195:180::o;27566:479::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27648:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27640:60;;;::::0;-1:-1:-1;;;27640:60:0;;7337:2:1;27640:60:0::1;::::0;::::1;7319:21:1::0;7376:2;7356:18;;;7349:30;7415:29;7395:18;;;7388:57;7462:18;;27640:60:0::1;7135:351:1::0;27640:60:0::1;27716:9;27711:327;27735:9;:16:::0;27731:20;::::1;27711:327;;;27793:7;-1:-1:-1::0;;;;;27777:23:0::1;:9;27787:1;27777:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27777:12:0::1;:23:::0;27773:254:::1;;27836:9;27846:16:::0;;:20:::1;::::0;27865:1:::1;::::0;27846:20:::1;:::i;:::-;27836:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27821:9:::1;:12:::0;;-1:-1:-1;;;;;27836:31:0;;::::1;::::0;27831:1;;27821:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27821:46:0::1;-1:-1:-1::0;;;;;27821:46:0;;::::1;;::::0;;27886:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27925:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27925:28:0::1;::::0;;27972:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27972:15:0;;;;;-1:-1:-1;;;;;;27972:15:0::1;::::0;;;;;27711:327:::1;27566:479:::0;:::o;27773:254::-:1;27753:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27711:327;;;;27566:479:::0;:::o;22227:218::-;189:10;22315:4;22364:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22364:34:0;;;;;;;;;;22315:4;;22332:83;;22355:7;;22364:50;;22403:10;22364:38;:50::i;21803:416::-;21901:4;21926:35;;;21918:91;;;;-1:-1:-1;;;21918:91:0;;8362:2:1;21918:91:0;;;8344:21:1;8401:2;8381:18;;;8374:30;8440:34;8420:18;;;8413:62;-1:-1:-1;;;8491:18:1;;;8484:31;8532:19;;21918:91:0;8160:397:1;21918:91:0;22047:10;22030:14;22085:105;22106:6;22102:1;:10;22085:105;;;22142:35;22151:10;;22162:1;22151:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22166:7;;22174:1;22166:10;;;;;;;:::i;:::-;;;;;;;22142:8;:35::i;:::-;22134:44;;;;;;22114:3;;;;:::i;:::-;;;;22085:105;;;-1:-1:-1;22207:4:0;;21803:416;-1:-1:-1;;;;;;21803:416:0:o;26021:377::-;189:10;26073:14;26122:19;;;:11;:19;;;;;;;;26121:20;26113:77;;;;-1:-1:-1;;;26113:77:0;;8764:2:1;26113:77:0;;;8746:21:1;8803:2;8783:18;;;8776:30;8842:34;8822:18;;;8815:62;-1:-1:-1;;;8893:18:1;;;8886:42;8945:19;;26113:77:0;8562:408:1;26113:77:0;26202:15;26226:19;26237:7;26226:10;:19::i;:::-;-1:-1:-1;;;;;;;;;26274:15:0;;;;;;:7;:15;;;;;;26201:44;;-1:-1:-1;26274:28:0;;:15;-1:-1:-1;26201:44:0;26274:19;:28::i;:::-;-1:-1:-1;;;;;26256:15:0;;;;;;:7;:15;;;;;:46;26323:7;;:20;;26335:7;26323:11;:20::i;:::-;26313:7;:30;26367:10;;:23;;26382:7;26367:14;:23::i;:::-;26354:10;:36;-1:-1:-1;;;26021:377:0:o;24375:281::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;24485:5:::1;24474:7;:16;;24466:25;;;::::0;::::1;;24548:33;24573:7;24548:20;24560:7;24548;;:11;;:20;;;;:::i;:33::-;24533:12;:48:::0;24608:14:::1;::::0;:40:::1;::::0;24640:7;;24608:27:::1;::::0;24627:7;24608:18:::1;:27::i;:40::-;24592:13;:56:::0;-1:-1:-1;;24375:281:0:o;25345:111::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25414:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25414:34:0::1;25444:4;25414:34;::::0;;25345:111::o;26406:436::-;26496:7;26535;;26524;:18;;26516:62;;;;-1:-1:-1;;;26516:62:0;;9177:2:1;26516:62:0;;;9159:21:1;9216:2;9196:18;;;9189:30;9255:33;9235:18;;;9228:61;9306:18;;26516:62:0;8975:355:1;26516:62:0;26594:17;26589:246;;26629:15;26653:19;26664:7;26653:10;:19::i;:::-;-1:-1:-1;26628:44:0;;-1:-1:-1;26687:14:0;;-1:-1:-1;;;;;26687:14:0;26589:246;26736:23;26767:19;26778:7;26767:10;:19::i;:::-;-1:-1:-1;26734:52:0;;-1:-1:-1;26801:22:0;;-1:-1:-1;;;;;26801:22:0;23998:210;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;24108:15:::1;;24092:12;:31;;24084:40;;;::::0;::::1;;24172:13;:28:::0;23998:210::o;27111:447::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27308:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27307:21;27299:61;;;::::0;-1:-1:-1;;;27299:61:0;;7337:2:1;27299:61:0::1;::::0;::::1;7319:21:1::0;7376:2;7356:18;;;7349:30;7415:29;7395:18;;;7388:57;7462:18;;27299:61:0::1;7135:351:1::0;27299:61:0::1;-1:-1:-1::0;;;;;27374:16:0;::::1;27393:1;27374:16:::0;;;:7:::1;:16;::::0;;;;;:20;27371:108:::1;;-1:-1:-1::0;;;;;27450:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;27430:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;27411:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;27371:108:::1;-1:-1:-1::0;;;;;27489:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27489:27:0::1;27512:4;27489:27:::0;;::::1;::::0;;;27527:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27527:23:0::1;::::0;;::::1;::::0;;27111:447::o;24956:202::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;25049:16:::1;::::0;-1:-1:-1;;;;;25049:29:0;;::::1;:16:::0;::::1;:29:::0;25041:61:::1;;;::::0;-1:-1:-1;;;25041:61:0;;9537:2:1;25041:61:0::1;::::0;::::1;9519:21:1::0;9576:2;9556:18;;;9549:30;-1:-1:-1;;;9595:18:1;;;9588:49;9654:18;;25041:61:0::1;9335:343:1::0;25041:61:0::1;25113:16;:37:::0;;-1:-1:-1;;;;;;25113:37:0::1;-1:-1:-1::0;;;;;25113:37:0;;;::::1;::::0;;;::::1;::::0;;24956:202::o;38845:213::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;38923:12:::1;38948:9;-1:-1:-1::0;;;;;38940:23:0::1;38971:21;38940:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38922:75;;;39016:7;39008:42;;;::::0;-1:-1:-1;;;39008:42:0;;10095:2:1;39008:42:0::1;::::0;::::1;10077:21:1::0;10134:2;10114:18;;;10107:30;-1:-1:-1;;;10153:18:1;;;10146:52;10215:18;;39008:42:0::1;9893:346:1::0;20932:198:0;-1:-1:-1;;;;;21022:20:0;;20998:7;21022:20;;;:11;:20;;;;;;;;21018:49;;;-1:-1:-1;;;;;;21051:16:0;;;;;:7;:16;;;;;;;20932:198::o;21018:49::-;-1:-1:-1;;;;;21105:16:0;;;;;;:7;:16;;;;;;21085:37;;:19;:37::i;14812:148::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;14919:1:::1;14903:6:::0;;14882:40:::1;::::0;-1:-1:-1;;;;;14903:6:0;;::::1;::::0;14882:40:::1;::::0;14919:1;;14882:40:::1;14950:1;14933:19:::0;;-1:-1:-1;;;;;;14933:19:0::1;::::0;;14812:148::o;23780:210::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;23890:15:::1;;23874:12;:31;;23866:40;;;::::0;::::1;;23954:13;:28:::0;23780:210::o;20529:84::-;20579:13;20603:7;20596:14;;;;;:::i;22453:269::-;22546:4;22563:129;189:10;22586:7;22595:96;22634:15;22595:96;;;;;;;;;;;;;;;;;189:10;22595:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22595:34:0;;;;;;;;;;;;:38;:96::i;21138:167::-;21216:4;21233:42;189:10;21257:9;21268:6;21233:9;:42::i;25166:171::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;25243:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;25243:32:0::1;-1:-1:-1::0;;;;25243:32:0;;::::1;;::::0;;25291:38:::1;::::0;::::1;::::0;::::1;::::0;25267:8;1598:14:1;1591:22;1573:41;;1561:2;1546:18;;1433:187;25291:38:0::1;;;;;;;;25166:171:::0;:::o;23383:179::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;23484:16:::1;::::0;::::1;;23473:27;;::::0;::::1;;::::0;23465:52:::1;;;::::0;-1:-1:-1;;;23465:52:0;;10446:2:1;23465:52:0::1;::::0;::::1;10428:21:1::0;10485:2;10465:18;;;10458:30;-1:-1:-1;;;10504:18:1;;;10497:42;10556:18;;23465:52:0::1;10244:336:1::0;23465:52:0::1;23528:16;:26:::0;;-1:-1:-1;;23528:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23383:179::o;22730:84::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;22793:6:::1;:13:::0;;-1:-1:-1;;;;;;22793:13:0::1;-1:-1:-1::0;;;;;22793:13:0;;;::::1;::::0;;;::::1;::::0;;22730:84::o;25468:112::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25537:27:0::1;25567:5;25537:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25537:35:0::1;::::0;;25468:112::o;14968:254::-;14725:6;;-1:-1:-1;;;;;14725:6:0;189:10;14725:22;14717:67;;;;-1:-1:-1;;;14717:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15057:22:0;::::1;15049:73;;;::::0;-1:-1:-1;;;15049:73:0;;10787:2:1;15049:73:0::1;::::0;::::1;10769:21:1::0;10826:2;10806:18;;;10799:30;10865:34;10845:18;;;10838:62;-1:-1:-1;;;10916:18:1;;;10909:36;10962:19;;15049:73:0::1;10585:402:1::0;15049:73:0::1;15169:6;::::0;;15148:38:::1;::::0;-1:-1:-1;;;;;15148:38:0;;::::1;::::0;15169:6;::::1;::::0;15148:38:::1;::::0;::::1;15197:6;:17:::0;;-1:-1:-1;;;;;;15197:17:0::1;-1:-1:-1::0;;;;;15197:17:0;;;::::1;::::0;;;::::1;::::0;;14968:254::o;28145:337::-;-1:-1:-1;;;;;28238:19:0;;28230:68;;;;-1:-1:-1;;;28230:68:0;;11194:2:1;28230:68:0;;;11176:21:1;11233:2;11213:18;;;11206:30;11272:34;11252:18;;;11245:62;-1:-1:-1;;;11323:18:1;;;11316:34;11367:19;;28230:68:0;10992:400:1;28230:68:0;-1:-1:-1;;;;;28317:21:0;;28309:68;;;;-1:-1:-1;;;28309:68:0;;11599:2:1;28309:68:0;;;11581:21:1;11638:2;11618:18;;;11611:30;11677:34;11657:18;;;11650:62;-1:-1:-1;;;11728:18:1;;;11721:32;11770:19;;28309:68:0;11397:398:1;28309:68:0;-1:-1:-1;;;;;28390:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28442:32;;2023:25:1;;;28442:32:0;;1996:18:1;28442:32:0;;;;;;;28145:337;;;:::o;28490:1591::-;-1:-1:-1;;;;;28612:18:0;;28604:68;;;;-1:-1:-1;;;28604:68:0;;12002:2:1;28604:68:0;;;11984:21:1;12041:2;12021:18;;;12014:30;12080:34;12060:18;;;12053:62;-1:-1:-1;;;12131:18:1;;;12124:35;12176:19;;28604:68:0;11800:401:1;28604:68:0;-1:-1:-1;;;;;28691:16:0;;28683:64;;;;-1:-1:-1;;;28683:64:0;;12408:2:1;28683:64:0;;;12390:21:1;12447:2;12427:18;;;12420:30;12486:34;12466:18;;;12459:62;-1:-1:-1;;;12537:18:1;;;12530:33;12580:19;;28683:64:0;12206:399:1;28683:64:0;28775:1;28766:6;:10;28758:64;;;;-1:-1:-1;;;28758:64:0;;12812:2:1;28758:64:0;;;12794:21:1;12851:2;12831:18;;;12824:30;12890:34;12870:18;;;12863:62;-1:-1:-1;;;12941:18:1;;;12934:39;12990:19;;28758:64:0;12610:405:1;28758:64:0;28836:20;28847:4;28853:2;28836:10;:20::i;:::-;28833:113;;;28889:12;;28879:6;:22;;28871:75;;;;-1:-1:-1;;;28871:75:0;;13222:2:1;28871:75:0;;;13204:21:1;13261:2;13241:18;;;13234:30;13300:34;13280:18;;;13273:62;-1:-1:-1;;;13351:18:1;;;13344:38;13399:19;;28871:75:0;13020:404:1;28871:75:0;28960:20;28971:4;28977:2;28960:10;:20::i;:::-;:57;;;;-1:-1:-1;29003:14:0;;-1:-1:-1;;;;;28997:20:0;;;29003:14;;28997:20;;28960:57;:87;;;;-1:-1:-1;29041:6:0;;-1:-1:-1;;;;;29035:12:0;;;29041:6;;29035:12;;28960:87;28957:298;;;29074:32;29109:13;29119:2;29109:9;:13::i;:::-;29182:14;;29074:48;;-1:-1:-1;29145:33:0;29172:6;29074:48;29145:33;:::i;:::-;:51;;29137:106;;;;-1:-1:-1;;;29137:106:0;;13761:2:1;29137:106:0;;;13743:21:1;13800:2;13780:18;;;13773:30;13839:34;13819:18;;;13812:62;-1:-1:-1;;;13890:18:1;;;13883:40;13940:19;;29137:106:0;13559:406:1;29137:106:0;29059:196;28957:298;29267:28;29298:24;29316:4;29298:9;:24::i;:::-;29267:55;;29370:12;;29346:20;:36;29343:112;;-1:-1:-1;29431:12:0;;29343:112;29526:29;;29571:16;;29502:53;;;;;-1:-1:-1;;;29571:16:0;;;;29570:17;:46;;;;-1:-1:-1;29610:6:0;;-1:-1:-1;;;;;29604:12:0;;;29610:6;;29604:12;29570:46;:84;;;;-1:-1:-1;29633:21:0;;-1:-1:-1;;;29633:21:0;;;;29570:84;29566:293;;;29685:19;29681:167;;;29748:29;;29725:52;;29796:36;29811:20;29796:14;:36::i;:::-;-1:-1:-1;;;;;29922:24:0;;29879:12;29922:24;;;:18;:24;;;;;;29894:4;;29922:24;;;:50;;-1:-1:-1;;;;;;29950:22:0;;;;;;:18;:22;;;;;;;;29922:50;29919:96;;;-1:-1:-1;29998:5:0;29919:96;30035:38;30050:4;30055:2;30058:6;30065:7;30035:14;:38::i;:::-;28593:1488;;;28490:1591;;;:::o;5152:192::-;5238:7;5274:12;5266:6;;;;5258:29;;;;-1:-1:-1;;;5258:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5298:9:0;5310:5;5314:1;5310;:5;:::i;:::-;5298:17;5152:192;-1:-1:-1;;;;;5152:192:0:o;5603:462::-;5661:7;5897:1;5902;5897:6;5893:47;;-1:-1:-1;5927:1:0;5920:8;;5893:47;5952:9;5964:5;5968:1;5964;:5;:::i;:::-;5952:17;-1:-1:-1;5997:1:0;5988:5;5992:1;5952:17;5988:5;:::i;:::-;:10;5980:56;;;;-1:-1:-1;;;5980:56:0;;14567:2:1;5980:56:0;;;14549:21:1;14606:2;14586:18;;;14579:30;14645:34;14625:18;;;14618:62;-1:-1:-1;;;14696:18:1;;;14689:31;14737:19;;5980:56:0;14365:397:1;6541:132:0;6599:7;6626:39;6630:1;6633;6626:39;;;;;;;;;;;;;;;;;:3;:39::i;36600:163::-;36641:7;36662:15;36679;36698:19;:17;:19::i;:::-;36661:56;;-1:-1:-1;36661:56:0;-1:-1:-1;36735:20:0;36661:56;;36735:11;:20::i;:::-;36728:27;;;;36600:163;:::o;4249:181::-;4307:7;;4339:5;4343:1;4339;:5;:::i;:::-;4327:17;;4368:1;4363;:6;;4355:46;;;;-1:-1:-1;;;4355:46:0;;14969:2:1;4355:46:0;;;14951:21:1;15008:2;14988:18;;;14981:30;15047:29;15027:18;;;15020:57;15094:18;;4355:46:0;14767:351:1;35396:419:0;35455:7;35464;35473;35482;35491;35500;35521:23;35546:12;35560:18;35582:20;35594:7;35582:11;:20::i;:::-;35520:82;;;;;;35614:15;35631:23;35656:12;35672:50;35684:7;35693:4;35699:10;35711;:8;:10::i;:::-;35672:11;:50::i;:::-;35613:109;;;;-1:-1:-1;35613:109:0;;-1:-1:-1;35773:15:0;;-1:-1:-1;35790:4:0;;-1:-1:-1;35796:10:0;;-1:-1:-1;35396:419:0;;-1:-1:-1;;;;;35396:419:0:o;4713:136::-;4771:7;4798:43;4802:1;4805;4798:43;;;;;;;;;;;;;;;;;:3;:43::i;25683:330::-;25751:4;14663:6;;-1:-1:-1;;;;;25775:15:0;;;14663:6;;25775:15;;;;:45;;-1:-1:-1;14636:7:0;14663:6;-1:-1:-1;;;;;25807:13:0;;;14663:6;;25807:13;;25775:45;:84;;;;-1:-1:-1;;;;;;25838:21:0;;;;;;:17;:21;;;;;;;;25837:22;25775:84;:125;;;;-1:-1:-1;;;;;;25877:23:0;;;;;;:17;:23;;;;;;;;25876:24;25775:125;:159;;;;-1:-1:-1;25923:11:0;;-1:-1:-1;;;;;25917:17:0;;;25923:11;;25917:17;;25775:159;:192;;;;-1:-1:-1;;;;;;25951:16:0;;;;25775:192;:230;;;;-1:-1:-1;;;;;;;;25984:21:0;26000:4;25984:21;;;25683:330::o;30089:1315::-;18897:16;:23;;-1:-1:-1;;;;18897:23:0;-1:-1:-1;;;18897:23:0;;;:16;30194:13;30178::::1;::::0;:29:::1;::::0;30194:13;30178:29:::1;:::i;:::-;30174:60:::0;30227:7:::1;30174:60;30244:19;30266:77;30310:32;30328:13;;30310;;:17;;:32;;;;:::i;:::-;30291:13;::::0;30266:39:::1;::::0;:20;;:24:::1;:39::i;:77::-;30244:99:::0;-1:-1:-1;30354:17:0::1;30374:37;:20:::0;30244:99;30374:24:::1;:37::i;:::-;30354:57:::0;-1:-1:-1;30475:12:0::1;30490:16;30354:57:::0;30504:1:::1;30490:13;:16::i;:::-;30475:31:::0;-1:-1:-1;30517:17:0::1;30537:19;:9:::0;30475:31;30537:13:::1;:19::i;:::-;30517:39:::0;-1:-1:-1;30859:21:0::1;30834:22;30948:21;:4:::0;30957:11;30948:8:::1;:21::i;:::-;30925:44;;30980:30;30997:12;30980:16;:30::i;:::-;31071:16;31090:41;:21;31116:14:::0;31090:25:::1;:41::i;:::-;31071:60:::0;-1:-1:-1;31142:24:0::1;31169:36;31192:12:::0;31169:18:::1;31071:60:::0;31182:4;31169:12:::1;:18::i;:36::-;31142:63;;31218:41;31231:9;31242:16;31218:12;:41::i;:::-;31277:49;::::0;;15325:25:1;;;15381:2;15366:18;;15359:34;;;15409:18;;;15402:34;;;31277:49:0::1;::::0;15313:2:1;15298:18;31277:49:0::1;;;;;;;31339:16;::::0;-1:-1:-1;;;;;31339:16:0::1;:57;31365:30;:8:::0;31378:16;31365:12:::1;:30::i;:::-;31339:57;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30163:1241;;;;;;;;18931:1;-1:-1:-1::0;18943:16:0;:24;;-1:-1:-1;;;;18943:24:0;;;30089:1315::o;32511:1303::-;32671:16;;;;32667:969;;;-1:-1:-1;;;;;23161:18:0;;23137:4;23161:18;;;:9;:18;;;;;;;;32775:30;;;-1:-1:-1;;;;;;23161:18:0;;23137:4;23161:18;;;:9;:18;;;;;;;;32793:12;32771:97;;;32826:26;;-1:-1:-1;;;32826:26:0;;15649:2:1;32826:26:0;;;15631:21:1;15688:2;15668:18;;;15661:30;-1:-1:-1;;;15707:18:1;;;15700:46;15763:18;;32826:26:0;15447:340:1;32771:97:0;32958:16;;;;;;;32953:672;;32995:28;33014:4;33020:2;32995:18;:28::i;:::-;33051:16;;;;;;;33050:17;:41;;;;;33071:20;33082:4;33088:2;33071:10;:20::i;:::-;33046:145;;;33120:47;;-1:-1:-1;;;33120:47:0;;15994:2:1;33120:47:0;;;15976:21:1;16033:2;16013:18;;;16006:30;16072:34;16052:18;;;16045:62;-1:-1:-1;;;16123:18:1;;;16116:35;16168:19;;33120:47:0;15792:401:1;33046:145:0;32953:672;;;33250:1;33235:12;;:16;:56;;;;-1:-1:-1;33285:6:0;;-1:-1:-1;;;;;33277:14:0;;;33285:6;;33277:14;33235:56;:102;;;;;33317:20;33328:4;33334:2;33317:10;:20::i;:::-;33231:379;;;33414:13;33399:12;;33384;:27;;;;:::i;:::-;:43;33380:211;;;-1:-1:-1;;;;;33456:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;33456:20:0;33472:4;33456:20;;;33503:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;33551:16:0;;-1:-1:-1;;;;;933:32:1;;915:51;;33551:16:0;;903:2:1;888:18;33551:16:0;;;;;;;33380:211;33652:7;33648:40;;33674:14;:12;:14::i;:::-;33709:35;33727:4;33733:2;33737:6;33709:17;:35::i;:::-;33769:7;33765:41;;33791:15;38714:19;;38700:11;:33;38760:21;;38744:13;:37;38808:21;;38792:13;:37;38656:181;33791:15;32511:1303;;;;:::o;7169:278::-;7255:7;7290:12;7283:5;7275:28;;;;-1:-1:-1;;;7275:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7314:9:0;7326:5;7330:1;7326;:5;:::i;36771:561::-;36868:7;;36904;;36821;;;;;36928:289;36952:9;:16;36948:20;;36928:289;;;37018:7;36994;:21;37002:9;37012:1;37002:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37002:12:0;36994:21;;;;;;;;;;;;;:31;;:66;;;37053:7;37029;:21;37037:9;37047:1;37037:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37037:12:0;37029:21;;;;;;;;;;;;;:31;36994:66;36990:97;;;37070:7;;37079;;37062:25;;;;;;;36771:561;;:::o;36990:97::-;37112:34;37124:7;:21;37132:9;37142:1;37132:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37132:12:0;37124:21;;;;;;;;;;;;;37112:7;;:11;:34::i;:::-;37102:44;;37171:34;37183:7;:21;37191:9;37201:1;37191:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37191:12:0;37183:21;;;;;;;;;;;;;37171:7;;:11;:34::i;:::-;37161:44;-1:-1:-1;36970:3:0;;;;:::i;:::-;;;;36928:289;;;-1:-1:-1;37253:7:0;;37241;;:20;;:11;:20::i;:::-;37231:7;:30;37227:61;;;37271:7;;37280;;37263:25;;;;;;36771:561;;:::o;37227:61::-;37307:7;;37316;;-1:-1:-1;36771:561:0;-1:-1:-1;36771:561:0:o;35823:330::-;35883:7;35892;35901;35921:12;35936:24;35952:7;35936:15;:24::i;:::-;35921:39;;35971:18;35992:30;36014:7;35992:21;:30::i;:::-;35971:51;-1:-1:-1;36033:23:0;36059:33;35971:51;36059:17;:7;36071:4;36059:11;:17::i;:::-;:21;;:33::i;:::-;36033:59;36128:4;;-1:-1:-1;36134:10:0;;-1:-1:-1;35823:330:0;;-1:-1:-1;;;35823:330:0:o;36161:429::-;36276:7;;;;36332:24;:7;36344:11;36332;:24::i;:::-;36314:42;-1:-1:-1;36367:12:0;36382:21;:4;36391:11;36382:8;:21::i;:::-;36367:36;-1:-1:-1;36414:18:0;36435:27;:10;36450:11;36435:14;:27::i;:::-;36414:48;-1:-1:-1;36473:23:0;36499:33;36414:48;36499:17;:7;36511:4;36499:11;:17::i;:33::-;36551:7;;;;-1:-1:-1;36577:4:0;;-1:-1:-1;36161:429:0;;-1:-1:-1;;;;;;;36161:429:0:o;31412:573::-;31564:16;;;31578:1;31564:16;;;;;;;;31540:21;;31564:16;;;;;;;;;;-1:-1:-1;31564:16:0;31540:40;;31609:4;31591;31596:1;31591:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31591:23:0;;;:7;;;;;;;;;;:23;;;;31635:9;;:16;;;-1:-1:-1;;;31635:16:0;;;;:9;;;;;:14;;:16;;;;;31591:7;;31635:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31625:4;31630:1;31625:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31625:26:0;;;:7;;;;;;;;;:26;31696:9;;31664:56;;31681:4;;31696:9;31708:11;31664:8;:56::i;:::-;31759:9;;:218;;-1:-1:-1;;;31759:218:0;;-1:-1:-1;;;;;31759:9:0;;;;:60;;:218;;31834:11;;31759:9;;31904:4;;31931;;31951:15;;31759:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31993:510;32173:9;;32141:56;;32158:4;;-1:-1:-1;;;;;32173:9:0;32185:11;32141:8;:56::i;:::-;32240:9;;32438:16;;32240:255;;-1:-1:-1;;;32240:255:0;;32306:4;32240:255;;;17920:34:1;17970:18;;;17963:34;;;32240:9:0;18013:18:1;;;18006:34;;;18056:18;;;18049:34;-1:-1:-1;;;;;32438:16:0;;;18099:19:1;;;18092:44;32469:15:0;18152:19:1;;;18145:35;32240:9:0;;;:25;;32273:9;;17854:19:1;;32240:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31993:510;;:::o;34908:480::-;34990:16;;;;;;;34989:17;34981:65;;;;-1:-1:-1;;;34981:65:0;;18704:2:1;34981:65:0;;;18686:21:1;18743:2;18723:18;;;18716:30;18782:34;18762:18;;;18755:62;-1:-1:-1;;;18833:18:1;;;18826:33;18876:19;;34981:65:0;18502:399:1;34981:65:0;35062:20;35073:4;35079:2;35062:10;:20::i;:::-;35061:21;:37;;;;-1:-1:-1;35092:6:0;;-1:-1:-1;;;;;35086:12:0;;;35092:6;;35086:12;35061:37;35057:324;;;-1:-1:-1;;;;;35115:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;35115:30:0;35141:4;35115:30;;;;;;35160:16;:23;;-1:-1:-1;;35160:23:0;35115:30;35160:23;;;35213:12;35198;:27;35255:15;35240:12;:30;35287:21;:28;;-1:-1:-1;;;;35287:28:0;-1:-1:-1;;;35287:28:0;;;35335:34;;;;;;1598:14:1;;1591:22;1573:41;;1561:2;1546:18;;1433:187;35335:34:0;;;;;;;;34908:480;;:::o;38310:334::-;38356:11;;:16;:38;;;;-1:-1:-1;38376:13:0;;:18;38356:38;38353:50;;;38310:334::o;38353:50::-;38445:11;;;38423:19;:33;38491:13;;;38467:21;:37;38539:13;;;38515:21;:37;-1:-1:-1;38565:15:0;;;;38591:17;;;;38619;38310:334::o;33822:1078::-;33921:15;33938:23;33963:12;33977:23;34002:12;34016:18;34038:19;34049:7;34038:10;:19::i;:::-;-1:-1:-1;;;;;34088:15:0;;;;;;:7;:15;;;;;;33920:137;;-1:-1:-1;33920:137:0;;-1:-1:-1;33920:137:0;;-1:-1:-1;33920:137:0;-1:-1:-1;33920:137:0;-1:-1:-1;33920:137:0;-1:-1:-1;34088:28:0;;33920:137;34088:19;:28::i;:::-;-1:-1:-1;;;;;34070:15:0;;;;;;;:7;:15;;;;;;:46;;;;34148:18;;;;;;;:39;;34171:15;34148:22;:39::i;:::-;-1:-1:-1;;;;;34127:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;34204:19;;;;;:11;:19;;;;;;;:46;;;;-1:-1:-1;;;;;;34228:22:0;;;;;;:11;:22;;;;;;;;34227:23;34204:46;34200:477;;;-1:-1:-1;;;;;34285:15:0;;;;;;:7;:15;;;;;;:28;;34305:7;34285:19;:28::i;:::-;-1:-1:-1;;;;;34267:15:0;;;;;;:7;:15;;;;;:46;34200:477;;;-1:-1:-1;;;;;34336:19:0;;;;;;:11;:19;;;;;;;;34335:20;:46;;;;-1:-1:-1;;;;;;34359:22:0;;;;;;:11;:22;;;;;;;;34335:46;34331:346;;;-1:-1:-1;;;;;34419:18:0;;;;;;:7;:18;;;;;;:39;;34442:15;34419:22;:39::i;:::-;-1:-1:-1;;;;;34398:18:0;;;;;;:7;:18;;;;;:60;34331:346;;;-1:-1:-1;;;;;34482:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34505:22:0;;;;;;:11;:22;;;;;;;;34482:45;34478:199;;;-1:-1:-1;;;;;34562:15:0;;;;;;:7;:15;;;;;;:28;;34582:7;34562:19;:28::i;:::-;-1:-1:-1;;;;;34544:15:0;;;;;;;:7;:15;;;;;;:46;;;;34626:18;;;;;;;:39;;34649:15;34626:22;:39::i;:::-;-1:-1:-1;;;;;34605:18:0;;;;;;:7;:18;;;;;:60;34478:199;34693:14;;34689:67;;34722:34;34737:6;34745:10;34722:14;:34::i;:::-;34778:1;34771:4;:8;:20;;;;34790:1;34783:4;:8;34771:20;34767:63;;;34806:24;34819:4;34825;34806:12;:24::i;:::-;34865:9;-1:-1:-1;;;;;34848:44:0;34857:6;-1:-1:-1;;;;;34848:44:0;;34876:15;34848:44;;;;2023:25:1;;2011:2;1996:18;;1877:177;34848:44:0;;;;;;;;33909:991;;;;;;33822:1078;;;:::o;37977:145::-;38041:7;38068:46;38097:16;;38068:24;38080:11;;38068:7;:11;;:24;;;;:::i;38130:172::-;38200:7;38227:67;38277:16;;38227:45;38239:32;38257:13;;38239;;:17;;:32;;;;:::i;:::-;38227:7;;:11;:45::i;37500:469::-;37579:19;37602:10;:8;:10::i;:::-;37579:33;-1:-1:-1;37623:18:0;37644:27;:10;37579:33;37644:14;:27::i;:::-;37723:4;37707:22;;;;:7;:22;;;;;;37623:48;;-1:-1:-1;37707:38:0;;37623:48;37707:26;:38::i;:::-;37698:4;37682:22;;;;:7;:22;;;;;;;;:63;;;;37759:11;:26;;;;;;37756:107;;;37841:4;37825:22;;;;:7;:22;;;;;;:38;;37852:10;37825:26;:38::i;:::-;37816:4;37800:22;;;;:7;:22;;;;;:63;37756:107;37879:43;;2023:25:1;;;37904:4:0;;-1:-1:-1;;;;;37879:43:0;;;;;2011:2:1;1996:18;37879:43:0;;;;;;;37568:401;;37500:469;;:::o;37340:148::-;37419:7;;:17;;37431:4;37419:11;:17::i;:::-;37409:7;:27;37460:10;;:20;;37475:4;37460:14;:20::i;:::-;37447:10;:33;-1:-1:-1;;37340:148:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;977:131::-;-1:-1:-1;;;;;1052:31:1;;1042:42;;1032:70;;1098:1;1095;1088:12;1032:70;977:131;:::o;1113:315::-;1181:6;1189;1242:2;1230:9;1221:7;1217:23;1213:32;1210:52;;;1258:1;1255;1248:12;1210:52;1297:9;1284:23;1316:31;1341:5;1316:31;:::i;:::-;1366:5;1418:2;1403:18;;;;1390:32;;-1:-1:-1;;;1113:315:1:o;1625:247::-;1684:6;1737:2;1725:9;1716:7;1712:23;1708:32;1705:52;;;1753:1;1750;1743:12;1705:52;1792:9;1779:23;1811:31;1836:5;1811:31;:::i;2059:456::-;2136:6;2144;2152;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;2260:9;2247:23;2279:31;2304:5;2279:31;:::i;:::-;2329:5;-1:-1:-1;2386:2:1;2371:18;;2358:32;2399:33;2358:32;2399:33;:::i;:::-;2059:456;;2451:7;;-1:-1:-1;;;2505:2:1;2490:18;;;;2477:32;;2059:456::o;2520:248::-;2588:6;2596;2649:2;2637:9;2628:7;2624:23;2620:32;2617:52;;;2665:1;2662;2655:12;2617:52;-1:-1:-1;;2688:23:1;;;2758:2;2743:18;;;2730:32;;-1:-1:-1;2520:248:1:o;2962:367::-;3025:8;3035:6;3089:3;3082:4;3074:6;3070:17;3066:27;3056:55;;3107:1;3104;3097:12;3056:55;-1:-1:-1;3130:20:1;;3173:18;3162:30;;3159:50;;;3205:1;3202;3195:12;3159:50;3242:4;3234:6;3230:17;3218:29;;3302:3;3295:4;3285:6;3282:1;3278:14;3270:6;3266:27;3262:38;3259:47;3256:67;;;3319:1;3316;3309:12;3256:67;2962:367;;;;;:::o;3334:773::-;3456:6;3464;3472;3480;3533:2;3521:9;3512:7;3508:23;3504:32;3501:52;;;3549:1;3546;3539:12;3501:52;3589:9;3576:23;3618:18;3659:2;3651:6;3648:14;3645:34;;;3675:1;3672;3665:12;3645:34;3714:70;3776:7;3767:6;3756:9;3752:22;3714:70;:::i;:::-;3803:8;;-1:-1:-1;3688:96:1;-1:-1:-1;3891:2:1;3876:18;;3863:32;;-1:-1:-1;3907:16:1;;;3904:36;;;3936:1;3933;3926:12;3904:36;;3975:72;4039:7;4028:8;4017:9;4013:24;3975:72;:::i;:::-;3334:773;;;;-1:-1:-1;4066:8:1;-1:-1:-1;;;;3334:773:1:o;4320:160::-;4385:20;;4441:13;;4434:21;4424:32;;4414:60;;4470:1;4467;4460:12;4414:60;4320:160;;;:::o;4485:248::-;4550:6;4558;4611:2;4599:9;4590:7;4586:23;4582:32;4579:52;;;4627:1;4624;4617:12;4579:52;4663:9;4650:23;4640:33;;4692:35;4723:2;4712:9;4708:18;4692:35;:::i;:::-;4682:45;;4485:248;;;;;:::o;4998:180::-;5054:6;5107:2;5095:9;5086:7;5082:23;5078:32;5075:52;;;5123:1;5120;5113:12;5075:52;5146:26;5162:9;5146:26;:::i;5183:388::-;5251:6;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:52;;;5328:1;5325;5318:12;5280:52;5367:9;5354:23;5386:31;5411:5;5386:31;:::i;:::-;5436:5;-1:-1:-1;5493:2:1;5478:18;;5465:32;5506:33;5465:32;5506:33;:::i;:::-;5558:7;5548:17;;;5183:388;;;;;:::o;5576:356::-;5778:2;5760:21;;;5797:18;;;5790:30;5856:34;5851:2;5836:18;;5829:62;5923:2;5908:18;;5576:356::o;5937:380::-;6016:1;6012:12;;;;6059;;;6080:61;;6134:4;6126:6;6122:17;6112:27;;6080:61;6187:2;6179:6;6176:14;6156:18;6153:38;6150:161;;6233:10;6228:3;6224:20;6221:1;6214:31;6268:4;6265:1;6258:15;6296:4;6293:1;6286:15;6150:161;;5937:380;;;:::o;7491:127::-;7552:10;7547:3;7543:20;7540:1;7533:31;7583:4;7580:1;7573:15;7607:4;7604:1;7597:15;7623:127;7684:10;7679:3;7675:20;7672:1;7665:31;7715:4;7712:1;7705:15;7739:4;7736:1;7729:15;7755:128;7822:9;;;7843:11;;;7840:37;;;7857:18;;:::i;7888:127::-;7949:10;7944:3;7940:20;7937:1;7930:31;7980:4;7977:1;7970:15;8004:4;8001:1;7994:15;8020:135;8059:3;8080:17;;;8077:43;;8100:18;;:::i;:::-;-1:-1:-1;8147:1:1;8136:13;;8020:135::o;13429:125::-;13494:9;;;13515:10;;;13512:36;;;13528:18;;:::i;13970:168::-;14043:9;;;14074;;14091:15;;;14085:22;;14071:37;14061:71;;14112:18;;:::i;14143:217::-;14183:1;14209;14199:132;;14253:10;14248:3;14244:20;14241:1;14234:31;14288:4;14285:1;14278:15;14316:4;14313:1;14306:15;14199:132;-1:-1:-1;14345:9:1;;14143:217::o;16330:251::-;16400:6;16453:2;16441:9;16432:7;16428:23;16424:32;16421:52;;;16469:1;16466;16459:12;16421:52;16501:9;16495:16;16520:31;16545:5;16520:31;:::i;16586:980::-;16848:4;16896:3;16885:9;16881:19;16927:6;16916:9;16909:25;16953:2;16991:6;16986:2;16975:9;16971:18;16964:34;17034:3;17029:2;17018:9;17014:18;17007:31;17058:6;17093;17087:13;17124:6;17116;17109:22;17162:3;17151:9;17147:19;17140:26;;17201:2;17193:6;17189:15;17175:29;;17222:1;17232:195;17246:6;17243:1;17240:13;17232:195;;;17311:13;;-1:-1:-1;;;;;17307:39:1;17295:52;;17402:15;;;;17367:12;;;;17343:1;17261:9;17232:195;;;-1:-1:-1;;;;;;;17483:32:1;;;;17478:2;17463:18;;17456:60;-1:-1:-1;;;17547:3:1;17532:19;17525:35;17444:3;16586:980;-1:-1:-1;;;16586:980:1:o;18191:306::-;18279:6;18287;18295;18348:2;18336:9;18327:7;18323:23;18319:32;18316:52;;;18364:1;18361;18354:12;18316:52;18393:9;18387:16;18377:26;;18443:2;18432:9;18428:18;18422:25;18412:35;;18487:2;18476:9;18472:18;18466:25;18456:35;;18191:306;;;;;:::o

Swarm Source

ipfs://77ef100cfef7e9d4aeabbbee83e764f671b75cb48926201888e93c362ad8af52
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.