ETH Price: $2,100.21 (+2.01%)

Token

NETER (NETER)
 

Overview

Max Total Supply

1,000,000,000,000,000 NETER

Holders

10

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
NETER

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2022-01-18
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    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);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
            }
        }
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// pragma solidity >=0.6.2;

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract NETER 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;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "NETER";
    string private _symbol = "NETER";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 1; 
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 2; 
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 2; 
    uint256 private _previousBurnFee = _burnFee;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    
    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public numTokensSellToAddToLiquidity = 1000000000000 * 10**18;
    uint256 public _maxTxAmount = 1000000000000000 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[owner()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[deadWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    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 allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    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(!_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;
            }
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    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 _takeLiquidity(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);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(100);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(100);
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee==0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
    }
    
    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _burnFee = _previousBurnFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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(amount > 0, "Transfer amount must be greater than zero");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //transfer amount, it will take tax, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.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
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

        // make the swap
        uniswapV2Router.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(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private 
    {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {   
           removeAllFee(); 
        }
        else  
        {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            restoreAllFee();
        }
    }



    function _transferStandard(address sender, address recipient, uint256 tAmount) private 
    {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = takeburn(sender, tTransferAmount, rTransferAmount, tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function takeburn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256)
    {
        if(_burnFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tBurn = tAmount.div(100).mul(_burnFee);
        uint256 rBurn = tBurn.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rBurn);
        tTransferAmount = tTransferAmount.sub(tBurn);
        _rOwned[deadWallet] = _rOwned[deadWallet].add(rBurn);
        emit Transfer(sender, deadWallet, tBurn);
        return(tTransferAmount, rTransferAmount); 
    }
    
    function _transferToExcluded(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);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 burnFee) external onlyOwner() {
        _taxFee = taxFee;
        _liquidityFee = liquidityFee;
        _burnFee = burnFee;
    }
    
    function setNumTokensSellToAddToLiquidity(uint256 newAmount) external onlyOwner() {
        numTokensSellToAddToLiquidity = newAmount * (10**18);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > 0, "max transaction amount must be greater than zero");
        _maxTxAmount = maxTxAmount * (10**18);
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","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":"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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"deadWallet","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":[{"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":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526d314dc6448d9338c15b0a0000000060098190556200002690600019620004de565b620000349060001962000501565b600a55604080518082019091526005808252642722aa22a960d91b60209092019182526200006591600c9162000438565b50604080518082019091526005808252642722aa22a960d91b60209092019182526200009491600d9162000438565b50600e805460ff191660129081179091556001600f81905560105560026011819055908190556013819055601455601580546001600160a01b03191661dead1790556017805460ff60a81b1916600160a81b1790556c0c9f2c9cd04674edea400000006018556d314dc6448d9338c15b0a000000006019553480156200011957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460036000620001756000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ec57600080fd5b505afa15801562000201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000227919062000527565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027057600080fd5b505afa15801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000527565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f457600080fd5b505af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000527565b601780546001600160a01b03199081166001600160a01b039384161790915560168054909116918316919091179055600160066000620003776000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556015549091168152600690925280822080548416600190811790915530835291208054909216179055620003e16000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200042991815260200190565b60405180910390a35062000596565b828054620004469062000559565b90600052602060002090601f0160209004810192826200046a5760008555620004b5565b82601f106200048557805160ff1916838001178555620004b5565b82800160010185558215620004b5579182015b82811115620004b557825182559160200191906001019062000498565b50620004c3929150620004c7565b5090565b5b80821115620004c35760008155600101620004c8565b600082620004fc57634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200052257634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200053a57600080fd5b81516001600160a01b03811681146200055257600080fd5b9392505050565b600181811c908216806200056e57607f821691505b602082108114156200059057634e487b7160e01b600052602260045260246000fd5b50919050565b6128ca80620005a66000396000f3fe60806040526004361061023f5760003560e01c806370a082311161012e578063b6c52324116100ab578063dd62ed3e1161006f578063dd62ed3e146106a9578063ea2f0b37146106ef578063ec28438a1461070f578063f0f165af1461072f578063f2fde38b1461074f57600080fd5b8063b6c5232414610628578063c0b0fda21461063d578063c49b9a8014610653578063d12a768814610673578063dd4670641461068957600080fd5b80638da5cb5b116100f25780638da5cb5b146105a057806395d89b41146105be578063a457c2d7146105d3578063a69df4b5146105f3578063a9059cbb1461060857600080fd5b806370a08231146104fc578063715018a61461051c5780637d1db4a51461053157806385141a771461054757806388f820201461056757600080fd5b80633b124fe7116101bc5780634a74bb02116101805780634a74bb021461044c57806352390c021461046d5780635342acb41461048d5780636ac3f254146104c65780636bc87c3a146104e657600080fd5b80633b124fe7146103b65780633bd5d173146103cc578063437823ec146103ec5780634549b0391461040c57806349bd5a5e1461042c57600080fd5b806323b872dd1161020357806323b872dd146103125780632d83811914610332578063313ce567146103525780633685d41914610374578063395093511461039657600080fd5b806306fdde031461024b578063095ea7b31461027657806313114a9d146102a65780631694505e146102c557806318160ddd146102fd57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061076f565b60405161026d919061245d565b60405180910390f35b34801561028257600080fd5b506102966102913660046124ca565b610801565b604051901515815260200161026d565b3480156102b257600080fd5b50600b545b60405190815260200161026d565b3480156102d157600080fd5b506016546102e5906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561030957600080fd5b506009546102b7565b34801561031e57600080fd5b5061029661032d3660046124f6565b610818565b34801561033e57600080fd5b506102b761034d366004612537565b610881565b34801561035e57600080fd5b50600e5460405160ff909116815260200161026d565b34801561038057600080fd5b5061039461038f366004612550565b61090a565b005b3480156103a257600080fd5b506102966103b13660046124ca565b610ac1565b3480156103c257600080fd5b506102b7600f5481565b3480156103d857600080fd5b506103946103e7366004612537565b610af7565b3480156103f857600080fd5b50610394610407366004612550565b610be1565b34801561041857600080fd5b506102b7610427366004612582565b610c2f565b34801561043857600080fd5b506017546102e5906001600160a01b031681565b34801561045857600080fd5b5060175461029690600160a81b900460ff1681565b34801561047957600080fd5b50610394610488366004612550565b610cbc565b34801561049957600080fd5b506102966104a8366004612550565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104d257600080fd5b506103946104e13660046125ae565b610e0f565b3480156104f257600080fd5b506102b760115481565b34801561050857600080fd5b506102b7610517366004612550565b610e47565b34801561052857600080fd5b50610394610ea6565b34801561053d57600080fd5b506102b760195481565b34801561055357600080fd5b506015546102e5906001600160a01b031681565b34801561057357600080fd5b50610296610582366004612550565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105ac57600080fd5b506000546001600160a01b03166102e5565b3480156105ca57600080fd5b50610260610f08565b3480156105df57600080fd5b506102966105ee3660046124ca565b610f17565b3480156105ff57600080fd5b50610394610f66565b34801561061457600080fd5b506102966106233660046124ca565b61106c565b34801561063457600080fd5b506002546102b7565b34801561064957600080fd5b506102b760135481565b34801561065f57600080fd5b5061039461066e3660046125da565b611079565b34801561067f57600080fd5b506102b760185481565b34801561069557600080fd5b506103946106a4366004612537565b6110fb565b3480156106b557600080fd5b506102b76106c43660046125f5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156106fb57600080fd5b5061039461070a366004612550565b611180565b34801561071b57600080fd5b5061039461072a366004612537565b6111cb565b34801561073b57600080fd5b5061039461074a366004612537565b611276565b34801561075b57600080fd5b5061039461076a366004612550565b6112b8565b6060600c805461077e9061262e565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa9061262e565b80156107f75780601f106107cc576101008083540402835291602001916107f7565b820191906000526020600020905b8154815290600101906020018083116107da57829003601f168201915b5050505050905090565b600061080e338484611390565b5060015b92915050565b60006108258484846114b4565b610877843361087285604051806060016040528060288152602001612828602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906115fa565b611390565b5060019392505050565b6000600a548211156108ed5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006108f7611634565b90506109038382611657565b9392505050565b6000546001600160a01b031633146109345760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03811660009081526007602052604090205460ff1661099c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108e4565b60005b600854811015610abd57816001600160a01b0316600882815481106109c6576109c661269e565b6000918252602090912001546001600160a01b03161415610aab57600880546109f1906001906126ca565b81548110610a0157610a0161269e565b600091825260209091200154600880546001600160a01b039092169183908110610a2d57610a2d61269e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610a8557610a856126e1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ab5816126f7565b91505061099f565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161080e9185906108729086611699565b3360008181526007602052604090205460ff1615610b6c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108e4565b6000610b77836116f8565b505050506001600160a01b038416600090815260036020526040902054919250610ba391905082611747565b6001600160a01b038316600090815260036020526040902055600a54610bc99082611747565b600a55600b54610bd99084611699565b600b55505050565b6000546001600160a01b03163314610c0b5760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115610c835760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108e4565b81610ca2576000610c93846116f8565b50939550610812945050505050565b6000610cad846116f8565b50929550610812945050505050565b6000546001600160a01b03163314610ce65760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03811660009081526007602052604090205460ff1615610d4f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108e4565b6001600160a01b03811660009081526003602052604090205415610da9576001600160a01b038116600090815260036020526040902054610d8f90610881565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b03163314610e395760405162461bcd60e51b81526004016108e490612669565b600f92909255601155601355565b6001600160a01b03811660009081526007602052604081205460ff1615610e8457506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461081290610881565b6000546001600160a01b03163314610ed05760405162461bcd60e51b81526004016108e490612669565b600080546040516001600160a01b0390911690600080516020612850833981519152908390a3600080546001600160a01b0319169055565b6060600d805461077e9061262e565b600061080e338461087285604051806060016040528060258152602001612870602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906115fa565b6001546001600160a01b03163314610fcc5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108e4565b600254421161101d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108e4565b600154600080546040516001600160a01b03938416939091169160008051602061285083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061080e3384846114b4565b6000546001600160a01b031633146110a35760405162461bcd60e51b81526004016108e490612669565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110f090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146111255760405162461bcd60e51b81526004016108e490612669565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556111548142612712565b600255600080546040516001600160a01b0390911690600080516020612850833981519152908390a350565b6000546001600160a01b031633146111aa5760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146111f55760405162461bcd60e51b81526004016108e490612669565b6000811161125e5760405162461bcd60e51b815260206004820152603060248201527f6d6178207472616e73616374696f6e20616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108e4565b61127081670de0b6b3a764000061272a565b60195550565b6000546001600160a01b031633146112a05760405162461bcd60e51b81526004016108e490612669565b6112b281670de0b6b3a764000061272a565b60185550565b6000546001600160a01b031633146112e25760405162461bcd60e51b81526004016108e490612669565b6001600160a01b0381166113475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e4565b600080546040516001600160a01b038085169392169160008051602061285083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e4565b6001600160a01b0382166114535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e4565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115185760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108e4565b6000811161157a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108e4565b600061158530610e47565b601854909150811080159081906115a65750601754600160a01b900460ff16155b80156115c057506017546001600160a01b03868116911614155b80156115d55750601754600160a81b900460ff165b156115e85760185491506115e882611789565b6115f3858585611830565b5050505050565b6000818484111561161e5760405162461bcd60e51b81526004016108e4919061245d565b50600061162b84866126ca565b95945050505050565b6000806000611641611a98565b90925090506116508282611657565b9250505090565b600061090383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c1a565b6000806116a68385612712565b9050838110156109035760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e4565b600080600080600080600080600061170f8a611c48565b925092509250600080600061172d8d8686611728611634565b611c8a565b919f909e50909c50959a5093985091965092945050505050565b600061090383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115fa565b6017805460ff60a01b1916600160a01b17905560006117a9826002611657565b905060006117b78383611747565b9050476117c383611cda565b60006117cf4783611747565b90506117db8382611e43565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff60a01b19169055505050565b6001600160a01b03831660009081526006602052604090205460ff168061186f57506001600160a01b03821660009081526006602052604090205460ff165b156118815761187c611f20565b6118e4565b6019548111156118e45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108e4565b6001600160a01b03831660009081526007602052604090205460ff16801561192557506001600160a01b03821660009081526007602052604090205460ff16155b1561193a57611935838383611f65565b611a38565b6001600160a01b03831660009081526007602052604090205460ff1615801561197b57506001600160a01b03821660009081526007602052604090205460ff165b1561198b5761193583838361208b565b6001600160a01b03831660009081526007602052604090205460ff161580156119cd57506001600160a01b03821660009081526007602052604090205460ff16155b156119dd57611935838383612134565b6001600160a01b03831660009081526007602052604090205460ff168015611a1d57506001600160a01b03821660009081526007602052604090205460ff165b15611a2d57611935838383612187565b611a38838383612134565b6001600160a01b03831660009081526006602052604090205460ff1680611a7757506001600160a01b03821660009081526006602052604090205460ff165b15611a9357611a93601054600f55601254601155601454601355565b505050565b600a546009546000918291825b600854811015611bea57826003600060088481548110611ac757611ac761269e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b325750816004600060088481548110611b0b57611b0b61269e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b4857600a54600954945094505050509091565b611b8e6003600060088481548110611b6257611b6261269e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611747565b9250611bd66004600060088481548110611baa57611baa61269e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611747565b915080611be2816126f7565b915050611aa5565b50600954600a54611bfa91611657565b821015611c1157600a546009549350935050509091565b90939092509050565b60008183611c3b5760405162461bcd60e51b81526004016108e4919061245d565b50600061162b8486612749565b600080600080611c57856121fa565b90506000611c648661221c565b90506000611c7c82611c768986611747565b90611747565b979296509094509092505050565b6000808080611c998886612238565b90506000611ca78887612238565b90506000611cb58888612238565b90506000611cc782611c768686611747565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d0f57611d0f61269e565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d6357600080fd5b505afa158015611d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9b919061276b565b81600181518110611dae57611dae61269e565b6001600160a01b039283166020918202929092010152601654611dd49130911684611390565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e0d908590600090869030904290600401612788565b600060405180830381600087803b158015611e2757600080fd5b505af1158015611e3b573d6000803e3d6000fd5b505050505050565b601654611e5b9030906001600160a01b031684611390565b6016546001600160a01b031663f305d719823085600080611e846000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611ee757600080fd5b505af1158015611efb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115f391906127f9565b600f54158015611f305750601154155b8015611f3c5750601354155b15611f4357565b600f805460105560118054601255601380546014556000928390559082905555565b600080600080600080611f77876116f8565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150611fa99088611747565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054611fd89087611747565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546120079086611699565b6001600160a01b038916600090815260036020526040902055612029816122b7565b612033848361233f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161207891815260200190565b60405180910390a3505050505050505050565b60008060008060008061209d876116f8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506120cf9087611747565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546121059084611699565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546120079086611699565b600080600080600080612146876116f8565b95509550955095509550955061215e8984878a612363565b6001600160a01b038b16600090815260036020526040902054909650909350611fd89087611747565b600080600080600080612199876116f8565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506121cb9088611747565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546120cf9087611747565b60006108126064612216600f548561223890919063ffffffff16565b90611657565b600061081260646122166011548561223890919063ffffffff16565b60008261224757506000610812565b6000612253838561272a565b9050826122608583612749565b146109035760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108e4565b60006122c1611634565b905060006122cf8383612238565b306000908152600360205260409020549091506122ec9082611699565b3060009081526003602090815260408083209390935560079052205460ff1615611a93573060009081526004602052604090205461232a9084611699565b30600090815260046020526040902055505050565b600a5461234c9083611747565b600a55600b5461235c9082611699565b600b555050565b6000806013546000141561237b575083905082612454565b60135460009061239690612390866064611657565b90612238565b905060006123ac6123a5611634565b8390612238565b90506123b88682611747565b95506123c48783611747565b6015546001600160a01b03166000908152600360205260409020549097506123ec9082611699565b601580546001600160a01b03908116600090815260036020908152604091829020949094559154915185815291811692908b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a386869350935050505b94509492505050565b600060208083528351808285015260005b8181101561248a5785810183015185820160400152820161246e565b8181111561249c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146124c757600080fd5b50565b600080604083850312156124dd57600080fd5b82356124e8816124b2565b946020939093013593505050565b60008060006060848603121561250b57600080fd5b8335612516816124b2565b92506020840135612526816124b2565b929592945050506040919091013590565b60006020828403121561254957600080fd5b5035919050565b60006020828403121561256257600080fd5b8135610903816124b2565b8035801515811461257d57600080fd5b919050565b6000806040838503121561259557600080fd5b823591506125a56020840161256d565b90509250929050565b6000806000606084860312156125c357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156125ec57600080fd5b6109038261256d565b6000806040838503121561260857600080fd5b8235612613816124b2565b91506020830135612623816124b2565b809150509250929050565b600181811c9082168061264257607f821691505b6020821081141561266357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156126dc576126dc6126b4565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561270b5761270b6126b4565b5060010190565b60008219821115612725576127256126b4565b500190565b6000816000190483118215151615612744576127446126b4565b500290565b60008261276657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561277d57600080fd5b8151610903816124b2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d85784516001600160a01b0316835293830193918301916001016127b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561280e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f79b4432b9272b6b0a440b82e03cd1da9b9ee92125e68df146c5855f1b4152664736f6c63430008090033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806370a082311161012e578063b6c52324116100ab578063dd62ed3e1161006f578063dd62ed3e146106a9578063ea2f0b37146106ef578063ec28438a1461070f578063f0f165af1461072f578063f2fde38b1461074f57600080fd5b8063b6c5232414610628578063c0b0fda21461063d578063c49b9a8014610653578063d12a768814610673578063dd4670641461068957600080fd5b80638da5cb5b116100f25780638da5cb5b146105a057806395d89b41146105be578063a457c2d7146105d3578063a69df4b5146105f3578063a9059cbb1461060857600080fd5b806370a08231146104fc578063715018a61461051c5780637d1db4a51461053157806385141a771461054757806388f820201461056757600080fd5b80633b124fe7116101bc5780634a74bb02116101805780634a74bb021461044c57806352390c021461046d5780635342acb41461048d5780636ac3f254146104c65780636bc87c3a146104e657600080fd5b80633b124fe7146103b65780633bd5d173146103cc578063437823ec146103ec5780634549b0391461040c57806349bd5a5e1461042c57600080fd5b806323b872dd1161020357806323b872dd146103125780632d83811914610332578063313ce567146103525780633685d41914610374578063395093511461039657600080fd5b806306fdde031461024b578063095ea7b31461027657806313114a9d146102a65780631694505e146102c557806318160ddd146102fd57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061076f565b60405161026d919061245d565b60405180910390f35b34801561028257600080fd5b506102966102913660046124ca565b610801565b604051901515815260200161026d565b3480156102b257600080fd5b50600b545b60405190815260200161026d565b3480156102d157600080fd5b506016546102e5906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561030957600080fd5b506009546102b7565b34801561031e57600080fd5b5061029661032d3660046124f6565b610818565b34801561033e57600080fd5b506102b761034d366004612537565b610881565b34801561035e57600080fd5b50600e5460405160ff909116815260200161026d565b34801561038057600080fd5b5061039461038f366004612550565b61090a565b005b3480156103a257600080fd5b506102966103b13660046124ca565b610ac1565b3480156103c257600080fd5b506102b7600f5481565b3480156103d857600080fd5b506103946103e7366004612537565b610af7565b3480156103f857600080fd5b50610394610407366004612550565b610be1565b34801561041857600080fd5b506102b7610427366004612582565b610c2f565b34801561043857600080fd5b506017546102e5906001600160a01b031681565b34801561045857600080fd5b5060175461029690600160a81b900460ff1681565b34801561047957600080fd5b50610394610488366004612550565b610cbc565b34801561049957600080fd5b506102966104a8366004612550565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104d257600080fd5b506103946104e13660046125ae565b610e0f565b3480156104f257600080fd5b506102b760115481565b34801561050857600080fd5b506102b7610517366004612550565b610e47565b34801561052857600080fd5b50610394610ea6565b34801561053d57600080fd5b506102b760195481565b34801561055357600080fd5b506015546102e5906001600160a01b031681565b34801561057357600080fd5b50610296610582366004612550565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105ac57600080fd5b506000546001600160a01b03166102e5565b3480156105ca57600080fd5b50610260610f08565b3480156105df57600080fd5b506102966105ee3660046124ca565b610f17565b3480156105ff57600080fd5b50610394610f66565b34801561061457600080fd5b506102966106233660046124ca565b61106c565b34801561063457600080fd5b506002546102b7565b34801561064957600080fd5b506102b760135481565b34801561065f57600080fd5b5061039461066e3660046125da565b611079565b34801561067f57600080fd5b506102b760185481565b34801561069557600080fd5b506103946106a4366004612537565b6110fb565b3480156106b557600080fd5b506102b76106c43660046125f5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156106fb57600080fd5b5061039461070a366004612550565b611180565b34801561071b57600080fd5b5061039461072a366004612537565b6111cb565b34801561073b57600080fd5b5061039461074a366004612537565b611276565b34801561075b57600080fd5b5061039461076a366004612550565b6112b8565b6060600c805461077e9061262e565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa9061262e565b80156107f75780601f106107cc576101008083540402835291602001916107f7565b820191906000526020600020905b8154815290600101906020018083116107da57829003601f168201915b5050505050905090565b600061080e338484611390565b5060015b92915050565b60006108258484846114b4565b610877843361087285604051806060016040528060288152602001612828602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906115fa565b611390565b5060019392505050565b6000600a548211156108ed5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006108f7611634565b90506109038382611657565b9392505050565b6000546001600160a01b031633146109345760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03811660009081526007602052604090205460ff1661099c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108e4565b60005b600854811015610abd57816001600160a01b0316600882815481106109c6576109c661269e565b6000918252602090912001546001600160a01b03161415610aab57600880546109f1906001906126ca565b81548110610a0157610a0161269e565b600091825260209091200154600880546001600160a01b039092169183908110610a2d57610a2d61269e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610a8557610a856126e1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ab5816126f7565b91505061099f565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161080e9185906108729086611699565b3360008181526007602052604090205460ff1615610b6c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108e4565b6000610b77836116f8565b505050506001600160a01b038416600090815260036020526040902054919250610ba391905082611747565b6001600160a01b038316600090815260036020526040902055600a54610bc99082611747565b600a55600b54610bd99084611699565b600b55505050565b6000546001600160a01b03163314610c0b5760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115610c835760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108e4565b81610ca2576000610c93846116f8565b50939550610812945050505050565b6000610cad846116f8565b50929550610812945050505050565b6000546001600160a01b03163314610ce65760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03811660009081526007602052604090205460ff1615610d4f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108e4565b6001600160a01b03811660009081526003602052604090205415610da9576001600160a01b038116600090815260036020526040902054610d8f90610881565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b03163314610e395760405162461bcd60e51b81526004016108e490612669565b600f92909255601155601355565b6001600160a01b03811660009081526007602052604081205460ff1615610e8457506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461081290610881565b6000546001600160a01b03163314610ed05760405162461bcd60e51b81526004016108e490612669565b600080546040516001600160a01b0390911690600080516020612850833981519152908390a3600080546001600160a01b0319169055565b6060600d805461077e9061262e565b600061080e338461087285604051806060016040528060258152602001612870602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906115fa565b6001546001600160a01b03163314610fcc5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108e4565b600254421161101d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108e4565b600154600080546040516001600160a01b03938416939091169160008051602061285083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061080e3384846114b4565b6000546001600160a01b031633146110a35760405162461bcd60e51b81526004016108e490612669565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110f090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146111255760405162461bcd60e51b81526004016108e490612669565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556111548142612712565b600255600080546040516001600160a01b0390911690600080516020612850833981519152908390a350565b6000546001600160a01b031633146111aa5760405162461bcd60e51b81526004016108e490612669565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146111f55760405162461bcd60e51b81526004016108e490612669565b6000811161125e5760405162461bcd60e51b815260206004820152603060248201527f6d6178207472616e73616374696f6e20616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108e4565b61127081670de0b6b3a764000061272a565b60195550565b6000546001600160a01b031633146112a05760405162461bcd60e51b81526004016108e490612669565b6112b281670de0b6b3a764000061272a565b60185550565b6000546001600160a01b031633146112e25760405162461bcd60e51b81526004016108e490612669565b6001600160a01b0381166113475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e4565b600080546040516001600160a01b038085169392169160008051602061285083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e4565b6001600160a01b0382166114535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e4565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115185760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108e4565b6000811161157a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108e4565b600061158530610e47565b601854909150811080159081906115a65750601754600160a01b900460ff16155b80156115c057506017546001600160a01b03868116911614155b80156115d55750601754600160a81b900460ff165b156115e85760185491506115e882611789565b6115f3858585611830565b5050505050565b6000818484111561161e5760405162461bcd60e51b81526004016108e4919061245d565b50600061162b84866126ca565b95945050505050565b6000806000611641611a98565b90925090506116508282611657565b9250505090565b600061090383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c1a565b6000806116a68385612712565b9050838110156109035760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e4565b600080600080600080600080600061170f8a611c48565b925092509250600080600061172d8d8686611728611634565b611c8a565b919f909e50909c50959a5093985091965092945050505050565b600061090383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115fa565b6017805460ff60a01b1916600160a01b17905560006117a9826002611657565b905060006117b78383611747565b9050476117c383611cda565b60006117cf4783611747565b90506117db8382611e43565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff60a01b19169055505050565b6001600160a01b03831660009081526006602052604090205460ff168061186f57506001600160a01b03821660009081526006602052604090205460ff165b156118815761187c611f20565b6118e4565b6019548111156118e45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108e4565b6001600160a01b03831660009081526007602052604090205460ff16801561192557506001600160a01b03821660009081526007602052604090205460ff16155b1561193a57611935838383611f65565b611a38565b6001600160a01b03831660009081526007602052604090205460ff1615801561197b57506001600160a01b03821660009081526007602052604090205460ff165b1561198b5761193583838361208b565b6001600160a01b03831660009081526007602052604090205460ff161580156119cd57506001600160a01b03821660009081526007602052604090205460ff16155b156119dd57611935838383612134565b6001600160a01b03831660009081526007602052604090205460ff168015611a1d57506001600160a01b03821660009081526007602052604090205460ff165b15611a2d57611935838383612187565b611a38838383612134565b6001600160a01b03831660009081526006602052604090205460ff1680611a7757506001600160a01b03821660009081526006602052604090205460ff165b15611a9357611a93601054600f55601254601155601454601355565b505050565b600a546009546000918291825b600854811015611bea57826003600060088481548110611ac757611ac761269e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b325750816004600060088481548110611b0b57611b0b61269e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b4857600a54600954945094505050509091565b611b8e6003600060088481548110611b6257611b6261269e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611747565b9250611bd66004600060088481548110611baa57611baa61269e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611747565b915080611be2816126f7565b915050611aa5565b50600954600a54611bfa91611657565b821015611c1157600a546009549350935050509091565b90939092509050565b60008183611c3b5760405162461bcd60e51b81526004016108e4919061245d565b50600061162b8486612749565b600080600080611c57856121fa565b90506000611c648661221c565b90506000611c7c82611c768986611747565b90611747565b979296509094509092505050565b6000808080611c998886612238565b90506000611ca78887612238565b90506000611cb58888612238565b90506000611cc782611c768686611747565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d0f57611d0f61269e565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d6357600080fd5b505afa158015611d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9b919061276b565b81600181518110611dae57611dae61269e565b6001600160a01b039283166020918202929092010152601654611dd49130911684611390565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e0d908590600090869030904290600401612788565b600060405180830381600087803b158015611e2757600080fd5b505af1158015611e3b573d6000803e3d6000fd5b505050505050565b601654611e5b9030906001600160a01b031684611390565b6016546001600160a01b031663f305d719823085600080611e846000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611ee757600080fd5b505af1158015611efb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115f391906127f9565b600f54158015611f305750601154155b8015611f3c5750601354155b15611f4357565b600f805460105560118054601255601380546014556000928390559082905555565b600080600080600080611f77876116f8565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150611fa99088611747565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054611fd89087611747565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546120079086611699565b6001600160a01b038916600090815260036020526040902055612029816122b7565b612033848361233f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161207891815260200190565b60405180910390a3505050505050505050565b60008060008060008061209d876116f8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506120cf9087611747565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546121059084611699565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546120079086611699565b600080600080600080612146876116f8565b95509550955095509550955061215e8984878a612363565b6001600160a01b038b16600090815260036020526040902054909650909350611fd89087611747565b600080600080600080612199876116f8565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506121cb9088611747565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546120cf9087611747565b60006108126064612216600f548561223890919063ffffffff16565b90611657565b600061081260646122166011548561223890919063ffffffff16565b60008261224757506000610812565b6000612253838561272a565b9050826122608583612749565b146109035760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108e4565b60006122c1611634565b905060006122cf8383612238565b306000908152600360205260409020549091506122ec9082611699565b3060009081526003602090815260408083209390935560079052205460ff1615611a93573060009081526004602052604090205461232a9084611699565b30600090815260046020526040902055505050565b600a5461234c9083611747565b600a55600b5461235c9082611699565b600b555050565b6000806013546000141561237b575083905082612454565b60135460009061239690612390866064611657565b90612238565b905060006123ac6123a5611634565b8390612238565b90506123b88682611747565b95506123c48783611747565b6015546001600160a01b03166000908152600360205260409020549097506123ec9082611699565b601580546001600160a01b03908116600090815260036020908152604091829020949094559154915185815291811692908b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a386869350935050505b94509492505050565b600060208083528351808285015260005b8181101561248a5785810183015185820160400152820161246e565b8181111561249c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146124c757600080fd5b50565b600080604083850312156124dd57600080fd5b82356124e8816124b2565b946020939093013593505050565b60008060006060848603121561250b57600080fd5b8335612516816124b2565b92506020840135612526816124b2565b929592945050506040919091013590565b60006020828403121561254957600080fd5b5035919050565b60006020828403121561256257600080fd5b8135610903816124b2565b8035801515811461257d57600080fd5b919050565b6000806040838503121561259557600080fd5b823591506125a56020840161256d565b90509250929050565b6000806000606084860312156125c357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156125ec57600080fd5b6109038261256d565b6000806040838503121561260857600080fd5b8235612613816124b2565b91506020830135612623816124b2565b809150509250929050565b600181811c9082168061264257607f821691505b6020821081141561266357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156126dc576126dc6126b4565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561270b5761270b6126b4565b5060010190565b60008219821115612725576127256126b4565b500190565b6000816000190483118215151615612744576127446126b4565b500290565b60008261276657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561277d57600080fd5b8151610903816124b2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d85784516001600160a01b0316835293830193918301916001016127b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561280e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f79b4432b9272b6b0a440b82e03cd1da9b9ee92125e68df146c5855f1b4152664736f6c63430008090033

Deployed Bytecode Sourcemap

25491:18993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28056:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28968:161;;;;;;;;;;-1:-1:-1;28968:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;28968:161:0;1072:187:1;30089:87:0;;;;;;;;;;-1:-1:-1;30158:10:0;;30089:87;;;1410:25:1;;;1398:2;1383:18;30089:87:0;1264:177:1;26613:42:0;;;;;;;;;;-1:-1:-1;26613:42:0;;;;-1:-1:-1;;;;;26613:42:0;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;26613:42:0;1446:230:1;28333:95:0;;;;;;;;;;-1:-1:-1;28413:7:0;;28333:95;;29137:313;;;;;;;;;;-1:-1:-1;29137:313:0;;;;;:::i;:::-;;:::i;31013:253::-;;;;;;;;;;-1:-1:-1;31013:253:0;;;;;:::i;:::-;;:::i;28242:83::-;;;;;;;;;;-1:-1:-1;28308:9:0;;28242:83;;28308:9;;;;2469:36:1;;2457:2;2442:18;28242:83:0;2327:184:1;31615:479:0;;;;;;;;;;-1:-1:-1;31615:479:0;;;;;:::i;:::-;;:::i;:::-;;29458:218;;;;;;;;;;-1:-1:-1;29458:218:0;;;;;:::i;:::-;;:::i;26255:26::-;;;;;;;;;;;;;;;;30184:377;;;;;;;;;;-1:-1:-1;30184:377:0;;;;;:::i;:::-;;:::i;43459:111::-;;;;;;;;;;-1:-1:-1;43459:111:0;;;;;:::i;:::-;;:::i;30569:436::-;;;;;;;;;;-1:-1:-1;30569:436:0;;;;;:::i;:::-;;:::i;26662:29::-;;;;;;;;;;-1:-1:-1;26662:29:0;;;;-1:-1:-1;;;;;26662:29:0;;;26732:40;;;;;;;;;;-1:-1:-1;26732:40:0;;;;-1:-1:-1;;;26732:40:0;;;;;;31274:333;;;;;;;;;;-1:-1:-1;31274:333:0;;;;;:::i;:::-;;:::i;36116:123::-;;;;;;;;;;-1:-1:-1;36116:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36204:27:0;36180:4;36204:27;;;:18;:27;;;;;;;;;36116:123;43704:202;;;;;;;;;;-1:-1:-1;43704:202:0;;;;;:::i;:::-;;:::i;26343:32::-;;;;;;;;;;;;;;;;28436:198;;;;;;;;;;-1:-1:-1;28436:198:0;;;;;:::i;:::-;;:::i;2174:148::-;;;;;;;;;;;;;:::i;26857:55::-;;;;;;;;;;;;;;;;26530:70;;;;;;;;;;-1:-1:-1;26530:70:0;;;;-1:-1:-1;;;;;26530:70:0;;;29961:120;;;;;;;;;;-1:-1:-1;29961:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30053:20:0;30029:4;30053:20;;;:11;:20;;;;;;;;;29961:120;1531:79;;;;;;;;;;-1:-1:-1;1569:7:0;1596:6;-1:-1:-1;;;;;1596:6:0;1531:79;;28147:87;;;;;;;;;;;;;:::i;29684:269::-;;;;;;;;;;-1:-1:-1;29684:269:0;;;;;:::i;:::-;;:::i;3196:305::-;;;;;;;;;;;;;:::i;28642:167::-;;;;;;;;;;-1:-1:-1;28642:167:0;;;;;:::i;:::-;;:::i;2729:89::-;;;;;;;;;;-1:-1:-1;2801:9:0;;2729:89;;26445:27;;;;;;;;;;;;;;;;44304:171;;;;;;;;;;-1:-1:-1;44304:171:0;;;;;:::i;:::-;;:::i;26781:69::-;;;;;;;;;;;;;;;;2894:226;;;;;;;;;;-1:-1:-1;2894:226:0;;;;;:::i;:::-;;:::i;28817:143::-;;;;;;;;;;-1:-1:-1;28817:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;28925:18:0;;;28898:7;28925:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28817:143;43582:110;;;;;;;;;;-1:-1:-1;43582:110:0;;;;;:::i;:::-;;:::i;44083:209::-;;;;;;;;;;-1:-1:-1;44083:209:0;;;;;:::i;:::-;;:::i;43918:153::-;;;;;;;;;;-1:-1:-1;43918:153:0;;;;;:::i;:::-;;:::i;2477:244::-;;;;;;;;;;-1:-1:-1;2477:244:0;;;;;:::i;:::-;;:::i;28056:83::-;28093:13;28126:5;28119:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28056:83;:::o;28968:161::-;29043:4;29060:39;197:10;29083:7;29092:6;29060:8;:39::i;:::-;-1:-1:-1;29117:4:0;28968:161;;;;;:::o;29137:313::-;29235:4;29252:36;29262:6;29270:9;29281:6;29252:9;:36::i;:::-;29299:121;29308:6;197:10;29330:89;29368:6;29330:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29330:19:0;;;;;;:11;:19;;;;;;;;197:10;29330:33;;;;;;;;;;:37;:89::i;:::-;29299:8;:121::i;:::-;-1:-1:-1;29438:4:0;29137:313;;;;;:::o;31013:253::-;31079:7;31118;;31107;:18;;31099:73;;;;-1:-1:-1;;;31099:73:0;;4880:2:1;31099:73:0;;;4862:21:1;4919:2;4899:18;;;4892:30;4958:34;4938:18;;;4931:62;-1:-1:-1;;;5009:18:1;;;5002:40;5059:19;;31099:73:0;;;;;;;;;31183:19;31206:10;:8;:10::i;:::-;31183:33;-1:-1:-1;31234:24:0;:7;31183:33;31234:11;:24::i;:::-;31227:31;31013:253;-1:-1:-1;;;31013:253:0:o;31615:479::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31697:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31689:60;;;::::0;-1:-1:-1;;;31689:60:0;;5652:2:1;31689:60:0::1;::::0;::::1;5634:21:1::0;5691:2;5671:18;;;5664:30;5730:29;5710:18;;;5703:57;5777:18;;31689:60:0::1;5450:351:1::0;31689:60:0::1;31765:9;31760:327;31784:9;:16:::0;31780:20;::::1;31760:327;;;31842:7;-1:-1:-1::0;;;;;31826:23:0::1;:9;31836:1;31826:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31826:12:0::1;:23;31822:254;;;31885:9;31895:16:::0;;:20:::1;::::0;31914:1:::1;::::0;31895:20:::1;:::i;:::-;31885:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31870:9:::1;:12:::0;;-1:-1:-1;;;;;31885:31:0;;::::1;::::0;31880:1;;31870:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31870:46:0::1;-1:-1:-1::0;;;;;31870:46:0;;::::1;;::::0;;31935:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31974:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31974:28:0::1;::::0;;32021:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32021:15:0;;;;;-1:-1:-1;;;;;;32021:15:0::1;::::0;;;;;31760:327:::1;31615:479:::0;:::o;31822:254::-:1;31802:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31760:327;;;;31615:479:::0;:::o;29458:218::-;197:10;29546:4;29595:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29595:34:0;;;;;;;;;;29546:4;;29563:83;;29586:7;;29595:50;;29634:10;29595:38;:50::i;30184:377::-;197:10;30236:14;30285:19;;;:11;:19;;;;;;;;30284:20;30276:77;;;;-1:-1:-1;;;30276:77:0;;6674:2:1;30276:77:0;;;6656:21:1;6713:2;6693:18;;;6686:30;6752:34;6732:18;;;6725:62;-1:-1:-1;;;6803:18:1;;;6796:42;6855:19;;30276:77:0;6472:408:1;30276:77:0;30365:15;30389:19;30400:7;30389:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30437:15:0;;;;;;:7;:15;;;;;;30364:44;;-1:-1:-1;30437:28:0;;:15;-1:-1:-1;30364:44:0;30437:19;:28::i;:::-;-1:-1:-1;;;;;30419:15:0;;;;;;:7;:15;;;;;:46;30486:7;;:20;;30498:7;30486:11;:20::i;:::-;30476:7;:30;30530:10;;:23;;30545:7;30530:14;:23::i;:::-;30517:10;:36;-1:-1:-1;;;30184:377:0:o;43459:111::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43528:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;43528:34:0::1;43558:4;43528:34;::::0;;43459:111::o;30569:436::-;30659:7;30698;;30687;:18;;30679:62;;;;-1:-1:-1;;;30679:62:0;;7087:2:1;30679:62:0;;;7069:21:1;7126:2;7106:18;;;7099:30;7165:33;7145:18;;;7138:61;7216:18;;30679:62:0;6885:355:1;30679:62:0;30757:17;30752:246;;30792:15;30816:19;30827:7;30816:10;:19::i;:::-;-1:-1:-1;30791:44:0;;-1:-1:-1;30850:14:0;;-1:-1:-1;;;;;30850:14:0;30752:246;30899:23;30930:19;30941:7;30930:10;:19::i;:::-;-1:-1:-1;30897:52:0;;-1:-1:-1;30964:22:0;;-1:-1:-1;;;;;30964:22:0;31274:333;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31357:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31356:21;31348:61;;;::::0;-1:-1:-1;;;31348:61:0;;5652:2:1;31348:61:0::1;::::0;::::1;5634:21:1::0;5691:2;5671:18;;;5664:30;5730:29;5710:18;;;5703:57;5777:18;;31348:61:0::1;5450:351:1::0;31348:61:0::1;-1:-1:-1::0;;;;;31423:16:0;::::1;31442:1;31423:16:::0;;;:7:::1;:16;::::0;;;;;:20;31420:108:::1;;-1:-1:-1::0;;;;;31499:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31479:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31460:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31420:108:::1;-1:-1:-1::0;;;;;31538:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31538:27:0::1;31561:4;31538:27:::0;;::::1;::::0;;;31576:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31576:23:0::1;::::0;;::::1;::::0;;31274:333::o;43704:202::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;43814:7:::1;:16:::0;;;;43841:13:::1;:28:::0;43880:8:::1;:18:::0;43704:202::o;28436:198::-;-1:-1:-1;;;;;28526:20:0;;28502:7;28526:20;;;:11;:20;;;;;;;;28522:49;;;-1:-1:-1;;;;;;28555:16:0;;;;;:7;:16;;;;;;;28436:198::o;28522:49::-;-1:-1:-1;;;;;28609:16:0;;;;;;:7;:16;;;;;;28589:37;;:19;:37::i;2174:148::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;2281:1:::1;2265:6:::0;;2244:40:::1;::::0;-1:-1:-1;;;;;2265:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;2244:40:0;2281:1;;2244:40:::1;2312:1;2295:19:::0;;-1:-1:-1;;;;;;2295:19:0::1;::::0;;2174:148::o;28147:87::-;28186:13;28219:7;28212:14;;;;;:::i;29684:269::-;29777:4;29794:129;197:10;29817:7;29826:96;29865:15;29826:96;;;;;;;;;;;;;;;;;197:10;29826:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29826:34:0;;;;;;;;;;;;:38;:96::i;3196:305::-;3248:14;;-1:-1:-1;;;;;3248:14:0;3266:10;3248:28;3240:76;;;;-1:-1:-1;;;3240:76:0;;7447:2:1;3240:76:0;;;7429:21:1;7486:2;7466:18;;;7459:30;7525:34;7505:18;;;7498:62;-1:-1:-1;;;7576:18:1;;;7569:33;7619:19;;3240:76:0;7245:399:1;3240:76:0;3353:9;;3335:15;:27;3327:72;;;;-1:-1:-1;;;3327:72:0;;7851:2:1;3327:72:0;;;7833:21:1;7890:2;7870:18;;;7863:30;7929:33;7909:18;;;7902:61;7980:18;;3327:72:0;7649:355:1;3327:72:0;3444:14;;;3436:6;;3415:44;;-1:-1:-1;;;;;3444:14:0;;;;3436:6;;;;-1:-1:-1;;;;;;;;;;;3415:44:0;;3479:14;;;3470:23;;-1:-1:-1;;;;;;3470:23:0;-1:-1:-1;;;;;3479:14:0;;;3470:23;;;;;;3196:305::o;28642:167::-;28720:4;28737:42;197:10;28761:9;28772:6;28737:9;:42::i;44304:171::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;44381:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;44381:32:0::1;-1:-1:-1::0;;;;44381:32:0;;::::1;;::::0;;44429:38:::1;::::0;::::1;::::0;::::1;::::0;44405:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;44429:38:0::1;;;;;;;;44304:171:::0;:::o;2894:226::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;2975:6:::1;::::0;;;2958:23;;-1:-1:-1;;;;;;2958:23:0;;::::1;-1:-1:-1::0;;;;;2975:6:0;::::1;2958:23;::::0;;;2992:19:::1;::::0;;3034:22:::1;3052:4:::0;3034:15:::1;:22;:::i;:::-;3022:9;:34:::0;3109:1:::1;3093:6:::0;;3072:40:::1;::::0;-1:-1:-1;;;;;3093:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;3072:40:0;3109:1;;3072:40:::1;2894:226:::0;:::o;43582:110::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43649:27:0::1;43679:5;43649:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;43649:35:0::1;::::0;;43582:110::o;44083:209::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;44182:1:::1;44168:11;:15;44160:76;;;::::0;-1:-1:-1;;;44160:76:0;;8344:2:1;44160:76:0::1;::::0;::::1;8326:21:1::0;8383:2;8363:18;;;8356:30;8422:34;8402:18;;;8395:62;-1:-1:-1;;;8473:18:1;;;8466:46;8529:19;;44160:76:0::1;8142:412:1::0;44160:76:0::1;44262:22;:11:::0;44277:6:::1;44262:22;:::i;:::-;44247:12;:37:::0;-1:-1:-1;44083:209:0:o;43918:153::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;44043:20:::1;:9:::0;44056:6:::1;44043:20;:::i;:::-;44011:29;:52:::0;-1:-1:-1;43918:153:0:o;2477:244::-;1743:6;;-1:-1:-1;;;;;1743:6:0;197:10;1743:22;1735:67;;;;-1:-1:-1;;;1735:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2566:22:0;::::1;2558:73;;;::::0;-1:-1:-1;;;2558:73:0;;8934:2:1;2558:73:0::1;::::0;::::1;8916:21:1::0;8973:2;8953:18;;;8946:30;9012:34;8992:18;;;8985:62;-1:-1:-1;;;9063:18:1;;;9056:36;9109:19;;2558:73:0::1;8732:402:1::0;2558:73:0::1;2668:6;::::0;;2647:38:::1;::::0;-1:-1:-1;;;;;2647:38:0;;::::1;::::0;2668:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2647:38:0;::::1;2696:6;:17:::0;;-1:-1:-1;;;;;;2696:17:0::1;-1:-1:-1::0;;;;;2696:17:0;;;::::1;::::0;;;::::1;::::0;;2477:244::o;36247:337::-;-1:-1:-1;;;;;36340:19:0;;36332:68;;;;-1:-1:-1;;;36332:68:0;;9341:2:1;36332:68:0;;;9323:21:1;9380:2;9360:18;;;9353:30;9419:34;9399:18;;;9392:62;-1:-1:-1;;;9470:18:1;;;9463:34;9514:19;;36332:68:0;9139:400:1;36332:68:0;-1:-1:-1;;;;;36419:21:0;;36411:68;;;;-1:-1:-1;;;36411:68:0;;9746:2:1;36411:68:0;;;9728:21:1;9785:2;9765:18;;;9758:30;9824:34;9804:18;;;9797:62;-1:-1:-1;;;9875:18:1;;;9868:32;9917:19;;36411:68:0;9544:398:1;36411:68:0;-1:-1:-1;;;;;36492:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36544:32;;1410:25:1;;;36544:32:0;;1383:18:1;36544:32:0;;;;;;;36247:337;;;:::o;36592:1153::-;-1:-1:-1;;;;;36714:18:0;;36706:68;;;;-1:-1:-1;;;36706:68:0;;10149:2:1;36706:68:0;;;10131:21:1;10188:2;10168:18;;;10161:30;10227:34;10207:18;;;10200:62;-1:-1:-1;;;10278:18:1;;;10271:35;10323:19;;36706:68:0;9947:401:1;36706:68:0;36802:1;36793:6;:10;36785:64;;;;-1:-1:-1;;;36785:64:0;;10555:2:1;36785:64:0;;;10537:21:1;10594:2;10574:18;;;10567:30;10633:34;10613:18;;;10606:62;-1:-1:-1;;;10684:18:1;;;10677:39;10733:19;;36785:64:0;10353:405:1;36785:64:0;37144:28;37175:24;37193:4;37175:9;:24::i;:::-;37269:29;;37144:55;;-1:-1:-1;37245:53:0;;;;;;;37327;;-1:-1:-1;37364:16:0;;-1:-1:-1;;;37364:16:0;;;;37363:17;37327:53;:91;;;;-1:-1:-1;37405:13:0;;-1:-1:-1;;;;;37397:21:0;;;37405:13;;37397:21;;37327:91;:129;;;;-1:-1:-1;37435:21:0;;-1:-1:-1;;;37435:21:0;;;;37327:129;37309:318;;;37506:29;;37483:52;;37579:36;37594:20;37579:14;:36::i;:::-;37707:30;37722:4;37727:2;37730:6;37707:14;:30::i;:::-;36695:1050;;36592:1153;;;:::o;7821:192::-;7907:7;7943:12;7935:6;;;;7927:29;;;;-1:-1:-1;;;7927:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7967:9:0;7979:5;7983:1;7979;:5;:::i;:::-;7967:17;7821:192;-1:-1:-1;;;;;7821:192:0:o;34207:163::-;34248:7;34269:15;34286;34305:19;:17;:19::i;:::-;34268:56;;-1:-1:-1;34268:56:0;-1:-1:-1;34342:20:0;34268:56;;34342:11;:20::i;:::-;34335:27;;;;34207:163;:::o;9219:132::-;9277:7;9304:39;9308:1;9311;9304:39;;;;;;;;;;;;;;;;;:3;:39::i;6918:181::-;6976:7;;7008:5;7012:1;7008;:5;:::i;:::-;6996:17;;7037:1;7032;:6;;7024:46;;;;-1:-1:-1;;;7024:46:0;;10965:2:1;7024:46:0;;;10947:21:1;11004:2;10984:18;;;10977:30;11043:29;11023:18;;;11016:57;11090:18;;7024:46:0;10763:351:1;33005:419:0;33064:7;33073;33082;33091;33100;33109;33130:23;33155:12;33169:18;33191:20;33203:7;33191:11;:20::i;:::-;33129:82;;;;;;33223:15;33240:23;33265:12;33281:50;33293:7;33302:4;33308:10;33320;:8;:10::i;:::-;33281:11;:50::i;:::-;33222:109;;;;-1:-1:-1;33222:109:0;;-1:-1:-1;33382:15:0;;-1:-1:-1;33399:4:0;;-1:-1:-1;33405:10:0;;-1:-1:-1;33005:419:0;;-1:-1:-1;;;;;33005:419:0:o;7382:136::-;7440:7;7467:43;7471:1;7474;7467:43;;;;;;;;;;;;;;;;;:3;:43::i;37753:985::-;27219:16;:23;;-1:-1:-1;;;;27219:23:0;-1:-1:-1;;;27219:23:0;;;;37904:27:::1;:20:::0;37929:1:::1;37904:24;:27::i;:::-;37889:42:::0;-1:-1:-1;37942:17:0::1;37962:30;:20:::0;37889:42;37962:24:::1;:30::i;:::-;37942:50:::0;-1:-1:-1;38295:21:0::1;38361:22;38378:4:::0;38361:16:::1;:22::i;:::-;38514:18;38535:41;:21;38561:14:::0;38535:25:::1;:41::i;:::-;38514:62;;38626:35;38639:9;38650:10;38626:12;:35::i;:::-;38687:43;::::0;;11321:25:1;;;11377:2;11362:18;;11355:34;;;11405:18;;;11398:34;;;38687:43:0::1;::::0;11309:2:1;11294:18;38687:43:0::1;;;;;;;-1:-1:-1::0;;27265:16:0;:24;;-1:-1:-1;;;;27265:24:0;;;-1:-1:-1;;;37753:985:0:o;39937:1096::-;-1:-1:-1;;;;;40040:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40070:29:0;;;;;;:18;:29;;;;;;;;40040:59;40037:245;;;40127:14;:12;:14::i;:::-;40037:245;;;40213:12;;40203:6;:22;;40195:75;;;;-1:-1:-1;;;40195:75:0;;11645:2:1;40195:75:0;;;11627:21:1;11684:2;11664:18;;;11657:30;11723:34;11703:18;;;11696:62;-1:-1:-1;;;11774:18:1;;;11767:38;11822:19;;40195:75:0;11443:404:1;40195:75:0;-1:-1:-1;;;;;40298:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40322:22:0;;;;;;:11;:22;;;;;;;;40321:23;40298:46;40294:597;;;40361:48;40383:6;40391:9;40402:6;40361:21;:48::i;:::-;40294:597;;;-1:-1:-1;;;;;40432:19:0;;;;;;:11;:19;;;;;;;;40431:20;:46;;;;-1:-1:-1;;;;;;40455:22:0;;;;;;:11;:22;;;;;;;;40431:46;40427:464;;;40494:46;40514:6;40522:9;40533:6;40494:19;:46::i;40427:464::-;-1:-1:-1;;;;;40563:19:0;;;;;;:11;:19;;;;;;;;40562:20;:47;;;;-1:-1:-1;;;;;;40587:22:0;;;;;;:11;:22;;;;;;;;40586:23;40562:47;40558:333;;;40626:44;40644:6;40652:9;40663:6;40626:17;:44::i;40558:333::-;-1:-1:-1;;;;;40692:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40715:22:0;;;;;;:11;:22;;;;;;;;40692:45;40688:203;;;40754:48;40776:6;40784:9;40795:6;40754:21;:48::i;40688:203::-;40835:44;40853:6;40861:9;40872:6;40835:17;:44::i;:::-;-1:-1:-1;;;;;40914:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40944:29:0;;;;;;:18;:29;;;;;;;;40914:59;40911:115;;;40999:15;35997;;35987:7;:25;36038:21;;36022:13;:37;36080:16;;36069:8;:27;35944:160;40999:15;39937:1096;;;:::o;34378:561::-;34475:7;;34511;;34428;;;;;34535:289;34559:9;:16;34555:20;;34535:289;;;34625:7;34601;:21;34609:9;34619:1;34609:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34609:12:0;34601:21;;;;;;;;;;;;;:31;;:66;;;34660:7;34636;:21;34644:9;34654:1;34644:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34644:12:0;34636:21;;;;;;;;;;;;;:31;34601:66;34597:97;;;34677:7;;34686;;34669:25;;;;;;;34378:561;;:::o;34597:97::-;34719:34;34731:7;:21;34739:9;34749:1;34739:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34739:12:0;34731:21;;;;;;;;;;;;;34719:7;;:11;:34::i;:::-;34709:44;;34778:34;34790:7;:21;34798:9;34808:1;34798:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34798:12:0;34790:21;;;;;;;;;;;;;34778:7;;:11;:34::i;:::-;34768:44;-1:-1:-1;34577:3:0;;;;:::i;:::-;;;;34535:289;;;-1:-1:-1;34860:7:0;;34848;;:20;;:11;:20::i;:::-;34838:7;:30;34834:61;;;34878:7;;34887;;34870:25;;;;;;34378:561;;:::o;34834:61::-;34914:7;;34923;;-1:-1:-1;34378:561:0;-1:-1:-1;34378:561:0:o;9847:278::-;9933:7;9968:12;9961:5;9953:28;;;;-1:-1:-1;;;9953:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9992:9:0;10004:5;10008:1;10004;:5;:::i;33432:330::-;33492:7;33501;33510;33530:12;33545:24;33561:7;33545:15;:24::i;:::-;33530:39;;33580:18;33601:30;33623:7;33601:21;:30::i;:::-;33580:51;-1:-1:-1;33642:23:0;33668:33;33580:51;33668:17;:7;33680:4;33668:11;:17::i;:::-;:21;;:33::i;:::-;33642:59;33737:4;;-1:-1:-1;33743:10:0;;-1:-1:-1;33432:330:0;;-1:-1:-1;;;33432:330:0:o;33770:429::-;33885:7;;;;33941:24;:7;33953:11;33941;:24::i;:::-;33923:42;-1:-1:-1;33976:12:0;33991:21;:4;34000:11;33991:8;:21::i;:::-;33976:36;-1:-1:-1;34023:18:0;34044:27;:10;34059:11;34044:14;:27::i;:::-;34023:48;-1:-1:-1;34082:23:0;34108:33;34023:48;34108:17;:7;34120:4;34108:11;:17::i;:33::-;34160:7;;;;-1:-1:-1;34186:4:0;;-1:-1:-1;33770:429:0;;-1:-1:-1;;;;;;;33770:429:0:o;38746:589::-;38896:16;;;38910:1;38896:16;;;;;;;;38872:21;;38896:16;;;;;;;;;;-1:-1:-1;38896:16:0;38872:40;;38941:4;38923;38928:1;38923:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38923:23:0;;;:7;;;;;;;;;;:23;;;;38967:15;;:22;;;-1:-1:-1;;;38967:22:0;;;;:15;;;;;:20;;:22;;;;;38923:7;;38967:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38957:4;38962:1;38957:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38957:32:0;;;:7;;;;;;;;;:32;39034:15;;39002:62;;39019:4;;39034:15;39052:11;39002:8;:62::i;:::-;39103:15;;:224;;-1:-1:-1;;;39103:224:0;;-1:-1:-1;;;;;39103:15:0;;;;:66;;:224;;39184:11;;39103:15;;39254:4;;39281;;39301:15;;39103:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38801:534;38746:589;:::o;39343:513::-;39523:15;;39491:62;;39508:4;;-1:-1:-1;;;;;39523:15:0;39541:11;39491:8;:62::i;:::-;39596:15;;-1:-1:-1;;;;;39596:15:0;:31;39635:9;39668:4;39688:11;39596:15;;39800:7;1569;1596:6;-1:-1:-1;;;;;1596:6:0;;1531:79;39800:7;39596:252;;;;;;-1:-1:-1;;;;;;39596:252:0;;;-1:-1:-1;;;;;13806:15:1;;;39596:252:0;;;13788:34:1;13838:18;;;13831:34;;;;13881:18;;;13874:34;;;;13924:18;;;13917:34;13988:15;;;13967:19;;;13960:44;39822:15:0;14020:19:1;;;14013:35;13722:19;;39596:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35606:326::-;35652:7;;:12;:34;;;;-1:-1:-1;35668:13:0;;:18;35652:34;:49;;;;-1:-1:-1;35690:8:0;;:11;35652:49;35649:61;;;35606:326::o;35649:61::-;35748:7;;;35730:15;:25;35790:13;;;35766:21;:37;35833:8;;;35814:16;:27;-1:-1:-1;35862:11:0;;;;35884:17;;;;35912:12;35606:326::o;42881:566::-;42984:15;43001:23;43026:12;43040:23;43065:12;43079:18;43101:19;43112:7;43101:10;:19::i;:::-;-1:-1:-1;;;;;43149:15:0;;;;;;:7;:15;;;;;;42983:137;;-1:-1:-1;42983:137:0;;-1:-1:-1;42983:137:0;;-1:-1:-1;42983:137:0;-1:-1:-1;42983:137:0;-1:-1:-1;42983:137:0;-1:-1:-1;43149:28:0;;43169:7;43149:19;:28::i;:::-;-1:-1:-1;;;;;43131:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43206:7;:15;;;;:28;;43226:7;43206:19;:28::i;:::-;-1:-1:-1;;;;;43188:15:0;;;;;;;:7;:15;;;;;;:46;;;;43266:18;;;;;;;:39;;43289:15;43266:22;:39::i;:::-;-1:-1:-1;;;;;43245:18:0;;;;;;:7;:18;;;;;:60;43319:26;43334:10;43319:14;:26::i;:::-;43356:23;43368:4;43374;43356:11;:23::i;:::-;43412:9;-1:-1:-1;;;;;43395:44:0;43404:6;-1:-1:-1;;;;;43395:44:0;;43423:15;43395:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;43395:44:0;;;;;;;;42972:475;;;;;;42881:566;;;:::o;42287:586::-;42388:15;42405:23;42430:12;42444:23;42469:12;42483:18;42505:19;42516:7;42505:10;:19::i;:::-;-1:-1:-1;;;;;42553:15:0;;;;;;:7;:15;;;;;;42387:137;;-1:-1:-1;42387:137:0;;-1:-1:-1;42387:137:0;;-1:-1:-1;42387:137:0;-1:-1:-1;42387:137:0;-1:-1:-1;42387:137:0;-1:-1:-1;42553:28:0;;42387:137;42553:19;:28::i;:::-;-1:-1:-1;;;;;42535:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42613:18;;;;;:7;:18;;;;;:39;;42636:15;42613:22;:39::i;:::-;-1:-1:-1;;;;;42592:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42684:7;:18;;;;:39;;42707:15;42684:22;:39::i;41045:615::-;41150:15;41167:23;41192:12;41206:23;41231:12;41245:18;41267:19;41278:7;41267:10;:19::i;:::-;41149:137;;;;;;;;;;;;41334:59;41343:6;41351:15;41368;41385:7;41334:8;:59::i;:::-;-1:-1:-1;;;;;41422:15:0;;;;;;:7;:15;;;;;;41297:96;;-1:-1:-1;41297:96:0;;-1:-1:-1;41422:28:0;;41442:7;41422:19;:28::i;32102:642::-;32205:15;32222:23;32247:12;32261:23;32286:12;32300:18;32322:19;32333:7;32322:10;:19::i;:::-;-1:-1:-1;;;;;32370:15:0;;;;;;:7;:15;;;;;;32204:137;;-1:-1:-1;32204:137:0;;-1:-1:-1;32204:137:0;;-1:-1:-1;32204:137:0;-1:-1:-1;32204:137:0;-1:-1:-1;32204:137:0;-1:-1:-1;32370:28:0;;32390:7;32370:19;:28::i;:::-;-1:-1:-1;;;;;32352:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32427:7;:15;;;;:28;;32447:7;32427:19;:28::i;35318:128::-;35382:7;35409:29;35434:3;35409:20;35421:7;;35409;:11;;:20;;;;:::i;:::-;:24;;:29::i;35454:140::-;35524:7;35551:35;35582:3;35551:26;35563:13;;35551:7;:11;;:26;;;;:::i;8272:471::-;8330:7;8575:6;8571:47;;-1:-1:-1;8605:1:0;8598:8;;8571:47;8630:9;8642:5;8646:1;8642;:5;:::i;:::-;8630:17;-1:-1:-1;8675:1:0;8666:5;8670:1;8630:17;8666:5;:::i;:::-;:10;8658:56;;;;-1:-1:-1;;;8658:56:0;;14572:2:1;8658:56:0;;;14554:21:1;14611:2;14591:18;;;14584:30;14650:34;14630:18;;;14623:62;-1:-1:-1;;;14701:18:1;;;14694:31;14742:19;;8658:56:0;14370:397:1;34951:355:0;35014:19;35037:10;:8;:10::i;:::-;35014:33;-1:-1:-1;35058:18:0;35079:27;:10;35014:33;35079:14;:27::i;:::-;35158:4;35142:22;;;;:7;:22;;;;;;35058:48;;-1:-1:-1;35142:38:0;;35058:48;35142:26;:38::i;:::-;35133:4;35117:22;;;;:7;:22;;;;;;;;:63;;;;35194:11;:26;;;;;;35191:107;;;35276:4;35260:22;;;;:7;:22;;;;;;:38;;35287:10;35260:26;:38::i;:::-;35251:4;35235:22;;;;:7;:22;;;;;:63;35003:303;;34951:355;:::o;32850:147::-;32928:7;;:17;;32940:4;32928:11;:17::i;:::-;32918:7;:27;32969:10;;:20;;32984:4;32969:14;:20::i;:::-;32956:10;:33;-1:-1:-1;;32850:147:0:o;41668:607::-;41791:7;41800;41828:8;;41838:1;41828:11;41825:62;;;-1:-1:-1;41851:15:0;;-1:-1:-1;41868:15:0;41844:40;;41825:62;41934:8;;41897:13;;41913:30;;:16;:7;41925:3;41913:11;:16::i;:::-;:20;;:30::i;:::-;41897:46;;41954:13;41970:21;41980:10;:8;:10::i;:::-;41970:5;;:9;:21::i;:::-;41954:37;-1:-1:-1;42020:26:0;:15;41954:37;42020:19;:26::i;:::-;42002:44;-1:-1:-1;42075:26:0;:15;42095:5;42075:19;:26::i;:::-;42142:10;;-1:-1:-1;;;;;42142:10:0;42134:19;;;;:7;:19;;;;;;42057:44;;-1:-1:-1;42134:30:0;;42158:5;42134:23;:30::i;:::-;42120:10;;;-1:-1:-1;;;;;42120:10:0;;;42112:19;;;;:7;:19;;;;;;;;;:52;;;;42197:10;;42180:35;;1410:25:1;;;42197:10:0;;;;42180:35;;;;;;1383:18:1;42180:35:0;;;;;;;42233:15;42250;42226:40;;;;;;41668:607;;;;;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1681:456::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1882:9;1869:23;1901:31;1926:5;1901:31;:::i;:::-;1951:5;-1:-1:-1;2008:2:1;1993:18;;1980:32;2021:33;1980:32;2021:33;:::i;:::-;1681:456;;2073:7;;-1:-1:-1;;;2127:2:1;2112:18;;;;2099:32;;1681:456::o;2142:180::-;2201:6;2254:2;2242:9;2233:7;2229:23;2225:32;2222:52;;;2270:1;2267;2260:12;2222:52;-1:-1:-1;2293:23:1;;2142:180;-1:-1:-1;2142:180:1:o;2516:247::-;2575:6;2628:2;2616:9;2607:7;2603:23;2599:32;2596:52;;;2644:1;2641;2634:12;2596:52;2683:9;2670:23;2702:31;2727:5;2702:31;:::i;2768:160::-;2833:20;;2889:13;;2882:21;2872:32;;2862:60;;2918:1;2915;2908:12;2862:60;2768:160;;;:::o;2933:248::-;2998:6;3006;3059:2;3047:9;3038:7;3034:23;3030:32;3027:52;;;3075:1;3072;3065:12;3027:52;3111:9;3098:23;3088:33;;3140:35;3171:2;3160:9;3156:18;3140:35;:::i;:::-;3130:45;;2933:248;;;;;:::o;3394:316::-;3471:6;3479;3487;3540:2;3528:9;3519:7;3515:23;3511:32;3508:52;;;3556:1;3553;3546:12;3508:52;-1:-1:-1;;3579:23:1;;;3649:2;3634:18;;3621:32;;-1:-1:-1;3700:2:1;3685:18;;;3672:32;;3394:316;-1:-1:-1;3394:316:1:o;3715:180::-;3771:6;3824:2;3812:9;3803:7;3799:23;3795:32;3792:52;;;3840:1;3837;3830:12;3792:52;3863:26;3879:9;3863:26;:::i;3900:388::-;3968:6;3976;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;4084:9;4071:23;4103:31;4128:5;4103:31;:::i;:::-;4153:5;-1:-1:-1;4210:2:1;4195:18;;4182:32;4223:33;4182:32;4223:33;:::i;:::-;4275:7;4265:17;;;3900:388;;;;;:::o;4293:380::-;4372:1;4368:12;;;;4415;;;4436:61;;4490:4;4482:6;4478:17;4468:27;;4436:61;4543:2;4535:6;4532:14;4512:18;4509:38;4506:161;;;4589:10;4584:3;4580:20;4577:1;4570:31;4624:4;4621:1;4614:15;4652:4;4649:1;4642:15;4506:161;;4293:380;;;:::o;5089:356::-;5291:2;5273:21;;;5310:18;;;5303:30;5369:34;5364:2;5349:18;;5342:62;5436:2;5421:18;;5089:356::o;5806:127::-;5867:10;5862:3;5858:20;5855:1;5848:31;5898:4;5895:1;5888:15;5922:4;5919:1;5912:15;5938:127;5999:10;5994:3;5990:20;5987:1;5980:31;6030:4;6027:1;6020:15;6054:4;6051:1;6044:15;6070:125;6110:4;6138:1;6135;6132:8;6129:34;;;6143:18;;:::i;:::-;-1:-1:-1;6180:9:1;;6070:125::o;6200:127::-;6261:10;6256:3;6252:20;6249:1;6242:31;6292:4;6289:1;6282:15;6316:4;6313:1;6306:15;6332:135;6371:3;-1:-1:-1;;6392:17:1;;6389:43;;;6412:18;;:::i;:::-;-1:-1:-1;6459:1:1;6448:13;;6332:135::o;8009:128::-;8049:3;8080:1;8076:6;8073:1;8070:13;8067:39;;;8086:18;;:::i;:::-;-1:-1:-1;8122:9:1;;8009:128::o;8559:168::-;8599:7;8665:1;8661;8657:6;8653:14;8650:1;8647:21;8642:1;8635:9;8628:17;8624:45;8621:71;;;8672:18;;:::i;:::-;-1:-1:-1;8712:9:1;;8559:168::o;11852:217::-;11892:1;11918;11908:132;;11962:10;11957:3;11953:20;11950:1;11943:31;11997:4;11994:1;11987:15;12025:4;12022:1;12015:15;11908:132;-1:-1:-1;12054:9:1;;11852:217::o;12206:251::-;12276:6;12329:2;12317:9;12308:7;12304:23;12300:32;12297:52;;;12345:1;12342;12335:12;12297:52;12377:9;12371:16;12396:31;12421:5;12396:31;:::i;12462:980::-;12724:4;12772:3;12761:9;12757:19;12803:6;12792:9;12785:25;12829:2;12867:6;12862:2;12851:9;12847:18;12840:34;12910:3;12905:2;12894:9;12890:18;12883:31;12934:6;12969;12963:13;13000:6;12992;12985:22;13038:3;13027:9;13023:19;13016:26;;13077:2;13069:6;13065:15;13051:29;;13098:1;13108:195;13122:6;13119:1;13116:13;13108:195;;;13187:13;;-1:-1:-1;;;;;13183:39:1;13171:52;;13278:15;;;;13243:12;;;;13219:1;13137:9;13108:195;;;-1:-1:-1;;;;;;;13359:32:1;;;;13354:2;13339:18;;13332:60;-1:-1:-1;;;13423:3:1;13408:19;13401:35;13320:3;12462:980;-1:-1:-1;;;12462:980:1:o;14059:306::-;14147:6;14155;14163;14216:2;14204:9;14195:7;14191:23;14187:32;14184:52;;;14232:1;14229;14222:12;14184:52;14261:9;14255:16;14245:26;;14311:2;14300:9;14296:18;14290:25;14280:35;;14355:2;14344:9;14340:18;14334:25;14324:35;;14059:306;;;;;:::o

Swarm Source

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