ETH Price: $3,465.58 (-0.09%)
Gas: 10 Gwei

Token

6ense (6OS)
 

Overview

Max Total Supply

9,630,000,000 6OS

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
132.894879588976257213 6OS

Value
$0.00
0xdad3f6c3726e8526f9fbec68881aac5ba2a0e718
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:
Token

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-15
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

 
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:
     *
     * 
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


// 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 Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

// 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 Token is ERC20, Ownable {
    using SafeMath for uint256;

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

    mapping (address => bool) private _isExcludedFromFee; // Excluded from fee

    mapping (address => bool) private _isExcluded; // Excluded from rewards

    mapping(address => bool) public blacklisted;

    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 9630000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    bool private trade_open = true;

    uint256 private currentBlockNumber;
    uint256 private numBlocksForBlacklist = 5;
    
    uint256 public _rewardFee = 2; // Reward percent distributed to holders of token
    uint256 private _previousRewardFee = _rewardFee;

    uint256 public _transactionFee = 4; // Transaction tax on each transactions
    uint256 private _previousTransactionFee = _transactionFee;

    uint256 public _burnFee = 1; // Burn tax on each transaction - 1 = 1%
    
    uint256 public _liquidityFee = 5; // Liquidity tax on each transaction
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    address constant private DEAD = 0x000000000000000000000000000000000000dEaD;
    
    uint256 public _maxTxAmount = 5000000 * 10**18;
    uint256 private numTokensSellToAddToLiquidity = 500000 * 10**18;
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() ERC20("6ense", "6OS") {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router;
    
        if (block.chainid == 56) {
            _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } 
        else if (block.chainid == 97) {
            _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } 
        else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } 
        else if (block.chainid == 43114) {
            _uniswapV2Router = IUniswapV2Router02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } 
        else if (block.chainid == 250) {
            _uniswapV2Router = IUniswapV2Router02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } 
        else {
            revert("Chain not valid");
        }
         // 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[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 override returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override 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 enableTrade(bool _enable) public onlyOwner {
        trade_open = _enable; 
    }
 
    function isTradeEnabled() external view returns (bool) {
        return trade_open;
    }

    function addToBlacklist(address account) public onlyOwner{
        require(!blacklisted[account], "Account is already blacklisted");
        require(_msgSender() != account, "Cannot blacklist self");
        blacklisted[account] = true;
    }

    function removeFromBlacklist(address account) public onlyOwner{
        require(blacklisted[account], "Account is not blacklisted");
        require(_msgSender() != account, "Cannot remove self from blacklist");
        blacklisted[account] = false;
    }

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
     function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tTransaction) = _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);
        _sendTransactionTax(tTransaction);
        _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 setRewardFeePercent(uint256 rewardFee) external onlyOwner() {
        require(_rewardFee <= 10, "Reward fee cannot be more than 10%");
        _rewardFee = rewardFee;
    }

    function setTransactionFeePercent(uint256 transactionFee) external onlyOwner() {
        require(_transactionFee <= 10, "Transaction fee cannot be more than 10%");
        _transactionFee = transactionFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(_liquidityFee <= 10, "Liquidity fee cannot be more than 10%");
        _liquidityFee = liquidityFee;
    }

    function setNumTokensSellToAddToLiquidity (uint256 amount) external onlyOwner {
        require(numTokensSellToAddToLiquidity <= _tTotal / 100, "Cannot be more than total supply");
        numTokensSellToAddToLiquidity = amount;
    }

    function setMaxTxAmount(uint256 amount) external onlyOwner {
        require(_maxTxAmount <= _tTotal / 100, "Cannot be more than total supply");
        _maxTxAmount = amount;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }                                                                                                                   

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    //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) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tTransaction) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tTransaction, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tTransaction);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateFee(tAmount, _rewardFee);
        uint256 tLiquidity = calculateFee(tAmount, _liquidityFee);
        uint256 tTransaction = calculateFee(tAmount, _transactionFee);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tTransaction);
        return (tTransferAmount, tFee, tLiquidity, tTransaction);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tTransaction, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransaction = tTransaction.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rTransaction);
        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 _sendTransactionTax(uint256 tTransaction) private {
        uint256 currentRate =  _getRate();
        uint256 rTransaction = tTransaction.mul(currentRate);
        _rOwned[owner()] = _rOwned[owner()].add(rTransaction);
        if(_isExcluded[owner()])
            _tOwned[owner()] = _tOwned[owner()].add(tTransaction);
    }
    
    
    function calculateFee(uint256 _amount, uint256 taxPercent) private pure returns (uint256) {
        return _amount.mul(taxPercent).div(10**2);
    }
    
    function removeAllFee() private {
        if(_rewardFee == 0 && _liquidityFee == 0 && _transactionFee == 0) return;
        
        _previousRewardFee = _rewardFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTransactionFee = _transactionFee;
        
        _rewardFee = 0;
        _liquidityFee = 0;
        _transactionFee = 0;
    }
    
    function restoreAllFee() private {
        _rewardFee = _previousRewardFee;
        _liquidityFee = _previousLiquidityFee;
        _transactionFee = _previousTransactionFee;
    }
  
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual override {
        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 ) internal virtual override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        require(!blacklisted[from], "Sender is blacklisted");
        require(!blacklisted[to], "Recipient is blacklisted");

        if (from == owner() || to == owner() || from == address(this)) {
            if(currentBlockNumber == 0 && to == uniswapV2Pair){
                currentBlockNumber = block.number;
            }
            _tokenTransfer(from, to, amount, false);
            return;
        }

        //Check if trading is enabled
        require(trade_open, "Trading is paused");

        if(block.number <= currentBlockNumber + numBlocksForBlacklist){
            blacklisted[to] = true;
            return;
        }

        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        uint256 _burnAmount;
        uint256 rate = _getRate();
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _burnAmount = calculateFee(amount, _burnFee);

        _burnTokens(from, DEAD, _burnAmount, rate);

        amount -= _burnAmount;
        //transfer amount, it will take tax, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _burnTokens(
        address from,
        address to,
        uint256 tAmount,
        uint256 rate
    ) private {
        if (_isExcluded[from]) {
            _tOwned[from] -= tAmount;
            _tOwned[to] += tAmount; 
        } else {
            _rOwned[from] -= tAmount;
            _rOwned[to] += tAmount * rate;
        }
    }

    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,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
          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(!takeFee)
            restoreAllFee();
    }

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

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tTransaction) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _sendTransactionTax(tTransaction);
        _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, uint256 tTransaction) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _sendTransactionTax(tTransaction);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"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":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":"_rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transactionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bool","name":"_enable","type":"bool"}],"name":"enableTrade","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":[{"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":[],"name":"isTradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardFee","type":"uint256"}],"name":"setRewardFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionFee","type":"uint256"}],"name":"setTransactionFeePercent","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526b1f1dbfd20d40d2ee5e000000600d8190556200002490600019620004b4565b6200003290600019620004d7565b600e556010805460ff191660019081179091556005601281905560026013819055601455600460158190556016556017919091556018819055601955601a805461ff0019166101001790556a0422ca8b0a00a425000000601b556969e10de76676d0800000601c55348015620000a757600080fd5b506040518060400160405280600581526020016436656e736560d81b81525060405180604001604052806003815260200162364f5360e81b8152508160039081620000f39190620005a4565b506004620001028282620005a4565b5050506200011f620001196200045e60201b60201c565b62000462565b600e5433600090815260066020526040812091909155466038036200015a57507310ed43c718714eb63d5aa57b78b54704e256024e62000246565b466061036200017f575073d99d1c33f9fc3444f8101754abc46c52416550d162000246565b46600114806200018f5750466004145b806200019b5750466003145b15620001bd5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000246565b4661a86a03620001e357507360ae616a2155ee3d9a68541ba4544862310933d462000246565b4660fa0362000208575073f491e7b69e4244ad4002bc14e878a34207e38c2962000246565b60405162461bcd60e51b815260206004820152600f60248201526e10da185a5b881b9bdd081d985b1a59608a1b604482015260640160405180910390fd5b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000670565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f919062000670565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200036d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000393919062000670565b6001600160a01b0390811660a0528116608052600160096000620003bf6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620004073390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200044f91815260200190565b60405180910390a350620006a2565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082620004d257634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620004f957634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200052a57607f821691505b6020821081036200054b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200059f57600081815260208120601f850160051c810160208610156200057a5750805b601f850160051c820191505b818110156200059b5782815560010162000586565b5050505b505050565b81516001600160401b03811115620005c057620005c0620004ff565b620005d881620005d1845462000515565b8462000551565b602080601f831160018114620006105760008415620005f75750858301515b600019600386901b1c1916600185901b1785556200059b565b600085815260208120601f198616915b82811015620006415788860151825594840194600190910190840162000620565b5085821015620006605787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200068357600080fd5b81516001600160a01b03811681146200069b57600080fd5b9392505050565b60805160a051612e85620006f9600039600081816104820152818161181a01526119c801526000818161030301528181612687015281816127400152818161277c015281816127f6015261281d0152612e856000f3fe60806040526004361061026b5760003560e01c80636f302bb911610144578063c00f04d1116100b6578063dbac26e91161007a578063dbac26e914610763578063dd62ed3e14610793578063ea2f0b37146107d9578063ec28438a146107f9578063f0f165af14610819578063f2fde38b1461083957600080fd5b8063c00f04d1146106cd578063c0b0fda2146106ed578063c49b9a8014610703578063cebec75014610723578063d543dbeb1461074357600080fd5b80638d38a127116101085780638d38a127146106225780638da5cb5b1461063a5780638ee88c531461065857806395d89b4114610678578063a457c2d71461068d578063a9059cbb146106ad57600080fd5b80636f302bb91461058857806370a082311461059e578063715018a6146105be5780637d1db4a5146105d357806388f82020146105e957600080fd5b8063437823ec116101dd57806351fde4bb116101a157806351fde4bb146104c357806352390c02146104d95780635342acb4146104f9578063537df3b6146105325780636bc87c3a146105525780636bebaf971461056857600080fd5b8063437823ec1461041057806344337ea1146104305780634549b0391461045057806349bd5a5e146104705780634a74bb02146104a457600080fd5b806323b872dd1161022f57806323b872dd146103525780632d83811914610372578063313ce567146103925780633685d419146103ae57806339509351146103d05780633bd5d173146103f057600080fd5b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102d25780631694505e146102f157806318160ddd1461033d57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c610859565b6040516102999190612ab7565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004612b1a565b6108eb565b6040519015158152602001610299565b3480156102de57600080fd5b50600f545b604051908152602001610299565b3480156102fd57600080fd5b506103257f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610299565b34801561034957600080fd5b50600d546102e3565b34801561035e57600080fd5b506102c261036d366004612b46565b610902565b34801561037e57600080fd5b506102e361038d366004612b87565b61096b565b34801561039e57600080fd5b5060405160128152602001610299565b3480156103ba57600080fd5b506103ce6103c9366004612ba0565b6109f4565b005b3480156103dc57600080fd5b506102c26103eb366004612b1a565b610b88565b3480156103fc57600080fd5b506103ce61040b366004612b87565b610bbe565b34801561041c57600080fd5b506103ce61042b366004612ba0565b610caa565b34801561043c57600080fd5b506103ce61044b366004612ba0565b610cd6565b34801561045c57600080fd5b506102e361046b366004612bd2565b610dbb565b34801561047c57600080fd5b506103257f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b057600080fd5b50601a546102c290610100900460ff1681565b3480156104cf57600080fd5b506102e360135481565b3480156104e557600080fd5b506103ce6104f4366004612ba0565b610e4a565b34801561050557600080fd5b506102c2610514366004612ba0565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561053e57600080fd5b506103ce61054d366004612ba0565b610f7b565b34801561055e57600080fd5b506102e360185481565b34801561057457600080fd5b506103ce610583366004612b87565b61106e565b34801561059457600080fd5b506102e360155481565b3480156105aa57600080fd5b506102e36105b9366004612ba0565b6110d9565b3480156105ca57600080fd5b506103ce611138565b3480156105df57600080fd5b506102e3601b5481565b3480156105f557600080fd5b506102c2610604366004612ba0565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561062e57600080fd5b5060105460ff166102c2565b34801561064657600080fd5b506005546001600160a01b0316610325565b34801561066457600080fd5b506103ce610673366004612b87565b61114c565b34801561068457600080fd5b5061028c6111ba565b34801561069957600080fd5b506102c26106a8366004612b1a565b6111c9565b3480156106b957600080fd5b506102c26106c8366004612b1a565b611218565b3480156106d957600080fd5b506103ce6106e8366004612bfe565b611225565b3480156106f957600080fd5b506102e360175481565b34801561070f57600080fd5b506103ce61071e366004612bfe565b611240565b34801561072f57600080fd5b506103ce61073e366004612b87565b61129c565b34801561074f57600080fd5b506103ce61075e366004612b87565b61130c565b34801561076f57600080fd5b506102c261077e366004612ba0565b600b6020526000908152604090205460ff1681565b34801561079f57600080fd5b506102e36107ae366004612c19565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156107e557600080fd5b506103ce6107f4366004612ba0565b61133a565b34801561080557600080fd5b506103ce610814366004612b87565b611363565b34801561082557600080fd5b506103ce610834366004612b87565b6113d0565b34801561084557600080fd5b506103ce610854366004612ba0565b61143d565b60606003805461086890612c52565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612c52565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f83384846114b6565b5060015b92915050565b600061090f8484846115da565b610961843361095c85604051806060016040528060288152602001612e03602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611aac565b6114b6565b5060019392505050565b6000600e548211156109d75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006109e1611ae6565b90506109ed8382611b09565b9392505050565b6109fc611b4b565b6001600160a01b0381166000908152600a602052604090205460ff16610a645760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ce565b60005b600c54811015610b8457816001600160a01b0316600c8281548110610a8e57610a8e612c8c565b6000918252602090912001546001600160a01b031603610b7257600c8054610ab890600190612cb8565b81548110610ac857610ac8612c8c565b600091825260209091200154600c80546001600160a01b039092169183908110610af457610af4612c8c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600c805480610b4c57610b4c612ccb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b7c81612ce1565b915050610a67565b5050565b3360008181526008602090815260408083206001600160a01b038716845290915281205490916108f891859061095c9086611ba5565b336000818152600a602052604090205460ff1615610c335760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ce565b6000610c3e83611c04565b5050506001600160a01b038616600090815260066020526040902054939450610c6c93925084915050611c5f565b6001600160a01b038316600090815260066020526040902055600e54610c929082611c5f565b600e55600f54610ca29084611ba5565b600f55505050565b610cb2611b4b565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b610cde611b4b565b6001600160a01b0381166000908152600b602052604090205460ff1615610d475760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c6973746564000060448201526064016109ce565b6001600160a01b0381163303610d975760405162461bcd60e51b815260206004820152601560248201527421b0b73737ba10313630b1b5b634b9ba1039b2b63360591b60448201526064016109ce565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000600d54831115610e0f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ce565b81610e2f576000610e1f84611c04565b509496506108fc95505050505050565b6000610e3a84611c04565b509396506108fc95505050505050565b610e52611b4b565b6001600160a01b0381166000908152600a602052604090205460ff1615610ebb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ce565b6001600160a01b03811660009081526006602052604090205415610f15576001600160a01b038116600090815260066020526040902054610efb9061096b565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b610f83611b4b565b6001600160a01b0381166000908152600b602052604090205460ff16610feb5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000060448201526064016109ce565b6001600160a01b038116330361104d5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f742072656d6f76652073656c662066726f6d20626c61636b6c69736044820152601d60fa1b60648201526084016109ce565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b611076611b4b565b600a60135411156110d45760405162461bcd60e51b815260206004820152602260248201527f526577617264206665652063616e6e6f74206265206d6f7265207468616e2031604482015261302560f01b60648201526084016109ce565b601355565b6001600160a01b0381166000908152600a602052604081205460ff161561111657506001600160a01b031660009081526007602052604090205490565b6001600160a01b0382166000908152600660205260409020546108fc9061096b565b611140611b4b565b61114a6000611ca1565b565b611154611b4b565b600a60185411156111b55760405162461bcd60e51b815260206004820152602560248201527f4c6971756964697479206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b60648201526084016109ce565b601855565b60606004805461086890612c52565b60006108f8338461095c85604051806060016040528060258152602001612e2b602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611aac565b60006108f83384846115da565b61122d611b4b565b6010805460ff1916911515919091179055565b611248611b4b565b601a80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061129190831515815260200190565b60405180910390a150565b6112a4611b4b565b600a60155411156113075760405162461bcd60e51b815260206004820152602760248201527f5472616e73616374696f6e206665652063616e6e6f74206265206d6f7265207460448201526668616e2031302560c81b60648201526084016109ce565b601555565b611314611b4b565b611334606461132e83600d54611cf390919063ffffffff16565b90611b09565b601b5550565b611342611b4b565b6001600160a01b03166000908152600960205260409020805460ff19169055565b61136b611b4b565b6064600d5461137a9190612cfa565b601b5411156113cb5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206265206d6f7265207468616e20746f74616c20737570706c7960448201526064016109ce565b601b55565b6113d8611b4b565b6064600d546113e79190612cfa565b601c5411156114385760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206265206d6f7265207468616e20746f74616c20737570706c7960448201526064016109ce565b601c55565b611445611b4b565b6001600160a01b0381166114aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ce565b6114b381611ca1565b50565b6001600160a01b0383166115185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ce565b6001600160a01b0382166115795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ce565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661163e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ce565b6001600160a01b0382166116a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ce565b600081116117025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ce565b6001600160a01b0383166000908152600b602052604090205460ff16156117635760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b60448201526064016109ce565b6001600160a01b0382166000908152600b602052604090205460ff16156117cc5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016109ce565b6005546001600160a01b03848116911614806117f557506005546001600160a01b038381169116145b8061180857506001600160a01b03831630145b1561186a5760115415801561184e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b1561185857436011555b6118658383836000611d75565b505050565b60105460ff166118b05760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b60448201526064016109ce565b6012546011546118c09190612d1c565b43116118ec57506001600160a01b03166000908152600b60205260409020805460ff1916600117905550565b6005546001600160a01b0384811691161480159061191857506005546001600160a01b03838116911614155b1561198057601b548111156119805760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ce565b60008061198b611ae6565b90506000611998306110d9565b9050601b5481106119a85750601b545b601c54811080159081906119bf5750601a5460ff16155b80156119fd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b8015611a105750601a54610100900460ff165b15611a2357601c549150611a2382611ef8565b6001600160a01b03871660009081526009602052604090205460019060ff1680611a6557506001600160a01b03871660009081526009602052604090205460ff165b15611a6e575060005b611a7a86601754611f96565b9450611a8a8861dead8787611fa7565b611a948587612cb8565b9550611aa288888884611d75565b5050505050505050565b60008184841115611ad05760405162461bcd60e51b81526004016109ce9190612ab7565b506000611add8486612cb8565b95945050505050565b6000806000611af3612093565b9092509050611b028282611b09565b9250505090565b60006109ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612215565b6005546001600160a01b0316331461114a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ce565b600080611bb28385612d1c565b9050838110156109ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109ce565b6000806000806000806000806000806000611c1e8c612243565b93509350935093506000806000611c3f8f878787611c3a611ae6565b6122a1565b919f509d509b509599509397509195509350505050919395979092949650565b60006109ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aac565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082600003611d05575060006108fc565b6000611d118385612d2f565b905082611d1e8583612cfa565b146109ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109ce565b80611d8257611d82612303565b6001600160a01b0384166000908152600a602052604090205460ff168015611dc357506001600160a01b0383166000908152600a602052604090205460ff16155b15611dd857611dd3848484612348565b611ed6565b6001600160a01b0384166000908152600a602052604090205460ff16158015611e1957506001600160a01b0383166000908152600a602052604090205460ff165b15611e2957611dd384848461248e565b6001600160a01b0384166000908152600a602052604090205460ff16158015611e6b57506001600160a01b0383166000908152600a602052604090205460ff16155b15611e7b57611dd384848461254d565b6001600160a01b0384166000908152600a602052604090205460ff168015611ebb57506001600160a01b0383166000908152600a602052604090205460ff165b15611ecb57611dd38484846125a7565b611ed684848461254d565b80611ef257611ef2601454601355601954601855601654601555565b50505050565b601a805460ff191660011790556000611f12826002611b09565b90506000611f208383611c5f565b905047611f2c83612630565b6000611f384783611c5f565b9050611f4483826127f0565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff19169055505050565b60006109ed606461132e8585611cf3565b6001600160a01b0384166000908152600a602052604090205460ff1615612028576001600160a01b03841660009081526007602052604081208054849290611ff0908490612cb8565b90915550506001600160a01b0383166000908152600760205260408120805484929061201d908490612d1c565b90915550611ef29050565b6001600160a01b03841660009081526006602052604081208054849290612050908490612cb8565b9091555061206090508183612d2f565b6001600160a01b03841660009081526006602052604081208054909190612088908490612d1c565b909155505050505050565b600e54600d546000918291825b600c548110156121e5578260066000600c84815481106120c2576120c2612c8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061212d57508160076000600c848154811061210657612106612c8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214357600e54600d54945094505050509091565b61218960066000600c848154811061215d5761215d612c8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c5f565b92506121d160076000600c84815481106121a5576121a5612c8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c5f565b9150806121dd81612ce1565b9150506120a0565b50600d54600e546121f591611b09565b82101561220c57600e54600d549350935050509091565b90939092509050565b600081836122365760405162461bcd60e51b81526004016109ce9190612ab7565b506000611add8486612cfa565b600080600080600061225786601354611f96565b9050600061226787601854611f96565b9050600061227788601554611f96565b905060006122918261228b85818d89611c5f565b90611c5f565b9993985091965094509092505050565b60008080806122b08986611cf3565b905060006122be8987611cf3565b905060006122cc8988611cf3565b905060006122da8989611cf3565b905060006122ee8261228b85818989611c5f565b949d949c50929a509298505050505050505050565b6013541580156123135750601854155b801561231f5750601554155b1561232657565b6013805460145560188054601955601580546016556000928390559082905555565b600080600080600080600061235c88611c04565b96509650965096509650965096506123a288600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b6001600160a01b038b166000908152600760209081526040808320939093556006905220546123d19088611c5f565b6001600160a01b03808c1660009081526006602052604080822093909355908b16815220546124009087611ba5565b6001600160a01b038a16600090815260066020526040902055612422826128f6565b61242b8161297e565b6124358584612a93565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161247a91815260200190565b60405180910390a350505050505050505050565b60008060008060008060006124a288611c04565b96509650965096509650965096506124e887600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c1681526007909152205461251e9085611ba5565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546124009087611ba5565b600080600080600080600061256188611c04565b96509650965096509650965096506123d187600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b60008060008060008060006125bb88611c04565b965096509650965096509650965061260188600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b6001600160a01b038b166000908152600760209081526040808320939093556006905220546124e89088611c5f565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061266557612665612c8c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127079190612d46565b8160018151811061271a5761271a612c8c565b60200260200101906001600160a01b031690816001600160a01b031681525050612765307f0000000000000000000000000000000000000000000000000000000000000000846114b6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906127ba908590600090869030904290600401612d63565b600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b505050505050565b61281b307f0000000000000000000000000000000000000000000000000000000000000000846114b6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806128626005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128ef9190612dd4565b5050505050565b6000612900611ae6565b9050600061290e8383611cf3565b3060009081526006602052604090205490915061292b9082611ba5565b30600090815260066020908152604080832093909355600a9052205460ff161561186557306000908152600760205260409020546129699084611ba5565b30600090815260076020526040902055505050565b6000612988611ae6565b905060006129968383611cf3565b90506129d281600660006129b26005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205490611ba5565b600660006129e86005546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a6000612a226005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205460ff161561186557612a5e83600760006129b26005546001600160a01b031690565b60076000612a746005546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055505050565b600e54612aa09083611c5f565b600e55600f54612ab09082611ba5565b600f555050565b600060208083528351808285015260005b81811015612ae457858101830151858201604001528201612ac8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114b357600080fd5b60008060408385031215612b2d57600080fd5b8235612b3881612b05565b946020939093013593505050565b600080600060608486031215612b5b57600080fd5b8335612b6681612b05565b92506020840135612b7681612b05565b929592945050506040919091013590565b600060208284031215612b9957600080fd5b5035919050565b600060208284031215612bb257600080fd5b81356109ed81612b05565b80358015158114612bcd57600080fd5b919050565b60008060408385031215612be557600080fd5b82359150612bf560208401612bbd565b90509250929050565b600060208284031215612c1057600080fd5b6109ed82612bbd565b60008060408385031215612c2c57600080fd5b8235612c3781612b05565b91506020830135612c4781612b05565b809150509250929050565b600181811c90821680612c6657607f821691505b602082108103612c8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108fc576108fc612ca2565b634e487b7160e01b600052603160045260246000fd5b600060018201612cf357612cf3612ca2565b5060010190565b600082612d1757634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156108fc576108fc612ca2565b80820281158282048414176108fc576108fc612ca2565b600060208284031215612d5857600080fd5b81516109ed81612b05565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612db35784516001600160a01b031683529383019391830191600101612d8e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612de957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f38e07f3c96c1c42059796a2ecd03f8c7810030e56e5c71891ec8a8f92c40cda64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80636f302bb911610144578063c00f04d1116100b6578063dbac26e91161007a578063dbac26e914610763578063dd62ed3e14610793578063ea2f0b37146107d9578063ec28438a146107f9578063f0f165af14610819578063f2fde38b1461083957600080fd5b8063c00f04d1146106cd578063c0b0fda2146106ed578063c49b9a8014610703578063cebec75014610723578063d543dbeb1461074357600080fd5b80638d38a127116101085780638d38a127146106225780638da5cb5b1461063a5780638ee88c531461065857806395d89b4114610678578063a457c2d71461068d578063a9059cbb146106ad57600080fd5b80636f302bb91461058857806370a082311461059e578063715018a6146105be5780637d1db4a5146105d357806388f82020146105e957600080fd5b8063437823ec116101dd57806351fde4bb116101a157806351fde4bb146104c357806352390c02146104d95780635342acb4146104f9578063537df3b6146105325780636bc87c3a146105525780636bebaf971461056857600080fd5b8063437823ec1461041057806344337ea1146104305780634549b0391461045057806349bd5a5e146104705780634a74bb02146104a457600080fd5b806323b872dd1161022f57806323b872dd146103525780632d83811914610372578063313ce567146103925780633685d419146103ae57806339509351146103d05780633bd5d173146103f057600080fd5b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102d25780631694505e146102f157806318160ddd1461033d57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c610859565b6040516102999190612ab7565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004612b1a565b6108eb565b6040519015158152602001610299565b3480156102de57600080fd5b50600f545b604051908152602001610299565b3480156102fd57600080fd5b506103257f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610299565b34801561034957600080fd5b50600d546102e3565b34801561035e57600080fd5b506102c261036d366004612b46565b610902565b34801561037e57600080fd5b506102e361038d366004612b87565b61096b565b34801561039e57600080fd5b5060405160128152602001610299565b3480156103ba57600080fd5b506103ce6103c9366004612ba0565b6109f4565b005b3480156103dc57600080fd5b506102c26103eb366004612b1a565b610b88565b3480156103fc57600080fd5b506103ce61040b366004612b87565b610bbe565b34801561041c57600080fd5b506103ce61042b366004612ba0565b610caa565b34801561043c57600080fd5b506103ce61044b366004612ba0565b610cd6565b34801561045c57600080fd5b506102e361046b366004612bd2565b610dbb565b34801561047c57600080fd5b506103257f000000000000000000000000baf26d520a5b2fa85c12991ae4416625105feb0b81565b3480156104b057600080fd5b50601a546102c290610100900460ff1681565b3480156104cf57600080fd5b506102e360135481565b3480156104e557600080fd5b506103ce6104f4366004612ba0565b610e4a565b34801561050557600080fd5b506102c2610514366004612ba0565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561053e57600080fd5b506103ce61054d366004612ba0565b610f7b565b34801561055e57600080fd5b506102e360185481565b34801561057457600080fd5b506103ce610583366004612b87565b61106e565b34801561059457600080fd5b506102e360155481565b3480156105aa57600080fd5b506102e36105b9366004612ba0565b6110d9565b3480156105ca57600080fd5b506103ce611138565b3480156105df57600080fd5b506102e3601b5481565b3480156105f557600080fd5b506102c2610604366004612ba0565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561062e57600080fd5b5060105460ff166102c2565b34801561064657600080fd5b506005546001600160a01b0316610325565b34801561066457600080fd5b506103ce610673366004612b87565b61114c565b34801561068457600080fd5b5061028c6111ba565b34801561069957600080fd5b506102c26106a8366004612b1a565b6111c9565b3480156106b957600080fd5b506102c26106c8366004612b1a565b611218565b3480156106d957600080fd5b506103ce6106e8366004612bfe565b611225565b3480156106f957600080fd5b506102e360175481565b34801561070f57600080fd5b506103ce61071e366004612bfe565b611240565b34801561072f57600080fd5b506103ce61073e366004612b87565b61129c565b34801561074f57600080fd5b506103ce61075e366004612b87565b61130c565b34801561076f57600080fd5b506102c261077e366004612ba0565b600b6020526000908152604090205460ff1681565b34801561079f57600080fd5b506102e36107ae366004612c19565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156107e557600080fd5b506103ce6107f4366004612ba0565b61133a565b34801561080557600080fd5b506103ce610814366004612b87565b611363565b34801561082557600080fd5b506103ce610834366004612b87565b6113d0565b34801561084557600080fd5b506103ce610854366004612ba0565b61143d565b60606003805461086890612c52565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612c52565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f83384846114b6565b5060015b92915050565b600061090f8484846115da565b610961843361095c85604051806060016040528060288152602001612e03602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611aac565b6114b6565b5060019392505050565b6000600e548211156109d75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006109e1611ae6565b90506109ed8382611b09565b9392505050565b6109fc611b4b565b6001600160a01b0381166000908152600a602052604090205460ff16610a645760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ce565b60005b600c54811015610b8457816001600160a01b0316600c8281548110610a8e57610a8e612c8c565b6000918252602090912001546001600160a01b031603610b7257600c8054610ab890600190612cb8565b81548110610ac857610ac8612c8c565b600091825260209091200154600c80546001600160a01b039092169183908110610af457610af4612c8c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600c805480610b4c57610b4c612ccb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b7c81612ce1565b915050610a67565b5050565b3360008181526008602090815260408083206001600160a01b038716845290915281205490916108f891859061095c9086611ba5565b336000818152600a602052604090205460ff1615610c335760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ce565b6000610c3e83611c04565b5050506001600160a01b038616600090815260066020526040902054939450610c6c93925084915050611c5f565b6001600160a01b038316600090815260066020526040902055600e54610c929082611c5f565b600e55600f54610ca29084611ba5565b600f55505050565b610cb2611b4b565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b610cde611b4b565b6001600160a01b0381166000908152600b602052604090205460ff1615610d475760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c6973746564000060448201526064016109ce565b6001600160a01b0381163303610d975760405162461bcd60e51b815260206004820152601560248201527421b0b73737ba10313630b1b5b634b9ba1039b2b63360591b60448201526064016109ce565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000600d54831115610e0f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ce565b81610e2f576000610e1f84611c04565b509496506108fc95505050505050565b6000610e3a84611c04565b509396506108fc95505050505050565b610e52611b4b565b6001600160a01b0381166000908152600a602052604090205460ff1615610ebb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ce565b6001600160a01b03811660009081526006602052604090205415610f15576001600160a01b038116600090815260066020526040902054610efb9061096b565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b610f83611b4b565b6001600160a01b0381166000908152600b602052604090205460ff16610feb5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000060448201526064016109ce565b6001600160a01b038116330361104d5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f742072656d6f76652073656c662066726f6d20626c61636b6c69736044820152601d60fa1b60648201526084016109ce565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b611076611b4b565b600a60135411156110d45760405162461bcd60e51b815260206004820152602260248201527f526577617264206665652063616e6e6f74206265206d6f7265207468616e2031604482015261302560f01b60648201526084016109ce565b601355565b6001600160a01b0381166000908152600a602052604081205460ff161561111657506001600160a01b031660009081526007602052604090205490565b6001600160a01b0382166000908152600660205260409020546108fc9061096b565b611140611b4b565b61114a6000611ca1565b565b611154611b4b565b600a60185411156111b55760405162461bcd60e51b815260206004820152602560248201527f4c6971756964697479206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b60648201526084016109ce565b601855565b60606004805461086890612c52565b60006108f8338461095c85604051806060016040528060258152602001612e2b602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611aac565b60006108f83384846115da565b61122d611b4b565b6010805460ff1916911515919091179055565b611248611b4b565b601a80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061129190831515815260200190565b60405180910390a150565b6112a4611b4b565b600a60155411156113075760405162461bcd60e51b815260206004820152602760248201527f5472616e73616374696f6e206665652063616e6e6f74206265206d6f7265207460448201526668616e2031302560c81b60648201526084016109ce565b601555565b611314611b4b565b611334606461132e83600d54611cf390919063ffffffff16565b90611b09565b601b5550565b611342611b4b565b6001600160a01b03166000908152600960205260409020805460ff19169055565b61136b611b4b565b6064600d5461137a9190612cfa565b601b5411156113cb5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206265206d6f7265207468616e20746f74616c20737570706c7960448201526064016109ce565b601b55565b6113d8611b4b565b6064600d546113e79190612cfa565b601c5411156114385760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206265206d6f7265207468616e20746f74616c20737570706c7960448201526064016109ce565b601c55565b611445611b4b565b6001600160a01b0381166114aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ce565b6114b381611ca1565b50565b6001600160a01b0383166115185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ce565b6001600160a01b0382166115795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ce565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661163e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ce565b6001600160a01b0382166116a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ce565b600081116117025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ce565b6001600160a01b0383166000908152600b602052604090205460ff16156117635760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b60448201526064016109ce565b6001600160a01b0382166000908152600b602052604090205460ff16156117cc5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016109ce565b6005546001600160a01b03848116911614806117f557506005546001600160a01b038381169116145b8061180857506001600160a01b03831630145b1561186a5760115415801561184e57507f000000000000000000000000baf26d520a5b2fa85c12991ae4416625105feb0b6001600160a01b0316826001600160a01b0316145b1561185857436011555b6118658383836000611d75565b505050565b60105460ff166118b05760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b60448201526064016109ce565b6012546011546118c09190612d1c565b43116118ec57506001600160a01b03166000908152600b60205260409020805460ff1916600117905550565b6005546001600160a01b0384811691161480159061191857506005546001600160a01b03838116911614155b1561198057601b548111156119805760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ce565b60008061198b611ae6565b90506000611998306110d9565b9050601b5481106119a85750601b545b601c54811080159081906119bf5750601a5460ff16155b80156119fd57507f000000000000000000000000baf26d520a5b2fa85c12991ae4416625105feb0b6001600160a01b0316876001600160a01b031614155b8015611a105750601a54610100900460ff165b15611a2357601c549150611a2382611ef8565b6001600160a01b03871660009081526009602052604090205460019060ff1680611a6557506001600160a01b03871660009081526009602052604090205460ff165b15611a6e575060005b611a7a86601754611f96565b9450611a8a8861dead8787611fa7565b611a948587612cb8565b9550611aa288888884611d75565b5050505050505050565b60008184841115611ad05760405162461bcd60e51b81526004016109ce9190612ab7565b506000611add8486612cb8565b95945050505050565b6000806000611af3612093565b9092509050611b028282611b09565b9250505090565b60006109ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612215565b6005546001600160a01b0316331461114a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ce565b600080611bb28385612d1c565b9050838110156109ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109ce565b6000806000806000806000806000806000611c1e8c612243565b93509350935093506000806000611c3f8f878787611c3a611ae6565b6122a1565b919f509d509b509599509397509195509350505050919395979092949650565b60006109ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aac565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082600003611d05575060006108fc565b6000611d118385612d2f565b905082611d1e8583612cfa565b146109ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109ce565b80611d8257611d82612303565b6001600160a01b0384166000908152600a602052604090205460ff168015611dc357506001600160a01b0383166000908152600a602052604090205460ff16155b15611dd857611dd3848484612348565b611ed6565b6001600160a01b0384166000908152600a602052604090205460ff16158015611e1957506001600160a01b0383166000908152600a602052604090205460ff165b15611e2957611dd384848461248e565b6001600160a01b0384166000908152600a602052604090205460ff16158015611e6b57506001600160a01b0383166000908152600a602052604090205460ff16155b15611e7b57611dd384848461254d565b6001600160a01b0384166000908152600a602052604090205460ff168015611ebb57506001600160a01b0383166000908152600a602052604090205460ff165b15611ecb57611dd38484846125a7565b611ed684848461254d565b80611ef257611ef2601454601355601954601855601654601555565b50505050565b601a805460ff191660011790556000611f12826002611b09565b90506000611f208383611c5f565b905047611f2c83612630565b6000611f384783611c5f565b9050611f4483826127f0565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff19169055505050565b60006109ed606461132e8585611cf3565b6001600160a01b0384166000908152600a602052604090205460ff1615612028576001600160a01b03841660009081526007602052604081208054849290611ff0908490612cb8565b90915550506001600160a01b0383166000908152600760205260408120805484929061201d908490612d1c565b90915550611ef29050565b6001600160a01b03841660009081526006602052604081208054849290612050908490612cb8565b9091555061206090508183612d2f565b6001600160a01b03841660009081526006602052604081208054909190612088908490612d1c565b909155505050505050565b600e54600d546000918291825b600c548110156121e5578260066000600c84815481106120c2576120c2612c8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061212d57508160076000600c848154811061210657612106612c8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214357600e54600d54945094505050509091565b61218960066000600c848154811061215d5761215d612c8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c5f565b92506121d160076000600c84815481106121a5576121a5612c8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c5f565b9150806121dd81612ce1565b9150506120a0565b50600d54600e546121f591611b09565b82101561220c57600e54600d549350935050509091565b90939092509050565b600081836122365760405162461bcd60e51b81526004016109ce9190612ab7565b506000611add8486612cfa565b600080600080600061225786601354611f96565b9050600061226787601854611f96565b9050600061227788601554611f96565b905060006122918261228b85818d89611c5f565b90611c5f565b9993985091965094509092505050565b60008080806122b08986611cf3565b905060006122be8987611cf3565b905060006122cc8988611cf3565b905060006122da8989611cf3565b905060006122ee8261228b85818989611c5f565b949d949c50929a509298505050505050505050565b6013541580156123135750601854155b801561231f5750601554155b1561232657565b6013805460145560188054601955601580546016556000928390559082905555565b600080600080600080600061235c88611c04565b96509650965096509650965096506123a288600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b6001600160a01b038b166000908152600760209081526040808320939093556006905220546123d19088611c5f565b6001600160a01b03808c1660009081526006602052604080822093909355908b16815220546124009087611ba5565b6001600160a01b038a16600090815260066020526040902055612422826128f6565b61242b8161297e565b6124358584612a93565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161247a91815260200190565b60405180910390a350505050505050505050565b60008060008060008060006124a288611c04565b96509650965096509650965096506124e887600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c1681526007909152205461251e9085611ba5565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546124009087611ba5565b600080600080600080600061256188611c04565b96509650965096509650965096506123d187600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b60008060008060008060006125bb88611c04565b965096509650965096509650965061260188600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c5f90919063ffffffff16565b6001600160a01b038b166000908152600760209081526040808320939093556006905220546124e89088611c5f565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061266557612665612c8c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127079190612d46565b8160018151811061271a5761271a612c8c565b60200260200101906001600160a01b031690816001600160a01b031681525050612765307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114b6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906127ba908590600090869030904290600401612d63565b600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b505050505050565b61281b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114b6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806128626005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128ef9190612dd4565b5050505050565b6000612900611ae6565b9050600061290e8383611cf3565b3060009081526006602052604090205490915061292b9082611ba5565b30600090815260066020908152604080832093909355600a9052205460ff161561186557306000908152600760205260409020546129699084611ba5565b30600090815260076020526040902055505050565b6000612988611ae6565b905060006129968383611cf3565b90506129d281600660006129b26005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205490611ba5565b600660006129e86005546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a6000612a226005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205460ff161561186557612a5e83600760006129b26005546001600160a01b031690565b60076000612a746005546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055505050565b600e54612aa09083611c5f565b600e55600f54612ab09082611ba5565b600f555050565b600060208083528351808285015260005b81811015612ae457858101830151858201604001528201612ac8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114b357600080fd5b60008060408385031215612b2d57600080fd5b8235612b3881612b05565b946020939093013593505050565b600080600060608486031215612b5b57600080fd5b8335612b6681612b05565b92506020840135612b7681612b05565b929592945050506040919091013590565b600060208284031215612b9957600080fd5b5035919050565b600060208284031215612bb257600080fd5b81356109ed81612b05565b80358015158114612bcd57600080fd5b919050565b60008060408385031215612be557600080fd5b82359150612bf560208401612bbd565b90509250929050565b600060208284031215612c1057600080fd5b6109ed82612bbd565b60008060408385031215612c2c57600080fd5b8235612c3781612b05565b91506020830135612c4781612b05565b809150509250929050565b600181811c90821680612c6657607f821691505b602082108103612c8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108fc576108fc612ca2565b634e487b7160e01b600052603160045260246000fd5b600060018201612cf357612cf3612ca2565b5060010190565b600082612d1757634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156108fc576108fc612ca2565b80820281158282048414176108fc576108fc612ca2565b600060208284031215612d5857600080fd5b81516109ed81612b05565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612db35784516001600160a01b031683529383019391830191600101612d8e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612de957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f38e07f3c96c1c42059796a2ecd03f8c7810030e56e5c71891ec8a8f92c40cda64736f6c63430008130033

