ETH Price: $3,403.62 (-2.00%)
Gas: 6 Gwei

Token

Shin Sekai (SEKAI)
 

Overview

Max Total Supply

3,330,330,330 SEKAI

Holders

128

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
acutepuppy.eth
Balance
0.017183915 SEKAI

Value
$0.00
0xc52cdb4821427b719b176765447578293e4cf9cb
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:
ShinSekai

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-08
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.15;

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

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

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}


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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using this function
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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 9;
    }

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 _createSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _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;
        }
        _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 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 {}
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

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

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


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


contract ShinSekai is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public maxWalletToken = 1000000 * (10**9);
    uint256 public maxBuyTxAmount = 1000000 * (10**9);
    uint256 public maxSellTxAmount = 1000000 * (10**9);
    uint256 public swapTokensAtAmount = 800 * (10**9);

    uint256 public marketingFee = 20;

    address payable public marketingWallet = payable(0x3612E1A72f348cea8747Ca3aC5d908C76eeFda17);
    address public immutable USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    // record blacklisted addresses
    mapping(address => bool) public _isBlacklisted;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquifyEnabledUpdated(bool enabled);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() ERC20("Shin Sekai", "SEKAI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), USDC);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        
        /*
            an internal function that is only called here,
            and CANNOT be called ever again
        */
        _createSupply(owner(), 3330330330 * (10**9));
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted address");

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(from == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) 
        {
            require(amount <= maxBuyTxAmount, "amount must be less than or equal to maxBuyTxAmount");
        }

         if(to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) 
         {
            require(amount <= maxSellTxAmount, "amount must be less than or equal to maxSellTxAmount");
        }

        if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to])
        {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to==uniswapV2Pair && 
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = swapTokensAtAmount;
            swapTokensForUSDC(contractTokenBalance, marketingWallet);
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees;
        
            if(from==uniswapV2Pair || to==uniswapV2Pair) {
                fees = amount.mul(marketingFee).div(100);
            }

        	amount = amount.sub(fees);

            if(fees > 0) {
                super._transfer(from, address(this), fees); 
            }
             
        }

        super._transfer(from, to, amount);

    }

    function swapTokensForUSDC(uint256 tokenAmount, address _to) private lockTheSwap{
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USDC;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            _to,
            block.timestamp
        );
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
   
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function updateFee(uint256 _marketingFee) public onlyOwner {
        require(_marketingFee <= 20, "tax too high");
        marketingFee = _marketingFee;
    }

    function setMaxWalletToken(uint256 _maxToken) external onlyOwner {
        maxWalletToken = _maxToken;
        require(maxWalletToken >= totalSupply().div(200), "value too low");
  	}

    function setMarketingWallet(address payable _newAddress) external onlyOwner {
        marketingWallet = _newAddress;
  	}


    function setMaxBuyTransaction(uint256 _maxBuyTx) external onlyOwner   
    {
        maxBuyTxAmount = _maxBuyTx;
        require(maxBuyTxAmount >= totalSupply().div(300), "value too low");
  	}

    function setMaxSellTransaction(uint256 _maxSellTx) external onlyOwner 
    {
        maxSellTxAmount = _maxSellTx;
        require(maxSellTxAmount >= totalSupply().div(300), "value too low");
  	}

    receive() external payable { }

    
  
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"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":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTx","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTx","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600660156101000a81548160ff02191690831515021790555066038d7ea4c6800060075566038d7ea4c6800060085566038d7ea4c6800060095564ba43b74000600a556014600b55733612e1a72f348cea8747ca3ac5d908c76eefda17600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff16815250348015620000f757600080fd5b506040518060400160405280600a81526020017f5368696e2053656b6169000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f53454b41490000000000000000000000000000000000000000000000000000008152508160039081620001759190620009fb565b508060049081620001879190620009fb565b505050620001aa6200019e620003cd60201b60201c565b620003d560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000237919062000b4c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a0516040518363ffffffff1660e01b81526004016200027592919062000b8f565b6020604051808303816000875af115801562000295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bb919062000b4c565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000354620003466200049b60201b60201c565b6001620004c560201b60201c565b62000389600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004c560201b60201c565b6200039c306001620004c560201b60201c565b620003c5620003b06200049b60201b60201c565b672e37b5ca505c0400620005ff60201b60201c565b505062000da5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004d5620003cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004fb6200049b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054b9062000c1d565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620005f3919062000c5c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006689062000cc9565b60405180910390fd5b62000685600083836200077760201b60201c565b806002600082825462000699919062000d1a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006f0919062000d1a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000757919062000d88565b60405180910390a362000773600083836200077c60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200080357607f821691505b602082108103620008195762000818620007bb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000844565b6200088f868362000844565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008dc620008d6620008d084620008a7565b620008b1565b620008a7565b9050919050565b6000819050919050565b620008f883620008bb565b620009106200090782620008e3565b84845462000851565b825550505050565b600090565b6200092762000918565b62000934818484620008ed565b505050565b5b818110156200095c57620009506000826200091d565b6001810190506200093a565b5050565b601f821115620009ab5762000975816200081f565b620009808462000834565b8101602085101562000990578190505b620009a86200099f8562000834565b83018262000939565b50505b505050565b600082821c905092915050565b6000620009d060001984600802620009b0565b1980831691505092915050565b6000620009eb8383620009bd565b9150826002028217905092915050565b62000a068262000781565b67ffffffffffffffff81111562000a225762000a216200078c565b5b62000a2e8254620007ea565b62000a3b82828562000960565b600060209050601f83116001811462000a73576000841562000a5e578287015190505b62000a6a8582620009dd565b86555062000ada565b601f19841662000a83866200081f565b60005b8281101562000aad5784890151825560018201915060208501945060208101905062000a86565b8683101562000acd578489015162000ac9601f891682620009bd565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b148262000ae7565b9050919050565b62000b268162000b07565b811462000b3257600080fd5b50565b60008151905062000b468162000b1b565b92915050565b60006020828403121562000b655762000b6462000ae2565b5b600062000b758482850162000b35565b91505092915050565b62000b898162000b07565b82525050565b600060408201905062000ba6600083018562000b7e565b62000bb5602083018462000b7e565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c0560208362000bbc565b915062000c128262000bcd565b602082019050919050565b6000602082019050818103600083015262000c388162000bf6565b9050919050565b60008115159050919050565b62000c568162000c3f565b82525050565b600060208201905062000c73600083018462000c4b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cb1601f8362000bbc565b915062000cbe8262000c79565b602082019050919050565b6000602082019050818103600083015262000ce48162000ca2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d2782620008a7565b915062000d3483620008a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d6c5762000d6b62000ceb565b5b828201905092915050565b62000d8281620008a7565b82525050565b600060208201905062000d9f600083018462000d77565b92915050565b60805160a05161381262000dfc60003960008181610faa01526125f2015260008181610bf501528181611b5e01528181611ca401528181611dea01528181611f81015281816120cb015261212001526138126000f3fe6080604052600436106102085760003560e01c8063750c11b611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b80639012c4a8116100e75780639012c4a8146105eb57806391d55f411461061457806395d89b411461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063750c11b61461054157806375f0a8741461056a57806389a30271146105955780638da5cb5b146105c05761020f565b8063455a43961161019b5780635c38ffe21161016a5780635c38ffe2146104705780635d098b38146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b8063455a4396146103b457806349bd5a5e146103dd5780634a74bb02146104085780634fbee193146104335761020f565b80631cdd3be3116101d75780631cdd3be3146102d257806323b872dd1461030f578063313ce5671461034c57806339509351146103775761020f565b806306fdde0314610214578063095ea7b31461023f5780631694505e1461027c57806318160ddd146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612811565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128cc565b610901565b6040516102739190612927565b60405180910390f35b34801561028857600080fd5b5061029161091f565b60405161029e91906129a1565b60405180910390f35b3480156102b357600080fd5b506102bc610945565b6040516102c991906129cb565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906129e6565b61094f565b6040516103069190612927565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190612a13565b61096f565b6040516103439190612927565b60405180910390f35b34801561035857600080fd5b50610361610a67565b60405161036e9190612a82565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906128cc565b610a70565b6040516103ab9190612927565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612ac9565b610b1c565b005b3480156103e957600080fd5b506103f2610bf3565b6040516103ff9190612b18565b60405180910390f35b34801561041457600080fd5b5061041d610c17565b60405161042a9190612927565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906129e6565b610c2a565b6040516104679190612927565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b33565b610c80565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9e565b610d66565b005b3480156104ce57600080fd5b506104d7610e26565b6040516104e491906129cb565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906129e6565b610e2c565b60405161052191906129cb565b60405180910390f35b34801561053657600080fd5b5061053f610e74565b005b34801561054d57600080fd5b5061056860048036038101906105639190612b33565b610efc565b005b34801561057657600080fd5b5061057f610f82565b60405161058c9190612bda565b60405180910390f35b3480156105a157600080fd5b506105aa610fa8565b6040516105b79190612b18565b60405180910390f35b3480156105cc57600080fd5b506105d5610fcc565b6040516105e29190612b18565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612b33565b610ff6565b005b34801561062057600080fd5b5061063b60048036038101906106369190612b33565b6110c0565b005b34801561064957600080fd5b506106526111a5565b60405161065f9190612811565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906128cc565b611237565b60405161069c9190612927565b60405180910390f35b3480156106b157600080fd5b506106ba611322565b6040516106c791906129cb565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906128cc565b611328565b6040516107049190612927565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612b33565b611346565b005b34801561074257600080fd5b5061075d60048036038101906107589190612ac9565b61142c565b005b34801561076b57600080fd5b5061078660048036038101906107819190612bf5565b611551565b005b34801561079457600080fd5b5061079d611621565b6040516107aa91906129cb565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612c22565b611627565b6040516107e791906129cb565b60405180910390f35b3480156107fc57600080fd5b506108056116ae565b60405161081291906129cb565b60405180910390f35b34801561082757600080fd5b506108306116b4565b60405161083d91906129cb565b60405180910390f35b34801561085257600080fd5b5061086d600480360381019061086891906129e6565b6116ba565b005b60606003805461087e90612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612c91565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117b1565b84846117b9565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b600061097c848484611982565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c76117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90612d34565b60405180910390fd5b610a5b85610a536117b1565b8584036117b9565b60019150509392505050565b60006009905090565b6000610b12610a7d6117b1565b848460016000610a8b6117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0d9190612d83565b6117b9565b6001905092915050565b610b246117b1565b73ffffffffffffffffffffffffffffffffffffffff16610b42610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90612e25565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c886117b1565b73ffffffffffffffffffffffffffffffffffffffff16610ca6610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612e25565b60405180910390fd5b80600981905550610d1f61012c610d11610945565b6121dd90919063ffffffff16565b6009541015610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90612e91565b60405180910390fd5b50565b610d6e6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990612e25565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e7c6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612e25565b60405180910390fd5b610efa60006121f3565b565b610f046117b1565b73ffffffffffffffffffffffffffffffffffffffff16610f22610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90612e25565b60405180910390fd5b80600a8190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffe6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661101c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990612e25565b60405180910390fd5b60148111156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612efd565b60405180910390fd5b80600b8190555050565b6110c86117b1565b73ffffffffffffffffffffffffffffffffffffffff166110e6610fcc565b73ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390612e25565b60405180910390fd5b8060078190555061115e60c8611150610945565b6121dd90919063ffffffff16565b60075410156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990612e91565b60405180910390fd5b50565b6060600480546111b490612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546111e090612c91565b801561122d5780601f106112025761010080835404028352916020019161122d565b820191906000526020600020905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b600080600160006112466117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612f8f565b60405180910390fd5b61131761130e6117b1565b858584036117b9565b600191505092915050565b60085481565b600061133c6113356117b1565b8484611982565b6001905092915050565b61134e6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661136c610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612e25565b60405180910390fd5b806008819055506113e561012c6113d7610945565b6121dd90919063ffffffff16565b6008541015611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612e91565b60405180910390fd5b50565b6114346117b1565b73ffffffffffffffffffffffffffffffffffffffff16611452610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90612e25565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115459190612927565b60405180910390a25050565b6115596117b1565b73ffffffffffffffffffffffffffffffffffffffff16611577610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490612e25565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116169190612927565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116c26117b1565b73ffffffffffffffffffffffffffffffffffffffff166116e0610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90612e25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90613021565b60405180910390fd5b6117ae816121f3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906130b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613145565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161197591906129cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790613269565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b045750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906132d5565b60405180910390fd5b60008103611b5c57611b57838360006122b9565b6121d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c015750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c575750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ca257600854811115611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613367565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d475750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9d5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611de857600954811115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde906133f9565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e8d5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ee35750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f47576000611ef383610e2c565b90506007548282611f049190612d83565b1115611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061348b565b60405180910390fd5b505b6000611f5230610e2c565b90506000600a548210159050808015611f785750600660149054906101000a900460ff16155b8015611fcf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611fe75750600660159054906101000a900460ff165b1561201e57600a54915061201d82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612538565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120c25750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121ca5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061216e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561219e5761219b606461218d600b548761274290919063ffffffff16565b6121dd90919063ffffffff16565b90505b6121b1818561275890919063ffffffff16565b935060008111156121c8576121c78630836122b9565b5b505b6121d58585856122b9565b50505b505050565b600081836121eb91906134da565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90613269565b60405180910390fd5b6123a283838361276e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061357d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bb9190612d83565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251f91906129cb565b60405180910390a3612532848484612773565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156125705761256f61359d565b5b60405190808252806020026020018201604052801561259e5781602001602082028036833780820191505090505b50905030816000815181106125b6576125b56135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612625576126246135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061268c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856117b9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b81526004016126f09594939291906136f4565b600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b50505050506000600660146101000a81548160ff0219169083151502179055505050565b60008183612750919061374e565b905092915050565b6000818361276691906137a8565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b2578082015181840152602081019050612797565b838111156127c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006127e382612778565b6127ed8185612783565b93506127fd818560208601612794565b612806816127c7565b840191505092915050565b6000602082019050818103600083015261282b81846127d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286382612838565b9050919050565b61287381612858565b811461287e57600080fd5b50565b6000813590506128908161286a565b92915050565b6000819050919050565b6128a981612896565b81146128b457600080fd5b50565b6000813590506128c6816128a0565b92915050565b600080604083850312156128e3576128e2612833565b5b60006128f185828601612881565b9250506020612902858286016128b7565b9150509250929050565b60008115159050919050565b6129218161290c565b82525050565b600060208201905061293c6000830184612918565b92915050565b6000819050919050565b600061296761296261295d84612838565b612942565b612838565b9050919050565b60006129798261294c565b9050919050565b600061298b8261296e565b9050919050565b61299b81612980565b82525050565b60006020820190506129b66000830184612992565b92915050565b6129c581612896565b82525050565b60006020820190506129e060008301846129bc565b92915050565b6000602082840312156129fc576129fb612833565b5b6000612a0a84828501612881565b91505092915050565b600080600060608486031215612a2c57612a2b612833565b5b6000612a3a86828701612881565b9350506020612a4b86828701612881565b9250506040612a5c868287016128b7565b9150509250925092565b600060ff82169050919050565b612a7c81612a66565b82525050565b6000602082019050612a976000830184612a73565b92915050565b612aa68161290c565b8114612ab157600080fd5b50565b600081359050612ac381612a9d565b92915050565b60008060408385031215612ae057612adf612833565b5b6000612aee85828601612881565b9250506020612aff85828601612ab4565b9150509250929050565b612b1281612858565b82525050565b6000602082019050612b2d6000830184612b09565b92915050565b600060208284031215612b4957612b48612833565b5b6000612b57848285016128b7565b91505092915050565b6000612b6b82612838565b9050919050565b612b7b81612b60565b8114612b8657600080fd5b50565b600081359050612b9881612b72565b92915050565b600060208284031215612bb457612bb3612833565b5b6000612bc284828501612b89565b91505092915050565b612bd481612b60565b82525050565b6000602082019050612bef6000830184612bcb565b92915050565b600060208284031215612c0b57612c0a612833565b5b6000612c1984828501612ab4565b91505092915050565b60008060408385031215612c3957612c38612833565b5b6000612c4785828601612881565b9250506020612c5885828601612881565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ca957607f821691505b602082108103612cbc57612cbb612c62565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612d1e602883612783565b9150612d2982612cc2565b604082019050919050565b60006020820190508181036000830152612d4d81612d11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d8e82612896565b9150612d9983612896565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dce57612dcd612d54565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e0f602083612783565b9150612e1a82612dd9565b602082019050919050565b60006020820190508181036000830152612e3e81612e02565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612e7b600d83612783565b9150612e8682612e45565b602082019050919050565b60006020820190508181036000830152612eaa81612e6e565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612ee7600c83612783565b9150612ef282612eb1565b602082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f79602583612783565b9150612f8482612f1d565b604082019050919050565b60006020820190508181036000830152612fa881612f6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061300b602683612783565b915061301682612faf565b604082019050919050565b6000602082019050818103600083015261303a81612ffe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061309d602483612783565b91506130a882613041565b604082019050919050565b600060208201905081810360008301526130cc81613090565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061312f602283612783565b915061313a826130d3565b604082019050919050565b6000602082019050818103600083015261315e81613122565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131c1602583612783565b91506131cc82613165565b604082019050919050565b600060208201905081810360008301526131f0816131b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613253602383612783565b915061325e826131f7565b604082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006132bf601383612783565b91506132ca82613289565b602082019050919050565b600060208201905081810360008301526132ee816132b2565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613351603383612783565b915061335c826132f5565b604082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006133e3603483612783565b91506133ee82613387565b604082019050919050565b60006020820190508181036000830152613412816133d6565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613475602483612783565b915061348082613419565b604082019050919050565b600060208201905081810360008301526134a481613468565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134e582612896565b91506134f083612896565b925082613500576134ff6134ab565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613567602683612783565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061362061361b613616846135fb565b612942565b612896565b9050919050565b61363081613605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61366b81612858565b82525050565b600061367d8383613662565b60208301905092915050565b6000602082019050919050565b60006136a182613636565b6136ab8185613641565b93506136b683613652565b8060005b838110156136e75781516136ce8882613671565b97506136d983613689565b9250506001810190506136ba565b5085935050505092915050565b600060a08201905061370960008301886129bc565b6137166020830187613627565b81810360408301526137288186613696565b90506137376060830185612b09565b61374460808301846129bc565b9695505050505050565b600061375982612896565b915061376483612896565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379d5761379c612d54565b5b828202905092915050565b60006137b382612896565b91506137be83612896565b9250828210156137d1576137d0612d54565b5b82820390509291505056fea26469706673582212202ca92e9e40ab67703b2e12b3b0197b5e5cfe15169b8e94b895f0956bebf2732064736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063750c11b611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b80639012c4a8116100e75780639012c4a8146105eb57806391d55f411461061457806395d89b411461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063750c11b61461054157806375f0a8741461056a57806389a30271146105955780638da5cb5b146105c05761020f565b8063455a43961161019b5780635c38ffe21161016a5780635c38ffe2146104705780635d098b38146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b8063455a4396146103b457806349bd5a5e146103dd5780634a74bb02146104085780634fbee193146104335761020f565b80631cdd3be3116101d75780631cdd3be3146102d257806323b872dd1461030f578063313ce5671461034c57806339509351146103775761020f565b806306fdde0314610214578063095ea7b31461023f5780631694505e1461027c57806318160ddd146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612811565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128cc565b610901565b6040516102739190612927565b60405180910390f35b34801561028857600080fd5b5061029161091f565b60405161029e91906129a1565b60405180910390f35b3480156102b357600080fd5b506102bc610945565b6040516102c991906129cb565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906129e6565b61094f565b6040516103069190612927565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190612a13565b61096f565b6040516103439190612927565b60405180910390f35b34801561035857600080fd5b50610361610a67565b60405161036e9190612a82565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906128cc565b610a70565b6040516103ab9190612927565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612ac9565b610b1c565b005b3480156103e957600080fd5b506103f2610bf3565b6040516103ff9190612b18565b60405180910390f35b34801561041457600080fd5b5061041d610c17565b60405161042a9190612927565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906129e6565b610c2a565b6040516104679190612927565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b33565b610c80565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9e565b610d66565b005b3480156104ce57600080fd5b506104d7610e26565b6040516104e491906129cb565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906129e6565b610e2c565b60405161052191906129cb565b60405180910390f35b34801561053657600080fd5b5061053f610e74565b005b34801561054d57600080fd5b5061056860048036038101906105639190612b33565b610efc565b005b34801561057657600080fd5b5061057f610f82565b60405161058c9190612bda565b60405180910390f35b3480156105a157600080fd5b506105aa610fa8565b6040516105b79190612b18565b60405180910390f35b3480156105cc57600080fd5b506105d5610fcc565b6040516105e29190612b18565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612b33565b610ff6565b005b34801561062057600080fd5b5061063b60048036038101906106369190612b33565b6110c0565b005b34801561064957600080fd5b506106526111a5565b60405161065f9190612811565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906128cc565b611237565b60405161069c9190612927565b60405180910390f35b3480156106b157600080fd5b506106ba611322565b6040516106c791906129cb565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906128cc565b611328565b6040516107049190612927565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612b33565b611346565b005b34801561074257600080fd5b5061075d60048036038101906107589190612ac9565b61142c565b005b34801561076b57600080fd5b5061078660048036038101906107819190612bf5565b611551565b005b34801561079457600080fd5b5061079d611621565b6040516107aa91906129cb565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612c22565b611627565b6040516107e791906129cb565b60405180910390f35b3480156107fc57600080fd5b506108056116ae565b60405161081291906129cb565b60405180910390f35b34801561082757600080fd5b506108306116b4565b60405161083d91906129cb565b60405180910390f35b34801561085257600080fd5b5061086d600480360381019061086891906129e6565b6116ba565b005b60606003805461087e90612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612c91565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117b1565b84846117b9565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b600061097c848484611982565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c76117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90612d34565b60405180910390fd5b610a5b85610a536117b1565b8584036117b9565b60019150509392505050565b60006009905090565b6000610b12610a7d6117b1565b848460016000610a8b6117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0d9190612d83565b6117b9565b6001905092915050565b610b246117b1565b73ffffffffffffffffffffffffffffffffffffffff16610b42610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90612e25565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc81565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c886117b1565b73ffffffffffffffffffffffffffffffffffffffff16610ca6610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612e25565b60405180910390fd5b80600981905550610d1f61012c610d11610945565b6121dd90919063ffffffff16565b6009541015610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90612e91565b60405180910390fd5b50565b610d6e6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990612e25565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e7c6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612e25565b60405180910390fd5b610efa60006121f3565b565b610f046117b1565b73ffffffffffffffffffffffffffffffffffffffff16610f22610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90612e25565b60405180910390fd5b80600a8190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffe6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661101c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990612e25565b60405180910390fd5b60148111156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612efd565b60405180910390fd5b80600b8190555050565b6110c86117b1565b73ffffffffffffffffffffffffffffffffffffffff166110e6610fcc565b73ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390612e25565b60405180910390fd5b8060078190555061115e60c8611150610945565b6121dd90919063ffffffff16565b60075410156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990612e91565b60405180910390fd5b50565b6060600480546111b490612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546111e090612c91565b801561122d5780601f106112025761010080835404028352916020019161122d565b820191906000526020600020905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b600080600160006112466117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612f8f565b60405180910390fd5b61131761130e6117b1565b858584036117b9565b600191505092915050565b60085481565b600061133c6113356117b1565b8484611982565b6001905092915050565b61134e6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661136c610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612e25565b60405180910390fd5b806008819055506113e561012c6113d7610945565b6121dd90919063ffffffff16565b6008541015611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612e91565b60405180910390fd5b50565b6114346117b1565b73ffffffffffffffffffffffffffffffffffffffff16611452610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90612e25565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115459190612927565b60405180910390a25050565b6115596117b1565b73ffffffffffffffffffffffffffffffffffffffff16611577610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490612e25565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116169190612927565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116c26117b1565b73ffffffffffffffffffffffffffffffffffffffff166116e0610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90612e25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90613021565b60405180910390fd5b6117ae816121f3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906130b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613145565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161197591906129cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790613269565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b045750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906132d5565b60405180910390fd5b60008103611b5c57611b57838360006122b9565b6121d8565b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c015750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c575750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ca257600854811115611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613367565b60405180910390fd5b5b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d475750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9d5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611de857600954811115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde906133f9565b60405180910390fd5b5b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e8d5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ee35750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f47576000611ef383610e2c565b90506007548282611f049190612d83565b1115611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061348b565b60405180910390fd5b505b6000611f5230610e2c565b90506000600a548210159050808015611f785750600660149054906101000a900460ff16155b8015611fcf57507f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611fe75750600660159054906101000a900460ff165b1561201e57600a54915061201d82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612538565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120c25750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121ca5760007f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061216e57507f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561219e5761219b606461218d600b548761274290919063ffffffff16565b6121dd90919063ffffffff16565b90505b6121b1818561275890919063ffffffff16565b935060008111156121c8576121c78630836122b9565b5b505b6121d58585856122b9565b50505b505050565b600081836121eb91906134da565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90613269565b60405180910390fd5b6123a283838361276e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061357d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bb9190612d83565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251f91906129cb565b60405180910390a3612532848484612773565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156125705761256f61359d565b5b60405190808252806020026020018201604052801561259e5781602001602082028036833780820191505090505b50905030816000815181106125b6576125b56135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110612625576126246135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061268c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856117b9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b81526004016126f09594939291906136f4565b600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b50505050506000600660146101000a81548160ff0219169083151502179055505050565b60008183612750919061374e565b905092915050565b6000818361276691906137a8565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b2578082015181840152602081019050612797565b838111156127c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006127e382612778565b6127ed8185612783565b93506127fd818560208601612794565b612806816127c7565b840191505092915050565b6000602082019050818103600083015261282b81846127d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286382612838565b9050919050565b61287381612858565b811461287e57600080fd5b50565b6000813590506128908161286a565b92915050565b6000819050919050565b6128a981612896565b81146128b457600080fd5b50565b6000813590506128c6816128a0565b92915050565b600080604083850312156128e3576128e2612833565b5b60006128f185828601612881565b9250506020612902858286016128b7565b9150509250929050565b60008115159050919050565b6129218161290c565b82525050565b600060208201905061293c6000830184612918565b92915050565b6000819050919050565b600061296761296261295d84612838565b612942565b612838565b9050919050565b60006129798261294c565b9050919050565b600061298b8261296e565b9050919050565b61299b81612980565b82525050565b60006020820190506129b66000830184612992565b92915050565b6129c581612896565b82525050565b60006020820190506129e060008301846129bc565b92915050565b6000602082840312156129fc576129fb612833565b5b6000612a0a84828501612881565b91505092915050565b600080600060608486031215612a2c57612a2b612833565b5b6000612a3a86828701612881565b9350506020612a4b86828701612881565b9250506040612a5c868287016128b7565b9150509250925092565b600060ff82169050919050565b612a7c81612a66565b82525050565b6000602082019050612a976000830184612a73565b92915050565b612aa68161290c565b8114612ab157600080fd5b50565b600081359050612ac381612a9d565b92915050565b60008060408385031215612ae057612adf612833565b5b6000612aee85828601612881565b9250506020612aff85828601612ab4565b9150509250929050565b612b1281612858565b82525050565b6000602082019050612b2d6000830184612b09565b92915050565b600060208284031215612b4957612b48612833565b5b6000612b57848285016128b7565b91505092915050565b6000612b6b82612838565b9050919050565b612b7b81612b60565b8114612b8657600080fd5b50565b600081359050612b9881612b72565b92915050565b600060208284031215612bb457612bb3612833565b5b6000612bc284828501612b89565b91505092915050565b612bd481612b60565b82525050565b6000602082019050612bef6000830184612bcb565b92915050565b600060208284031215612c0b57612c0a612833565b5b6000612c1984828501612ab4565b91505092915050565b60008060408385031215612c3957612c38612833565b5b6000612c4785828601612881565b9250506020612c5885828601612881565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ca957607f821691505b602082108103612cbc57612cbb612c62565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612d1e602883612783565b9150612d2982612cc2565b604082019050919050565b60006020820190508181036000830152612d4d81612d11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d8e82612896565b9150612d9983612896565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dce57612dcd612d54565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e0f602083612783565b9150612e1a82612dd9565b602082019050919050565b60006020820190508181036000830152612e3e81612e02565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612e7b600d83612783565b9150612e8682612e45565b602082019050919050565b60006020820190508181036000830152612eaa81612e6e565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612ee7600c83612783565b9150612ef282612eb1565b602082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f79602583612783565b9150612f8482612f1d565b604082019050919050565b60006020820190508181036000830152612fa881612f6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061300b602683612783565b915061301682612faf565b604082019050919050565b6000602082019050818103600083015261303a81612ffe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061309d602483612783565b91506130a882613041565b604082019050919050565b600060208201905081810360008301526130cc81613090565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061312f602283612783565b915061313a826130d3565b604082019050919050565b6000602082019050818103600083015261315e81613122565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131c1602583612783565b91506131cc82613165565b604082019050919050565b600060208201905081810360008301526131f0816131b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613253602383612783565b915061325e826131f7565b604082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006132bf601383612783565b91506132ca82613289565b602082019050919050565b600060208201905081810360008301526132ee816132b2565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613351603383612783565b915061335c826132f5565b604082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006133e3603483612783565b91506133ee82613387565b604082019050919050565b60006020820190508181036000830152613412816133d6565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613475602483612783565b915061348082613419565b604082019050919050565b600060208201905081810360008301526134a481613468565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134e582612896565b91506134f083612896565b925082613500576134ff6134ab565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613567602683612783565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061362061361b613616846135fb565b612942565b612896565b9050919050565b61363081613605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61366b81612858565b82525050565b600061367d8383613662565b60208301905092915050565b6000602082019050919050565b60006136a182613636565b6136ab8185613641565b93506136b683613652565b8060005b838110156136e75781516136ce8882613671565b97506136d983613689565b9250506001810190506136ba565b5085935050505092915050565b600060a08201905061370960008301886129bc565b6137166020830187613627565b81810360408301526137288186613696565b90506137376060830185612b09565b61374460808301846129bc565b9695505050505050565b600061375982612896565b915061376483612896565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379d5761379c612d54565b5b828202905092915050565b60006137b382612896565b91506137be83612896565b9250828210156137d1576137d0612d54565b5b82820390509291505056fea26469706673582212202ca92e9e40ab67703b2e12b3b0197b5e5cfe15169b8e94b895f0956bebf2732064736f6c634300080f0033

