ETH Price: $2,541.65 (+0.33%)

Token

Intel X (INTX)
 

Overview

Max Total Supply

1,000,000 INTX

Holders

689 ( -0.145%)

Market

Price

$0.01 @ 0.000006 ETH (+0.22%)

Onchain Market Cap

$14,641.85

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
33.543216406337281134 INTX

Value
$0.49 ( ~0.000192788499087347 Eth) [0.0034%]
0xA760797C5404ce31F2e95BBE8c9250DC34aF3B87
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

IntelX is an X based trading tool. It allows users to buy & sell ERC20 tokens by making a public tweet, comment or reply. Fees collected on transactions executed via the intelX bot are redistributed to staked token holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
IntelX

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Introducing Intel X, the first suite of trading tools for X.

https://t.me/intelxtools
https://x.com/intelxtools
https://intelx.site
*/
// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


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

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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 {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead 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.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: contracts/IntelXToken.sol


pragma solidity 0.8.20;






contract IntelX is ERC20, Ownable {

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    uint public swapAndLiqThreshold;
    uint public purchaseLimit;
    uint public buySellTax;

    bool private inSwapAndLiquify;
    bool public tradingOpen;

    uint256 public liquidityFee;
    uint256 public ethFee;

    address public marketingWallet;

    mapping (address => bool) private _isExcludedFromLimit;

    event ExcludeFromLimitation(address indexed account, bool isExcluded);
    event BatchExcludeFromLimitation(address[] account, bool[] isExcluded);
    event SwapAndLiquified(uint256 tokensSwapped, uint256 tokensForLiquidity, uint256 ethForLiquidity, uint256 ethForMarketing);
    event TaxUpdated(uint taxPercent);
    event PurchaseLimitUpdated(uint limitPercent);
    event SwapAndLiqThresholdSet(uint256 amount);
    event ETHWithdrawn(address indexed to, uint256 amount);
    event ERC20Withdrawn(address indexed to, uint256 amount);
    event TradingStatusUpdated(bool status);

    modifier lockTheSwap {
        require(!inSwapAndLiquify, "Currently in swap and liquify");
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(
        address _router, 
        uint256 _buySellTax,
        uint256 __ethFeeInPercent,
        uint256 __liquidityFeeInPercent, 
        uint256 __purchaseLimit, 
        address _marketingWallet) ERC20(
            "Intel X", 
            "INTX") Ownable(msg.sender) {
        _mint(_msgSender(), 1e6 ether);

        marketingWallet = payable(_marketingWallet);
        address uniswapRouter = _router;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswapRouter);
        IUniswapV2Factory _uniswapFactory = IUniswapV2Factory(_uniswapV2Router.factory());

        ethFee = __ethFeeInPercent;
        liquidityFee = __liquidityFeeInPercent;

        address _uniswapV2Pair = _uniswapFactory.createPair(
            address(this), 
            _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        buySellTax = _buySellTax;
        purchaseLimit = __purchaseLimit;
        swapAndLiqThreshold = 3e3 ether;

        excludeFromLimitation(uniswapV2Pair, true);
        excludeFromLimitation(address(uniswapRouter), true);
        excludeFromLimitation(_msgSender(), true);
        excludeFromLimitation(address(this), true);
    }

    receive() external payable {}

    function swapAndLiquify(uint256 toSwapLiquidity) private lockTheSwap {

        uint256 initialBalance = address(this).balance;
        uint256 totalFee = buySellTax / 100;
        uint256 forETH = toSwapLiquidity * ethFee / totalFee;
        
        uint256 forLiquidity = 0;
        uint256 tokensToSellForLiq = 0;
        uint256 tokensToAddLiq = 0;

        if (liquidityFee > 0) {
            forLiquidity = toSwapLiquidity * liquidityFee / totalFee;
            tokensToSellForLiq = forLiquidity / 2;
            tokensToAddLiq = forLiquidity - tokensToSellForLiq;
        }

        uint256 toSwap = forETH + tokensToSellForLiq;
        swapTokensForETH(toSwap);
        
        uint256 updatedBalance = address(this).balance - initialBalance;
        uint256 ethForMarketing = updatedBalance * forETH / toSwap;
        
        if (liquidityFee > 0) {
            uint256 ethForLiquidity = updatedBalance - ethForMarketing;
            addLiquidity(tokensToAddLiq, ethForLiquidity);
            emit SwapAndLiquified(toSwap, tokensToAddLiq, ethForLiquidity, ethForMarketing);
        } else {
            emit SwapAndLiquified(toSwap, 0, 0, ethForMarketing);
        }
        
        payable(marketingWallet).transfer(ethForMarketing);
    }


    function addLiquidity(
        uint256 tokenAmount, 
        uint256 ethAmount) private {
        _approve(
            address(this), 
            address(uniswapV2Router), 
            tokenAmount);

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

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _transfer(
        address from, 
        address to, 
        uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than 0");
        if(!_isExcludedFromLimit[from] || !_isExcludedFromLimit[to]) {
            require(tradingOpen, "Trading Closed");
        }

        uint256 taxAmount = 0;

        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromLimit[to]) {

            require(amount <= totalSupply() * purchaseLimit / 1e4, "Amount exceeds max purchase amount.");
        }

        if((!_isExcludedFromLimit[from] || !_isExcludedFromLimit[to]) && from != address(this)){
            if((from == uniswapV2Pair || to == uniswapV2Pair) && buySellTax > 0){
                taxAmount = amount * buySellTax / 1e4;
                super._transfer(from, address(this), taxAmount);
            }
        }

        if (!inSwapAndLiquify && to == uniswapV2Pair && !_isExcludedFromLimit[from]) {
            uint256 balance = balanceOf(address(this));
            if(balance >= swapAndLiqThreshold) {
                uint256 maxSwapAndLiq = swapAndLiqThreshold + (swapAndLiqThreshold / 5); 
                if(balance >= maxSwapAndLiq){
                    swapAndLiquify(maxSwapAndLiq);
                }
                else {
                    swapAndLiquify(swapAndLiqThreshold);
                }
            }
        }

        super._transfer(from, to, (amount-taxAmount));
    }

    function setSellBuyTax(
        uint forMarketingInPercentage, 
        uint forLiquidityInPercentage) external onlyOwner {
        
        uint256 taxInPercentage = forMarketingInPercentage + forLiquidityInPercentage;
        uint256 currentTaxInPercentage = buySellTax / 100;
        require(taxInPercentage <= currentTaxInPercentage, "You can only lower fees");

        

        ethFee = forMarketingInPercentage;
        liquidityFee = forLiquidityInPercentage;

        buySellTax = taxInPercentage * 100;
        
        emit TaxUpdated(buySellTax);
    }

    function setTradingOpen() external onlyOwner {
        require(!tradingOpen, "Trading already open");
        tradingOpen = true;
        emit TradingStatusUpdated(true);
    }

    function setPurchaseLimit(uint _limit) external onlyOwner {
        purchaseLimit = _limit;
        emit PurchaseLimitUpdated(_limit);
    }

    function setSwapThreshold(uint256 amount) public onlyOwner {
        uint256 currentTotalSupply = totalSupply();
        uint256 minSwapAndLiqThreshold = currentTotalSupply / 10000; 
        uint256 maxSwapAndLiqThreshold = currentTotalSupply * 5 / 1000; 

        require(amount >= minSwapAndLiqThreshold && amount <= maxSwapAndLiqThreshold, "SnL Threshold must be within the allowed range");
        swapAndLiqThreshold = amount;
        emit SwapAndLiqThresholdSet(amount);
    }

    function excludeFromLimitation(
        address account, 
        bool excluded) public onlyOwner {
        _isExcludedFromLimit[account] = excluded;
        emit ExcludeFromLimitation(account, excluded);
    }

    function batchExcludeFromLimitation(
        address[] calldata account, 
        bool[] calldata excluded) public onlyOwner {
        for(uint i = 0 ; i < account.length ; i ++) {
            _isExcludedFromLimit[account[i]] = excluded[i];
        }
        emit BatchExcludeFromLimitation(account, excluded);
    }

    function withdrawETH(address payable _to) external onlyOwner {
        require(address(this).balance > 0, "No ETH to withdraw");
        uint256 amount = address(this).balance;
        (bool sent, ) = _to.call{value: amount}("");
        require(sent, "Failed to send Ether");
        emit ETHWithdrawn(_to, amount);
    }

    function withdrawERC20Token(
        address token, 
        address to) public onlyOwner {
        uint256 balance = IERC20(address(token)).balanceOf(address(this));
        require(balance > 0, "Not enough tokens in contract");
        IERC20(address(token)).transfer(to, balance);
        emit ERC20Withdrawn(to, balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256","name":"_buySellTax","type":"uint256"},{"internalType":"uint256","name":"__ethFeeInPercent","type":"uint256"},{"internalType":"uint256","name":"__liquidityFeeInPercent","type":"uint256"},{"internalType":"uint256","name":"__purchaseLimit","type":"uint256"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"account","type":"address[]"},{"indexed":false,"internalType":"bool[]","name":"isExcluded","type":"bool[]"}],"name":"BatchExcludeFromLimitation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimitation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limitPercent","type":"uint256"}],"name":"PurchaseLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiqThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethForMarketing","type":"uint256"}],"name":"SwapAndLiquified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxPercent","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"TradingStatusUpdated","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":[{"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":"value","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":"excluded","type":"bool[]"}],"name":"batchExcludeFromLimitation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buySellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimitation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"purchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setPurchaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"forMarketingInPercentage","type":"uint256"},{"internalType":"uint256","name":"forLiquidityInPercentage","type":"uint256"}],"name":"setSellBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiqThreshold","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b5060405162004502380380620045028339818101604052810190620000369190620009f5565b336040518060400160405280600781526020017f496e74656c2058000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f494e5458000000000000000000000000000000000000000000000000000000008152508160039081620000b4919062000ce8565b508060049081620000c6919062000ce8565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013c575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000133919062000ddd565b60405180910390fd5b6200014d816200045e60201b60201c565b5062000179620001626200052160201b60201c565b69d3c21bcecceda10000006200052860201b60201c565b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8690505f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000232919062000df8565b905086600d8190555085600c819055505f8173ffffffffffffffffffffffffffffffffffffffff1663c9c65396308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d0919062000df8565b6040518363ffffffff1660e01b8152600401620002ef92919062000e28565b6020604051808303815f875af11580156200030c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000332919062000df8565b90508260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600a819055508560098190555068a2a15d09519be000006008819055506200040660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b260201b60201c565b62000419846001620005b260201b60201c565b6200043b6200042d6200052160201b60201c565b6001620005b260201b60201c565b6200044e306001620005b260201b60201c565b5050505050505050505062000f58565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200059b575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000592919062000ddd565b60405180910390fd5b620005ae5f83836200066a60201b60201c565b5050565b620005c26200088e60201b60201c565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb662f3bfb1735e6cf86c62e0de5e8ded221db1f328a15d104be3fd29977cf23e826040516200065e919062000e6f565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006be578060025f828254620006b1919062000eb7565b925050819055506200078f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200074a578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620007419392919062000f02565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d8578060025f828254039250508190555062000822565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000881919062000f3d565b60405180910390a3505050565b6200089e6200052160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008c46200093060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200092e57620008f06200052160201b60201c565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040162000925919062000ddd565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000987826200095c565b9050919050565b62000999816200097b565b8114620009a4575f80fd5b50565b5f81519050620009b7816200098e565b92915050565b5f819050919050565b620009d181620009bd565b8114620009dc575f80fd5b50565b5f81519050620009ef81620009c6565b92915050565b5f805f805f8060c0878903121562000a125762000a1162000958565b5b5f62000a2189828a01620009a7565b965050602062000a3489828a01620009df565b955050604062000a4789828a01620009df565b945050606062000a5a89828a01620009df565b935050608062000a6d89828a01620009df565b92505060a062000a8089828a01620009a7565b9150509295509295509295565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b0957607f821691505b60208210810362000b1f5762000b1e62000ac4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b46565b62000b8f868362000b46565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000bd062000bca62000bc484620009bd565b62000ba7565b620009bd565b9050919050565b5f819050919050565b62000beb8362000bb0565b62000c0362000bfa8262000bd7565b84845462000b52565b825550505050565b5f90565b62000c1962000c0b565b62000c2681848462000be0565b505050565b5b8181101562000c4d5762000c415f8262000c0f565b60018101905062000c2c565b5050565b601f82111562000c9c5762000c668162000b25565b62000c718462000b37565b8101602085101562000c81578190505b62000c9962000c908562000b37565b83018262000c2b565b50505b505050565b5f82821c905092915050565b5f62000cbe5f198460080262000ca1565b1980831691505092915050565b5f62000cd8838362000cad565b9150826002028217905092915050565b62000cf38262000a8d565b67ffffffffffffffff81111562000d0f5762000d0e62000a97565b5b62000d1b825462000af1565b62000d2882828562000c51565b5f60209050601f83116001811462000d5e575f841562000d49578287015190505b62000d55858262000ccb565b86555062000dc4565b601f19841662000d6e8662000b25565b5f5b8281101562000d975784890151825560018201915060208501945060208101905062000d70565b8683101562000db7578489015162000db3601f89168262000cad565b8355505b6001600288020188555050505b505050505050565b62000dd7816200097b565b82525050565b5f60208201905062000df25f83018462000dcc565b92915050565b5f6020828403121562000e105762000e0f62000958565b5b5f62000e1f84828501620009a7565b91505092915050565b5f60408201905062000e3d5f83018562000dcc565b62000e4c602083018462000dcc565b9392505050565b5f8115159050919050565b62000e698162000e53565b82525050565b5f60208201905062000e845f83018462000e5e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ec382620009bd565b915062000ed083620009bd565b925082820190508082111562000eeb5762000eea62000e8a565b5b92915050565b62000efc81620009bd565b82525050565b5f60608201905062000f175f83018662000dcc565b62000f26602083018562000ef1565b62000f35604083018462000ef1565b949350505050565b5f60208201905062000f525f83018462000ef1565b92915050565b61359c8062000f665f395ff3fe6080604052600436106101c5575f3560e01c80636edc4388116100f657806398118cb411610094578063dd62ed3e11610063578063dd62ed3e146105fe578063ecfbe70c1461063a578063f2fde38b14610662578063ffb54a991461068a576101cc565b806398118cb4146105465780639d0014b114610570578063a9059cbb14610598578063b62f6e04146105d4576101cc565b806375f0a874116100d057806375f0a8741461049e5780638da5cb5b146104c857806395d89b41146104f257806396e1c7d11461051c576101cc565b80636edc43881461042457806370a082311461044c578063715018a614610488576101cc565b806323b872dd116101635780634cf1115d1161013d5780634cf1115d146103825780635e7f2dc1146103ac57806361231f77146103d4578063690d8320146103fc576101cc565b806323b872dd146102f2578063313ce5671461032e57806349bd5a5e14610358576101cc565b806318160ddd1161019f57806318160ddd14610260578063188866571461028a5780631eed1ac8146102b45780632333f9f1146102ca576101cc565b806306fdde03146101d0578063095ea7b3146101fa5780631694505e14610236576101cc565b366101cc57005b5f80fd5b3480156101db575f80fd5b506101e46106b4565b6040516101f191906123f6565b60405180910390f35b348015610205575f80fd5b50610220600480360381019061021b91906124ab565b610744565b60405161022d9190612503565b60405180910390f35b348015610241575f80fd5b5061024a610766565b6040516102579190612577565b60405180910390f35b34801561026b575f80fd5b5061027461078b565b604051610281919061259f565b60405180910390f35b348015610295575f80fd5b5061029e610794565b6040516102ab919061259f565b60405180910390f35b3480156102bf575f80fd5b506102c861079a565b005b3480156102d5575f80fd5b506102f060048036038101906102eb91906125e2565b610847565b005b3480156102fd575f80fd5b5061031860048036038101906103139190612620565b6108f5565b6040516103259190612503565b60405180910390f35b348015610339575f80fd5b50610342610923565b60405161034f919061268b565b60405180910390f35b348015610363575f80fd5b5061036c61092b565b60405161037991906126b3565b60405180910390f35b34801561038d575f80fd5b50610396610950565b6040516103a3919061259f565b60405180910390f35b3480156103b7575f80fd5b506103d260048036038101906103cd9190612782565b610956565b005b3480156103df575f80fd5b506103fa60048036038101906103f59190612800565b610a64565b005b348015610407575f80fd5b50610422600480360381019061041d9190612879565b610b30565b005b34801561042f575f80fd5b5061044a600480360381019061044591906128a4565b610c79565b005b348015610457575f80fd5b50610472600480360381019061046d91906128cf565b610cc2565b60405161047f919061259f565b60405180910390f35b348015610493575f80fd5b5061049c610d07565b005b3480156104a9575f80fd5b506104b2610d1a565b6040516104bf91906126b3565b60405180910390f35b3480156104d3575f80fd5b506104dc610d3f565b6040516104e991906126b3565b60405180910390f35b3480156104fd575f80fd5b50610506610d67565b60405161051391906123f6565b60405180910390f35b348015610527575f80fd5b50610530610df7565b60405161053d919061259f565b60405180910390f35b348015610551575f80fd5b5061055a610dfd565b604051610567919061259f565b60405180910390f35b34801561057b575f80fd5b50610596600480360381019061059191906128a4565b610e03565b005b3480156105a3575f80fd5b506105be60048036038101906105b991906124ab565b610ed7565b6040516105cb9190612503565b60405180910390f35b3480156105df575f80fd5b506105e8610ef9565b6040516105f5919061259f565b60405180910390f35b348015610609575f80fd5b50610624600480360381019061061f91906128fa565b610eff565b604051610631919061259f565b60405180910390f35b348015610645575f80fd5b50610660600480360381019061065b91906128fa565b610f81565b005b34801561066d575f80fd5b50610688600480360381019061068391906128cf565b611115565b005b348015610695575f80fd5b5061069e611199565b6040516106ab9190612503565b60405180910390f35b6060600380546106c390612965565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef90612965565b801561073a5780601f106107115761010080835404028352916020019161073a565b820191905f5260205f20905b81548152906001019060200180831161071d57829003601f168201915b5050505050905090565b5f8061074e6111ac565b905061075b8185856111b3565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60095481565b6107a26111c5565b600b60019054906101000a900460ff16156107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e9906129df565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055507f44025b4c6266facf728a25ba1ed858c89e2215e03094486152577b87636ea7ab600160405161083d9190612503565b60405180910390a1565b61084f6111c5565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb662f3bfb1735e6cf86c62e0de5e8ded221db1f328a15d104be3fd29977cf23e826040516108e99190612503565b60405180910390a25050565b5f806108ff6111ac565b905061090c85828561124c565b6109178585856112de565b60019150509392505050565b5f6012905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61095e6111c5565b5f5b84849050811015610a205782828281811061097e5761097d6129fd565b5b90506020020160208101906109939190612a2a565b600f5f8787858181106109a9576109a86129fd565b5b90506020020160208101906109be91906128cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610a1890612a82565b915050610960565b507fec332beaa25122e2aaf782a4144424379d8b725b55f4656dc18bf72b4050819984848484604051610a569493929190612c41565b60405180910390a150505050565b610a6c6111c5565b5f8183610a799190612c7a565b90505f6064600a54610a8b9190612cda565b905080821115610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790612d54565b60405180910390fd5b83600d8190555082600c81905550606482610aeb9190612d72565b600a819055507f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91600a54604051610b22919061259f565b60405180910390a150505050565b610b386111c5565b5f4711610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7190612dfd565b60405180910390fd5b5f4790505f8273ffffffffffffffffffffffffffffffffffffffff1682604051610ba390612e48565b5f6040518083038185875af1925050503d805f8114610bdd576040519150601f19603f3d011682016040523d82523d5f602084013e610be2565b606091505b5050905080610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90612ea6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c83604051610c6c919061259f565b60405180910390a2505050565b610c816111c5565b806009819055507fee131fa00e37f4b10e0ad1bffe4a204cdc5e73b4c9bfab1e2de9ae163dde1edc81604051610cb7919061259f565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d0f6111c5565b610d185f61186b565b565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d7690612965565b80601f0160208091040260200160405190810160405280929190818152602001828054610da290612965565b8015610ded5780601f10610dc457610100808354040283529160200191610ded565b820191905f5260205f20905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b600a5481565b600c5481565b610e0b6111c5565b5f610e1461078b565b90505f61271082610e259190612cda565b90505f6103e8600584610e389190612d72565b610e429190612cda565b9050818410158015610e545750808411155b610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90612f34565b60405180910390fd5b836008819055507fd9865007332e13f0dcab58b7d2a784fb5276e18f0c72e90c1a404e88a562898184604051610ec9919061259f565b60405180910390a150505050565b5f80610ee16111ac565b9050610eee8185856112de565b600191505092915050565b60085481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610f896111c5565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fc391906126b3565b602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110029190612f66565b90505f8111611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612fdb565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611081929190612ff9565b6020604051808303815f875af115801561109d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c19190613034565b508173ffffffffffffffffffffffffffffffffffffffff167f7e2c99819371db0a6fc6f4269fe872496e44f502df19ba3eae594b7a1598746082604051611108919061259f565b60405180910390a2505050565b61111d6111c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361118d575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161118491906126b3565b60405180910390fd5b6111968161186b565b50565b600b60019054906101000a900460ff1681565b5f33905090565b6111c0838383600161192e565b505050565b6111cd6111ac565b73ffffffffffffffffffffffffffffffffffffffff166111eb610d3f565b73ffffffffffffffffffffffffffffffffffffffff161461124a5761120e6111ac565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161124191906126b3565b60405180910390fd5b565b5f6112578484610eff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112d857818110156112c9578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112c09392919061305f565b60405180910390fd5b6112d784848484035f61192e565b5b50505050565b5f8111611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131790613104565b60405180910390fd5b600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615806113bd5750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561141257600b60019054906101000a900460ff16611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061316c565b60405180910390fd5b5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156114bc575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561150f5750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115795761271060095461152261078b565b61152c9190612d72565b6115369190612cda565b821115611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906131fa565b60405180910390fd5b5b600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615806116165750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561164e57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156117365760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116fa575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b801561170757505f600a54115b1561173557612710600a548361171d9190612d72565b6117279190612cda565b9050611734843083611afd565b5b5b600b5f9054906101000a900460ff1615801561179e575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156117f15750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561184f575f61180030610cc2565b9050600854811061184d575f600560085461181b9190612cda565b6008546118289190612c7a565b905080821061183f5761183a81611bed565b61184b565b61184a600854611bed565b5b505b505b611865848483856118609190613218565b611afd565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361199e575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161199591906126b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a0e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a0591906126b3565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611af7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611aee919061259f565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b6d575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b6491906126b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bdd575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bd491906126b3565b60405180910390fd5b611be8838383611e3d565b505050565b600b5f9054906101000a900460ff1615611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3390613295565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055505f4790505f6064600a54611c6a9190612cda565b90505f81600d5485611c7c9190612d72565b611c869190612cda565b90505f805f80600c541115611cce5784600c5488611ca49190612d72565b611cae9190612cda565b9250600283611cbd9190612cda565b91508183611ccb9190613218565b90505b5f8285611cdb9190612c7a565b9050611ce681612056565b5f8747611cf39190613218565b90505f828783611d039190612d72565b611d0d9190612cda565b90505f600c541115611d75575f8183611d269190613218565b9050611d32858261228c565b7fada09296b37f942dad4a0318731be5f9df8af6bf0364ffc08234b0a7d842186184868385604051611d6794939291906132b3565b60405180910390a150611db3565b7fada09296b37f942dad4a0318731be5f9df8af6bf0364ffc08234b0a7d8421861835f8084604051611daa949392919061332f565b60405180910390a15b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611e17573d5f803e3d5ffd5b505050505050505050505f600b5f6101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8d578060025f828254611e819190612c7a565b92505081905550611f5b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f16578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611f0d9392919061305f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa2578060025f8282540392505081905550611fec565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612049919061259f565b60405180910390a3505050565b5f600267ffffffffffffffff81111561207257612071613372565b5b6040519080825280602002602001820160405280156120a05781602001602082028036833780820191505090505b50905030815f815181106120b7576120b66129fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217f91906133b3565b81600181518110612193576121926129fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121f93060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111b3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161225b95949392919061345f565b5f604051808303815f87803b158015612272575f80fd5b505af1158015612284573d5f803e3d5ffd5b505050505050565b6122b83060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111b3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80612302610d3f565b426040518863ffffffff1660e01b8152600401612324969594939291906134b7565b60606040518083038185885af1158015612340573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123659190613516565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156123a3578082015181840152602081019050612388565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6123c88261236c565b6123d28185612376565b93506123e2818560208601612386565b6123eb816123ae565b840191505092915050565b5f6020820190508181035f83015261240e81846123be565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124478261241e565b9050919050565b6124578161243d565b8114612461575f80fd5b50565b5f813590506124728161244e565b92915050565b5f819050919050565b61248a81612478565b8114612494575f80fd5b50565b5f813590506124a581612481565b92915050565b5f80604083850312156124c1576124c0612416565b5b5f6124ce85828601612464565b92505060206124df85828601612497565b9150509250929050565b5f8115159050919050565b6124fd816124e9565b82525050565b5f6020820190506125165f8301846124f4565b92915050565b5f819050919050565b5f61253f61253a6125358461241e565b61251c565b61241e565b9050919050565b5f61255082612525565b9050919050565b5f61256182612546565b9050919050565b61257181612557565b82525050565b5f60208201905061258a5f830184612568565b92915050565b61259981612478565b82525050565b5f6020820190506125b25f830184612590565b92915050565b6125c1816124e9565b81146125cb575f80fd5b50565b5f813590506125dc816125b8565b92915050565b5f80604083850312156125f8576125f7612416565b5b5f61260585828601612464565b9250506020612616858286016125ce565b9150509250929050565b5f805f6060848603121561263757612636612416565b5b5f61264486828701612464565b935050602061265586828701612464565b925050604061266686828701612497565b9150509250925092565b5f60ff82169050919050565b61268581612670565b82525050565b5f60208201905061269e5f83018461267c565b92915050565b6126ad8161243d565b82525050565b5f6020820190506126c65f8301846126a4565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126126ed576126ec6126cc565b5b8235905067ffffffffffffffff81111561270a576127096126d0565b5b602083019150836020820283011115612726576127256126d4565b5b9250929050565b5f8083601f840112612742576127416126cc565b5b8235905067ffffffffffffffff81111561275f5761275e6126d0565b5b60208301915083602082028301111561277b5761277a6126d4565b5b9250929050565b5f805f806040858703121561279a57612799612416565b5b5f85013567ffffffffffffffff8111156127b7576127b661241a565b5b6127c3878288016126d8565b9450945050602085013567ffffffffffffffff8111156127e6576127e561241a565b5b6127f28782880161272d565b925092505092959194509250565b5f806040838503121561281657612815612416565b5b5f61282385828601612497565b925050602061283485828601612497565b9150509250929050565b5f6128488261241e565b9050919050565b6128588161283e565b8114612862575f80fd5b50565b5f813590506128738161284f565b92915050565b5f6020828403121561288e5761288d612416565b5b5f61289b84828501612865565b91505092915050565b5f602082840312156128b9576128b8612416565b5b5f6128c684828501612497565b91505092915050565b5f602082840312156128e4576128e3612416565b5b5f6128f184828501612464565b91505092915050565b5f80604083850312156129105761290f612416565b5b5f61291d85828601612464565b925050602061292e85828601612464565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061297c57607f821691505b60208210810361298f5761298e612938565b5b50919050565b7f54726164696e6720616c7265616479206f70656e0000000000000000000000005f82015250565b5f6129c9601483612376565b91506129d482612995565b602082019050919050565b5f6020820190508181035f8301526129f6816129bd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612a3f57612a3e612416565b5b5f612a4c848285016125ce565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a8c82612478565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612abe57612abd612a55565b5b600182019050919050565b5f82825260208201905092915050565b5f819050919050565b612aeb8161243d565b82525050565b5f612afc8383612ae2565b60208301905092915050565b5f612b166020840184612464565b905092915050565b5f602082019050919050565b5f612b358385612ac9565b9350612b4082612ad9565b805f5b85811015612b7857612b558284612b08565b612b5f8882612af1565b9750612b6a83612b1e565b925050600181019050612b43565b5085925050509392505050565b5f82825260208201905092915050565b5f819050919050565b612ba7816124e9565b82525050565b5f612bb88383612b9e565b60208301905092915050565b5f612bd260208401846125ce565b905092915050565b5f602082019050919050565b5f612bf18385612b85565b9350612bfc82612b95565b805f5b85811015612c3457612c118284612bc4565b612c1b8882612bad565b9750612c2683612bda565b925050600181019050612bff565b5085925050509392505050565b5f6040820190508181035f830152612c5a818688612b2a565b90508181036020830152612c6f818486612be6565b905095945050505050565b5f612c8482612478565b9150612c8f83612478565b9250828201905080821115612ca757612ca6612a55565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ce482612478565b9150612cef83612478565b925082612cff57612cfe612cad565b5b828204905092915050565b7f596f752063616e206f6e6c79206c6f77657220666565730000000000000000005f82015250565b5f612d3e601783612376565b9150612d4982612d0a565b602082019050919050565b5f6020820190508181035f830152612d6b81612d32565b9050919050565b5f612d7c82612478565b9150612d8783612478565b9250828202612d9581612478565b91508282048414831517612dac57612dab612a55565b5b5092915050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f612de7601283612376565b9150612df282612db3565b602082019050919050565b5f6020820190508181035f830152612e1481612ddb565b9050919050565b5f81905092915050565b50565b5f612e335f83612e1b565b9150612e3e82612e25565b5f82019050919050565b5f612e5282612e28565b9150819050919050565b7f4661696c656420746f2073656e642045746865720000000000000000000000005f82015250565b5f612e90601483612376565b9150612e9b82612e5c565b602082019050919050565b5f6020820190508181035f830152612ebd81612e84565b9050919050565b7f536e4c205468726573686f6c64206d7573742062652077697468696e207468655f8201527f20616c6c6f7765642072616e6765000000000000000000000000000000000000602082015250565b5f612f1e602e83612376565b9150612f2982612ec4565b604082019050919050565b5f6020820190508181035f830152612f4b81612f12565b9050919050565b5f81519050612f6081612481565b92915050565b5f60208284031215612f7b57612f7a612416565b5b5f612f8884828501612f52565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e74726163740000005f82015250565b5f612fc5601d83612376565b9150612fd082612f91565b602082019050919050565b5f6020820190508181035f830152612ff281612fb9565b9050919050565b5f60408201905061300c5f8301856126a4565b6130196020830184612590565b9392505050565b5f8151905061302e816125b8565b92915050565b5f6020828403121561304957613048612416565b5b5f61305684828501613020565b91505092915050565b5f6060820190506130725f8301866126a4565b61307f6020830185612590565b61308c6040830184612590565b949350505050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b5f6130ee602683612376565b91506130f982613094565b604082019050919050565b5f6020820190508181035f83015261311b816130e2565b9050919050565b7f54726164696e6720436c6f7365640000000000000000000000000000000000005f82015250565b5f613156600e83612376565b915061316182613122565b602082019050919050565b5f6020820190508181035f8301526131838161314a565b9050919050565b7f416d6f756e742065786365656473206d617820707572636861736520616d6f755f8201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b5f6131e4602383612376565b91506131ef8261318a565b604082019050919050565b5f6020820190508181035f830152613211816131d8565b9050919050565b5f61322282612478565b915061322d83612478565b925082820390508181111561324557613244612a55565b5b92915050565b7f43757272656e746c7920696e207377617020616e64206c6971756966790000005f82015250565b5f61327f601d83612376565b915061328a8261324b565b602082019050919050565b5f6020820190508181035f8301526132ac81613273565b9050919050565b5f6080820190506132c65f830187612590565b6132d36020830186612590565b6132e06040830185612590565b6132ed6060830184612590565b95945050505050565b5f819050919050565b5f61331961331461330f846132f6565b61251c565b612478565b9050919050565b613329816132ff565b82525050565b5f6080820190506133425f830187612590565b61334f6020830186613320565b61335c6040830185613320565b6133696060830184612590565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506133ad8161244e565b92915050565b5f602082840312156133c8576133c7612416565b5b5f6133d58482850161339f565b91505092915050565b5f81519050919050565b5f819050602082019050919050565b5f602082019050919050565b5f61340d826133de565b6134178185612ac9565b9350613422836133e8565b805f5b838110156134525781516134398882612af1565b9750613444836133f7565b925050600181019050613425565b5085935050505092915050565b5f60a0820190506134725f830188612590565b61347f6020830187613320565b81810360408301526134918186613403565b90506134a060608301856126a4565b6134ad6080830184612590565b9695505050505050565b5f60c0820190506134ca5f8301896126a4565b6134d76020830188612590565b6134e46040830187613320565b6134f16060830186613320565b6134fe60808301856126a4565b61350b60a0830184612590565b979650505050505050565b5f805f6060848603121561352d5761352c612416565b5b5f61353a86828701612f52565b935050602061354b86828701612f52565b925050604061355c86828701612f52565b915050925092509256fea2646970667358221220a9f72e7f68446251164985970c7ee75f926cca82cc1a020dbcaba1ea6f72df3264736f6c634300081400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000140fb2a3ebb9bfa685c32d1274d47ec97889333e

Deployed Bytecode

0x6080604052600436106101c5575f3560e01c80636edc4388116100f657806398118cb411610094578063dd62ed3e11610063578063dd62ed3e146105fe578063ecfbe70c1461063a578063f2fde38b14610662578063ffb54a991461068a576101cc565b806398118cb4146105465780639d0014b114610570578063a9059cbb14610598578063b62f6e04146105d4576101cc565b806375f0a874116100d057806375f0a8741461049e5780638da5cb5b146104c857806395d89b41146104f257806396e1c7d11461051c576101cc565b80636edc43881461042457806370a082311461044c578063715018a614610488576101cc565b806323b872dd116101635780634cf1115d1161013d5780634cf1115d146103825780635e7f2dc1146103ac57806361231f77146103d4578063690d8320146103fc576101cc565b806323b872dd146102f2578063313ce5671461032e57806349bd5a5e14610358576101cc565b806318160ddd1161019f57806318160ddd14610260578063188866571461028a5780631eed1ac8146102b45780632333f9f1146102ca576101cc565b806306fdde03146101d0578063095ea7b3146101fa5780631694505e14610236576101cc565b366101cc57005b5f80fd5b3480156101db575f80fd5b506101e46106b4565b6040516101f191906123f6565b60405180910390f35b348015610205575f80fd5b50610220600480360381019061021b91906124ab565b610744565b60405161022d9190612503565b60405180910390f35b348015610241575f80fd5b5061024a610766565b6040516102579190612577565b60405180910390f35b34801561026b575f80fd5b5061027461078b565b604051610281919061259f565b60405180910390f35b348015610295575f80fd5b5061029e610794565b6040516102ab919061259f565b60405180910390f35b3480156102bf575f80fd5b506102c861079a565b005b3480156102d5575f80fd5b506102f060048036038101906102eb91906125e2565b610847565b005b3480156102fd575f80fd5b5061031860048036038101906103139190612620565b6108f5565b6040516103259190612503565b60405180910390f35b348015610339575f80fd5b50610342610923565b60405161034f919061268b565b60405180910390f35b348015610363575f80fd5b5061036c61092b565b60405161037991906126b3565b60405180910390f35b34801561038d575f80fd5b50610396610950565b6040516103a3919061259f565b60405180910390f35b3480156103b7575f80fd5b506103d260048036038101906103cd9190612782565b610956565b005b3480156103df575f80fd5b506103fa60048036038101906103f59190612800565b610a64565b005b348015610407575f80fd5b50610422600480360381019061041d9190612879565b610b30565b005b34801561042f575f80fd5b5061044a600480360381019061044591906128a4565b610c79565b005b348015610457575f80fd5b50610472600480360381019061046d91906128cf565b610cc2565b60405161047f919061259f565b60405180910390f35b348015610493575f80fd5b5061049c610d07565b005b3480156104a9575f80fd5b506104b2610d1a565b6040516104bf91906126b3565b60405180910390f35b3480156104d3575f80fd5b506104dc610d3f565b6040516104e991906126b3565b60405180910390f35b3480156104fd575f80fd5b50610506610d67565b60405161051391906123f6565b60405180910390f35b348015610527575f80fd5b50610530610df7565b60405161053d919061259f565b60405180910390f35b348015610551575f80fd5b5061055a610dfd565b604051610567919061259f565b60405180910390f35b34801561057b575f80fd5b50610596600480360381019061059191906128a4565b610e03565b005b3480156105a3575f80fd5b506105be60048036038101906105b991906124ab565b610ed7565b6040516105cb9190612503565b60405180910390f35b3480156105df575f80fd5b506105e8610ef9565b6040516105f5919061259f565b60405180910390f35b348015610609575f80fd5b50610624600480360381019061061f91906128fa565b610eff565b604051610631919061259f565b60405180910390f35b348015610645575f80fd5b50610660600480360381019061065b91906128fa565b610f81565b005b34801561066d575f80fd5b50610688600480360381019061068391906128cf565b611115565b005b348015610695575f80fd5b5061069e611199565b6040516106ab9190612503565b60405180910390f35b6060600380546106c390612965565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef90612965565b801561073a5780601f106107115761010080835404028352916020019161073a565b820191905f5260205f20905b81548152906001019060200180831161071d57829003601f168201915b5050505050905090565b5f8061074e6111ac565b905061075b8185856111b3565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60095481565b6107a26111c5565b600b60019054906101000a900460ff16156107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e9906129df565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055507f44025b4c6266facf728a25ba1ed858c89e2215e03094486152577b87636ea7ab600160405161083d9190612503565b60405180910390a1565b61084f6111c5565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb662f3bfb1735e6cf86c62e0de5e8ded221db1f328a15d104be3fd29977cf23e826040516108e99190612503565b60405180910390a25050565b5f806108ff6111ac565b905061090c85828561124c565b6109178585856112de565b60019150509392505050565b5f6012905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61095e6111c5565b5f5b84849050811015610a205782828281811061097e5761097d6129fd565b5b90506020020160208101906109939190612a2a565b600f5f8787858181106109a9576109a86129fd565b5b90506020020160208101906109be91906128cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610a1890612a82565b915050610960565b507fec332beaa25122e2aaf782a4144424379d8b725b55f4656dc18bf72b4050819984848484604051610a569493929190612c41565b60405180910390a150505050565b610a6c6111c5565b5f8183610a799190612c7a565b90505f6064600a54610a8b9190612cda565b905080821115610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790612d54565b60405180910390fd5b83600d8190555082600c81905550606482610aeb9190612d72565b600a819055507f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91600a54604051610b22919061259f565b60405180910390a150505050565b610b386111c5565b5f4711610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7190612dfd565b60405180910390fd5b5f4790505f8273ffffffffffffffffffffffffffffffffffffffff1682604051610ba390612e48565b5f6040518083038185875af1925050503d805f8114610bdd576040519150601f19603f3d011682016040523d82523d5f602084013e610be2565b606091505b5050905080610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90612ea6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c83604051610c6c919061259f565b60405180910390a2505050565b610c816111c5565b806009819055507fee131fa00e37f4b10e0ad1bffe4a204cdc5e73b4c9bfab1e2de9ae163dde1edc81604051610cb7919061259f565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d0f6111c5565b610d185f61186b565b565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d7690612965565b80601f0160208091040260200160405190810160405280929190818152602001828054610da290612965565b8015610ded5780601f10610dc457610100808354040283529160200191610ded565b820191905f5260205f20905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b600a5481565b600c5481565b610e0b6111c5565b5f610e1461078b565b90505f61271082610e259190612cda565b90505f6103e8600584610e389190612d72565b610e429190612cda565b9050818410158015610e545750808411155b610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90612f34565b60405180910390fd5b836008819055507fd9865007332e13f0dcab58b7d2a784fb5276e18f0c72e90c1a404e88a562898184604051610ec9919061259f565b60405180910390a150505050565b5f80610ee16111ac565b9050610eee8185856112de565b600191505092915050565b60085481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610f896111c5565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fc391906126b3565b602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110029190612f66565b90505f8111611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612fdb565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611081929190612ff9565b6020604051808303815f875af115801561109d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c19190613034565b508173ffffffffffffffffffffffffffffffffffffffff167f7e2c99819371db0a6fc6f4269fe872496e44f502df19ba3eae594b7a1598746082604051611108919061259f565b60405180910390a2505050565b61111d6111c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361118d575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161118491906126b3565b60405180910390fd5b6111968161186b565b50565b600b60019054906101000a900460ff1681565b5f33905090565b6111c0838383600161192e565b505050565b6111cd6111ac565b73ffffffffffffffffffffffffffffffffffffffff166111eb610d3f565b73ffffffffffffffffffffffffffffffffffffffff161461124a5761120e6111ac565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161124191906126b3565b60405180910390fd5b565b5f6112578484610eff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112d857818110156112c9578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112c09392919061305f565b60405180910390fd5b6112d784848484035f61192e565b5b50505050565b5f8111611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131790613104565b60405180910390fd5b600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615806113bd5750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561141257600b60019054906101000a900460ff16611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061316c565b60405180910390fd5b5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156114bc575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561150f5750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115795761271060095461152261078b565b61152c9190612d72565b6115369190612cda565b821115611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906131fa565b60405180910390fd5b5b600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615806116165750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561164e57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156117365760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116fa575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b801561170757505f600a54115b1561173557612710600a548361171d9190612d72565b6117279190612cda565b9050611734843083611afd565b5b5b600b5f9054906101000a900460ff1615801561179e575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156117f15750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561184f575f61180030610cc2565b9050600854811061184d575f600560085461181b9190612cda565b6008546118289190612c7a565b905080821061183f5761183a81611bed565b61184b565b61184a600854611bed565b5b505b505b611865848483856118609190613218565b611afd565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361199e575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161199591906126b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a0e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a0591906126b3565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611af7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611aee919061259f565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b6d575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b6491906126b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bdd575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bd491906126b3565b60405180910390fd5b611be8838383611e3d565b505050565b600b5f9054906101000a900460ff1615611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3390613295565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055505f4790505f6064600a54611c6a9190612cda565b90505f81600d5485611c7c9190612d72565b611c869190612cda565b90505f805f80600c541115611cce5784600c5488611ca49190612d72565b611cae9190612cda565b9250600283611cbd9190612cda565b91508183611ccb9190613218565b90505b5f8285611cdb9190612c7a565b9050611ce681612056565b5f8747611cf39190613218565b90505f828783611d039190612d72565b611d0d9190612cda565b90505f600c541115611d75575f8183611d269190613218565b9050611d32858261228c565b7fada09296b37f942dad4a0318731be5f9df8af6bf0364ffc08234b0a7d842186184868385604051611d6794939291906132b3565b60405180910390a150611db3565b7fada09296b37f942dad4a0318731be5f9df8af6bf0364ffc08234b0a7d8421861835f8084604051611daa949392919061332f565b60405180910390a15b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611e17573d5f803e3d5ffd5b505050505050505050505f600b5f6101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8d578060025f828254611e819190612c7a565b92505081905550611f5b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f16578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611f0d9392919061305f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa2578060025f8282540392505081905550611fec565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612049919061259f565b60405180910390a3505050565b5f600267ffffffffffffffff81111561207257612071613372565b5b6040519080825280602002602001820160405280156120a05781602001602082028036833780820191505090505b50905030815f815181106120b7576120b66129fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217f91906133b3565b81600181518110612193576121926129fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121f93060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111b3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161225b95949392919061345f565b5f604051808303815f87803b158015612272575f80fd5b505af1158015612284573d5f803e3d5ffd5b505050505050565b6122b83060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111b3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80612302610d3f565b426040518863ffffffff1660e01b8152600401612324969594939291906134b7565b60606040518083038185885af1158015612340573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123659190613516565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156123a3578082015181840152602081019050612388565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6123c88261236c565b6123d28185612376565b93506123e2818560208601612386565b6123eb816123ae565b840191505092915050565b5f6020820190508181035f83015261240e81846123be565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124478261241e565b9050919050565b6124578161243d565b8114612461575f80fd5b50565b5f813590506124728161244e565b92915050565b5f819050919050565b61248a81612478565b8114612494575f80fd5b50565b5f813590506124a581612481565b92915050565b5f80604083850312156124c1576124c0612416565b5b5f6124ce85828601612464565b92505060206124df85828601612497565b9150509250929050565b5f8115159050919050565b6124fd816124e9565b82525050565b5f6020820190506125165f8301846124f4565b92915050565b5f819050919050565b5f61253f61253a6125358461241e565b61251c565b61241e565b9050919050565b5f61255082612525565b9050919050565b5f61256182612546565b9050919050565b61257181612557565b82525050565b5f60208201905061258a5f830184612568565b92915050565b61259981612478565b82525050565b5f6020820190506125b25f830184612590565b92915050565b6125c1816124e9565b81146125cb575f80fd5b50565b5f813590506125dc816125b8565b92915050565b5f80604083850312156125f8576125f7612416565b5b5f61260585828601612464565b9250506020612616858286016125ce565b9150509250929050565b5f805f6060848603121561263757612636612416565b5b5f61264486828701612464565b935050602061265586828701612464565b925050604061266686828701612497565b9150509250925092565b5f60ff82169050919050565b61268581612670565b82525050565b5f60208201905061269e5f83018461267c565b92915050565b6126ad8161243d565b82525050565b5f6020820190506126c65f8301846126a4565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126126ed576126ec6126cc565b5b8235905067ffffffffffffffff81111561270a576127096126d0565b5b602083019150836020820283011115612726576127256126d4565b5b9250929050565b5f8083601f840112612742576127416126cc565b5b8235905067ffffffffffffffff81111561275f5761275e6126d0565b5b60208301915083602082028301111561277b5761277a6126d4565b5b9250929050565b5f805f806040858703121561279a57612799612416565b5b5f85013567ffffffffffffffff8111156127b7576127b661241a565b5b6127c3878288016126d8565b9450945050602085013567ffffffffffffffff8111156127e6576127e561241a565b5b6127f28782880161272d565b925092505092959194509250565b5f806040838503121561281657612815612416565b5b5f61282385828601612497565b925050602061283485828601612497565b9150509250929050565b5f6128488261241e565b9050919050565b6128588161283e565b8114612862575f80fd5b50565b5f813590506128738161284f565b92915050565b5f6020828403121561288e5761288d612416565b5b5f61289b84828501612865565b91505092915050565b5f602082840312156128b9576128b8612416565b5b5f6128c684828501612497565b91505092915050565b5f602082840312156128e4576128e3612416565b5b5f6128f184828501612464565b91505092915050565b5f80604083850312156129105761290f612416565b5b5f61291d85828601612464565b925050602061292e85828601612464565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061297c57607f821691505b60208210810361298f5761298e612938565b5b50919050565b7f54726164696e6720616c7265616479206f70656e0000000000000000000000005f82015250565b5f6129c9601483612376565b91506129d482612995565b602082019050919050565b5f6020820190508181035f8301526129f6816129bd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612a3f57612a3e612416565b5b5f612a4c848285016125ce565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a8c82612478565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612abe57612abd612a55565b5b600182019050919050565b5f82825260208201905092915050565b5f819050919050565b612aeb8161243d565b82525050565b5f612afc8383612ae2565b60208301905092915050565b5f612b166020840184612464565b905092915050565b5f602082019050919050565b5f612b358385612ac9565b9350612b4082612ad9565b805f5b85811015612b7857612b558284612b08565b612b5f8882612af1565b9750612b6a83612b1e565b925050600181019050612b43565b5085925050509392505050565b5f82825260208201905092915050565b5f819050919050565b612ba7816124e9565b82525050565b5f612bb88383612b9e565b60208301905092915050565b5f612bd260208401846125ce565b905092915050565b5f602082019050919050565b5f612bf18385612b85565b9350612bfc82612b95565b805f5b85811015612c3457612c118284612bc4565b612c1b8882612bad565b9750612c2683612bda565b925050600181019050612bff565b5085925050509392505050565b5f6040820190508181035f830152612c5a818688612b2a565b90508181036020830152612c6f818486612be6565b905095945050505050565b5f612c8482612478565b9150612c8f83612478565b9250828201905080821115612ca757612ca6612a55565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ce482612478565b9150612cef83612478565b925082612cff57612cfe612cad565b5b828204905092915050565b7f596f752063616e206f6e6c79206c6f77657220666565730000000000000000005f82015250565b5f612d3e601783612376565b9150612d4982612d0a565b602082019050919050565b5f6020820190508181035f830152612d6b81612d32565b9050919050565b5f612d7c82612478565b9150612d8783612478565b9250828202612d9581612478565b91508282048414831517612dac57612dab612a55565b5b5092915050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f612de7601283612376565b9150612df282612db3565b602082019050919050565b5f6020820190508181035f830152612e1481612ddb565b9050919050565b5f81905092915050565b50565b5f612e335f83612e1b565b9150612e3e82612e25565b5f82019050919050565b5f612e5282612e28565b9150819050919050565b7f4661696c656420746f2073656e642045746865720000000000000000000000005f82015250565b5f612e90601483612376565b9150612e9b82612e5c565b602082019050919050565b5f6020820190508181035f830152612ebd81612e84565b9050919050565b7f536e4c205468726573686f6c64206d7573742062652077697468696e207468655f8201527f20616c6c6f7765642072616e6765000000000000000000000000000000000000602082015250565b5f612f1e602e83612376565b9150612f2982612ec4565b604082019050919050565b5f6020820190508181035f830152612f4b81612f12565b9050919050565b5f81519050612f6081612481565b92915050565b5f60208284031215612f7b57612f7a612416565b5b5f612f8884828501612f52565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e74726163740000005f82015250565b5f612fc5601d83612376565b9150612fd082612f91565b602082019050919050565b5f6020820190508181035f830152612ff281612fb9565b9050919050565b5f60408201905061300c5f8301856126a4565b6130196020830184612590565b9392505050565b5f8151905061302e816125b8565b92915050565b5f6020828403121561304957613048612416565b5b5f61305684828501613020565b91505092915050565b5f6060820190506130725f8301866126a4565b61307f6020830185612590565b61308c6040830184612590565b949350505050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b5f6130ee602683612376565b91506130f982613094565b604082019050919050565b5f6020820190508181035f83015261311b816130e2565b9050919050565b7f54726164696e6720436c6f7365640000000000000000000000000000000000005f82015250565b5f613156600e83612376565b915061316182613122565b602082019050919050565b5f6020820190508181035f8301526131838161314a565b9050919050565b7f416d6f756e742065786365656473206d617820707572636861736520616d6f755f8201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b5f6131e4602383612376565b91506131ef8261318a565b604082019050919050565b5f6020820190508181035f830152613211816131d8565b9050919050565b5f61322282612478565b915061322d83612478565b925082820390508181111561324557613244612a55565b5b92915050565b7f43757272656e746c7920696e207377617020616e64206c6971756966790000005f82015250565b5f61327f601d83612376565b915061328a8261324b565b602082019050919050565b5f6020820190508181035f8301526132ac81613273565b9050919050565b5f6080820190506132c65f830187612590565b6132d36020830186612590565b6132e06040830185612590565b6132ed6060830184612590565b95945050505050565b5f819050919050565b5f61331961331461330f846132f6565b61251c565b612478565b9050919050565b613329816132ff565b82525050565b5f6080820190506133425f830187612590565b61334f6020830186613320565b61335c6040830185613320565b6133696060830184612590565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506133ad8161244e565b92915050565b5f602082840312156133c8576133c7612416565b5b5f6133d58482850161339f565b91505092915050565b5f81519050919050565b5f819050602082019050919050565b5f602082019050919050565b5f61340d826133de565b6134178185612ac9565b9350613422836133e8565b805f5b838110156134525781516134398882612af1565b9750613444836133f7565b925050600181019050613425565b5085935050505092915050565b5f60a0820190506134725f830188612590565b61347f6020830187613320565b81810360408301526134918186613403565b90506134a060608301856126a4565b6134ad6080830184612590565b9695505050505050565b5f60c0820190506134ca5f8301896126a4565b6134d76020830188612590565b6134e46040830187613320565b6134f16060830186613320565b6134fe60808301856126a4565b61350b60a0830184612590565b979650505050505050565b5f805f6060848603121561352d5761352c612416565b5b5f61353a86828701612f52565b935050602061354b86828701612f52565b925050604061355c86828701612f52565b915050925092509256fea2646970667358221220a9f72e7f68446251164985970c7ee75f926cca82cc1a020dbcaba1ea6f72df3264736f6c63430008140033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000140fb2a3ebb9bfa685c32d1274d47ec97889333e

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _buySellTax (uint256): 500
Arg [2] : __ethFeeInPercent (uint256): 5
Arg [3] : __liquidityFeeInPercent (uint256): 0
Arg [4] : __purchaseLimit (uint256): 200
Arg [5] : _marketingWallet (address): 0x140fb2A3eBb9BfA685c32d1274D47eC97889333e

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [5] : 000000000000000000000000140fb2a3ebb9bfa685c32d1274d47ec97889333e


Deployed Bytecode Sourcemap

31866:9009:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16624:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18917:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31909:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17726:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32032:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38807:180;;;;;;;;;;;;;:::i;:::-;;39644:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19685:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17577:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31957:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32197:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39867:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38218:581;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40198:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38995:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17888:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3507:103;;;;;;;;;;;;;:::i;:::-;;32227:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2832:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16834:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32064:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32163:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39146:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18211:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31994:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18456:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40534:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3765:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32131:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16624:91;16669:13;16702:5;16695:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16624:91;:::o;18917:190::-;18990:4;19007:13;19023:12;:10;:12::i;:::-;19007:28;;19046:31;19055:5;19062:7;19071:5;19046:8;:31::i;:::-;19095:4;19088:11;;;18917:190;;;;:::o;31909:41::-;;;;;;;;;;;;;:::o;17726:99::-;17778:7;17805:12;;17798:19;;17726:99;:::o;32032:25::-;;;;:::o;38807:180::-;2718:13;:11;:13::i;:::-;38872:11:::1;;;;;;;;;;;38871:12;38863:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38933:4;38919:11;;:18;;;;;;;;;;;;;;;;;;38953:26;38974:4;38953:26;;;;;;:::i;:::-;;;;;;;;38807:180::o:0;39644:215::-;2718:13;:11;:13::i;:::-;39787:8:::1;39755:20;:29;39776:7;39755:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;39833:7;39811:40;;;39842:8;39811:40;;;;;;:::i;:::-;;;;;;;;39644:215:::0;;:::o;19685:249::-;19772:4;19789:15;19807:12;:10;:12::i;:::-;19789:30;;19830:37;19846:4;19852:7;19861:5;19830:15;:37::i;:::-;19878:26;19888:4;19894:2;19898:5;19878:9;:26::i;:::-;19922:4;19915:11;;;19685:249;;;;;:::o;17577:84::-;17626:5;17651:2;17644:9;;17577:84;:::o;31957:28::-;;;;;;;;;;;;;:::o;32197:21::-;;;;:::o;39867:323::-;2718:13;:11;:13::i;:::-;40009:6:::1;40005:117;40026:7;;:14;;40022:1;:18;40005:117;;;40099:8;;40108:1;40099:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40064:20;:32;40085:7;;40093:1;40085:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40064:32;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40043:4;;;;;:::i;:::-;;;;40005:117;;;;40137:45;40164:7;;40173:8;;40137:45;;;;;;;;;:::i;:::-;;;;;;;;39867:323:::0;;;;:::o;38218:581::-;2718:13;:11;:13::i;:::-;38363:23:::1;38416:24;38389;:51;;;;:::i;:::-;38363:77;;38451:30;38497:3;38484:10;;:16;;;;:::i;:::-;38451:49;;38538:22;38519:15;:41;;38511:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38622:24;38613:6;:33;;;;38672:24;38657:12;:39;;;;38740:3;38722:15;:21;;;;:::i;:::-;38709:10;:34;;;;38769:22;38780:10;;38769:22;;;;;;:::i;:::-;;;;;;;;38342:457;;38218:581:::0;;:::o;40198:328::-;2718:13;:11;:13::i;:::-;40302:1:::1;40278:21;:25;40270:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40337:14;40354:21;40337:38;;40387:9;40402:3;:8;;40418:6;40402:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40386:43;;;40448:4;40440:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40506:3;40493:25;;;40511:6;40493:25;;;;;;:::i;:::-;;;;;;;;40259:267;;40198:328:::0;:::o;38995:143::-;2718:13;:11;:13::i;:::-;39080:6:::1;39064:13;:22;;;;39102:28;39123:6;39102:28;;;;;;:::i;:::-;;;;;;;;38995:143:::0;:::o;17888:118::-;17953:7;17980:9;:18;17990:7;17980:18;;;;;;;;;;;;;;;;17973:25;;17888:118;;;:::o;3507:103::-;2718:13;:11;:13::i;:::-;3572:30:::1;3599:1;3572:18;:30::i;:::-;3507:103::o:0;32227:30::-;;;;;;;;;;;;;:::o;2832:87::-;2878:7;2905:6;;;;;;;;;;;2898:13;;2832:87;:::o;16834:95::-;16881:13;16914:7;16907:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16834:95;:::o;32064:22::-;;;;:::o;32163:27::-;;;;:::o;39146:490::-;2718:13;:11;:13::i;:::-;39216:26:::1;39245:13;:11;:13::i;:::-;39216:42;;39269:30;39323:5;39302:18;:26;;;;:::i;:::-;39269:59;;39340:30;39398:4;39394:1;39373:18;:22;;;;:::i;:::-;:29;;;;:::i;:::-;39340:62;;39434:22;39424:6;:32;;:68;;;;;39470:22;39460:6;:32;;39424:68;39416:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;39576:6;39554:19;:28;;;;39598:30;39621:6;39598:30;;;;;;:::i;:::-;;;;;;;;39205:431;;;39146:490:::0;:::o;18211:182::-;18280:4;18297:13;18313:12;:10;:12::i;:::-;18297:28;;18336:27;18346:5;18353:2;18357:5;18336:9;:27::i;:::-;18381:4;18374:11;;;18211:182;;;;:::o;31994:31::-;;;;:::o;18456:142::-;18536:7;18563:11;:18;18575:5;18563:18;;;;;;;;;;;;;;;:27;18582:7;18563:27;;;;;;;;;;;;;;;;18556:34;;18456:142;;;;:::o;40534:338::-;2718:13;:11;:13::i;:::-;40637:15:::1;40670:5;40655:32;;;40696:4;40655:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40637:65;;40731:1;40721:7;:11;40713:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40792:5;40777:31;;;40809:2;40813:7;40777:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40852:2;40837:27;;;40856:7;40837:27;;;;;;:::i;:::-;;;;;;;;40626:246;40534:338:::0;;:::o;3765:220::-;2718:13;:11;:13::i;:::-;3870:1:::1;3850:22;;:8;:22;;::::0;3846:93:::1;;3924:1;3896:31;;;;;;;;;;;:::i;:::-;;;;;;;;3846:93;3949:28;3968:8;3949:18;:28::i;:::-;3765:220:::0;:::o;32131:23::-;;;;;;;;;;;;;:::o;841:98::-;894:7;921:10;914:17;;841:98;:::o;23752:130::-;23837:37;23846:5;23853:7;23862:5;23869:4;23837:8;:37::i;:::-;23752:130;;;:::o;2997:166::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3053:103;;3131:12;:10;:12::i;:::-;3104:40;;;;;;;;;;;:::i;:::-;;;;;;;;3053:103;2997:166::o;25468:487::-;25568:24;25595:25;25605:5;25612:7;25595:9;:25::i;:::-;25568:52;;25655:17;25635:16;:37;25631:317;;25712:5;25693:16;:24;25689:132;;;25772:7;25781:16;25799:5;25745:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25689:132;25864:57;25873:5;25880:7;25908:5;25889:16;:24;25915:5;25864:8;:57::i;:::-;25631:317;25557:398;25468:487;;;:::o;36705:1505::-;36842:1;36833:6;:10;36825:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36901:20;:26;36922:4;36901:26;;;;;;;;;;;;;;;;;;;;;;;;;36900:27;:56;;;;36932:20;:24;36953:2;36932:24;;;;;;;;;;;;;;;;;;;;;;;;;36931:25;36900:56;36897:126;;;36981:11;;;;;;;;;;;36973:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36897:126;37035:17;37081:13;;;;;;;;;;;37073:21;;:4;:21;;;:55;;;;;37112:15;;;;;;;;;;;37098:30;;:2;:30;;;;37073:55;:84;;;;;37133:20;:24;37154:2;37133:24;;;;;;;;;;;;;;;;;;;;;;;;;37132:25;37073:84;37069:212;;;37226:3;37210:13;;37194;:11;:13::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;37184:6;:45;;37176:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;37069:212;37298:20;:26;37319:4;37298:26;;;;;;;;;;;;;;;;;;;;;;;;;37297:27;:56;;;;37329:20;:24;37350:2;37329:24;;;;;;;;;;;;;;;;;;;;;;;;;37328:25;37297:56;37296:83;;;;;37374:4;37358:21;;:4;:21;;;;37296:83;37293:319;;;37407:13;;;;;;;;;;;37399:21;;:4;:21;;;:44;;;;37430:13;;;;;;;;;;;37424:19;;:2;:19;;;37399:44;37398:64;;;;;37461:1;37448:10;;:14;37398:64;37395:206;;;37516:3;37503:10;;37494:6;:19;;;;:::i;:::-;:25;;;;:::i;:::-;37482:37;;37538:47;37554:4;37568;37575:9;37538:15;:47::i;:::-;37395:206;37293:319;37629:16;;;;;;;;;;;37628:17;:40;;;;;37655:13;;;;;;;;;;;37649:19;;:2;:19;;;37628:40;:71;;;;;37673:20;:26;37694:4;37673:26;;;;;;;;;;;;;;;;;;;;;;;;;37672:27;37628:71;37624:521;;;37716:15;37734:24;37752:4;37734:9;:24::i;:::-;37716:42;;37787:19;;37776:7;:30;37773:361;;37827:21;37896:1;37874:19;;:23;;;;:::i;:::-;37851:19;;:47;;;;:::i;:::-;37827:71;;37932:13;37921:7;:24;37918:201;;37969:29;37984:13;37969:14;:29::i;:::-;37918:201;;;38064:35;38079:19;;38064:14;:35::i;:::-;37918:201;37808:326;37773:361;37701:444;37624:521;38157:45;38173:4;38179:2;38191:9;38184:6;:16;;;;:::i;:::-;38157:15;:45::i;:::-;36814:1396;36705:1505;;;:::o;4145:191::-;4219:16;4238:6;;;;;;;;;;;4219:25;;4264:8;4255:6;;:17;;;;;;;;;;;;;;;;;;4319:8;4288:40;;4309:8;4288:40;;;;;;;;;;;;4208:128;4145:191;:::o;24733:443::-;24863:1;24846:19;;:5;:19;;;24842:91;;24918:1;24889:32;;;;;;;;;;;:::i;:::-;;;;;;;;24842:91;24966:1;24947:21;;:7;:21;;;24943:92;;25020:1;24992:31;;;;;;;;;;;:::i;:::-;;;;;;;;24943:92;25075:5;25045:11;:18;25057:5;25045:18;;;;;;;;;;;;;;;:27;25064:7;25045:27;;;;;;;;;;;;;;;:35;;;;25095:9;25091:78;;;25142:7;25126:31;;25135:5;25126:31;;;25151:5;25126:31;;;;;;:::i;:::-;;;;;;;;25091:78;24733:443;;;;:::o;20319:316::-;20427:1;20411:18;;:4;:18;;;20407:88;;20480:1;20453:30;;;;;;;;;;;:::i;:::-;;;;;;;;20407:88;20523:1;20509:16;;:2;:16;;;20505:88;;20578:1;20549:32;;;;;;;;;;;:::i;:::-;;;;;;;;20505:88;20603:24;20611:4;20617:2;20621:5;20603:7;:24::i;:::-;20319:316;;;:::o;34422:1284::-;32968:16;;;;;;;;;;;32967:17;32959:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33048:4;33029:16;;:23;;;;;;;;;;;;;;;;;;34504:22:::1;34529:21;34504:46;;34561:16;34593:3;34580:10;;:16;;;;:::i;:::-;34561:35;;34607:14;34651:8;34642:6;;34624:15;:24;;;;:::i;:::-;:35;;;;:::i;:::-;34607:52;;34680:20;34715:26:::0;34756:22:::1;34814:1:::0;34799:12:::1;;:16;34795:222;;;34880:8;34865:12;;34847:15;:30;;;;:::i;:::-;:41;;;;:::i;:::-;34832:56;;34939:1;34924:12;:16;;;;:::i;:::-;34903:37;;34987:18;34972:12;:33;;;;:::i;:::-;34955:50;;34795:222;35029:14;35055:18;35046:6;:27;;;;:::i;:::-;35029:44;;35084:24;35101:6;35084:16;:24::i;:::-;35129:22;35178:14;35154:21;:38;;;;:::i;:::-;35129:63;;35203:23;35255:6;35246;35229:14;:23;;;;:::i;:::-;:32;;;;:::i;:::-;35203:58;;35301:1;35286:12;;:16;35282:346;;;35319:23;35362:15;35345:14;:32;;;;:::i;:::-;35319:58;;35392:45;35405:14;35421:15;35392:12;:45::i;:::-;35457:74;35474:6;35482:14;35498:15;35515;35457:74;;;;;;;;;:::i;:::-;;;;;;;;35304:239;35282:346;;;35569:47;35586:6;35594:1;35597::::0;35600:15:::1;35569:47;;;;;;;;;:::i;:::-;;;;;;;;35282:346;35656:15;;;;;;;;;;;35648:33;;:50;35682:15;35648:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34491:1215;;;;;;;;;33094:5:::0;33075:16;;:24;;;;;;;;;;;;;;;;;;34422:1284;:::o;20959:1135::-;21065:1;21049:18;;:4;:18;;;21045:552;;21203:5;21187:12;;:21;;;;;;;:::i;:::-;;;;;;;;21045:552;;;21241:19;21263:9;:15;21273:4;21263:15;;;;;;;;;;;;;;;;21241:37;;21311:5;21297:11;:19;21293:117;;;21369:4;21375:11;21388:5;21344:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21293:117;21565:5;21551:11;:19;21533:9;:15;21543:4;21533:15;;;;;;;;;;;;;;;:37;;;;21226:371;21045:552;21627:1;21613:16;;:2;:16;;;21609:435;;21795:5;21779:12;;:21;;;;;;;;;;;21609:435;;;22012:5;21995:9;:13;22005:2;21995:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21609:435;22076:2;22061:25;;22070:4;22061:25;;;22080:5;22061:25;;;;;;:::i;:::-;;;;;;;;20959:1135;;;:::o;36180:517::-;36246:21;36284:1;36270:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36246:40;;36315:4;36297;36302:1;36297:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36341:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36331:4;36336:1;36331:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36376:104;36407:4;36436:15;;;;;;;;;;;36468:11;36376:8;:104::i;:::-;36493:15;;;;;;;;;;;:66;;;36574:11;36600:1;36616:4;36643;36663:15;36493:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36235:462;36180:517;:::o;35716:456::-;35817:104;35848:4;35877:15;;;;;;;;;;;35909:11;35817:8;:104::i;:::-;35964:15;;;;;;;;;;;:31;;;36003:9;36036:4;36056:11;36082:1;36099;36116:7;:5;:7::i;:::-;36138:15;35964:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35716:456;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:116::-;4846:21;4861:5;4846:21;:::i;:::-;4839:5;4836:32;4826:60;;4882:1;4879;4872:12;4826:60;4776:116;:::o;4898:133::-;4941:5;4979:6;4966:20;4957:29;;4995:30;5019:5;4995:30;:::i;:::-;4898:133;;;;:::o;5037:468::-;5102:6;5110;5159:2;5147:9;5138:7;5134:23;5130:32;5127:119;;;5165:79;;:::i;:::-;5127:119;5285:1;5310:53;5355:7;5346:6;5335:9;5331:22;5310:53;:::i;:::-;5300:63;;5256:117;5412:2;5438:50;5480:7;5471:6;5460:9;5456:22;5438:50;:::i;:::-;5428:60;;5383:115;5037:468;;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:118::-;6653:24;6671:5;6653:24;:::i;:::-;6648:3;6641:37;6566:118;;:::o;6690:222::-;6783:4;6821:2;6810:9;6806:18;6798:26;;6834:71;6902:1;6891:9;6887:17;6878:6;6834:71;:::i;:::-;6690:222;;;;:::o;6918:117::-;7027:1;7024;7017:12;7041:117;7150:1;7147;7140:12;7164:117;7273:1;7270;7263:12;7304:568;7377:8;7387:6;7437:3;7430:4;7422:6;7418:17;7414:27;7404:122;;7445:79;;:::i;:::-;7404:122;7558:6;7545:20;7535:30;;7588:18;7580:6;7577:30;7574:117;;;7610:79;;:::i;:::-;7574:117;7724:4;7716:6;7712:17;7700:29;;7778:3;7770:4;7762:6;7758:17;7748:8;7744:32;7741:41;7738:128;;;7785:79;;:::i;:::-;7738:128;7304:568;;;;;:::o;7892:565::-;7962:8;7972:6;8022:3;8015:4;8007:6;8003:17;7999:27;7989:122;;8030:79;;:::i;:::-;7989:122;8143:6;8130:20;8120:30;;8173:18;8165:6;8162:30;8159:117;;;8195:79;;:::i;:::-;8159:117;8309:4;8301:6;8297:17;8285:29;;8363:3;8355:4;8347:6;8343:17;8333:8;8329:32;8326:41;8323:128;;;8370:79;;:::i;:::-;8323:128;7892:565;;;;;:::o;8463:928::-;8582:6;8590;8598;8606;8655:2;8643:9;8634:7;8630:23;8626:32;8623:119;;;8661:79;;:::i;:::-;8623:119;8809:1;8798:9;8794:17;8781:31;8839:18;8831:6;8828:30;8825:117;;;8861:79;;:::i;:::-;8825:117;8974:80;9046:7;9037:6;9026:9;9022:22;8974:80;:::i;:::-;8956:98;;;;8752:312;9131:2;9120:9;9116:18;9103:32;9162:18;9154:6;9151:30;9148:117;;;9184:79;;:::i;:::-;9148:117;9297:77;9366:7;9357:6;9346:9;9342:22;9297:77;:::i;:::-;9279:95;;;;9074:310;8463:928;;;;;;;:::o;9397:474::-;9465:6;9473;9522:2;9510:9;9501:7;9497:23;9493:32;9490:119;;;9528:79;;:::i;:::-;9490:119;9648:1;9673:53;9718:7;9709:6;9698:9;9694:22;9673:53;:::i;:::-;9663:63;;9619:117;9775:2;9801:53;9846:7;9837:6;9826:9;9822:22;9801:53;:::i;:::-;9791:63;;9746:118;9397:474;;;;;:::o;9877:104::-;9922:7;9951:24;9969:5;9951:24;:::i;:::-;9940:35;;9877:104;;;:::o;9987:138::-;10068:32;10094:5;10068:32;:::i;:::-;10061:5;10058:43;10048:71;;10115:1;10112;10105:12;10048:71;9987:138;:::o;10131:155::-;10185:5;10223:6;10210:20;10201:29;;10239:41;10274:5;10239:41;:::i;:::-;10131:155;;;;:::o;10292:345::-;10359:6;10408:2;10396:9;10387:7;10383:23;10379:32;10376:119;;;10414:79;;:::i;:::-;10376:119;10534:1;10559:61;10612:7;10603:6;10592:9;10588:22;10559:61;:::i;:::-;10549:71;;10505:125;10292:345;;;;:::o;10643:329::-;10702:6;10751:2;10739:9;10730:7;10726:23;10722:32;10719:119;;;10757:79;;:::i;:::-;10719:119;10877:1;10902:53;10947:7;10938:6;10927:9;10923:22;10902:53;:::i;:::-;10892:63;;10848:117;10643:329;;;;:::o;10978:::-;11037:6;11086:2;11074:9;11065:7;11061:23;11057:32;11054:119;;;11092:79;;:::i;:::-;11054:119;11212:1;11237:53;11282:7;11273:6;11262:9;11258:22;11237:53;:::i;:::-;11227:63;;11183:117;10978:329;;;;:::o;11313:474::-;11381:6;11389;11438:2;11426:9;11417:7;11413:23;11409:32;11406:119;;;11444:79;;:::i;:::-;11406:119;11564:1;11589:53;11634:7;11625:6;11614:9;11610:22;11589:53;:::i;:::-;11579:63;;11535:117;11691:2;11717:53;11762:7;11753:6;11742:9;11738:22;11717:53;:::i;:::-;11707:63;;11662:118;11313:474;;;;;:::o;11793:180::-;11841:77;11838:1;11831:88;11938:4;11935:1;11928:15;11962:4;11959:1;11952:15;11979:320;12023:6;12060:1;12054:4;12050:12;12040:22;;12107:1;12101:4;12097:12;12128:18;12118:81;;12184:4;12176:6;12172:17;12162:27;;12118:81;12246:2;12238:6;12235:14;12215:18;12212:38;12209:84;;12265:18;;:::i;:::-;12209:84;12030:269;11979:320;;;:::o;12305:170::-;12445:22;12441:1;12433:6;12429:14;12422:46;12305:170;:::o;12481:366::-;12623:3;12644:67;12708:2;12703:3;12644:67;:::i;:::-;12637:74;;12720:93;12809:3;12720:93;:::i;:::-;12838:2;12833:3;12829:12;12822:19;;12481:366;;;:::o;12853:419::-;13019:4;13057:2;13046:9;13042:18;13034:26;;13106:9;13100:4;13096:20;13092:1;13081:9;13077:17;13070:47;13134:131;13260:4;13134:131;:::i;:::-;13126:139;;12853:419;;;:::o;13278:180::-;13326:77;13323:1;13316:88;13423:4;13420:1;13413:15;13447:4;13444:1;13437:15;13464:323;13520:6;13569:2;13557:9;13548:7;13544:23;13540:32;13537:119;;;13575:79;;:::i;:::-;13537:119;13695:1;13720:50;13762:7;13753:6;13742:9;13738:22;13720:50;:::i;:::-;13710:60;;13666:114;13464:323;;;;:::o;13793:180::-;13841:77;13838:1;13831:88;13938:4;13935:1;13928:15;13962:4;13959:1;13952:15;13979:233;14018:3;14041:24;14059:5;14041:24;:::i;:::-;14032:33;;14087:66;14080:5;14077:77;14074:103;;14157:18;;:::i;:::-;14074:103;14204:1;14197:5;14193:13;14186:20;;13979:233;;;:::o;14218:184::-;14317:11;14351:6;14346:3;14339:19;14391:4;14386:3;14382:14;14367:29;;14218:184;;;;:::o;14408:102::-;14477:4;14500:3;14492:11;;14408:102;;;:::o;14516:108::-;14593:24;14611:5;14593:24;:::i;:::-;14588:3;14581:37;14516:108;;:::o;14630:179::-;14699:10;14720:46;14762:3;14754:6;14720:46;:::i;:::-;14798:4;14793:3;14789:14;14775:28;;14630:179;;;;:::o;14815:122::-;14867:5;14892:39;14927:2;14922:3;14918:12;14913:3;14892:39;:::i;:::-;14883:48;;14815:122;;;;:::o;14943:115::-;15015:4;15047;15042:3;15038:14;15030:22;;14943:115;;;:::o;15094:699::-;15223:3;15246:86;15325:6;15320:3;15246:86;:::i;:::-;15239:93;;15356:58;15408:5;15356:58;:::i;:::-;15437:7;15468:1;15453:315;15478:6;15475:1;15472:13;15453:315;;;15548:42;15583:6;15574:7;15548:42;:::i;:::-;15610:63;15669:3;15654:13;15610:63;:::i;:::-;15603:70;;15696:62;15751:6;15696:62;:::i;:::-;15686:72;;15513:255;15500:1;15497;15493:9;15488:14;;15453:315;;;15457:14;15784:3;15777:10;;15228:565;;15094:699;;;;;:::o;15799:181::-;15895:11;15929:6;15924:3;15917:19;15969:4;15964:3;15960:14;15945:29;;15799:181;;;;:::o;15986:99::-;16052:4;16075:3;16067:11;;15986:99;;;:::o;16091:::-;16162:21;16177:5;16162:21;:::i;:::-;16157:3;16150:34;16091:99;;:::o;16196:167::-;16259:10;16280:40;16316:3;16308:6;16280:40;:::i;:::-;16352:4;16347:3;16343:14;16329:28;;16196:167;;;;:::o;16369:116::-;16418:5;16443:36;16475:2;16470:3;16466:12;16461:3;16443:36;:::i;:::-;16434:45;;16369:116;;;;:::o;16491:112::-;16560:4;16592;16587:3;16583:14;16575:22;;16491:112;;;:::o;16633:675::-;16756:3;16779:83;16855:6;16850:3;16779:83;:::i;:::-;16772:90;;16886:55;16935:5;16886:55;:::i;:::-;16964:7;16995:1;16980:303;17005:6;17002:1;16999:13;16980:303;;;17075:39;17107:6;17098:7;17075:39;:::i;:::-;17134:57;17187:3;17172:13;17134:57;:::i;:::-;17127:64;;17214:59;17266:6;17214:59;:::i;:::-;17204:69;;17040:243;17027:1;17024;17020:9;17015:14;;16980:303;;;16984:14;17299:3;17292:10;;16761:547;;16633:675;;;;;:::o;17314:662::-;17549:4;17587:2;17576:9;17572:18;17564:26;;17636:9;17630:4;17626:20;17622:1;17611:9;17607:17;17600:47;17664:118;17777:4;17768:6;17760;17664:118;:::i;:::-;17656:126;;17829:9;17823:4;17819:20;17814:2;17803:9;17799:18;17792:48;17857:112;17964:4;17955:6;17947;17857:112;:::i;:::-;17849:120;;17314:662;;;;;;;:::o;17982:191::-;18022:3;18041:20;18059:1;18041:20;:::i;:::-;18036:25;;18075:20;18093:1;18075:20;:::i;:::-;18070:25;;18118:1;18115;18111:9;18104:16;;18139:3;18136:1;18133:10;18130:36;;;18146:18;;:::i;:::-;18130:36;17982:191;;;;:::o;18179:180::-;18227:77;18224:1;18217:88;18324:4;18321:1;18314:15;18348:4;18345:1;18338:15;18365:185;18405:1;18422:20;18440:1;18422:20;:::i;:::-;18417:25;;18456:20;18474:1;18456:20;:::i;:::-;18451:25;;18495:1;18485:35;;18500:18;;:::i;:::-;18485:35;18542:1;18539;18535:9;18530:14;;18365:185;;;;:::o;18556:173::-;18696:25;18692:1;18684:6;18680:14;18673:49;18556:173;:::o;18735:366::-;18877:3;18898:67;18962:2;18957:3;18898:67;:::i;:::-;18891:74;;18974:93;19063:3;18974:93;:::i;:::-;19092:2;19087:3;19083:12;19076:19;;18735:366;;;:::o;19107:419::-;19273:4;19311:2;19300:9;19296:18;19288:26;;19360:9;19354:4;19350:20;19346:1;19335:9;19331:17;19324:47;19388:131;19514:4;19388:131;:::i;:::-;19380:139;;19107:419;;;:::o;19532:410::-;19572:7;19595:20;19613:1;19595:20;:::i;:::-;19590:25;;19629:20;19647:1;19629:20;:::i;:::-;19624:25;;19684:1;19681;19677:9;19706:30;19724:11;19706:30;:::i;:::-;19695:41;;19885:1;19876:7;19872:15;19869:1;19866:22;19846:1;19839:9;19819:83;19796:139;;19915:18;;:::i;:::-;19796:139;19580:362;19532:410;;;;:::o;19948:168::-;20088:20;20084:1;20076:6;20072:14;20065:44;19948:168;:::o;20122:366::-;20264:3;20285:67;20349:2;20344:3;20285:67;:::i;:::-;20278:74;;20361:93;20450:3;20361:93;:::i;:::-;20479:2;20474:3;20470:12;20463:19;;20122:366;;;:::o;20494:419::-;20660:4;20698:2;20687:9;20683:18;20675:26;;20747:9;20741:4;20737:20;20733:1;20722:9;20718:17;20711:47;20775:131;20901:4;20775:131;:::i;:::-;20767:139;;20494:419;;;:::o;20919:147::-;21020:11;21057:3;21042:18;;20919:147;;;;:::o;21072:114::-;;:::o;21192:398::-;21351:3;21372:83;21453:1;21448:3;21372:83;:::i;:::-;21365:90;;21464:93;21553:3;21464:93;:::i;:::-;21582:1;21577:3;21573:11;21566:18;;21192:398;;;:::o;21596:379::-;21780:3;21802:147;21945:3;21802:147;:::i;:::-;21795:154;;21966:3;21959:10;;21596:379;;;:::o;21981:170::-;22121:22;22117:1;22109:6;22105:14;22098:46;21981:170;:::o;22157:366::-;22299:3;22320:67;22384:2;22379:3;22320:67;:::i;:::-;22313:74;;22396:93;22485:3;22396:93;:::i;:::-;22514:2;22509:3;22505:12;22498:19;;22157:366;;;:::o;22529:419::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22782:9;22776:4;22772:20;22768:1;22757:9;22753:17;22746:47;22810:131;22936:4;22810:131;:::i;:::-;22802:139;;22529:419;;;:::o;22954:233::-;23094:34;23090:1;23082:6;23078:14;23071:58;23163:16;23158:2;23150:6;23146:15;23139:41;22954:233;:::o;23193:366::-;23335:3;23356:67;23420:2;23415:3;23356:67;:::i;:::-;23349:74;;23432:93;23521:3;23432:93;:::i;:::-;23550:2;23545:3;23541:12;23534:19;;23193:366;;;:::o;23565:419::-;23731:4;23769:2;23758:9;23754:18;23746:26;;23818:9;23812:4;23808:20;23804:1;23793:9;23789:17;23782:47;23846:131;23972:4;23846:131;:::i;:::-;23838:139;;23565:419;;;:::o;23990:143::-;24047:5;24078:6;24072:13;24063:22;;24094:33;24121:5;24094:33;:::i;:::-;23990:143;;;;:::o;24139:351::-;24209:6;24258:2;24246:9;24237:7;24233:23;24229:32;24226:119;;;24264:79;;:::i;:::-;24226:119;24384:1;24409:64;24465:7;24456:6;24445:9;24441:22;24409:64;:::i;:::-;24399:74;;24355:128;24139:351;;;;:::o;24496:179::-;24636:31;24632:1;24624:6;24620:14;24613:55;24496:179;:::o;24681:366::-;24823:3;24844:67;24908:2;24903:3;24844:67;:::i;:::-;24837:74;;24920:93;25009:3;24920:93;:::i;:::-;25038:2;25033:3;25029:12;25022:19;;24681:366;;;:::o;25053:419::-;25219:4;25257:2;25246:9;25242:18;25234:26;;25306:9;25300:4;25296:20;25292:1;25281:9;25277:17;25270:47;25334:131;25460:4;25334:131;:::i;:::-;25326:139;;25053:419;;;:::o;25478:332::-;25599:4;25637:2;25626:9;25622:18;25614:26;;25650:71;25718:1;25707:9;25703:17;25694:6;25650:71;:::i;:::-;25731:72;25799:2;25788:9;25784:18;25775:6;25731:72;:::i;:::-;25478:332;;;;;:::o;25816:137::-;25870:5;25901:6;25895:13;25886:22;;25917:30;25941:5;25917:30;:::i;:::-;25816:137;;;;:::o;25959:345::-;26026:6;26075:2;26063:9;26054:7;26050:23;26046:32;26043:119;;;26081:79;;:::i;:::-;26043:119;26201:1;26226:61;26279:7;26270:6;26259:9;26255:22;26226:61;:::i;:::-;26216:71;;26172:125;25959:345;;;;:::o;26310:442::-;26459:4;26497:2;26486:9;26482:18;26474:26;;26510:71;26578:1;26567:9;26563:17;26554:6;26510:71;:::i;:::-;26591:72;26659:2;26648:9;26644:18;26635:6;26591:72;:::i;:::-;26673;26741:2;26730:9;26726:18;26717:6;26673:72;:::i;:::-;26310:442;;;;;;:::o;26758:225::-;26898:34;26894:1;26886:6;26882:14;26875:58;26967:8;26962:2;26954:6;26950:15;26943:33;26758:225;:::o;26989:366::-;27131:3;27152:67;27216:2;27211:3;27152:67;:::i;:::-;27145:74;;27228:93;27317:3;27228:93;:::i;:::-;27346:2;27341:3;27337:12;27330:19;;26989:366;;;:::o;27361:419::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27614:9;27608:4;27604:20;27600:1;27589:9;27585:17;27578:47;27642:131;27768:4;27642:131;:::i;:::-;27634:139;;27361:419;;;:::o;27786:164::-;27926:16;27922:1;27914:6;27910:14;27903:40;27786:164;:::o;27956:366::-;28098:3;28119:67;28183:2;28178:3;28119:67;:::i;:::-;28112:74;;28195:93;28284:3;28195:93;:::i;:::-;28313:2;28308:3;28304:12;28297:19;;27956:366;;;:::o;28328:419::-;28494:4;28532:2;28521:9;28517:18;28509:26;;28581:9;28575:4;28571:20;28567:1;28556:9;28552:17;28545:47;28609:131;28735:4;28609:131;:::i;:::-;28601:139;;28328:419;;;:::o;28753:222::-;28893:34;28889:1;28881:6;28877:14;28870:58;28962:5;28957:2;28949:6;28945:15;28938:30;28753:222;:::o;28981:366::-;29123:3;29144:67;29208:2;29203:3;29144:67;:::i;:::-;29137:74;;29220:93;29309:3;29220:93;:::i;:::-;29338:2;29333:3;29329:12;29322:19;;28981:366;;;:::o;29353:419::-;29519:4;29557:2;29546:9;29542:18;29534:26;;29606:9;29600:4;29596:20;29592:1;29581:9;29577:17;29570:47;29634:131;29760:4;29634:131;:::i;:::-;29626:139;;29353:419;;;:::o;29778:194::-;29818:4;29838:20;29856:1;29838:20;:::i;:::-;29833:25;;29872:20;29890:1;29872:20;:::i;:::-;29867:25;;29916:1;29913;29909:9;29901:17;;29940:1;29934:4;29931:11;29928:37;;;29945:18;;:::i;:::-;29928:37;29778:194;;;;:::o;29978:179::-;30118:31;30114:1;30106:6;30102:14;30095:55;29978:179;:::o;30163:366::-;30305:3;30326:67;30390:2;30385:3;30326:67;:::i;:::-;30319:74;;30402:93;30491:3;30402:93;:::i;:::-;30520:2;30515:3;30511:12;30504:19;;30163:366;;;:::o;30535:419::-;30701:4;30739:2;30728:9;30724:18;30716:26;;30788:9;30782:4;30778:20;30774:1;30763:9;30759:17;30752:47;30816:131;30942:4;30816:131;:::i;:::-;30808:139;;30535:419;;;:::o;30960:553::-;31137:4;31175:3;31164:9;31160:19;31152:27;;31189:71;31257:1;31246:9;31242:17;31233:6;31189:71;:::i;:::-;31270:72;31338:2;31327:9;31323:18;31314:6;31270:72;:::i;:::-;31352;31420:2;31409:9;31405:18;31396:6;31352:72;:::i;:::-;31434;31502:2;31491:9;31487:18;31478:6;31434:72;:::i;:::-;30960:553;;;;;;;:::o;31519:85::-;31564:7;31593:5;31582:16;;31519:85;;;:::o;31610:158::-;31668:9;31701:61;31719:42;31728:32;31754:5;31728:32;:::i;:::-;31719:42;:::i;:::-;31701:61;:::i;:::-;31688:74;;31610:158;;;:::o;31774:147::-;31869:45;31908:5;31869:45;:::i;:::-;31864:3;31857:58;31774:147;;:::o;31927:585::-;32120:4;32158:3;32147:9;32143:19;32135:27;;32172:71;32240:1;32229:9;32225:17;32216:6;32172:71;:::i;:::-;32253:80;32329:2;32318:9;32314:18;32305:6;32253:80;:::i;:::-;32343;32419:2;32408:9;32404:18;32395:6;32343:80;:::i;:::-;32433:72;32501:2;32490:9;32486:18;32477:6;32433:72;:::i;:::-;31927:585;;;;;;;:::o;32518:180::-;32566:77;32563:1;32556:88;32663:4;32660:1;32653:15;32687:4;32684:1;32677:15;32704:143;32761:5;32792:6;32786:13;32777:22;;32808:33;32835:5;32808:33;:::i;:::-;32704:143;;;;:::o;32853:351::-;32923:6;32972:2;32960:9;32951:7;32947:23;32943:32;32940:119;;;32978:79;;:::i;:::-;32940:119;33098:1;33123:64;33179:7;33170:6;33159:9;33155:22;33123:64;:::i;:::-;33113:74;;33069:128;32853:351;;;;:::o;33210:114::-;33277:6;33311:5;33305:12;33295:22;;33210:114;;;:::o;33330:132::-;33397:4;33420:3;33412:11;;33450:4;33445:3;33441:14;33433:22;;33330:132;;;:::o;33468:113::-;33538:4;33570;33565:3;33561:14;33553:22;;33468:113;;;:::o;33617:732::-;33736:3;33765:54;33813:5;33765:54;:::i;:::-;33835:86;33914:6;33909:3;33835:86;:::i;:::-;33828:93;;33945:56;33995:5;33945:56;:::i;:::-;34024:7;34055:1;34040:284;34065:6;34062:1;34059:13;34040:284;;;34141:6;34135:13;34168:63;34227:3;34212:13;34168:63;:::i;:::-;34161:70;;34254:60;34307:6;34254:60;:::i;:::-;34244:70;;34100:224;34087:1;34084;34080:9;34075:14;;34040:284;;;34044:14;34340:3;34333:10;;33741:608;;;33617:732;;;;:::o;34355:831::-;34618:4;34656:3;34645:9;34641:19;34633:27;;34670:71;34738:1;34727:9;34723:17;34714:6;34670:71;:::i;:::-;34751:80;34827:2;34816:9;34812:18;34803:6;34751:80;:::i;:::-;34878:9;34872:4;34868:20;34863:2;34852:9;34848:18;34841:48;34906:108;35009:4;35000:6;34906:108;:::i;:::-;34898:116;;35024:72;35092:2;35081:9;35077:18;35068:6;35024:72;:::i;:::-;35106:73;35174:3;35163:9;35159:19;35150:6;35106:73;:::i;:::-;34355:831;;;;;;;;:::o;35192:807::-;35441:4;35479:3;35468:9;35464:19;35456:27;;35493:71;35561:1;35550:9;35546:17;35537:6;35493:71;:::i;:::-;35574:72;35642:2;35631:9;35627:18;35618:6;35574:72;:::i;:::-;35656:80;35732:2;35721:9;35717:18;35708:6;35656:80;:::i;:::-;35746;35822:2;35811:9;35807:18;35798:6;35746:80;:::i;:::-;35836:73;35904:3;35893:9;35889:19;35880:6;35836:73;:::i;:::-;35919;35987:3;35976:9;35972:19;35963:6;35919:73;:::i;:::-;35192:807;;;;;;;;;:::o;36005:663::-;36093:6;36101;36109;36158:2;36146:9;36137:7;36133:23;36129:32;36126:119;;;36164:79;;:::i;:::-;36126:119;36284:1;36309:64;36365:7;36356:6;36345:9;36341:22;36309:64;:::i;:::-;36299:74;;36255:128;36422:2;36448:64;36504:7;36495:6;36484:9;36480:22;36448:64;:::i;:::-;36438:74;;36393:129;36561:2;36587:64;36643:7;36634:6;36623:9;36619:22;36587:64;:::i;:::-;36577:74;;36532:129;36005:663;;;;;:::o

Swarm Source

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