ETH Price: $2,513.88 (+0.26%)

Token

Calico Cat (CALIC)
 

Overview

Max Total Supply

1,000,000,000,000 CALIC

Holders

272

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.312014906341131249 CALIC

Value
$0.00
0x6fd957e81abe0e9920b7255fada828d03991059a
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CALIC

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-19
*/

/**

 ╔═╦═╦╗╔╦═╦═╗
 ║╠╣╩║╚╣║╠╣║║
 ╚═╩╩╩═╩╩═╩═╝
 
 Fwiends is time to rise! Is time that cat memes rule the intewnets!
 The ewa of the cats begins now! And it begins here!
 Call all your fwiends! 
 
 Twitter: https://twitter.com/calictoken
 Telegram: https://t.me/calicotoken
 Web: https://www.calicotoken.com


 */

// 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/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.0) (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;
    }
}

// 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/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: contracts/CALIC.sol


pragma solidity ^0.8.19;

interface IFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}







contract CALIC is ERC20, Ownable {
    IRouter public router;
    address public pair;
    bool public tradingEnabled = false;
    address private _creatorWallet = 0x7Bf3AC819D2349CF19Bf19828bC0007710f78b6B;
    address private _mvpWallet = 0xD6AAC31D355E79c3476EaC550Dc14719A7291c24;
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;
    mapping(address => bool) public exemptFee;
    uint256 public startBlock;
    bool private _isSwapping;

    constructor() ERC20("Calico Cat", "CALIC") Ownable(msg.sender) {
        uint256 initialSupply = 1000000000000 * 10 ** decimals();
        _mint(msg.sender, initialSupply); 

        router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        _approve(address(this), address(router), type(uint256).max);
        exemptFee[address(this)] = true;
        exemptFee[msg.sender] = true;
        exemptFee[_mvpWallet] = true;
        exemptFee[_creatorWallet] = true;
        exemptFee[deadWallet] = true;
        exemptFee[0xD152f549545093347A162Dce210e7293f1452150] = true; // disperse
        exemptFee[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // uniswap v2 locker
    }

    function setTradingEnabled() external onlyOwner {
        require(!tradingEnabled, "Trade is already enabled");
        tradingEnabled = true;
        startBlock = block.number;
    }

    function _getTaxRate() public view returns (uint256) {
        uint256 blockDelta = block.number - startBlock;
        if (blockDelta <= 2) return 8000;
        else if (blockDelta <= 6) return 4000;
        else if (blockDelta <= 12) return 2000;
        else return 69;
    }

    function getSwapTokensAtAmount() public view returns (uint256) {
        uint256 blockDelta = block.number - startBlock;

        if (blockDelta >= 12) {
            return (totalSupply() * 5) / 10000; // 0.05% of total supply
        } else {
            return 0;
        }
    }

    function _getMaxWalletSize() private view returns (uint256) {
        uint256 blockDelta = block.number - startBlock;

        if (blockDelta <= 12) {
            return (totalSupply() * 5) / 100;
        } else return totalSupply();
    }

    function getMaxWalletSize() public view returns (uint256) {
        return _getMaxWalletSize();
    }

    function addExemptFee(address _address) external onlyOwner {
        exemptFee[_address] = true;
    }

    function removeExemptFee(address _address) external onlyOwner {
        exemptFee[_address] = false;
    }

    function rescueETH() external {
        address payable ownerAddress = payable(owner());
        ownerAddress.transfer(address(this).balance);
    }


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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if (exemptFee[sender] || exemptFee[recipient]) {
            super._transfer(sender, recipient, amount);
        } else {
            require(tradingEnabled, "Trading is not enabled");
            uint256 maxWalletSize = _getMaxWalletSize();
            if (sender == pair) {
                require(
                    amount + balanceOf(recipient) <= maxWalletSize,
                    "Max wallet exceeded"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= getSwapTokensAtAmount();
            if (canSwap && !_isSwapping && sender != pair) {
                _isSwapping = true;
                _swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                payable(_creatorWallet).transfer(contractETHBalance / 2);
                payable(_mvpWallet).transfer(contractETHBalance / 2);
                _isSwapping = false;
            }
           
                uint256 taxRate = _getTaxRate();
                uint256 taxAmount = (amount * taxRate) / 10000;
                uint256 transferAmount = amount - taxAmount;
                super._transfer(sender, address(this), taxAmount);
                super._transfer(sender, recipient, transferAmount);
           
        }
    }

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

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

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"stateMutability":"payable","type":"receive"}]

60806040525f600760146101000a81548160ff021916908315150217905550737bf3ac819d2349cf19bf19828bc0007710f78b6b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d6aac31d355e79c3476eac550dc14719a7291c2460095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d2575f80fd5b50336040518060400160405280600a81526020017f43616c69636f20436174000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f43414c4943000000000000000000000000000000000000000000000000000000815250816003908162000151919062000f4c565b50806004908162000163919062000f4c565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001d9575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001d0919062001073565b60405180910390fd5b620001ea816200077d60201b60201c565b505f620001fc6200084060201b60201c565b600a6200020a919062001217565b64e8d4a510006200021c919062001267565b90506200023033826200084860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003159190620012e4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003c29190620012e4565b6040518363ffffffff1660e01b8152600401620003e192919062001314565b6020604051808303815f875af1158015620003fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004249190620012e4565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b73060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620008d260201b60201c565b6001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f73d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f73663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050620013e0565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008bb575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620008b2919062001073565b60405180910390fd5b620008ce5f8383620008ec60201b60201c565b5050565b620008e7838383600162000b1060201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000940578060025f8282546200093391906200133f565b9250508190555062000a11565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620009cc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620009c3939291906200138a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a5a578060025f828254039250508190555062000aa4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b039190620013c5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000b83575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000b7a919062001073565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000bf6575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000bed919062001073565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000ce2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000cd99190620013c5565b60405180910390a35b50505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d6457607f821691505b60208210810362000d7a5762000d7962000d1f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000dde7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000da1565b62000dea868362000da1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e3462000e2e62000e288462000e02565b62000e0b565b62000e02565b9050919050565b5f819050919050565b62000e4f8362000e14565b62000e6762000e5e8262000e3b565b84845462000dad565b825550505050565b5f90565b62000e7d62000e6f565b62000e8a81848462000e44565b505050565b5b8181101562000eb15762000ea55f8262000e73565b60018101905062000e90565b5050565b601f82111562000f005762000eca8162000d80565b62000ed58462000d92565b8101602085101562000ee5578190505b62000efd62000ef48562000d92565b83018262000e8f565b50505b505050565b5f82821c905092915050565b5f62000f225f198460080262000f05565b1980831691505092915050565b5f62000f3c838362000f11565b9150826002028217905092915050565b62000f578262000ce8565b67ffffffffffffffff81111562000f735762000f7262000cf2565b5b62000f7f825462000d4c565b62000f8c82828562000eb5565b5f60209050601f83116001811462000fc2575f841562000fad578287015190505b62000fb9858262000f2f565b86555062001028565b601f19841662000fd28662000d80565b5f5b8281101562000ffb5784890151825560018201915060208501945060208101905062000fd4565b868310156200101b578489015162001017601f89168262000f11565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200105b8262001030565b9050919050565b6200106d816200104f565b82525050565b5f602082019050620010885f83018462001062565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200111857808604811115620010f057620010ef6200108e565b5b6001851615620011005780820291505b80810290506200111085620010bb565b9450620010d0565b94509492505050565b5f8262001132576001905062001204565b8162001141575f905062001204565b81600181146200115a576002811462001165576200119b565b600191505062001204565b60ff8411156200117a57620011796200108e565b5b8360020a9150848211156200119457620011936200108e565b5b5062001204565b5060208310610133831016604e8410600b8410161715620011d55782820a905083811115620011cf57620011ce6200108e565b5b62001204565b620011e48484846001620010c7565b92509050818404811115620011fe57620011fd6200108e565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620012238262000e02565b915062001230836200120b565b92506200125f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001121565b905092915050565b5f620012738262000e02565b9150620012808362000e02565b9250828202620012908162000e02565b91508282048414831517620012aa57620012a96200108e565b5b5092915050565b5f80fd5b620012c0816200104f565b8114620012cb575f80fd5b50565b5f81519050620012de81620012b5565b92915050565b5f60208284031215620012fc57620012fb620012b1565b5b5f6200130b84828501620012ce565b91505092915050565b5f604082019050620013295f83018562001062565b62001338602083018462001062565b9392505050565b5f6200134b8262000e02565b9150620013588362000e02565b92508282019050808211156200137357620013726200108e565b5b92915050565b620013848162000e02565b82525050565b5f6060820190506200139f5f83018662001062565b620013ae602083018562001379565b620013bd604083018462001379565b949350505050565b5f602082019050620013da5f83018462001379565b92915050565b6123b680620013ee5f395ff3fe608060405260043610610169575f3560e01c80637d508ef2116100d0578063b2b49a4e11610089578063dd62ed3e11610063578063dd62ed3e14610514578063e156afd514610550578063f2fde38b14610566578063f887ea401461058e57610170565b8063b2b49a4e14610488578063c5d32bb2146104b0578063c7d532f5146104ec57610170565b80637d508ef21461037a57806385141a77146103a45780638da5cb5b146103ce57806395d89b41146103f8578063a8aa1b3114610422578063a9059cbb1461044c57610170565b806323b872dd1161012257806323b872dd1461026e578063313ce567146102aa57806348cd4cb1146102d45780634ada218b146102fe57806370a0823114610328578063715018a61461036457610170565b8063062276831461017457806306fdde031461019e578063095ea7b3146101c8578063163ab47f1461020457806318160ddd1461022e57806320800a001461025857610170565b3661017057005b5f80fd5b34801561017f575f80fd5b506101886105b8565b60405161019591906119b5565b60405180910390f35b3480156101a9575f80fd5b506101b26105c6565b6040516101bf9190611a58565b60405180910390f35b3480156101d3575f80fd5b506101ee60048036038101906101e99190611b00565b610656565b6040516101fb9190611b58565b60405180910390f35b34801561020f575f80fd5b50610218610678565b60405161022591906119b5565b60405180910390f35b348015610239575f80fd5b506102426106cc565b60405161024f91906119b5565b60405180910390f35b348015610263575f80fd5b5061026c6106d5565b005b348015610279575f80fd5b50610294600480360381019061028f9190611b71565b610727565b6040516102a19190611b58565b60405180910390f35b3480156102b5575f80fd5b506102be610755565b6040516102cb9190611bdc565b60405180910390f35b3480156102df575f80fd5b506102e861075d565b6040516102f591906119b5565b60405180910390f35b348015610309575f80fd5b50610312610763565b60405161031f9190611b58565b60405180910390f35b348015610333575f80fd5b5061034e60048036038101906103499190611bf5565b610776565b60405161035b91906119b5565b60405180910390f35b34801561036f575f80fd5b506103786107bb565b005b348015610385575f80fd5b5061038e6107ce565b60405161039b91906119b5565b60405180910390f35b3480156103af575f80fd5b506103b8610819565b6040516103c59190611c2f565b60405180910390f35b3480156103d9575f80fd5b506103e261081f565b6040516103ef9190611c2f565b60405180910390f35b348015610403575f80fd5b5061040c610847565b6040516104199190611a58565b60405180910390f35b34801561042d575f80fd5b506104366108d7565b6040516104439190611c2f565b60405180910390f35b348015610457575f80fd5b50610472600480360381019061046d9190611b00565b6108fc565b60405161047f9190611b58565b60405180910390f35b348015610493575f80fd5b506104ae60048036038101906104a99190611bf5565b610912565b005b3480156104bb575f80fd5b506104d660048036038101906104d19190611bf5565b610971565b6040516104e39190611b58565b60405180910390f35b3480156104f7575f80fd5b50610512600480360381019061050d9190611bf5565b61098e565b005b34801561051f575f80fd5b5061053a60048036038101906105359190611c48565b6109ee565b60405161054791906119b5565b60405180910390f35b34801561055b575f80fd5b50610564610a70565b005b348015610571575f80fd5b5061058c60048036038101906105879190611bf5565b610aec565b005b348015610599575f80fd5b506105a2610b70565b6040516105af9190611ce1565b60405180910390f35b5f6105c1610b95565b905090565b6060600380546105d590611d27565b80601f016020809104026020016040519081016040528092919081815260200182805461060190611d27565b801561064c5780601f106106235761010080835404028352916020019161064c565b820191905f5260205f20905b81548152906001019060200180831161062f57829003601f168201915b5050505050905090565b5f80610660610be6565b905061066d818585610bed565b600191505092915050565b5f80600b54436106889190611d84565b90506002811161069d57611f409150506106c9565b600681116106b057610fa09150506106c9565b600c81116106c3576107d09150506106c9565b60459150505b90565b5f600254905090565b5f6106de61081f565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610723573d5f803e3d5ffd5b5050565b5f80610731610be6565b905061073e858285610bff565b610749858585610c91565b60019150509392505050565b5f6012905090565b600b5481565b600760149054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107c3611171565b6107cc5f6111f8565b565b5f80600b54436107de9190611d84565b9050600c81106108115761271060056107f56106cc565b6107ff9190611db7565b6108099190611e25565b915050610816565b5f9150505b90565b61dead81565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461085690611d27565b80601f016020809104026020016040519081016040528092919081815260200182805461088290611d27565b80156108cd5780601f106108a4576101008083540402835291602001916108cd565b820191905f5260205f20905b8154815290600101906020018083116108b057829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610908338484610c91565b6001905092915050565b61091a611171565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b610996611171565b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610a78611171565b600760149054906101000a900460ff1615610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90611e9f565b60405180910390fd5b6001600760146101000a81548160ff02191690831515021790555043600b81905550565b610af4611171565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b64575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b5b9190611c2f565b60405180910390fd5b610b6d816111f8565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80600b5443610ba59190611d84565b9050600c8111610bd75760646005610bbb6106cc565b610bc59190611db7565b610bcf9190611e25565b915050610be3565b610bdf6106cc565b9150505b90565b5f33905090565b610bfa83838360016112bb565b505050565b5f610c0a84846109ee565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c8b5781811015610c7c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c7393929190611ebd565b60405180910390fd5b610c8a84848484035f6112bb565b5b50505050565b5f8111610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90611f62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890611ff0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da69061207e565b60405180910390fd5b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610e4a5750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15610e5f57610e5a83838361148a565b61116c565b600760149054906101000a900460ff16610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea5906120e6565b60405180910390fd5b5f610eb7610b95565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f645780610f1784610776565b83610f229190612104565b1115610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90612181565b60405180910390fd5b5b5f610f6e30610776565b90505f610f796107ce565b8210159050808015610f975750600c5f9054906101000a900460ff16155b8015610ff0575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15611119576001600c5f6101000a81548160ff0219169083151502179055506110188261157a565b5f47905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6002836110649190611e25565b90811502906040515f60405180830381858888f1935050505015801561108c573d5f803e3d5ffd5b5060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6002836110d59190611e25565b90811502906040515f60405180830381858888f193505050501580156110fd573d5f803e3d5ffd5b505f600c5f6101000a81548160ff021916908315150217905550505b5f611122610678565b90505f61271082876111349190611db7565b61113e9190611e25565b90505f818761114d9190611d84565b905061115a89308461148a565b61116589898361148a565b5050505050505b505050565b611179610be6565b73ffffffffffffffffffffffffffffffffffffffff1661119761081f565b73ffffffffffffffffffffffffffffffffffffffff16146111f6576111ba610be6565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111ed9190611c2f565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361132b575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016113229190611c2f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361139b575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113929190611c2f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611484578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161147b91906119b5565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114fa575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016114f19190611c2f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361156a575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016115619190611c2f565b60405180910390fd5b611575838383611784565b505050565b5f600267ffffffffffffffff8111156115965761159561219f565b5b6040519080825280602002602001820160405280156115c45781602001602082028036833780820191505090505b50905030815f815181106115db576115da6121cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561167f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a3919061220d565b816001815181106116b7576116b66121cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611753959493929190612328565b5f604051808303815f87803b15801561176a575f80fd5b505af115801561177c573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d4578060025f8282546117c89190612104565b925050819055506118a2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561185d578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161185493929190611ebd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e9578060025f8282540392505081905550611933565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161199091906119b5565b60405180910390a3505050565b5f819050919050565b6119af8161199d565b82525050565b5f6020820190506119c85f8301846119a6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a055780820151818401526020810190506119ea565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a2a826119ce565b611a3481856119d8565b9350611a448185602086016119e8565b611a4d81611a10565b840191505092915050565b5f6020820190508181035f830152611a708184611a20565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611aa582611a7c565b9050919050565b611ab581611a9b565b8114611abf575f80fd5b50565b5f81359050611ad081611aac565b92915050565b611adf8161199d565b8114611ae9575f80fd5b50565b5f81359050611afa81611ad6565b92915050565b5f8060408385031215611b1657611b15611a78565b5b5f611b2385828601611ac2565b9250506020611b3485828601611aec565b9150509250929050565b5f8115159050919050565b611b5281611b3e565b82525050565b5f602082019050611b6b5f830184611b49565b92915050565b5f805f60608486031215611b8857611b87611a78565b5b5f611b9586828701611ac2565b9350506020611ba686828701611ac2565b9250506040611bb786828701611aec565b9150509250925092565b5f60ff82169050919050565b611bd681611bc1565b82525050565b5f602082019050611bef5f830184611bcd565b92915050565b5f60208284031215611c0a57611c09611a78565b5b5f611c1784828501611ac2565b91505092915050565b611c2981611a9b565b82525050565b5f602082019050611c425f830184611c20565b92915050565b5f8060408385031215611c5e57611c5d611a78565b5b5f611c6b85828601611ac2565b9250506020611c7c85828601611ac2565b9150509250929050565b5f819050919050565b5f611ca9611ca4611c9f84611a7c565b611c86565b611a7c565b9050919050565b5f611cba82611c8f565b9050919050565b5f611ccb82611cb0565b9050919050565b611cdb81611cc1565b82525050565b5f602082019050611cf45f830184611cd2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d3e57607f821691505b602082108103611d5157611d50611cfa565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d8e8261199d565b9150611d998361199d565b9250828203905081811115611db157611db0611d57565b5b92915050565b5f611dc18261199d565b9150611dcc8361199d565b9250828202611dda8161199d565b91508282048414831517611df157611df0611d57565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e2f8261199d565b9150611e3a8361199d565b925082611e4a57611e49611df8565b5b828204905092915050565b7f547261646520697320616c726561647920656e61626c656400000000000000005f82015250565b5f611e896018836119d8565b9150611e9482611e55565b602082019050919050565b5f6020820190508181035f830152611eb681611e7d565b9050919050565b5f606082019050611ed05f830186611c20565b611edd60208301856119a6565b611eea60408301846119a6565b949350505050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f611f4c6029836119d8565b9150611f5782611ef2565b604082019050919050565b5f6020820190508181035f830152611f7981611f40565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611fda6025836119d8565b9150611fe582611f80565b604082019050919050565b5f6020820190508181035f83015261200781611fce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6120686023836119d8565b91506120738261200e565b604082019050919050565b5f6020820190508181035f8301526120958161205c565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f6120d06016836119d8565b91506120db8261209c565b602082019050919050565b5f6020820190508181035f8301526120fd816120c4565b9050919050565b5f61210e8261199d565b91506121198361199d565b925082820190508082111561213157612130611d57565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61216b6013836119d8565b915061217682612137565b602082019050919050565b5f6020820190508181035f8301526121988161215f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061220781611aac565b92915050565b5f6020828403121561222257612221611a78565b5b5f61222f848285016121f9565b91505092915050565b5f819050919050565b5f61225b61225661225184612238565b611c86565b61199d565b9050919050565b61226b81612241565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6122a381611a9b565b82525050565b5f6122b4838361229a565b60208301905092915050565b5f602082019050919050565b5f6122d682612271565b6122e0818561227b565b93506122eb8361228b565b805f5b8381101561231b57815161230288826122a9565b975061230d836122c0565b9250506001810190506122ee565b5085935050505092915050565b5f60a08201905061233b5f8301886119a6565b6123486020830187612262565b818103604083015261235a81866122cc565b90506123696060830185611c20565b61237660808301846119a6565b969550505050505056fea2646970667358221220af64d1f228f0c6912d625d44a435a19a5e475cba49ae99f82b7d6295353076fc64736f6c63430008170033

Deployed Bytecode

0x608060405260043610610169575f3560e01c80637d508ef2116100d0578063b2b49a4e11610089578063dd62ed3e11610063578063dd62ed3e14610514578063e156afd514610550578063f2fde38b14610566578063f887ea401461058e57610170565b8063b2b49a4e14610488578063c5d32bb2146104b0578063c7d532f5146104ec57610170565b80637d508ef21461037a57806385141a77146103a45780638da5cb5b146103ce57806395d89b41146103f8578063a8aa1b3114610422578063a9059cbb1461044c57610170565b806323b872dd1161012257806323b872dd1461026e578063313ce567146102aa57806348cd4cb1146102d45780634ada218b146102fe57806370a0823114610328578063715018a61461036457610170565b8063062276831461017457806306fdde031461019e578063095ea7b3146101c8578063163ab47f1461020457806318160ddd1461022e57806320800a001461025857610170565b3661017057005b5f80fd5b34801561017f575f80fd5b506101886105b8565b60405161019591906119b5565b60405180910390f35b3480156101a9575f80fd5b506101b26105c6565b6040516101bf9190611a58565b60405180910390f35b3480156101d3575f80fd5b506101ee60048036038101906101e99190611b00565b610656565b6040516101fb9190611b58565b60405180910390f35b34801561020f575f80fd5b50610218610678565b60405161022591906119b5565b60405180910390f35b348015610239575f80fd5b506102426106cc565b60405161024f91906119b5565b60405180910390f35b348015610263575f80fd5b5061026c6106d5565b005b348015610279575f80fd5b50610294600480360381019061028f9190611b71565b610727565b6040516102a19190611b58565b60405180910390f35b3480156102b5575f80fd5b506102be610755565b6040516102cb9190611bdc565b60405180910390f35b3480156102df575f80fd5b506102e861075d565b6040516102f591906119b5565b60405180910390f35b348015610309575f80fd5b50610312610763565b60405161031f9190611b58565b60405180910390f35b348015610333575f80fd5b5061034e60048036038101906103499190611bf5565b610776565b60405161035b91906119b5565b60405180910390f35b34801561036f575f80fd5b506103786107bb565b005b348015610385575f80fd5b5061038e6107ce565b60405161039b91906119b5565b60405180910390f35b3480156103af575f80fd5b506103b8610819565b6040516103c59190611c2f565b60405180910390f35b3480156103d9575f80fd5b506103e261081f565b6040516103ef9190611c2f565b60405180910390f35b348015610403575f80fd5b5061040c610847565b6040516104199190611a58565b60405180910390f35b34801561042d575f80fd5b506104366108d7565b6040516104439190611c2f565b60405180910390f35b348015610457575f80fd5b50610472600480360381019061046d9190611b00565b6108fc565b60405161047f9190611b58565b60405180910390f35b348015610493575f80fd5b506104ae60048036038101906104a99190611bf5565b610912565b005b3480156104bb575f80fd5b506104d660048036038101906104d19190611bf5565b610971565b6040516104e39190611b58565b60405180910390f35b3480156104f7575f80fd5b50610512600480360381019061050d9190611bf5565b61098e565b005b34801561051f575f80fd5b5061053a60048036038101906105359190611c48565b6109ee565b60405161054791906119b5565b60405180910390f35b34801561055b575f80fd5b50610564610a70565b005b348015610571575f80fd5b5061058c60048036038101906105879190611bf5565b610aec565b005b348015610599575f80fd5b506105a2610b70565b6040516105af9190611ce1565b60405180910390f35b5f6105c1610b95565b905090565b6060600380546105d590611d27565b80601f016020809104026020016040519081016040528092919081815260200182805461060190611d27565b801561064c5780601f106106235761010080835404028352916020019161064c565b820191905f5260205f20905b81548152906001019060200180831161062f57829003601f168201915b5050505050905090565b5f80610660610be6565b905061066d818585610bed565b600191505092915050565b5f80600b54436106889190611d84565b90506002811161069d57611f409150506106c9565b600681116106b057610fa09150506106c9565b600c81116106c3576107d09150506106c9565b60459150505b90565b5f600254905090565b5f6106de61081f565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610723573d5f803e3d5ffd5b5050565b5f80610731610be6565b905061073e858285610bff565b610749858585610c91565b60019150509392505050565b5f6012905090565b600b5481565b600760149054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107c3611171565b6107cc5f6111f8565b565b5f80600b54436107de9190611d84565b9050600c81106108115761271060056107f56106cc565b6107ff9190611db7565b6108099190611e25565b915050610816565b5f9150505b90565b61dead81565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461085690611d27565b80601f016020809104026020016040519081016040528092919081815260200182805461088290611d27565b80156108cd5780601f106108a4576101008083540402835291602001916108cd565b820191905f5260205f20905b8154815290600101906020018083116108b057829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610908338484610c91565b6001905092915050565b61091a611171565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b610996611171565b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610a78611171565b600760149054906101000a900460ff1615610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90611e9f565b60405180910390fd5b6001600760146101000a81548160ff02191690831515021790555043600b81905550565b610af4611171565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b64575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b5b9190611c2f565b60405180910390fd5b610b6d816111f8565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80600b5443610ba59190611d84565b9050600c8111610bd75760646005610bbb6106cc565b610bc59190611db7565b610bcf9190611e25565b915050610be3565b610bdf6106cc565b9150505b90565b5f33905090565b610bfa83838360016112bb565b505050565b5f610c0a84846109ee565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c8b5781811015610c7c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c7393929190611ebd565b60405180910390fd5b610c8a84848484035f6112bb565b5b50505050565b5f8111610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90611f62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890611ff0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da69061207e565b60405180910390fd5b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610e4a5750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15610e5f57610e5a83838361148a565b61116c565b600760149054906101000a900460ff16610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea5906120e6565b60405180910390fd5b5f610eb7610b95565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f645780610f1784610776565b83610f229190612104565b1115610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90612181565b60405180910390fd5b5b5f610f6e30610776565b90505f610f796107ce565b8210159050808015610f975750600c5f9054906101000a900460ff16155b8015610ff0575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15611119576001600c5f6101000a81548160ff0219169083151502179055506110188261157a565b5f47905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6002836110649190611e25565b90811502906040515f60405180830381858888f1935050505015801561108c573d5f803e3d5ffd5b5060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6002836110d59190611e25565b90811502906040515f60405180830381858888f193505050501580156110fd573d5f803e3d5ffd5b505f600c5f6101000a81548160ff021916908315150217905550505b5f611122610678565b90505f61271082876111349190611db7565b61113e9190611e25565b90505f818761114d9190611d84565b905061115a89308461148a565b61116589898361148a565b5050505050505b505050565b611179610be6565b73ffffffffffffffffffffffffffffffffffffffff1661119761081f565b73ffffffffffffffffffffffffffffffffffffffff16146111f6576111ba610be6565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111ed9190611c2f565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361132b575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016113229190611c2f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361139b575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113929190611c2f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611484578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161147b91906119b5565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114fa575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016114f19190611c2f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361156a575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016115619190611c2f565b60405180910390fd5b611575838383611784565b505050565b5f600267ffffffffffffffff8111156115965761159561219f565b5b6040519080825280602002602001820160405280156115c45781602001602082028036833780820191505090505b50905030815f815181106115db576115da6121cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561167f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a3919061220d565b816001815181106116b7576116b66121cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611753959493929190612328565b5f604051808303815f87803b15801561176a575f80fd5b505af115801561177c573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d4578060025f8282546117c89190612104565b925050819055506118a2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561185d578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161185493929190611ebd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e9578060025f8282540392505081905550611933565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161199091906119b5565b60405180910390a3505050565b5f819050919050565b6119af8161199d565b82525050565b5f6020820190506119c85f8301846119a6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a055780820151818401526020810190506119ea565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a2a826119ce565b611a3481856119d8565b9350611a448185602086016119e8565b611a4d81611a10565b840191505092915050565b5f6020820190508181035f830152611a708184611a20565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611aa582611a7c565b9050919050565b611ab581611a9b565b8114611abf575f80fd5b50565b5f81359050611ad081611aac565b92915050565b611adf8161199d565b8114611ae9575f80fd5b50565b5f81359050611afa81611ad6565b92915050565b5f8060408385031215611b1657611b15611a78565b5b5f611b2385828601611ac2565b9250506020611b3485828601611aec565b9150509250929050565b5f8115159050919050565b611b5281611b3e565b82525050565b5f602082019050611b6b5f830184611b49565b92915050565b5f805f60608486031215611b8857611b87611a78565b5b5f611b9586828701611ac2565b9350506020611ba686828701611ac2565b9250506040611bb786828701611aec565b9150509250925092565b5f60ff82169050919050565b611bd681611bc1565b82525050565b5f602082019050611bef5f830184611bcd565b92915050565b5f60208284031215611c0a57611c09611a78565b5b5f611c1784828501611ac2565b91505092915050565b611c2981611a9b565b82525050565b5f602082019050611c425f830184611c20565b92915050565b5f8060408385031215611c5e57611c5d611a78565b5b5f611c6b85828601611ac2565b9250506020611c7c85828601611ac2565b9150509250929050565b5f819050919050565b5f611ca9611ca4611c9f84611a7c565b611c86565b611a7c565b9050919050565b5f611cba82611c8f565b9050919050565b5f611ccb82611cb0565b9050919050565b611cdb81611cc1565b82525050565b5f602082019050611cf45f830184611cd2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d3e57607f821691505b602082108103611d5157611d50611cfa565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d8e8261199d565b9150611d998361199d565b9250828203905081811115611db157611db0611d57565b5b92915050565b5f611dc18261199d565b9150611dcc8361199d565b9250828202611dda8161199d565b91508282048414831517611df157611df0611d57565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e2f8261199d565b9150611e3a8361199d565b925082611e4a57611e49611df8565b5b828204905092915050565b7f547261646520697320616c726561647920656e61626c656400000000000000005f82015250565b5f611e896018836119d8565b9150611e9482611e55565b602082019050919050565b5f6020820190508181035f830152611eb681611e7d565b9050919050565b5f606082019050611ed05f830186611c20565b611edd60208301856119a6565b611eea60408301846119a6565b949350505050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f611f4c6029836119d8565b9150611f5782611ef2565b604082019050919050565b5f6020820190508181035f830152611f7981611f40565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611fda6025836119d8565b9150611fe582611f80565b604082019050919050565b5f6020820190508181035f83015261200781611fce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6120686023836119d8565b91506120738261200e565b604082019050919050565b5f6020820190508181035f8301526120958161205c565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f6120d06016836119d8565b91506120db8261209c565b602082019050919050565b5f6020820190508181035f8301526120fd816120c4565b9050919050565b5f61210e8261199d565b91506121198361199d565b925082820190508082111561213157612130611d57565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61216b6013836119d8565b915061217682612137565b602082019050919050565b5f6020820190508181035f8301526121988161215f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061220781611aac565b92915050565b5f6020828403121561222257612221611a78565b5b5f61222f848285016121f9565b91505092915050565b5f819050919050565b5f61225b61225661225184612238565b611c86565b61199d565b9050919050565b61226b81612241565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6122a381611a9b565b82525050565b5f6122b4838361229a565b60208301905092915050565b5f602082019050919050565b5f6122d682612271565b6122e0818561227b565b93506122eb8361228b565b805f5b8381101561231b57815161230288826122a9565b975061230d836122c0565b9250506001810190506122ee565b5085935050505092915050565b5f60a08201905061233b5f8301886119a6565b6123486020830187612262565b818103604083015261235a81866122cc565b90506123696060830185611c20565b61237660808301846119a6565b969550505050505056fea2646970667358221220af64d1f228f0c6912d625d44a435a19a5e475cba49ae99f82b7d6295353076fc64736f6c63430008170033

Deployed Bytecode Sourcemap

27020:5258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29391:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16776:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19069:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28550:283;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17878:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29730:151;;;;;;;;;;;;;:::i;:::-;;19837:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17729:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27458:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27114:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18040:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10389:103;;;;;;;;;;;;;:::i;:::-;;28841:289;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27315:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9714:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16986:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27088:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29891:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29614:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27410:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29502:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18608:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28355:187;;;;;;;;;;;;;:::i;:::-;;10647:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27060:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29391:103;29440:7;29467:19;:17;:19::i;:::-;29460:26;;29391:103;:::o;16776:91::-;16821:13;16854:5;16847:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:91;:::o;19069:190::-;19142:4;19159:13;19175:12;:10;:12::i;:::-;19159:28;;19198:31;19207:5;19214:7;19223:5;19198:8;:31::i;:::-;19247:4;19240:11;;;19069:190;;;;:::o;28550:283::-;28594:7;28614:18;28650:10;;28635:12;:25;;;;:::i;:::-;28614:46;;28689:1;28675:10;:15;28671:154;;28699:4;28692:11;;;;;28671:154;28737:1;28723:10;:15;28719:106;;28747:4;28740:11;;;;;28719:106;28785:2;28771:10;:16;28767:58;;28796:4;28789:11;;;;;28767:58;28823:2;28816:9;;;28550:283;;:::o;17878:99::-;17930:7;17957:12;;17950:19;;17878:99;:::o;29730:151::-;29771:28;29810:7;:5;:7::i;:::-;29771:47;;29829:12;:21;;:44;29851:21;29829:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29760:121;29730:151::o;19837:249::-;19924:4;19941:15;19959:12;:10;:12::i;:::-;19941:30;;19982:37;19998:4;20004:7;20013:5;19982:15;:37::i;:::-;20030:26;20040:4;20046:2;20050:5;20030:9;:26::i;:::-;20074:4;20067:11;;;19837:249;;;;;:::o;17729:84::-;17778:5;17803:2;17796:9;;17729:84;:::o;27458:25::-;;;;:::o;27114:34::-;;;;;;;;;;;;;:::o;18040:118::-;18105:7;18132:9;:18;18142:7;18132:18;;;;;;;;;;;;;;;;18125:25;;18040:118;;;:::o;10389:103::-;9600:13;:11;:13::i;:::-;10454:30:::1;10481:1;10454:18;:30::i;:::-;10389:103::o:0;28841:289::-;28895:7;28915:18;28951:10;;28936:12;:25;;;;:::i;:::-;28915:46;;28992:2;28978:10;:16;28974:149;;29040:5;29035:1;29019:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29018:27;;;;:::i;:::-;29011:34;;;;;28974:149;29110:1;29103:8;;;28841:289;;:::o;27315:88::-;27361:42;27315:88;:::o;9714:87::-;9760:7;9787:6;;;;;;;;;;;9780:13;;9714:87;:::o;16986:95::-;17033:13;17066:7;17059:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16986:95;:::o;27088:19::-;;;;;;;;;;;;;:::o;29891:190::-;29994:4;30011:40;30021:10;30033:9;30044:6;30011:9;:40::i;:::-;30069:4;30062:11;;29891:190;;;;:::o;29614:108::-;9600:13;:11;:13::i;:::-;29709:5:::1;29687:9;:19;29697:8;29687:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;29614:108:::0;:::o;27410:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;29502:104::-;9600:13;:11;:13::i;:::-;29594:4:::1;29572:9;:19;29582:8;29572:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;29502:104:::0;:::o;18608:142::-;18688:7;18715:11;:18;18727:5;18715:18;;;;;;;;;;;;;;;:27;18734:7;18715:27;;;;;;;;;;;;;;;;18708:34;;18608:142;;;;:::o;28355:187::-;9600:13;:11;:13::i;:::-;28423:14:::1;;;;;;;;;;;28422:15;28414:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;28494:4;28477:14;;:21;;;;;;;;;;;;;;;;;;28522:12;28509:10;:25;;;;28355:187::o:0;10647:220::-;9600:13;:11;:13::i;:::-;10752:1:::1;10732:22;;:8;:22;;::::0;10728:93:::1;;10806:1;10778:31;;;;;;;;;;;:::i;:::-;;;;;;;;10728:93;10831:28;10850:8;10831:18;:28::i;:::-;10647:220:::0;:::o;27060:21::-;;;;;;;;;;;;;:::o;29138:245::-;29189:7;29209:18;29245:10;;29230:12;:25;;;;:::i;:::-;29209:46;;29286:2;29272:10;:16;29268:107;;29334:3;29329:1;29313:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29312:25;;;;:::i;:::-;29305:32;;;;;29268:107;29362:13;:11;:13::i;:::-;29355:20;;;29138:245;;:::o;7830:98::-;7883:7;7910:10;7903:17;;7830:98;:::o;23906:130::-;23991:37;24000:5;24007:7;24016:5;24023:4;23991:8;:37::i;:::-;23906:130;;;:::o;25622:487::-;25722:24;25749:25;25759:5;25766:7;25749:9;:25::i;:::-;25722:52;;25809:17;25789:16;:37;25785:317;;25866:5;25847:16;:24;25843:132;;;25926:7;25935:16;25953:5;25899:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25843:132;26018:57;26027:5;26034:7;26062:5;26043:16;:24;26069:5;26018:8;:57::i;:::-;25785:317;25711:398;25622:487;;;:::o;30089:1758::-;30239:1;30230:6;:10;30222:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30323:1;30305:20;;:6;:20;;;30297:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30407:1;30386:23;;:9;:23;;;30378:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30466:9;:17;30476:6;30466:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;30487:9;:20;30497:9;30487:20;;;;;;;;;;;;;;;;;;;;;;;;;30466:41;30462:1378;;;30524:42;30540:6;30548:9;30559:6;30524:15;:42::i;:::-;30462:1378;;;30607:14;;;;;;;;;;;30599:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30663:21;30687:19;:17;:19::i;:::-;30663:43;;30735:4;;;;;;;;;;;30725:14;;:6;:14;;;30721:194;;30823:13;30799:20;30809:9;30799;:20::i;:::-;30790:6;:29;;;;:::i;:::-;:46;;30760:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;30721:194;30931:28;30962:24;30980:4;30962:9;:24::i;:::-;30931:55;;31001:12;31040:23;:21;:23::i;:::-;31016:20;:47;;31001:62;;31082:7;:23;;;;;31094:11;;;;;;;;;;;31093:12;31082:23;:41;;;;;31119:4;;;;;;;;;;;31109:14;;:6;:14;;;;31082:41;31078:411;;;31158:4;31144:11;;:18;;;;;;;;;;;;;;;;;;31181:39;31199:20;31181:17;:39::i;:::-;31239:26;31268:21;31239:50;;31316:14;;;;;;;;;;;31308:32;;:56;31362:1;31341:18;:22;;;;:::i;:::-;31308:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31391:10;;;;;;;;;;;31383:28;;:52;31433:1;31412:18;:22;;;;:::i;:::-;31383:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31468:5;31454:11;;:19;;;;;;;;;;;;;;;;;;31125:364;31078:411;31520:15;31538:13;:11;:13::i;:::-;31520:31;;31570:17;31611:5;31600:7;31591:6;:16;;;;:::i;:::-;31590:26;;;;:::i;:::-;31570:46;;31635:22;31669:9;31660:6;:18;;;;:::i;:::-;31635:43;;31697:49;31713:6;31729:4;31736:9;31697:15;:49::i;:::-;31765:50;31781:6;31789:9;31800:14;31765:15;:50::i;:::-;30584:1256;;;;;;30462:1378;30089:1758;;;:::o;9879:166::-;9950:12;:10;:12::i;:::-;9939:23;;:7;:5;:7::i;:::-;:23;;;9935:103;;10013:12;:10;:12::i;:::-;9986:40;;;;;;;;;;;:::i;:::-;;;;;;;;9935:103;9879:166::o;11027:191::-;11101:16;11120:6;;;;;;;;;;;11101:25;;11146:8;11137:6;;:17;;;;;;;;;;;;;;;;;;11201:8;11170:40;;11191:8;11170:40;;;;;;;;;;;;11090:128;11027:191;:::o;24887:443::-;25017:1;25000:19;;:5;:19;;;24996:91;;25072:1;25043:32;;;;;;;;;;;:::i;:::-;;;;;;;;24996:91;25120:1;25101:21;;:7;:21;;;25097:92;;25174:1;25146:31;;;;;;;;;;;:::i;:::-;;;;;;;;25097:92;25229:5;25199:11;:18;25211:5;25199:18;;;;;;;;;;;;;;;:27;25218:7;25199:27;;;;;;;;;;;;;;;:35;;;;25249:9;25245:78;;;25296:7;25280:31;;25289:5;25280:31;;;25305:5;25280:31;;;;;;:::i;:::-;;;;;;;;25245:78;24887:443;;;;:::o;20471:318::-;20581:1;20565:18;;:4;:18;;;20561:88;;20634:1;20607:30;;;;;;;;;;;:::i;:::-;;;;;;;;20561:88;20677:1;20663:16;;:2;:16;;;20659:88;;20732:1;20703:32;;;;;;;;;;;:::i;:::-;;;;;;;;20659:88;20757:24;20765:4;20771:2;20775:5;20757:7;:24::i;:::-;20471:318;;;:::o;31855:383::-;31922:21;31960:1;31946:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31922:40;;31991:4;31973;31978:1;31973:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32017:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32007:4;32012:1;32007:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32043:6;;;;;;;;;;;:57;;;32115:11;32141:1;32157:4;32184;32204:15;32043:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31911:327;31855:383;:::o;21113:1135::-;21219:1;21203:18;;:4;:18;;;21199:552;;21357:5;21341:12;;:21;;;;;;;:::i;:::-;;;;;;;;21199:552;;;21395:19;21417:9;:15;21427:4;21417:15;;;;;;;;;;;;;;;;21395:37;;21465:5;21451:11;:19;21447:117;;;21523:4;21529:11;21542:5;21498:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21447:117;21719:5;21705:11;:19;21687:9;:15;21697:4;21687:15;;;;;;;;;;;;;;;:37;;;;21380:371;21199:552;21781:1;21767:16;;:2;:16;;;21763:435;;21949:5;21933:12;;:21;;;;;;;;;;;21763:435;;;22166:5;22149:9;:13;22159:2;22149:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21763:435;22230:2;22215:25;;22224:4;22215:25;;;22234:5;22215:25;;;;;;:::i;:::-;;;;;;;;21113:1135;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:474::-;5608:6;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;5540:474;;;;;:::o;6020:60::-;6048:3;6069:5;6062:12;;6020:60;;;:::o;6086:142::-;6136:9;6169:53;6187:34;6196:24;6214:5;6196:24;:::i;:::-;6187:34;:::i;:::-;6169:53;:::i;:::-;6156:66;;6086:142;;;:::o;6234:126::-;6284:9;6317:37;6348:5;6317:37;:::i;:::-;6304:50;;6234:126;;;:::o;6366:141::-;6431:9;6464:37;6495:5;6464:37;:::i;:::-;6451:50;;6366:141;;;:::o;6513:161::-;6615:52;6661:5;6615:52;:::i;:::-;6610:3;6603:65;6513:161;;:::o;6680:252::-;6788:4;6826:2;6815:9;6811:18;6803:26;;6839:86;6922:1;6911:9;6907:17;6898:6;6839:86;:::i;:::-;6680:252;;;;:::o;6938:180::-;6986:77;6983:1;6976:88;7083:4;7080:1;7073:15;7107:4;7104:1;7097:15;7124:320;7168:6;7205:1;7199:4;7195:12;7185:22;;7252:1;7246:4;7242:12;7273:18;7263:81;;7329:4;7321:6;7317:17;7307:27;;7263:81;7391:2;7383:6;7380:14;7360:18;7357:38;7354:84;;7410:18;;:::i;:::-;7354:84;7175:269;7124:320;;;:::o;7450:180::-;7498:77;7495:1;7488:88;7595:4;7592:1;7585:15;7619:4;7616:1;7609:15;7636:194;7676:4;7696:20;7714:1;7696:20;:::i;:::-;7691:25;;7730:20;7748:1;7730:20;:::i;:::-;7725:25;;7774:1;7771;7767:9;7759:17;;7798:1;7792:4;7789:11;7786:37;;;7803:18;;:::i;:::-;7786:37;7636:194;;;;:::o;7836:410::-;7876:7;7899:20;7917:1;7899:20;:::i;:::-;7894:25;;7933:20;7951:1;7933:20;:::i;:::-;7928:25;;7988:1;7985;7981:9;8010:30;8028:11;8010:30;:::i;:::-;7999:41;;8189:1;8180:7;8176:15;8173:1;8170:22;8150:1;8143:9;8123:83;8100:139;;8219:18;;:::i;:::-;8100:139;7884:362;7836:410;;;;:::o;8252:180::-;8300:77;8297:1;8290:88;8397:4;8394:1;8387:15;8421:4;8418:1;8411:15;8438:185;8478:1;8495:20;8513:1;8495:20;:::i;:::-;8490:25;;8529:20;8547:1;8529:20;:::i;:::-;8524:25;;8568:1;8558:35;;8573:18;;:::i;:::-;8558:35;8615:1;8612;8608:9;8603:14;;8438:185;;;;:::o;8629:174::-;8769:26;8765:1;8757:6;8753:14;8746:50;8629:174;:::o;8809:366::-;8951:3;8972:67;9036:2;9031:3;8972:67;:::i;:::-;8965:74;;9048:93;9137:3;9048:93;:::i;:::-;9166:2;9161:3;9157:12;9150:19;;8809:366;;;:::o;9181:419::-;9347:4;9385:2;9374:9;9370:18;9362:26;;9434:9;9428:4;9424:20;9420:1;9409:9;9405:17;9398:47;9462:131;9588:4;9462:131;:::i;:::-;9454:139;;9181:419;;;:::o;9606:442::-;9755:4;9793:2;9782:9;9778:18;9770:26;;9806:71;9874:1;9863:9;9859:17;9850:6;9806:71;:::i;:::-;9887:72;9955:2;9944:9;9940:18;9931:6;9887:72;:::i;:::-;9969;10037:2;10026:9;10022:18;10013:6;9969:72;:::i;:::-;9606:442;;;;;;:::o;10054:228::-;10194:34;10190:1;10182:6;10178:14;10171:58;10263:11;10258:2;10250:6;10246:15;10239:36;10054:228;:::o;10288:366::-;10430:3;10451:67;10515:2;10510:3;10451:67;:::i;:::-;10444:74;;10527:93;10616:3;10527:93;:::i;:::-;10645:2;10640:3;10636:12;10629:19;;10288:366;;;:::o;10660:419::-;10826:4;10864:2;10853:9;10849:18;10841:26;;10913:9;10907:4;10903:20;10899:1;10888:9;10884:17;10877:47;10941:131;11067:4;10941:131;:::i;:::-;10933:139;;10660:419;;;:::o;11085:224::-;11225:34;11221:1;11213:6;11209:14;11202:58;11294:7;11289:2;11281:6;11277:15;11270:32;11085:224;:::o;11315:366::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:419::-;11853:4;11891:2;11880:9;11876:18;11868:26;;11940:9;11934:4;11930:20;11926:1;11915:9;11911:17;11904:47;11968:131;12094:4;11968:131;:::i;:::-;11960:139;;11687:419;;;:::o;12112:222::-;12252:34;12248:1;12240:6;12236:14;12229:58;12321:5;12316:2;12308:6;12304:15;12297:30;12112:222;:::o;12340:366::-;12482:3;12503:67;12567:2;12562:3;12503:67;:::i;:::-;12496:74;;12579:93;12668:3;12579:93;:::i;:::-;12697:2;12692:3;12688:12;12681:19;;12340:366;;;:::o;12712:419::-;12878:4;12916:2;12905:9;12901:18;12893:26;;12965:9;12959:4;12955:20;12951:1;12940:9;12936:17;12929:47;12993:131;13119:4;12993:131;:::i;:::-;12985:139;;12712:419;;;:::o;13137:172::-;13277:24;13273:1;13265:6;13261:14;13254:48;13137:172;:::o;13315:366::-;13457:3;13478:67;13542:2;13537:3;13478:67;:::i;:::-;13471:74;;13554:93;13643:3;13554:93;:::i;:::-;13672:2;13667:3;13663:12;13656:19;;13315:366;;;:::o;13687:419::-;13853:4;13891:2;13880:9;13876:18;13868:26;;13940:9;13934:4;13930:20;13926:1;13915:9;13911:17;13904:47;13968:131;14094:4;13968:131;:::i;:::-;13960:139;;13687:419;;;:::o;14112:191::-;14152:3;14171:20;14189:1;14171:20;:::i;:::-;14166:25;;14205:20;14223:1;14205:20;:::i;:::-;14200:25;;14248:1;14245;14241:9;14234:16;;14269:3;14266:1;14263:10;14260:36;;;14276:18;;:::i;:::-;14260:36;14112:191;;;;:::o;14309:169::-;14449:21;14445:1;14437:6;14433:14;14426:45;14309:169;:::o;14484:366::-;14626:3;14647:67;14711:2;14706:3;14647:67;:::i;:::-;14640:74;;14723:93;14812:3;14723:93;:::i;:::-;14841:2;14836:3;14832:12;14825:19;;14484:366;;;:::o;14856:419::-;15022:4;15060:2;15049:9;15045:18;15037:26;;15109:9;15103:4;15099:20;15095:1;15084:9;15080:17;15073:47;15137:131;15263:4;15137:131;:::i;:::-;15129:139;;14856:419;;;:::o;15281:180::-;15329:77;15326:1;15319:88;15426:4;15423:1;15416:15;15450:4;15447:1;15440:15;15467:180;15515:77;15512:1;15505:88;15612:4;15609:1;15602:15;15636:4;15633:1;15626:15;15653:143;15710:5;15741:6;15735:13;15726:22;;15757:33;15784:5;15757:33;:::i;:::-;15653:143;;;;:::o;15802:351::-;15872:6;15921:2;15909:9;15900:7;15896:23;15892:32;15889:119;;;15927:79;;:::i;:::-;15889:119;16047:1;16072:64;16128:7;16119:6;16108:9;16104:22;16072:64;:::i;:::-;16062:74;;16018:128;15802:351;;;;:::o;16159:85::-;16204:7;16233:5;16222:16;;16159:85;;;:::o;16250:158::-;16308:9;16341:61;16359:42;16368:32;16394:5;16368:32;:::i;:::-;16359:42;:::i;:::-;16341:61;:::i;:::-;16328:74;;16250:158;;;:::o;16414:147::-;16509:45;16548:5;16509:45;:::i;:::-;16504:3;16497:58;16414:147;;:::o;16567:114::-;16634:6;16668:5;16662:12;16652:22;;16567:114;;;:::o;16687:184::-;16786:11;16820:6;16815:3;16808:19;16860:4;16855:3;16851:14;16836:29;;16687:184;;;;:::o;16877:132::-;16944:4;16967:3;16959:11;;16997:4;16992:3;16988:14;16980:22;;16877:132;;;:::o;17015:108::-;17092:24;17110:5;17092:24;:::i;:::-;17087:3;17080:37;17015:108;;:::o;17129:179::-;17198:10;17219:46;17261:3;17253:6;17219:46;:::i;:::-;17297:4;17292:3;17288:14;17274:28;;17129:179;;;;:::o;17314:113::-;17384:4;17416;17411:3;17407:14;17399:22;;17314:113;;;:::o;17463:732::-;17582:3;17611:54;17659:5;17611:54;:::i;:::-;17681:86;17760:6;17755:3;17681:86;:::i;:::-;17674:93;;17791:56;17841:5;17791:56;:::i;:::-;17870:7;17901:1;17886:284;17911:6;17908:1;17905:13;17886:284;;;17987:6;17981:13;18014:63;18073:3;18058:13;18014:63;:::i;:::-;18007:70;;18100:60;18153:6;18100:60;:::i;:::-;18090:70;;17946:224;17933:1;17930;17926:9;17921:14;;17886:284;;;17890:14;18186:3;18179:10;;17587:608;;;17463:732;;;;:::o;18201:831::-;18464:4;18502:3;18491:9;18487:19;18479:27;;18516:71;18584:1;18573:9;18569:17;18560:6;18516:71;:::i;:::-;18597:80;18673:2;18662:9;18658:18;18649:6;18597:80;:::i;:::-;18724:9;18718:4;18714:20;18709:2;18698:9;18694:18;18687:48;18752:108;18855:4;18846:6;18752:108;:::i;:::-;18744:116;;18870:72;18938:2;18927:9;18923:18;18914:6;18870:72;:::i;:::-;18952:73;19020:3;19009:9;19005:19;18996:6;18952:73;:::i;:::-;18201:831;;;;;;;;:::o

Swarm Source

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