Deployed Bytecode Sourcemap

30430:22814:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10880:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34642:161;;;;;;;;;;-1:-1:-1;34642:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;34642:161:0;1023:187:1;35781:87:0;;;;;;;;;;-1:-1:-1;35850:10:0;;35781:87;;;1361:25:1;;;1349:2;1334:18;35781:87:0;1215:177:1;31771:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;31771:51:0;1397:230:1;34007:95:0;;;;;;;;;;-1:-1:-1;34087:7:0;;34007:95;;34811:313;;;;;;;;;;-1:-1:-1;34811:313:0;;;;;:::i;:::-;;:::i;36710:253::-;;;;;;;;;;-1:-1:-1;36710:253:0;;;;;:::i;:::-;;:::i;11842:93::-;;;;;;;;;;-1:-1:-1;11842:93:0;;11925:2;2420:36:1;;2408:2;2393:18;11842:93:0;2278:184:1;38147:479:0;;;;;;;;;;-1:-1:-1;38147:479:0;;;;;:::i;:::-;;:::i;:::-;;35132:227;;;;;;;;;;-1:-1:-1;35132:227:0;;;;;:::i;:::-;;:::i;35876:378::-;;;;;;;;;;-1:-1:-1;35876:378:0;;;;;:::i;:::-;;:::i;39352:111::-;;;;;;;;;;-1:-1:-1;39352:111:0;;;;;:::i;:::-;;:::i;37171:246::-;;;;;;;;;;-1:-1:-1;37171:246:0;;;;;:::i;:::-;;:::i;36262:440::-;;;;;;;;;;-1:-1:-1;36262:440:0;;;;;:::i;:::-;;:::i;31829:38::-;;;;;;;;;;;;;;;31908:40;;;;;;;;;;-1:-1:-1;31908:40:0;;;;;;;;;;;31263:29;;;;;;;;;;;;;;;;37692:447;;;;;;;;;;-1:-1:-1;37692:447:0;;;;;:::i;:::-;;:::i;45083:123::-;;;;;;;;;;-1:-1:-1;45083:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;45171:27:0;45147:4;45171:27;;;:18;:27;;;;;;;;;45083:123;37425:259;;;;;;;;;;-1:-1:-1;37425:259:0;;;;;:::i;:::-;;:::i;31633:32::-;;;;;;;;;;;;;;;;39597:184;;;;;;;;;;-1:-1:-1;39597:184:0;;;;;:::i;:::-;;:::i;31405:34::-;;;;;;;;;;;;;;;;34110:198;;;;;;;;;;-1:-1:-1;34110:198:0;;;;;:::i;:::-;;:::i;8816:103::-;;;;;;;;;;;;;:::i;32044:46::-;;;;;;;;;;;;;;;;35653:120;;;;;;;;;;-1:-1:-1;35653:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;35745:20:0;35721:4;35745:20;;;:11;:20;;;;;;;;;35653:120;37072:91;;;;;;;;;;-1:-1:-1;37145:10:0;;;;37072:91;;8168:87;;;;;;;;;;-1:-1:-1;8241:6:0;;-1:-1:-1;;;;;8241:6:0;8168:87;;40015:202;;;;;;;;;;-1:-1:-1;40015:202:0;;;;;:::i;:::-;;:::i;11099:104::-;;;;;;;;;;;;;:::i;35367:278::-;;;;;;;;;;-1:-1:-1;35367:278:0;;;;;:::i;:::-;;:::i;34316:167::-;;;;;;;;;;-1:-1:-1;34316:167:0;;;;;:::i;:::-;;:::i;36971:92::-;;;;;;;;;;-1:-1:-1;36971:92:0;;;;;:::i;:::-;;:::i;31552:27::-;;;;;;;;;;;;;;;;40950:171;;;;;;;;;;-1:-1:-1;40950:171:0;;;;;:::i;:::-;;:::i;39789:214::-;;;;;;;;;;-1:-1:-1;39789:214:0;;;;;:::i;:::-;;:::i;40665:162::-;;;;;;;;;;-1:-1:-1;40665:162:0;;;;;:::i;:::-;;:::i;30846:43::-;;;;;;;;;;-1:-1:-1;30846:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34491:143;;;;;;;;;;-1:-1:-1;34491:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;34599:18:0;;;34572:7;34599:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34491:143;39475:110;;;;;;;;;;-1:-1:-1;39475:110:0;;;;;:::i;:::-;;:::i;40470:184::-;;;;;;;;;;-1:-1:-1;40470:184:0;;;;;:::i;:::-;;:::i;40225:237::-;;;;;;;;;;-1:-1:-1;40225:237:0;;;;;:::i;:::-;;:::i;9074:238::-;;;;;;;;;;-1:-1:-1;9074:238:0;;;;;:::i;:::-;;:::i;10880:100::-;10934:13;10967:5;10960:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10880:100;:::o;34642:161::-;34717:4;34734:39;7437:10;34757:7;34766:6;34734:8;:39::i;:::-;-1:-1:-1;34791:4:0;34642:161;;;;;:::o;34811:313::-;34909:4;34926:36;34936:6;34944:9;34955:6;34926:9;:36::i;:::-;34973:121;34982:6;7437:10;35004:89;35042:6;35004:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35004:19:0;;;;;;:11;:19;;;;;;;;7437:10;35004:33;;;;;;;;;;:37;:89::i;:::-;34973:8;:121::i;:::-;-1:-1:-1;35112:4:0;34811:313;;;;;:::o;36710:253::-;36776:7;36815;;36804;:18;;36796:73;;;;-1:-1:-1;;;36796:73:0;;4510:2:1;36796:73:0;;;4492:21:1;4549:2;4529:18;;;4522:30;4588:34;4568:18;;;4561:62;-1:-1:-1;;;4639:18:1;;;4632:40;4689:19;;36796:73:0;;;;;;;;;36880:19;36903:10;:8;:10::i;:::-;36880:33;-1:-1:-1;36931:24:0;:7;36880:33;36931:11;:24::i;:::-;36924:31;36710:253;-1:-1:-1;;;36710:253:0:o;38147:479::-;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;38229:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38221:60;;;::::0;-1:-1:-1;;;38221:60:0;;4921:2:1;38221:60:0::1;::::0;::::1;4903:21:1::0;4960:2;4940:18;;;4933:30;4999:29;4979:18;;;4972:57;5046:18;;38221:60:0::1;4719:351:1::0;38221:60:0::1;38297:9;38292:327;38316:9;:16:::0;38312:20;::::1;38292:327;;;38374:7;-1:-1:-1::0;;;;;38358:23:0::1;:9;38368:1;38358:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38358:12:0::1;:23:::0;38354:254:::1;;38417:9;38427:16:::0;;:20:::1;::::0;38446:1:::1;::::0;38427:20:::1;:::i;:::-;38417:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38402:9:::1;:12:::0;;-1:-1:-1;;;;;38417:31:0;;::::1;::::0;38412:1;;38402:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;38402:46:0::1;-1:-1:-1::0;;;;;38402:46:0;;::::1;;::::0;;38467:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;38506:11:::1;:20:::0;;;;:28;;-1:-1:-1;;38506:28:0::1;::::0;;38553:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38553:15:0;;;;;-1:-1:-1;;;;;;38553:15:0::1;::::0;;;;;38292:327:::1;38147:479:::0;:::o;38354:254::-:1;38334:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38292:327;;;;38147:479:::0;:::o;35132:227::-;7437:10;35229:4;35278:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35278:34:0;;;;;;;;;;35229:4;;35246:83;;35269:7;;35278:50;;35317:10;35278:38;:50::i;35876:378::-;7437:10;35928:14;35977:19;;;:11;:19;;;;;;;;35976:20;35968:77;;;;-1:-1:-1;;;35968:77:0;;5946:2:1;35968:77:0;;;5928:21:1;5985:2;5965:18;;;5958:30;6024:34;6004:18;;;5997:62;-1:-1:-1;;;6075:18:1;;;6068:42;6127:19;;35968:77:0;5744:408:1;35968:77:0;36057:15;36082:19;36093:7;36082:10;:19::i;:::-;-1:-1:-1;;;;;;;;36130:15:0;;;;;;:7;:15;;;;;;36056:45;;-1:-1:-1;36130:28:0;;:15;-1:-1:-1;36056:45:0;;-1:-1:-1;;36130:19:0;:28::i;:::-;-1:-1:-1;;;;;36112:15:0;;;;;;:7;:15;;;;;:46;36179:7;;:20;;36191:7;36179:11;:20::i;:::-;36169:7;:30;36223:10;;:23;;36238:7;36223:14;:23::i;:::-;36210:10;:36;-1:-1:-1;;;35876:378:0:o;39352:111::-;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;39421:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;39421:34:0::1;39451:4;39421:34;::::0;;39352:111::o;37171:246::-;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;37248:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37247:21;37239:64;;;::::0;-1:-1:-1;;;37239:64:0;;6359:2:1;37239:64:0::1;::::0;::::1;6341:21:1::0;6398:2;6378:18;;;6371:30;6437:32;6417:18;;;6410:60;6487:18;;37239:64:0::1;6157:354:1::0;37239:64:0::1;-1:-1:-1::0;;;;;37322:23:0;::::1;7437:10:::0;37322:23;37314:57:::1;;;::::0;-1:-1:-1;;;37314:57:0;;6718:2:1;37314:57:0::1;::::0;::::1;6700:21:1::0;6757:2;6737:18;;;6730:30;-1:-1:-1;;;6776:18:1;;;6769:51;6837:18;;37314:57:0::1;6516:345:1::0;37314:57:0::1;-1:-1:-1::0;;;;;37382:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37382:27:0::1;37405:4;37382:27;::::0;;37171:246::o;36262:440::-;36352:7;36391;;36380;:18;;36372:62;;;;-1:-1:-1;;;36372:62:0;;7068:2:1;36372:62:0;;;7050:21:1;7107:2;7087:18;;;7080:30;7146:33;7126:18;;;7119:61;7197:18;;36372:62:0;6866:355:1;36372:62:0;36450:17;36445:250;;36485:15;36510:19;36521:7;36510:10;:19::i;:::-;-1:-1:-1;36484:45:0;;-1:-1:-1;36545:14:0;;-1:-1:-1;;;;;;36545:14:0;36445:250;36594:23;36626:19;36637:7;36626:10;:19::i;:::-;-1:-1:-1;36592:53:0;;-1:-1:-1;36661:22:0;;-1:-1:-1;;;;;;36661:22:0;37692:447;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;37889:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37888:21;37880:61;;;::::0;-1:-1:-1;;;37880:61:0;;4921:2:1;37880:61:0::1;::::0;::::1;4903:21:1::0;4960:2;4940:18;;;4933:30;4999:29;4979:18;;;4972:57;5046:18;;37880:61:0::1;4719:351:1::0;37880:61:0::1;-1:-1:-1::0;;;;;37955:16:0;::::1;37974:1;37955:16:::0;;;:7:::1;:16;::::0;;;;;:20;37952:108:::1;;-1:-1:-1::0;;;;;38031:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;38011:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37992:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37952:108:::1;-1:-1:-1::0;;;;;38070:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;38070:27:0::1;38093:4;38070:27:::0;;::::1;::::0;;;38108:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;38108:23:0::1;::::0;;::::1;::::0;;37692:447::o;37425:259::-;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;37506:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37498:59;;;::::0;-1:-1:-1;;;37498:59:0;;7428:2:1;37498:59:0::1;::::0;::::1;7410:21:1::0;7467:2;7447:18;;;7440:30;7506:28;7486:18;;;7479:56;7552:18;;37498:59:0::1;7226:350:1::0;37498:59:0::1;-1:-1:-1::0;;;;;37576:23:0;::::1;7437:10:::0;37576:23;37568:69:::1;;;::::0;-1:-1:-1;;;37568:69:0;;7783:2:1;37568:69:0::1;::::0;::::1;7765:21:1::0;7822:2;7802:18;;;7795:30;7861:34;7841:18;;;7834:62;-1:-1:-1;;;7912:18:1;;;7905:31;7953:19;;37568:69:0::1;7581:397:1::0;37568:69:0::1;-1:-1:-1::0;;;;;37648:20:0::1;37671:5;37648:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;37648:28:0::1;::::0;;37425:259::o;39597:184::-;8054:13;:11;:13::i;:::-;39699:2:::1;39685:10;;:16;;39677:63;;;::::0;-1:-1:-1;;;39677:63:0;;8185:2:1;39677:63:0::1;::::0;::::1;8167:21:1::0;8224:2;8204:18;;;8197:30;8263:34;8243:18;;;8236:62;-1:-1:-1;;;8314:18:1;;;8307:32;8356:19;;39677:63:0::1;7983:398:1::0;39677:63:0::1;39751:10;:22:::0;39597:184::o;34110:198::-;-1:-1:-1;;;;;34200:20:0;;34176:7;34200:20;;;:11;:20;;;;;;;;34196:49;;;-1:-1:-1;;;;;;34229:16:0;;;;;:7;:16;;;;;;;34110:198::o;34196:49::-;-1:-1:-1;;;;;34283:16:0;;;;;;:7;:16;;;;;;34263:37;;:19;:37::i;8816:103::-;8054:13;:11;:13::i;:::-;8881:30:::1;8908:1;8881:18;:30::i;:::-;8816:103::o:0;40015:202::-;8054:13;:11;:13::i;:::-;40126:2:::1;40109:13;;:19;;40101:69;;;::::0;-1:-1:-1;;;40101:69:0;;8588:2:1;40101:69:0::1;::::0;::::1;8570:21:1::0;8627:2;8607:18;;;8600:30;8666:34;8646:18;;;8639:62;-1:-1:-1;;;8717:18:1;;;8710:35;8762:19;;40101:69:0::1;8386:401:1::0;40101:69:0::1;40181:13;:28:::0;40015:202::o;11099:104::-;11155:13;11188:7;11181:14;;;;;:::i;35367:278::-;35469:4;35486:129;7437:10;35509:7;35518:96;35557:15;35518:96;;;;;;;;;;;;;;;;;7437:10;35518:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35518:34:0;;;;;;;;;;;;:38;:96::i;34316:167::-;34394:4;34411:42;7437:10;34435:9;34446:6;34411:9;:42::i;36971:92::-;8054:13;:11;:13::i;:::-;37034:10:::1;:20:::0;;-1:-1:-1;;37034:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36971:92::o;40950:171::-;8054:13;:11;:13::i;:::-;41027:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;41027:32:0;;::::1;;::::0;;41075:38:::1;::::0;::::1;::::0;::::1;::::0;41051:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;41075:38:0::1;;;;;;;;40950:171:::0;:::o;39789:214::-;8054:13;:11;:13::i;:::-;39906:2:::1;39887:15;;:21;;39879:73;;;::::0;-1:-1:-1;;;39879:73:0;;8994:2:1;39879:73:0::1;::::0;::::1;8976:21:1::0;9033:2;9013:18;;;9006:30;9072:34;9052:18;;;9045:62;-1:-1:-1;;;9123:18:1;;;9116:37;9170:19;;39879:73:0::1;8792:403:1::0;39879:73:0::1;39963:15;:32:::0;39789:214::o;40665:162::-;8054:13;:11;:13::i;:::-;40759:60:::1;40803:5;40759:25;40771:12;40759:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;40744:12;:75:::0;-1:-1:-1;40665:162:0:o;39475:110::-;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;39542:27:0::1;39572:5;39542:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;39542:35:0::1;::::0;;39475:110::o;40470:184::-;8054:13;:11;:13::i;:::-;40574:3:::1;40564:7;;:13;;;;:::i;:::-;40548:12;;:29;;40540:74;;;::::0;-1:-1:-1;;;40540:74:0;;9624:2:1;40540:74:0::1;::::0;::::1;9606:21:1::0;;;9643:18;;;9636:30;9702:34;9682:18;;;9675:62;9754:18;;40540:74:0::1;9422:356:1::0;40540:74:0::1;40625:12;:21:::0;40470:184::o;40225:237::-;8054:13;:11;:13::i;:::-;40365:3:::1;40355:7;;:13;;;;:::i;:::-;40322:29;;:46;;40314:91;;;::::0;-1:-1:-1;;;40314:91:0;;9624:2:1;40314:91:0::1;::::0;::::1;9606:21:1::0;;;9643:18;;;9636:30;9702:34;9682:18;;;9675:62;9754:18;;40314:91:0::1;9422:356:1::0;40314:91:0::1;40416:29;:38:::0;40225:237::o;9074:238::-;8054:13;:11;:13::i;:::-;-1:-1:-1;;;;;9177:22:0;::::1;9155:110;;;::::0;-1:-1:-1;;;9155:110:0;;9985:2:1;9155:110:0::1;::::0;::::1;9967:21:1::0;10024:2;10004:18;;;9997:30;10063:34;10043:18;;;10036:62;-1:-1:-1;;;10114:18:1;;;10107:36;10160:19;;9155:110:0::1;9783:402:1::0;9155:110:0::1;9276:28;9295:8;9276:18;:28::i;:::-;9074:238:::0;:::o;45214:355::-;-1:-1:-1;;;;;45325:19:0;;45317:68;;;;-1:-1:-1;;;45317:68:0;;10392:2:1;45317:68:0;;;10374:21:1;10431:2;10411:18;;;10404:30;10470:34;10450:18;;;10443:62;-1:-1:-1;;;10521:18:1;;;10514:34;10565:19;;45317:68:0;10190:400:1;45317:68:0;-1:-1:-1;;;;;45404:21:0;;45396:68;;;;-1:-1:-1;;;45396:68:0;;10797:2:1;45396:68:0;;;10779:21:1;10836:2;10816:18;;;10809:30;10875:34;10855:18;;;10848:62;-1:-1:-1;;;10926:18:1;;;10919:32;10968:19;;45396:68:0;10595:398:1;45396:68:0;-1:-1:-1;;;;;45477:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;45529:32;;1361:25:1;;;45529:32:0;;1334:18:1;45529:32:0;;;;;;;45214:355;;;:::o;45577:2392::-;-1:-1:-1;;;;;45685:18:0;;45677:68;;;;-1:-1:-1;;;45677:68:0;;11200:2:1;45677:68:0;;;11182:21:1;11239:2;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;-1:-1:-1;;;11329:18:1;;;11322:35;11374:19;;45677:68:0;10998:401:1;45677:68:0;-1:-1:-1;;;;;45764:16:0;;45756:64;;;;-1:-1:-1;;;45756:64:0;;11606:2:1;45756:64:0;;;11588:21:1;11645:2;11625:18;;;11618:30;11684:34;11664:18;;;11657:62;-1:-1:-1;;;11735:18:1;;;11728:33;11778:19;;45756:64:0;11404:399:1;45756:64:0;45848:1;45839:6;:10;45831:64;;;;-1:-1:-1;;;45831:64:0;;12010:2:1;45831:64:0;;;11992:21:1;12049:2;12029:18;;;12022:30;12088:34;12068:18;;;12061:62;-1:-1:-1;;;12139:18:1;;;12132:39;12188:19;;45831:64:0;11808:405:1;45831:64:0;-1:-1:-1;;;;;45917:17:0;;;;;;:11;:17;;;;;;;;45916:18;45908:52;;;;-1:-1:-1;;;45908:52:0;;12420:2:1;45908:52:0;;;12402:21:1;12459:2;12439:18;;;12432:30;-1:-1:-1;;;12478:18:1;;;12471:51;12539:18;;45908:52:0;12218:345:1;45908:52:0;-1:-1:-1;;;;;45980:15:0;;;;;;:11;:15;;;;;;;;45979:16;45971:53;;;;-1:-1:-1;;;45971:53:0;;12770:2:1;45971:53:0;;;12752:21:1;12809:2;12789:18;;;12782:30;12848:26;12828:18;;;12821:54;12892:18;;45971:53:0;12568:348:1;45971:53:0;8241:6;;-1:-1:-1;;;;;46041:15:0;;;8241:6;;46041:15;;:32;;-1:-1:-1;8241:6:0;;-1:-1:-1;;;;;46060:13:0;;;8241:6;;46060:13;46041:32;:57;;;-1:-1:-1;;;;;;46077:21:0;;46093:4;46077:21;46041:57;46037:282;;;46118:18;;:23;:46;;;;;46151:13;-1:-1:-1;;;;;46145:19:0;:2;-1:-1:-1;;;;;46145:19:0;;46118:46;46115:118;;;46205:12;46184:18;:33;46115:118;46247:39;46262:4;46268:2;46272:6;46280:5;46247:14;:39::i;:::-;45577:2392;;;:::o;46037:282::-;46378:10;;;;46370:40;;;;-1:-1:-1;;;46370:40:0;;13123:2:1;46370:40:0;;;13105:21:1;13162:2;13142:18;;;13135:30;-1:-1:-1;;;13181:18:1;;;13174:47;13238:18;;46370:40:0;12921:341:1;46370:40:0;46463:21;;46442:18;;:42;;;;:::i;:::-;46426:12;:58;46423:132;;-1:-1:-1;;;;;;46500:15:0;;;;;:11;:15;;;;;:22;;-1:-1:-1;;46500:22:0;46518:4;46500:22;;;-1:-1:-1;45577:2392:0:o;46423:132::-;8241:6;;-1:-1:-1;;;;;46570:15:0;;;8241:6;;46570:15;;;;:32;;-1:-1:-1;8241:6:0;;-1:-1:-1;;;;;46589:13:0;;;8241:6;;46589:13;;46570:32;46567:125;;;46635:12;;46625:6;:22;;46617:75;;;;-1:-1:-1;;;46617:75:0;;13599:2:1;46617:75:0;;;13581:21:1;13638:2;13618:18;;;13611:30;13677:34;13657:18;;;13650:62;-1:-1:-1;;;13728:18:1;;;13721:38;13776:19;;46617:75:0;13397:404:1;46617:75:0;46705:19;46735:12;46750:10;:8;:10::i;:::-;46735:25;;46781:28;46812:24;46830:4;46812:9;:24::i;:::-;46781:55;;46884:12;;46860:20;:36;46857:112;;-1:-1:-1;46945:12:0;;46857:112;47040:29;;47016:53;;;;;;;47098;;-1:-1:-1;47135:16:0;;;;47134:17;47098:53;:91;;;;;47176:13;-1:-1:-1;;;;;47168:21:0;:4;-1:-1:-1;;;;;47168:21:0;;;47098:91;:129;;;;-1:-1:-1;47206:21:0;;;;;;;47098:129;47080:318;;;47277:29;;47254:52;;47350:36;47365:20;47350:14;:36::i;:::-;-1:-1:-1;;;;;47606:24:0;;47479:12;47606:24;;;:18;:24;;;;;;47494:4;;47606:24;;;:50;;-1:-1:-1;;;;;;47634:22:0;;;;;;:18;:22;;;;;;;;47606:50;47603:96;;;-1:-1:-1;47682:5:0;47603:96;47733:30;47746:6;47754:8;;47733:12;:30::i;:::-;47719:44;;47776:42;47788:4;31989:42;47800:11;47813:4;47776:11;:42::i;:::-;47831:21;47841:11;47831:21;;:::i;:::-;;;47923:38;47938:4;47943:2;47946:6;47953:7;47923:14;:38::i;:::-;45666:2303;;;;;45577:2392;;;:::o;3796:192::-;3882:7;3918:12;3910:6;;;;3902:29;;;;-1:-1:-1;;;3902:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3942:9:0;3954:5;3958:1;3954;:5;:::i;:::-;3942:17;3796:192;-1:-1:-1;;;;;3796:192:0:o;42883:163::-;42924:7;42945:15;42962;42981:19;:17;:19::i;:::-;42944:56;;-1:-1:-1;42944:56:0;-1:-1:-1;43018:20:0;42944:56;;43018:11;:20::i;:::-;43011:27;;;;42883:163;:::o;5194:132::-;5252:7;5279:39;5283:1;5286;5279:39;;;;;;;;;;;;;;;;;:3;:39::i;8333:132::-;8241:6;;-1:-1:-1;;;;;8241:6:0;7437:10;8397:23;8389:68;;;;-1:-1:-1;;;8389:68:0;;14008:2:1;8389:68:0;;;13990:21:1;;;14027:18;;;14020:30;14086:34;14066:18;;;14059:62;14138:18;;8389:68:0;13806:356:1;2893:181:0;2951:7;;2983:5;2987:1;2983;:5;:::i;:::-;2971:17;;3012:1;3007;:6;;2999:46;;;;-1:-1:-1;;;2999:46:0;;14369:2:1;2999:46:0;;;14351:21:1;14408:2;14388:18;;;14381:30;14447:29;14427:18;;;14420:57;14494:18;;2999:46:0;14167:351:1;41391:478:0;41450:7;41459;41468;41477;41486;41495;41504;41525:23;41550:12;41564:18;41584:20;41608;41620:7;41608:11;:20::i;:::-;41524:104;;;;;;;;41640:15;41657:23;41682:12;41698:64;41710:7;41719:4;41725:10;41737:12;41751:10;:8;:10::i;:::-;41698:11;:64::i;:::-;41639:123;;-1:-1:-1;41639:123:0;-1:-1:-1;41639:123:0;-1:-1:-1;41813:15:0;;-1:-1:-1;41830:4:0;;-1:-1:-1;41836:10:0;;-1:-1:-1;41848:12:0;-1:-1:-1;;;;41391:478:0;;;;;;;;;:::o;3357:136::-;3415:7;3442:43;3446:1;3449;3442:43;;;;;;;;;;;;;;;;;:3;:43::i;9472:191::-;9565:6;;;-1:-1:-1;;;;;9582:17:0;;;-1:-1:-1;;;;;;9582:17:0;;;;;;;9615:40;;9565:6;;;9582:17;9565:6;;9615:40;;9546:16;;9615:40;9535:128;9472:191;:::o;4247:471::-;4305:7;4550:1;4555;4550:6;4546:47;;-1:-1:-1;4580:1:0;4573:8;;4546:47;4605:9;4617:5;4621:1;4617;:5;:::i;:::-;4605:17;-1:-1:-1;4650:1:0;4641:5;4645:1;4605:17;4641:5;:::i;:::-;:10;4633:56;;;;-1:-1:-1;;;4633:56:0;;14898:2:1;4633:56:0;;;14880:21:1;14937:2;14917:18;;;14910:30;14976:34;14956:18;;;14949:62;-1:-1:-1;;;15027:18:1;;;15020:31;15068:19;;4633:56:0;14696:397:1;50529:836:0;50640:7;50636:40;;50662:14;:12;:14::i;:::-;-1:-1:-1;;;;;50703:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;50727:22:0;;;;;;:11;:22;;;;;;;;50726:23;50703:46;50699:597;;;50766:48;50788:6;50796:9;50807:6;50766:21;:48::i;:::-;50699:597;;;-1:-1:-1;;;;;50837:19:0;;;;;;:11;:19;;;;;;;;50836:20;:46;;;;-1:-1:-1;;;;;;50860:22:0;;;;;;:11;:22;;;;;;;;50836:46;50832:464;;;50899:46;50919:6;50927:9;50938:6;50899:19;:46::i;50832:464::-;-1:-1:-1;;;;;50968:19:0;;;;;;:11;:19;;;;;;;;50967:20;:47;;;;-1:-1:-1;;;;;;50992:22:0;;;;;;:11;:22;;;;;;;;50991:23;50967:47;50963:333;;;51031:44;51049:6;51057:9;51068:6;51031:17;:44::i;50963:333::-;-1:-1:-1;;;;;51097:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;51120:22:0;;;;;;:11;:22;;;;;;;;51097:45;51093:203;;;51159:48;51181:6;51189:9;51200:6;51159:21;:48::i;51093:203::-;51240:44;51258:6;51266:9;51277:6;51240:17;:44::i;:::-;51320:7;51316:41;;51342:15;44947:18;;44934:10;:31;44992:21;;44976:13;:37;45042:23;;45024:15;:41;44890:183;51342:15;50529:836;;;;:::o;48345:985::-;32399:16;:23;;-1:-1:-1;;32399:23:0;32418:4;32399:23;;;:16;48496:27:::1;:20:::0;48521:1:::1;48496:24;:27::i;:::-;48481:42:::0;-1:-1:-1;48534:17:0::1;48554:30;:20:::0;48481:42;48554:24:::1;:30::i;:::-;48534:50:::0;-1:-1:-1;48887:21:0::1;48953:22;48970:4:::0;48953:16:::1;:22::i;:::-;49106:18;49127:41;:21;49153:14:::0;49127:25:::1;:41::i;:::-;49106:62;;49218:35;49231:9;49242:10;49218:12;:35::i;:::-;49279:43;::::0;;15300:25:1;;;15356:2;15341:18;;15334:34;;;15384:18;;;15377:34;;;49279:43:0::1;::::0;15288:2:1;15273:18;49279:43:0::1;;;;;;;-1:-1:-1::0;;32445:16:0;:24;;-1:-1:-1;;32445:24:0;;;-1:-1:-1;;;48345:985:0:o;44348:150::-;44429:7;44456:34;44484:5;44456:23;:7;44468:10;44456:11;:23::i;47977:360::-;-1:-1:-1;;;;;48121:17:0;;;;;;:11;:17;;;;;;;;48117:213;;;-1:-1:-1;;;;;48155:13:0;;;;;;:7;:13;;;;;:24;;48172:7;;48155:13;:24;;48172:7;;48155:24;:::i;:::-;;;;-1:-1:-1;;;;;;;48194:11:0;;;;;;:7;:11;;;;;:22;;48209:7;;48194:11;:22;;48209:7;;48194:22;:::i;:::-;;;;-1:-1:-1;48117:213:0;;-1:-1:-1;48117:213:0;;-1:-1:-1;;;;;48250:13:0;;;;;;:7;:13;;;;;:24;;48267:7;;48250:13;:24;;48267:7;;48250:24;:::i;:::-;;;;-1:-1:-1;48304:14:0;;-1:-1:-1;48314:4:0;48304:7;:14;:::i;:::-;-1:-1:-1;;;;;48289:11:0;;;;;;:7;:11;;;;;:29;;:11;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;;47977:360:0;;;;:::o;43054:561::-;43151:7;;43187;;43104;;;;;43211:289;43235:9;:16;43231:20;;43211:289;;;43301:7;43277;:21;43285:9;43295:1;43285:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43285:12:0;43277:21;;;;;;;;;;;;;:31;;:66;;;43336:7;43312;:21;43320:9;43330:1;43320:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43320:12:0;43312:21;;;;;;;;;;;;;:31;43277:66;43273:97;;;43353:7;;43362;;43345:25;;;;;;;43054:561;;:::o;43273:97::-;43395:34;43407:7;:21;43415:9;43425:1;43415:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43415:12:0;43407:21;;;;;;;;;;;;;43395:7;;:11;:34::i;:::-;43385:44;;43454:34;43466:7;:21;43474:9;43484:1;43474:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43474:12:0;43466:21;;;;;;;;;;;;;43454:7;;:11;:34::i;:::-;43444:44;-1:-1:-1;43253:3:0;;;;:::i;:::-;;;;43211:289;;;-1:-1:-1;43536:7:0;;43524;;:20;;:11;:20::i;:::-;43514:7;:30;43510:61;;;43554:7;;43563;;43546:25;;;;;;43054:561;;:::o;43510:61::-;43590:7;;43599;;-1:-1:-1;43054:561:0;-1:-1:-1;43054:561:0:o;5822:278::-;5908:7;5943:12;5936:5;5928:28;;;;-1:-1:-1;;;5928:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5967:9:0;5979:5;5983:1;5979;:5;:::i;41877:458::-;41937:7;41946;41955;41964;41984:12;41999:33;42012:7;42021:10;;41999:12;:33::i;:::-;41984:48;;42043:18;42064:36;42077:7;42086:13;;42064:12;:36::i;:::-;42043:57;;42111:20;42134:38;42147:7;42156:15;;42134:12;:38::i;:::-;42111:61;-1:-1:-1;42183:23:0;42209:51;42111:61;42209:33;42231:10;42209:33;:7;42221:4;42209:11;:17::i;:::-;:21;;:33::i;:51::-;42183:77;42296:4;;-1:-1:-1;42302:10:0;;-1:-1:-1;42302:10:0;-1:-1:-1;41877:458:0;;-1:-1:-1;;;41877:458:0:o;42343:532::-;42480:7;;;;42536:24;:7;42548:11;42536;:24::i;:::-;42518:42;-1:-1:-1;42571:12:0;42586:21;:4;42595:11;42586:8;:21::i;:::-;42571:36;-1:-1:-1;42618:18:0;42639:27;:10;42654:11;42639:14;:27::i;:::-;42618:48;-1:-1:-1;42677:20:0;42700:29;:12;42717:11;42700:16;:29::i;:::-;42677:52;-1:-1:-1;42740:23:0;42766:51;42677:52;42766:33;42788:10;42766:33;:7;42778:4;42766:11;:17::i;:51::-;42836:7;;;;-1:-1:-1;42862:4:0;;-1:-1:-1;42343:532:0;;-1:-1:-1;;;;;;;;;42343:532:0:o;44510:368::-;44556:10;;:15;:37;;;;-1:-1:-1;44575:13:0;;:18;44556:37;:61;;;;-1:-1:-1;44597:15:0;;:20;44556:61;44553:73;;;44510:368::o;44553:73::-;44667:10;;;44646:18;:31;44712:13;;;44688:21;:37;44762:15;;;44736:23;:41;-1:-1:-1;44798:14:0;;;;44823:17;;;;44851:19;44510:368::o;52609:632::-;52712:15;52729:23;52754:12;52768:23;52793:12;52807:18;52827:20;52851:19;52862:7;52851:10;:19::i;:::-;52711:159;;;;;;;;;;;;;;52899:28;52919:7;52899;:15;52907:6;-1:-1:-1;;;;;52899:15:0;-1:-1:-1;;;;;52899:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;52881:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52956:7;:15;;;;:28;;52976:7;52956:19;:28::i;:::-;-1:-1:-1;;;;;52938:15:0;;;;;;;:7;:15;;;;;;:46;;;;53016:18;;;;;;;:39;;53039:15;53016:22;:39::i;:::-;-1:-1:-1;;;;;52995:18:0;;;;;;:7;:18;;;;;:60;53069:26;53084:10;53069:14;:26::i;:::-;53106:33;53126:12;53106:19;:33::i;:::-;53150:23;53162:4;53168;53150:11;:23::i;:::-;53206:9;-1:-1:-1;;;;;53189:44:0;53198:6;-1:-1:-1;;;;;53189:44:0;;53217:15;53189:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;53189:44:0;;;;;;;;52700:541;;;;;;;52609:632;;;:::o;51949:652::-;52050:15;52067:23;52092:12;52106:23;52131:12;52145:18;52165:20;52189:19;52200:7;52189:10;:19::i;:::-;52049:159;;;;;;;;;;;;;;52237:28;52257:7;52237;:15;52245:6;-1:-1:-1;;;;;52237:15:0;-1:-1:-1;;;;;52237:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;52219:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;52297:18;;;;;:7;:18;;;;;:39;;52320:15;52297:22;:39::i;:::-;-1:-1:-1;;;;;52276:18:0;;;;;;:7;:18;;;;;;;;:60;;;;52368:7;:18;;;;:39;;52391:15;52368:22;:39::i;51373:568::-;51472:15;51489:23;51514:12;51528:23;51553:12;51567:18;51587:20;51611:19;51622:7;51611:10;:19::i;:::-;51471:159;;;;;;;;;;;;;;51659:28;51679:7;51659;:15;51667:6;-1:-1:-1;;;;;51659:15:0;-1:-1:-1;;;;;51659:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;38633:708::-;38736:15;38753:23;38778:12;38792:23;38817:12;38831:18;38851:20;38875:19;38886:7;38875:10;:19::i;:::-;38735:159;;;;;;;;;;;;;;38923:28;38943:7;38923;:15;38931:6;-1:-1:-1;;;;;38923:15:0;-1:-1:-1;;;;;38923:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38905:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38980:7;:15;;;;:28;;39000:7;38980:19;:28::i;49338:589::-;49488:16;;;49502:1;49488:16;;;;;;;;49464:21;;49488:16;;;;;;;;;;-1:-1:-1;49488:16:0;49464:40;;49533:4;49515;49520:1;49515:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;49515:23:0;;;-1:-1:-1;;;;;49515:23:0;;;;;49559:15;-1:-1:-1;;;;;49559:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49549:4;49554:1;49549:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;49549:32:0;;;-1:-1:-1;;;;;49549:32:0;;;;;49594:62;49611:4;49626:15;49644:11;49594:8;:62::i;:::-;49695:224;;-1:-1:-1;;;49695:224:0;;-1:-1:-1;;;;;49695:15:0;:66;;;;:224;;49776:11;;49802:1;;49846:4;;49873;;49893:15;;49695:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49393:534;49338:589;:::o;49935:513::-;50083:62;50100:4;50115:15;50133:11;50083:8;:62::i;:::-;50188:15;-1:-1:-1;;;;;50188:31:0;;50227:9;50260:4;50280:11;50306:1;50349;50392:7;8241:6;;-1:-1:-1;;;;;8241:6:0;;8168:87;50392:7;50188:252;;;;;;-1:-1:-1;;;;;;50188:252:0;;;-1:-1:-1;;;;;17154:15:1;;;50188:252:0;;;17136:34:1;17186:18;;;17179:34;;;;17229:18;;;17222:34;;;;17272:18;;;17265:34;17336:15;;;17315:19;;;17308:44;50414:15:0;17368:19:1;;;17361:35;17070:19;;50188:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49935:513;;:::o;43627:355::-;43690:19;43713:10;:8;:10::i;:::-;43690:33;-1:-1:-1;43734:18:0;43755:27;:10;43690:33;43755:14;:27::i;:::-;43834:4;43818:22;;;;:7;:22;;;;;;43734:48;;-1:-1:-1;43818:38:0;;43734:48;43818:26;:38::i;:::-;43809:4;43793:22;;;;:7;:22;;;;;;;;:63;;;;43870:11;:26;;;;;;43867:107;;;43952:4;43936:22;;;;:7;:22;;;;;;:38;;43963:10;43936:26;:38::i;:::-;43927:4;43911:22;;;;:7;:22;;;;;:63;43679:303;;43627:355;:::o;43990:340::-;44060:19;44083:10;:8;:10::i;:::-;44060:33;-1:-1:-1;44104:20:0;44127:29;:12;44060:33;44127:16;:29::i;:::-;44104:52;;44186:34;44207:12;44186:7;:16;44194:7;8241:6;;-1:-1:-1;;;;;8241:6:0;;8168:87;44194:7;-1:-1:-1;;;;;44186:16:0;;;;;;;;;;;;-1:-1:-1;44186:16:0;;;:20;:34::i;:::-;44167:7;:16;44175:7;8241:6;;-1:-1:-1;;;;;8241:6:0;;8168:87;44175:7;-1:-1:-1;;;;;44167:16:0;-1:-1:-1;;;;;44167:16:0;;;;;;;;;;;;:53;;;;44234:11;:20;44246:7;8241:6;;-1:-1:-1;;;;;8241:6:0;;8168:87;44246:7;-1:-1:-1;;;;;44234:20:0;;;;;;;;;;;;-1:-1:-1;44234:20:0;;;;44231:91;;;44288:34;44309:12;44288:7;:16;44296:7;8241:6;;-1:-1:-1;;;;;8241:6:0;;8168:87;44288:34;44269:7;:16;44277:7;8241:6;;-1:-1:-1;;;;;8241:6:0;;8168:87;44277:7;-1:-1:-1;;;;;44269:16:0;;;;;;;;;;;;-1:-1:-1;44269:16:0;:53;44049:281;;43990:340;:::o;41226:157::-;41314:7;;:17;;41326:4;41314:11;:17::i;:::-;41304:7;:27;41355:10;;:20;;41370:4;41355:14;:20::i;:::-;41342:10;:33;-1:-1:-1;;41226:157:0:o;14:548: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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2093:180::-;2152:6;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;-1:-1:-1;2244:23:1;;2093:180;-1:-1:-1;2093:180:1:o;2467:247::-;2526:6;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2634:9;2621:23;2653:31;2678:5;2653:31;:::i;2719:160::-;2784:20;;2840:13;;2833:21;2823:32;;2813:60;;2869:1;2866;2859:12;2813:60;2719:160;;;:::o;2884:248::-;2949:6;2957;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;3062:9;3049:23;3039:33;;3091:35;3122:2;3111:9;3107:18;3091:35;:::i;:::-;3081:45;;2884:248;;;;;:::o;3345:180::-;3401:6;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3493:26;3509:9;3493:26;:::i;3530:388::-;3598:6;3606;3659:2;3647:9;3638:7;3634:23;3630:32;3627:52;;;3675:1;3672;3665:12;3627:52;3714:9;3701:23;3733:31;3758:5;3733:31;:::i;:::-;3783:5;-1:-1:-1;3840:2:1;3825:18;;3812:32;3853:33;3812:32;3853:33;:::i;:::-;3905:7;3895:17;;;3530:388;;;;;:::o;3923:380::-;4002:1;3998:12;;;;4045;;;4066:61;;4120:4;4112:6;4108:17;4098:27;;4066:61;4173:2;4165:6;4162:14;4142:18;4139:38;4136:161;;4219:10;4214:3;4210:20;4207:1;4200:31;4254:4;4251:1;4244:15;4282:4;4279:1;4272:15;4136:161;;3923:380;;;:::o;5075:127::-;5136:10;5131:3;5127:20;5124:1;5117:31;5167:4;5164:1;5157:15;5191:4;5188:1;5181:15;5207:127;5268:10;5263:3;5259:20;5256:1;5249:31;5299:4;5296:1;5289:15;5323:4;5320:1;5313:15;5339:128;5406:9;;;5427:11;;;5424:37;;;5441:18;;:::i;5472:127::-;5533:10;5528:3;5524:20;5521:1;5514:31;5564:4;5561:1;5554:15;5588:4;5585:1;5578:15;5604:135;5643:3;5664:17;;;5661:43;;5684:18;;:::i;:::-;-1:-1:-1;5731:1:1;5720:13;;5604:135::o;9200:217::-;9240:1;9266;9256:132;;9310:10;9305:3;9301:20;9298:1;9291:31;9345:4;9342:1;9335:15;9373:4;9370:1;9363:15;9256:132;-1:-1:-1;9402:9:1;;9200:217::o;13267:125::-;13332:9;;;13353:10;;;13350:36;;;13366:18;;:::i;14523:168::-;14596:9;;;14627;;14644:15;;;14638:22;;14624:37;14614:71;;14665:18;;:::i;15554:251::-;15624:6;15677:2;15665:9;15656:7;15652:23;15648:32;15645:52;;;15693:1;15690;15683:12;15645:52;15725:9;15719:16;15744:31;15769:5;15744:31;:::i;15810:980::-;16072:4;16120:3;16109:9;16105:19;16151:6;16140:9;16133:25;16177:2;16215:6;16210:2;16199:9;16195:18;16188:34;16258:3;16253:2;16242:9;16238:18;16231:31;16282:6;16317;16311:13;16348:6;16340;16333:22;16386:3;16375:9;16371:19;16364:26;;16425:2;16417:6;16413:15;16399:29;;16446:1;16456:195;16470:6;16467:1;16464:13;16456:195;;;16535:13;;-1:-1:-1;;;;;16531:39:1;16519:52;;16626:15;;;;16591:12;;;;16567:1;16485:9;16456:195;;;-1:-1:-1;;;;;;;16707:32:1;;;;16702:2;16687:18;;16680:60;-1:-1:-1;;;16771:3:1;16756:19;16749:35;16668:3;15810:980;-1:-1:-1;;;15810:980:1:o;17407:306::-;17495:6;17503;17511;17564:2;17552:9;17543:7;17539:23;17535:32;17532:52;;;17580:1;17577;17570:12;17532:52;17609:9;17603:16;17593:26;;17659:2;17648:9;17644:18;17638:25;17628:35;;17703:2;17692:9;17688:18;17682:25;17672:35;;17407:306;;;;;:::o

Swarm Source

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