Deployed Bytecode Sourcemap

42171:6397:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7747:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42250:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6700:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43036:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8398:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6543:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9299:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47356:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42298:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42381:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47041:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48315:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47977:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42657:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6871:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17110:94;;;;;;;;;;;;;:::i;:::-;;47487:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42698:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42797:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16459:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47614:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47783:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5800:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10017:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42486:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7211:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48110:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46845:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47177:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42542:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7449:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42599:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42430;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17359:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5581:100;5635:13;5668:5;5661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;:::o;7747:169::-;7830:4;7847:39;7856:12;:10;:12::i;:::-;7870:7;7879:6;7847:8;:39::i;:::-;7904:4;7897:11;;7747:169;;;;:::o;42250:41::-;;;;;;;;;;;;;:::o;6700:108::-;6761:7;6788:12;;6781:19;;6700:108;:::o;43036:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;8398:492::-;8538:4;8555:36;8565:6;8573:9;8584:6;8555:9;:36::i;:::-;8604:24;8631:11;:19;8643:6;8631:19;;;;;;;;;;;;;;;:33;8651:12;:10;:12::i;:::-;8631:33;;;;;;;;;;;;;;;;8604:60;;8703:6;8683:16;:26;;8675:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8790:57;8799:6;8807:12;:10;:12::i;:::-;8840:6;8821:16;:25;8790:8;:57::i;:::-;8878:4;8871:11;;;8398:492;;;;;:::o;6543:92::-;6601:5;6626:1;6619:8;;6543:92;:::o;9299:215::-;9387:4;9404:80;9413:12;:10;:12::i;:::-;9427:7;9473:10;9436:11;:25;9448:12;:10;:12::i;:::-;9436:25;;;;;;;;;;;;;;;:34;9462:7;9436:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9404:8;:80::i;:::-;9502:4;9495:11;;9299:215;;;;:::o;47356:123::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47466:5:::1;47440:14;:23;47455:7;47440:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;47356:123:::0;;:::o;42298:38::-;;;:::o;42381:40::-;;;;;;;;;;;;;:::o;47041:125::-;47106:4;47130:19;:28;47150:7;47130:28;;;;;;;;;;;;;;;;;;;;;;;;;47123:35;;47041:125;;;:::o;48315:200::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48420:10:::1;48402:15;:28;;;;48468:22;48486:3;48468:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;48449:15;;:41;;48441:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48315:200:::0;:::o;47977:123::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48082:11:::1;48064:15;;:29;;;;;;;;;;;;;;;;;;47977:123:::0;:::o;42657:32::-;;;;:::o;6871:127::-;6945:7;6972:9;:18;6982:7;6972:18;;;;;;;;;;;;;;;;6965:25;;6871:127;;;:::o;17110:94::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17175:21:::1;17193:1;17175:9;:21::i;:::-;17110:94::o:0;47487:119::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47588:10:::1;47567:18;:31;;;;47487:119:::0;:::o;42698:92::-;;;;;;;;;;;;;:::o;42797:74::-;;;:::o;16459:87::-;16505:7;16532:6;;;;;;;;;;;16525:13;;16459:87;:::o;47614:161::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47709:2:::1;47692:13;:19;;47684:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47754:13;47739:12;:28;;;;47614:161:::0;:::o;47783:186::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47876:9:::1;47859:14;:26;;;;47922:22;47940:3;47922:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47904:14;;:40;;47896:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47783:186:::0;:::o;5800:104::-;5856:13;5889:7;5882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:104;:::o;10017:413::-;10110:4;10127:24;10154:11;:25;10166:12;:10;:12::i;:::-;10154:25;;;;;;;;;;;;;;;:34;10180:7;10154:34;;;;;;;;;;;;;;;;10127:61;;10227:15;10207:16;:35;;10199:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10320:67;10329:12;:10;:12::i;:::-;10343:7;10371:15;10352:16;:34;10320:8;:67::i;:::-;10418:4;10411:11;;;10017:413;;;;:::o;42486:49::-;;;;:::o;7211:175::-;7297:4;7314:42;7324:12;:10;:12::i;:::-;7338:9;7349:6;7314:9;:42::i;:::-;7374:4;7367:11;;7211:175;;;;:::o;48110:197::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48214:9:::1;48197:14;:26;;;;48260:22;48278:3;48260:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;48242:14;;:40;;48234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48110:197:::0;:::o;46845:184::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46961:8:::1;46930:19;:28;46950:7;46930:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;47003:7;46987:34;;;47012:8;46987:34;;;;;;:::i;:::-;;;;;;;;46845:184:::0;;:::o;47177:171::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47278:8:::1;47254:21;;:32;;;;;;;;;;;;;;;;;;47302:38;47331:8;47302:38;;;;;;:::i;:::-;;;;;;;;47177:171:::0;:::o;42542:50::-;;;;:::o;7449:151::-;7538:7;7565:11;:18;7577:5;7565:18;;;;;;;;;;;;;;;:27;7584:7;7565:27;;;;;;;;;;;;;;;;7558:34;;7449:151;;;;:::o;42599:49::-;;;;:::o;42430:::-;;;;:::o;17359:192::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17468:1:::1;17448:22;;:8;:22;;::::0;17440:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17524:19;17534:8;17524:9;:19::i;:::-;17359:192:::0;:::o;3395:98::-;3448:7;3475:10;3468:17;;3395:98;:::o;13709:380::-;13862:1;13845:19;;:5;:19;;;13837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13943:1;13924:21;;:7;:21;;;13916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14027:6;13997:11;:18;14009:5;13997:18;;;;;;;;;;;;;;;:27;14016:7;13997:27;;;;;;;;;;;;;;;:36;;;;14065:7;14049:32;;14058:5;14049:32;;;14074:6;14049:32;;;;;;:::i;:::-;;;;;;;;13709:380;;;:::o;44112:2220::-;44260:1;44244:18;;:4;:18;;;44236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44337:1;44323:16;;:2;:16;;;44315:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44399:14;:20;44414:4;44399:20;;;;;;;;;;;;;;;;;;;;;;;;;44398:21;:44;;;;;44424:14;:18;44439:2;44424:18;;;;;;;;;;;;;;;;;;;;;;;;;44423:19;44398:44;44390:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44492:1;44482:6;:11;44479:92;;44510:28;44526:4;44532:2;44536:1;44510:15;:28::i;:::-;44553:7;;44479:92;44594:13;44586:21;;:4;:21;;;:51;;;;;44612:19;:25;44632:4;44612:25;;;;;;;;;;;;;;;;;;;;;;;;;44611:26;44586:51;:79;;;;;44642:19;:23;44662:2;44642:23;;;;;;;;;;;;;;;;;;;;;;;;;44641:24;44586:79;44583:209;;;44710:14;;44700:6;:24;;44692:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;44583:209;44814:13;44808:19;;:2;:19;;;:49;;;;;44832:19;:25;44852:4;44832:25;;;;;;;;;;;;;;;;;;;;;;;;;44831:26;44808:49;:77;;;;;44862:19;:23;44882:2;44862:23;;;;;;;;;;;;;;;;;;;;;;;;;44861:24;44808:77;44805:210;;;44931:15;;44921:6;:25;;44913:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44805:210;45036:13;45030:19;;:4;:19;;;:49;;;;;45054:19;:25;45074:4;45054:25;;;;;;;;;;;;;;;;;;;;;;;;;45053:26;45030:49;:77;;;;;45084:19;:23;45104:2;45084:23;;;;;;;;;;;;;;;;;;;;;;;;;45083:24;45030:77;45027:281;;;45133:32;45168:13;45178:2;45168:9;:13::i;:::-;45133:48;;45241:14;;45231:6;45204:24;:33;;;;:::i;:::-;:51;;45196:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:190;45027:281;45317:28;45348:24;45366:4;45348:9;:24::i;:::-;45317:55;;45393:24;45444:18;;45420:20;:42;;45393:69;;45499:19;:53;;;;;45536:16;;;;;;;;;;;45535:17;45499:53;:87;;;;;45573:13;45569:17;;:2;:17;;;45499:87;:126;;;;;45604:21;;;;;;;;;;;45499:126;45482:294;;;45675:18;;45652:41;;45708:56;45726:20;45748:15;;;;;;;;;;;45708:17;:56::i;:::-;45482:294;45878:19;:25;45898:4;45878:25;;;;;;;;;;;;;;;;;;;;;;;;;45877:26;:54;;;;;45908:19;:23;45928:2;45908:23;;;;;;;;;;;;;;;;;;;;;;;;;45907:24;45877:54;45874:403;;;45948:12;45994:13;45988:19;;:4;:19;;;:40;;;;46015:13;46011:17;;:2;:17;;;45988:40;45985:120;;;46056:33;46085:3;46056:24;46067:12;;46056:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46049:40;;45985:120;46127:16;46138:4;46127:6;:10;;:16;;;;:::i;:::-;46118:25;;46170:1;46163:4;:8;46160:91;;;46192:42;46208:4;46222;46229;46192:15;:42::i;:::-;46160:91;45933:344;45874:403;46289:33;46305:4;46311:2;46315:6;46289:15;:33::i;:::-;44225:2107;;44112:2220;;;;:::o;28750:98::-;28808:7;28839:1;28835;:5;;;;:::i;:::-;28828:12;;28750:98;;;;:::o;17559:173::-;17615:16;17634:6;;;;;;;;;;;17615:25;;17660:8;17651:6;;:17;;;;;;;;;;;;;;;;;;17715:8;17684:40;;17705:8;17684:40;;;;;;;;;;;;17604:128;17559:173;:::o;10920:733::-;11078:1;11060:20;;:6;:20;;;11052:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11162:1;11141:23;;:9;:23;;;11133:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11217:47;11238:6;11246:9;11257:6;11217:20;:47::i;:::-;11277:21;11301:9;:17;11311:6;11301:17;;;;;;;;;;;;;;;;11277:41;;11354:6;11337:13;:23;;11329:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11475:6;11459:13;:22;11439:9;:17;11449:6;11439:17;;;;;;;;;;;;;;;:42;;;;11527:6;11503:9;:20;11513:9;11503:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11568:9;11551:35;;11560:6;11551:35;;;11579:6;11551:35;;;;;;:::i;:::-;;;;;;;;11599:46;11619:6;11627:9;11638:6;11599:19;:46::i;:::-;11041:612;10920:733;;;:::o;46340:497::-;43269:4;43250:16;;:23;;;;;;;;;;;;;;;;;;46431:21:::1;46469:1;46455:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46431:40;;46500:4;46482;46487:1;46482:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;46526:4;46516;46521:1;46516:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;46541:62;46558:4;46573:15;;;;;;;;;;;46591:11;46541:8;:62::i;:::-;46640:15;;;;;;;;;;;:69;;;46724:11;46750:1;46766:4;46785:3;46803:15;46640:189;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46420:417;43315:5:::0;43296:16;;:24;;;;;;;;;;;;;;;;;;46340:497;;:::o;28351:98::-;28409:7;28440:1;28436;:5;;;;:::i;:::-;28429:12;;28351:98;;;;:::o;27994:::-;28052:7;28083:1;28079;:5;;;;:::i;:::-;28072:12;;27994:98;;;;:::o;14689:125::-;;;;:::o;15418:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:329::-;4883:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:119;;;4938:79;;:::i;:::-;4900:119;5058:1;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5029:117;4824:329;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:116::-;6284:21;6299:5;6284:21;:::i;:::-;6277:5;6274:32;6264:60;;6320:1;6317;6310:12;6264:60;6214:116;:::o;6336:133::-;6379:5;6417:6;6404:20;6395:29;;6433:30;6457:5;6433:30;:::i;:::-;6336:133;;;;:::o;6475:468::-;6540:6;6548;6597:2;6585:9;6576:7;6572:23;6568:32;6565:119;;;6603:79;;:::i;:::-;6565:119;6723:1;6748:53;6793:7;6784:6;6773:9;6769:22;6748:53;:::i;:::-;6738:63;;6694:117;6850:2;6876:50;6918:7;6909:6;6898:9;6894:22;6876:50;:::i;:::-;6866:60;;6821:115;6475:468;;;;;:::o;6949:118::-;7036:24;7054:5;7036:24;:::i;:::-;7031:3;7024:37;6949:118;;:::o;7073:222::-;7166:4;7204:2;7193:9;7189:18;7181:26;;7217:71;7285:1;7274:9;7270:17;7261:6;7217:71;:::i;:::-;7073:222;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:104::-;7681:7;7710:24;7728:5;7710:24;:::i;:::-;7699:35;;7636:104;;;:::o;7746:138::-;7827:32;7853:5;7827:32;:::i;:::-;7820:5;7817:43;7807:71;;7874:1;7871;7864:12;7807:71;7746:138;:::o;7890:155::-;7944:5;7982:6;7969:20;7960:29;;7998:41;8033:5;7998:41;:::i;:::-;7890:155;;;;:::o;8051:345::-;8118:6;8167:2;8155:9;8146:7;8142:23;8138:32;8135:119;;;8173:79;;:::i;:::-;8135:119;8293:1;8318:61;8371:7;8362:6;8351:9;8347:22;8318:61;:::i;:::-;8308:71;;8264:125;8051:345;;;;:::o;8402:142::-;8505:32;8531:5;8505:32;:::i;:::-;8500:3;8493:45;8402:142;;:::o;8550:254::-;8659:4;8697:2;8686:9;8682:18;8674:26;;8710:87;8794:1;8783:9;8779:17;8770:6;8710:87;:::i;:::-;8550:254;;;;:::o;8810:323::-;8866:6;8915:2;8903:9;8894:7;8890:23;8886:32;8883:119;;;8921:79;;:::i;:::-;8883:119;9041:1;9066:50;9108:7;9099:6;9088:9;9084:22;9066:50;:::i;:::-;9056:60;;9012:114;8810:323;;;;:::o;9139:474::-;9207:6;9215;9264:2;9252:9;9243:7;9239:23;9235:32;9232:119;;;9270:79;;:::i;:::-;9232:119;9390:1;9415:53;9460:7;9451:6;9440:9;9436:22;9415:53;:::i;:::-;9405:63;;9361:117;9517:2;9543:53;9588:7;9579:6;9568:9;9564:22;9543:53;:::i;:::-;9533:63;;9488:118;9139:474;;;;;:::o;9619:180::-;9667:77;9664:1;9657:88;9764:4;9761:1;9754:15;9788:4;9785:1;9778:15;9805:320;9849:6;9886:1;9880:4;9876:12;9866:22;;9933:1;9927:4;9923:12;9954:18;9944:81;;10010:4;10002:6;9998:17;9988:27;;9944:81;10072:2;10064:6;10061:14;10041:18;10038:38;10035:84;;10091:18;;:::i;:::-;10035:84;9856:269;9805:320;;;:::o;10131:227::-;10271:34;10267:1;10259:6;10255:14;10248:58;10340:10;10335:2;10327:6;10323:15;10316:35;10131:227;:::o;10364:366::-;10506:3;10527:67;10591:2;10586:3;10527:67;:::i;:::-;10520:74;;10603:93;10692:3;10603:93;:::i;:::-;10721:2;10716:3;10712:12;10705:19;;10364:366;;;:::o;10736:419::-;10902:4;10940:2;10929:9;10925:18;10917:26;;10989:9;10983:4;10979:20;10975:1;10964:9;10960:17;10953:47;11017:131;11143:4;11017:131;:::i;:::-;11009:139;;10736:419;;;:::o;11161:180::-;11209:77;11206:1;11199:88;11306:4;11303:1;11296:15;11330:4;11327:1;11320:15;11347:305;11387:3;11406:20;11424:1;11406:20;:::i;:::-;11401:25;;11440:20;11458:1;11440:20;:::i;:::-;11435:25;;11594:1;11526:66;11522:74;11519:1;11516:81;11513:107;;;11600:18;;:::i;:::-;11513:107;11644:1;11641;11637:9;11630:16;;11347:305;;;;:::o;11658:182::-;11798:34;11794:1;11786:6;11782:14;11775:58;11658:182;:::o;11846:366::-;11988:3;12009:67;12073:2;12068:3;12009:67;:::i;:::-;12002:74;;12085:93;12174:3;12085:93;:::i;:::-;12203:2;12198:3;12194:12;12187:19;;11846:366;;;:::o;12218:419::-;12384:4;12422:2;12411:9;12407:18;12399:26;;12471:9;12465:4;12461:20;12457:1;12446:9;12442:17;12435:47;12499:131;12625:4;12499:131;:::i;:::-;12491:139;;12218:419;;;:::o;12643:163::-;12783:15;12779:1;12771:6;12767:14;12760:39;12643:163;:::o;12812:366::-;12954:3;12975:67;13039:2;13034:3;12975:67;:::i;:::-;12968:74;;13051:93;13140:3;13051:93;:::i;:::-;13169:2;13164:3;13160:12;13153:19;;12812:366;;;:::o;13184:419::-;13350:4;13388:2;13377:9;13373:18;13365:26;;13437:9;13431:4;13427:20;13423:1;13412:9;13408:17;13401:47;13465:131;13591:4;13465:131;:::i;:::-;13457:139;;13184:419;;;:::o;13609:162::-;13749:14;13745:1;13737:6;13733:14;13726:38;13609:162;:::o;13777:366::-;13919:3;13940:67;14004:2;13999:3;13940:67;:::i;:::-;13933:74;;14016:93;14105:3;14016:93;:::i;:::-;14134:2;14129:3;14125:12;14118:19;;13777:366;;;:::o;14149:419::-;14315:4;14353:2;14342:9;14338:18;14330:26;;14402:9;14396:4;14392:20;14388:1;14377:9;14373:17;14366:47;14430:131;14556:4;14430:131;:::i;:::-;14422:139;;14149:419;;;:::o;14574:224::-;14714:34;14710:1;14702:6;14698:14;14691:58;14783:7;14778:2;14770:6;14766:15;14759:32;14574:224;:::o;14804:366::-;14946:3;14967:67;15031:2;15026:3;14967:67;:::i;:::-;14960:74;;15043:93;15132:3;15043:93;:::i;:::-;15161:2;15156:3;15152:12;15145:19;;14804:366;;;:::o;15176:419::-;15342:4;15380:2;15369:9;15365:18;15357:26;;15429:9;15423:4;15419:20;15415:1;15404:9;15400:17;15393:47;15457:131;15583:4;15457:131;:::i;:::-;15449:139;;15176:419;;;:::o;15601:225::-;15741:34;15737:1;15729:6;15725:14;15718:58;15810:8;15805:2;15797:6;15793:15;15786:33;15601:225;:::o;15832:366::-;15974:3;15995:67;16059:2;16054:3;15995:67;:::i;:::-;15988:74;;16071:93;16160:3;16071:93;:::i;:::-;16189:2;16184:3;16180:12;16173:19;;15832:366;;;:::o;16204:419::-;16370:4;16408:2;16397:9;16393:18;16385:26;;16457:9;16451:4;16447:20;16443:1;16432:9;16428:17;16421:47;16485:131;16611:4;16485:131;:::i;:::-;16477:139;;16204:419;;;:::o;16629:223::-;16769:34;16765:1;16757:6;16753:14;16746:58;16838:6;16833:2;16825:6;16821:15;16814:31;16629:223;:::o;16858:366::-;17000:3;17021:67;17085:2;17080:3;17021:67;:::i;:::-;17014:74;;17097:93;17186:3;17097:93;:::i;:::-;17215:2;17210:3;17206:12;17199:19;;16858:366;;;:::o;17230:419::-;17396:4;17434:2;17423:9;17419:18;17411:26;;17483:9;17477:4;17473:20;17469:1;17458:9;17454:17;17447:47;17511:131;17637:4;17511:131;:::i;:::-;17503:139;;17230:419;;;:::o;17655:221::-;17795:34;17791:1;17783:6;17779:14;17772:58;17864:4;17859:2;17851:6;17847:15;17840:29;17655:221;:::o;17882:366::-;18024:3;18045:67;18109:2;18104:3;18045:67;:::i;:::-;18038:74;;18121:93;18210:3;18121:93;:::i;:::-;18239:2;18234:3;18230:12;18223:19;;17882:366;;;:::o;18254:419::-;18420:4;18458:2;18447:9;18443:18;18435:26;;18507:9;18501:4;18497:20;18493:1;18482:9;18478:17;18471:47;18535:131;18661:4;18535:131;:::i;:::-;18527:139;;18254:419;;;:::o;18679:224::-;18819:34;18815:1;18807:6;18803:14;18796:58;18888:7;18883:2;18875:6;18871:15;18864:32;18679:224;:::o;18909:366::-;19051:3;19072:67;19136:2;19131:3;19072:67;:::i;:::-;19065:74;;19148:93;19237:3;19148:93;:::i;:::-;19266:2;19261:3;19257:12;19250:19;;18909:366;;;:::o;19281:419::-;19447:4;19485:2;19474:9;19470:18;19462:26;;19534:9;19528:4;19524:20;19520:1;19509:9;19505:17;19498:47;19562:131;19688:4;19562:131;:::i;:::-;19554:139;;19281:419;;;:::o;19706:222::-;19846:34;19842:1;19834:6;19830:14;19823:58;19915:5;19910:2;19902:6;19898:15;19891:30;19706:222;:::o;19934:366::-;20076:3;20097:67;20161:2;20156:3;20097:67;:::i;:::-;20090:74;;20173:93;20262:3;20173:93;:::i;:::-;20291:2;20286:3;20282:12;20275:19;;19934:366;;;:::o;20306:419::-;20472:4;20510:2;20499:9;20495:18;20487:26;;20559:9;20553:4;20549:20;20545:1;20534:9;20530:17;20523:47;20587:131;20713:4;20587:131;:::i;:::-;20579:139;;20306:419;;;:::o;20731:169::-;20871:21;20867:1;20859:6;20855:14;20848:45;20731:169;:::o;20906:366::-;21048:3;21069:67;21133:2;21128:3;21069:67;:::i;:::-;21062:74;;21145:93;21234:3;21145:93;:::i;:::-;21263:2;21258:3;21254:12;21247:19;;20906:366;;;:::o;21278:419::-;21444:4;21482:2;21471:9;21467:18;21459:26;;21531:9;21525:4;21521:20;21517:1;21506:9;21502:17;21495:47;21559:131;21685:4;21559:131;:::i;:::-;21551:139;;21278:419;;;:::o;21703:238::-;21843:34;21839:1;21831:6;21827:14;21820:58;21912:21;21907:2;21899:6;21895:15;21888:46;21703:238;:::o;21947:366::-;22089:3;22110:67;22174:2;22169:3;22110:67;:::i;:::-;22103:74;;22186:93;22275:3;22186:93;:::i;:::-;22304:2;22299:3;22295:12;22288:19;;21947:366;;;:::o;22319:419::-;22485:4;22523:2;22512:9;22508:18;22500:26;;22572:9;22566:4;22562:20;22558:1;22547:9;22543:17;22536:47;22600:131;22726:4;22600:131;:::i;:::-;22592:139;;22319:419;;;:::o;22744:239::-;22884:34;22880:1;22872:6;22868:14;22861:58;22953:22;22948:2;22940:6;22936:15;22929:47;22744:239;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o;23786:223::-;23926:34;23922:1;23914:6;23910:14;23903:58;23995:6;23990:2;23982:6;23978:15;23971:31;23786:223;:::o;24015:366::-;24157:3;24178:67;24242:2;24237:3;24178:67;:::i;:::-;24171:74;;24254:93;24343:3;24254:93;:::i;:::-;24372:2;24367:3;24363:12;24356:19;;24015:366;;;:::o;24387:419::-;24553:4;24591:2;24580:9;24576:18;24568:26;;24640:9;24634:4;24630:20;24626:1;24615:9;24611:17;24604:47;24668:131;24794:4;24668:131;:::i;:::-;24660:139;;24387:419;;;:::o;24812:180::-;24860:77;24857:1;24850:88;24957:4;24954:1;24947:15;24981:4;24978:1;24971:15;24998:185;25038:1;25055:20;25073:1;25055:20;:::i;:::-;25050:25;;25089:20;25107:1;25089:20;:::i;:::-;25084:25;;25128:1;25118:35;;25133:18;;:::i;:::-;25118:35;25175:1;25172;25168:9;25163:14;;24998:185;;;;:::o;25189:225::-;25329:34;25325:1;25317:6;25313:14;25306:58;25398:8;25393:2;25385:6;25381:15;25374:33;25189:225;:::o;25420:366::-;25562:3;25583:67;25647:2;25642:3;25583:67;:::i;:::-;25576:74;;25659:93;25748:3;25659:93;:::i;:::-;25777:2;25772:3;25768:12;25761:19;;25420:366;;;:::o;25792:419::-;25958:4;25996:2;25985:9;25981:18;25973:26;;26045:9;26039:4;26035:20;26031:1;26020:9;26016:17;26009:47;26073:131;26199:4;26073:131;:::i;:::-;26065:139;;25792:419;;;:::o;26217:180::-;26265:77;26262:1;26255:88;26362:4;26359:1;26352:15;26386:4;26383:1;26376:15;26403:180;26451:77;26448:1;26441:88;26548:4;26545:1;26538:15;26572:4;26569:1;26562:15;26589:85;26634:7;26663:5;26652:16;;26589:85;;;:::o;26680:158::-;26738:9;26771:61;26789:42;26798:32;26824:5;26798:32;:::i;:::-;26789:42;:::i;:::-;26771:61;:::i;:::-;26758:74;;26680:158;;;:::o;26844:147::-;26939:45;26978:5;26939:45;:::i;:::-;26934:3;26927:58;26844:147;;:::o;26997:114::-;27064:6;27098:5;27092:12;27082:22;;26997:114;;;:::o;27117:184::-;27216:11;27250:6;27245:3;27238:19;27290:4;27285:3;27281:14;27266:29;;27117:184;;;;:::o;27307:132::-;27374:4;27397:3;27389:11;;27427:4;27422:3;27418:14;27410:22;;27307:132;;;:::o;27445:108::-;27522:24;27540:5;27522:24;:::i;:::-;27517:3;27510:37;27445:108;;:::o;27559:179::-;27628:10;27649:46;27691:3;27683:6;27649:46;:::i;:::-;27727:4;27722:3;27718:14;27704:28;;27559:179;;;;:::o;27744:113::-;27814:4;27846;27841:3;27837:14;27829:22;;27744:113;;;:::o;27893:732::-;28012:3;28041:54;28089:5;28041:54;:::i;:::-;28111:86;28190:6;28185:3;28111:86;:::i;:::-;28104:93;;28221:56;28271:5;28221:56;:::i;:::-;28300:7;28331:1;28316:284;28341:6;28338:1;28335:13;28316:284;;;28417:6;28411:13;28444:63;28503:3;28488:13;28444:63;:::i;:::-;28437:70;;28530:60;28583:6;28530:60;:::i;:::-;28520:70;;28376:224;28363:1;28360;28356:9;28351:14;;28316:284;;;28320:14;28616:3;28609:10;;28017:608;;;27893:732;;;;:::o;28631:831::-;28894:4;28932:3;28921:9;28917:19;28909:27;;28946:71;29014:1;29003:9;28999:17;28990:6;28946:71;:::i;:::-;29027:80;29103:2;29092:9;29088:18;29079:6;29027:80;:::i;:::-;29154:9;29148:4;29144:20;29139:2;29128:9;29124:18;29117:48;29182:108;29285:4;29276:6;29182:108;:::i;:::-;29174:116;;29300:72;29368:2;29357:9;29353:18;29344:6;29300:72;:::i;:::-;29382:73;29450:3;29439:9;29435:19;29426:6;29382:73;:::i;:::-;28631:831;;;;;;;;:::o;29468:348::-;29508:7;29531:20;29549:1;29531:20;:::i;:::-;29526:25;;29565:20;29583:1;29565:20;:::i;:::-;29560:25;;29753:1;29685:66;29681:74;29678:1;29675:81;29670:1;29663:9;29656:17;29652:105;29649:131;;;29760:18;;:::i;:::-;29649:131;29808:1;29805;29801:9;29790:20;;29468:348;;;;:::o;29822:191::-;29862:4;29882:20;29900:1;29882:20;:::i;:::-;29877:25;;29916:20;29934:1;29916:20;:::i;:::-;29911:25;;29955:1;29952;29949:8;29946:34;;;29960:18;;:::i;:::-;29946:34;30005:1;30002;29998:9;29990:17;;29822:191;;;;:::o

Swarm Source

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