ETH Price: $2,838.87 (-3.40%)
 

Overview

Max Total Supply

968,000,000 TA

Holders

13,073

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
sbonft.base.eth
Balance
21.1 TA

Value
$0.00
0x50efa2617145391ba7eaf383821384c1e7f4fba3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Trusta

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2025-07-01
*/

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


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

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 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/utils/Context.sol


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

pragma solidity ^0.8.20;

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

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

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

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


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

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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 ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-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 ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v5.3.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 ERC-20
 * applications.
 */
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}.
     *
     * Both 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}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 {
        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:
     *
     * ```solidity
     * 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: @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: Trusta.sol


pragma solidity ^0.8.20;



contract Trusta is ERC20, Ownable {
    uint256 public maxSupply = 1_000_000_000 * 1e18;
        uint256 public transferFee; // in tokens
            bool public transferPaused = false;
                mapping(address => bool) public isTransferPausedFor;

                    mapping(address => bool) public isOwner;
                        string public metadataURI;
                            string public info;
                                address public proxyAddress;

                                    // Public Sale variables
                                        bool public publicSaleActive = false;
                                            uint256 public publicSalePrice = 0.0001 ether; // per token
                                                uint256 public publicSaleAmount = 0;

                                                    constructor() ERC20("Trusta", "TA") Ownable(msg.sender) {
                                                            _mint(msg.sender, 68_000_000 * 1e18); // initial supply
                                                                    isOwner[msg.sender] = true;
                                                                        }

                                                                            modifier onlyOwners() {
                                                                                    require(isOwner[msg.sender], "Not authorized");
                                                                                            _;
                                                                                                }

                                                                                                    function updateInfo(string memory newInfo) external onlyOwners {
                                                                                                            info = newInfo;
                                                                                                                }

                                                                                                                    function updateMetadata(string memory newURI) external onlyOwners {
                                                                                                                            metadataURI = newURI;
                                                                                                                                }

                                                                                                                                    function updateProxy(address newProxy) external onlyOwners {
                                                                                                                                            proxyAddress = newProxy;
                                                                                                                                                }

                                                                                                                                                    function addOwner(address newOwner) external onlyOwner {
                                                                                                                                                            isOwner[newOwner] = true;
                                                                                                                                                                }

                                                                                                                                                                    function setTransferFee(uint256 feeAmount) external onlyOwners {
                                                                                                                                                                            transferFee = feeAmount;
                                                                                                                                                                                }

                                                                                                                                                                                    function setPauseTransfer(bool paused) external onlyOwners {
                                                                                                                                                                                            transferPaused = paused;
                                                                                                                                                                                                }

                                                                                                                                                                                                    function setAddressPauseTransfer(address user, bool status) external onlyOwners {
                                                                                                                                                                                                            isTransferPausedFor[user] = status;
                                                                                                                                                                                                                }

                                                                                                                                                                                                                    function setMint(address to, uint256 amount) external onlyOwners {
                                                                                                                                                                                                                            require(totalSupply() + amount <= maxSupply, "Exceeds max supply");
                                                                                                                                                                                                                                    _mint(to, amount);
                                                                                                                                                                                                                                        }

                                                                                                                                                                                                                                            function topUpPublicSale(uint256 amount) external onlyOwners {
                                                                                                                                                                                                                                                    require(totalSupply() + amount <= maxSupply, "Exceeds max supply");
                                                                                                                                                                                                                                                            _mint(address(this), amount);
                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                    function setPublicSalePrice(uint256 newPrice) external onlyOwners {
                                                                                                                                                                                                                                                                            publicSalePrice = newPrice;
                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                    function setPublicSaleAmount(uint256 amount) external onlyOwners {
                                                                                                                                                                                                                                                                                            publicSaleAmount = amount;
                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                    function togglePublicSale(bool status) external onlyOwners {
                                                                                                                                                                                                                                                                                                            publicSaleActive = status;
                                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                                    function buyPublicSale() external payable {
                                                                                                                                                                                                                                                                                                                            require(publicSaleActive, "Sale not active");
                                                                                                                                                                                                                                                                                                                                    uint256 tokensToBuy = (msg.value * 1e18) / publicSalePrice;
                                                                                                                                                                                                                                                                                                                                            require(tokensToBuy <= publicSaleAmount, "Not enough tokens");

                                                                                                                                                                                                                                                                                                                                                    publicSaleAmount -= tokensToBuy;
                                                                                                                                                                                                                                                                                                                                                            _transfer(address(this), msg.sender, tokensToBuy);
                                                                                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                                                                                    function withdraw() external onlyOwners {
                                                                                                                                                                                                                                                                                                                                                                            payable(owner()).transfer(address(this).balance);
                                                                                                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                                                                                                    function _update(address from, address to, uint256 value) internal override {
                                                                                                                                                                                                                                                                                                                                                                                            require(!transferPaused, "Transfers are paused");
                                                                                                                                                                                                                                                                                                                                                                                                    require(!isTransferPausedFor[from], "Sender is paused");

                                                                                                                                                                                                                                                                                                                                                                                                            if (transferFee > 0 && from != address(0) && from != owner()) {
                                                                                                                                                                                                                                                                                                                                                                                                                        uint256 fee = transferFee;
                                                                                                                                                                                                                                                                                                                                                                                                                                    require(value > fee, "Amount too small");
                                                                                                                                                                                                                                                                                                                                                                                                                                                super._update(from, address(this), fee);
                                                                                                                                                                                                                                                                                                                                                                                                                                                            value -= fee;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            super._update(from, to, value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    receive() external payable {}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    }

Contract Security Audit

Contract ABI

API
[{"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"addOwner","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":"buyPublicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"info","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTransferPausedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"proxyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAddressPauseTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPauseTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPublicSaleAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPublicSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"topUpPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newInfo","type":"string"}],"name":"updateInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"updateMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProxy","type":"address"}],"name":"updateProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b033b2e3c9fd0803ce80000006006556008805460ff19169055600d805460ff60a01b19169055655af3107a4000600e555f600f5534801562000045575f80fd5b50336040518060400160405280600681526020016554727573746160d01b81525060405180604001604052806002815260200161544160f01b8152508160039081620000929190620004d3565b506004620000a18282620004d3565b5050506001600160a01b038116620000d357604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620000de8162000115565b50620000f6336a383f8f62ee6f1ec400000062000166565b335f908152600a60205260409020805460ff19166001179055620005e1565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620001915760405163ec442f0560e01b81525f6004820152602401620000ca565b6200019e5f8383620001a2565b5050565b60085460ff1615620001f75760405162461bcd60e51b815260206004820152601460248201527f5472616e736665727320617265207061757365640000000000000000000000006044820152606401620000ca565b6001600160a01b0383165f9081526009602052604090205460ff1615620002545760405162461bcd60e51b815260206004820152601060248201526f14d95b99195c881a5cc81c185d5cd95960821b6044820152606401620000ca565b5f6007541180156200026e57506001600160a01b03831615155b80156200028957506005546001600160a01b03848116911614155b15620002f357600754808211620002d65760405162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b6044820152606401620000ca565b620002e384308362000305565b620002ef8183620005af565b9150505b6200030083838362000305565b505050565b6001600160a01b03831662000333578060025f828254620003279190620005cb565b90915550620003a59050565b6001600160a01b0383165f9081526020819052604090205481811015620003875760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000ca565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216620003c357600280548290039055620003e1565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200042791815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200045d57607f821691505b6020821081036200047c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000300575f81815260208120601f850160051c81016020861015620004aa5750805b601f850160051c820191505b81811015620004cb57828155600101620004b6565b505050505050565b81516001600160401b03811115620004ef57620004ef62000434565b620005078162000500845462000448565b8462000482565b602080601f8311600181146200053d575f8415620005255750858301515b5f19600386901b1c1916600185901b178555620004cb565b5f85815260208120601f198616915b828110156200056d578886015182559484019460019091019084016200054c565b50858210156200058b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620005c557620005c56200059b565b92915050565b80820180821115620005c557620005c56200059b565b61167280620005ef5f395ff3fe608060405260043610610214575f3560e01c80638da5cb5b1161011e578063ab29511b116100a8578063ed2d03fe1161006d578063ed2d03fe14610601578063f2fde38b14610620578063f95843a31461063f578063fb2cb34e1461066d578063fd4d43c514610686575f80fd5b8063ab29511b14610554578063acb2ad6f14610573578063bc8893b414610588578063d5abeb01146105a8578063dd62ed3e146105bd575f80fd5b80639b6860c8116100ee5780639b6860c8146104da5780639c4a4b8c146104ef5780639e955149146104f7578063a56de01914610516578063a9059cbb14610535575f80fd5b80638da5cb5b1461046b5780638f02bb5b14610488578063918b5be1146104a757806395d89b41146104c6575f80fd5b8063370158ea1161019f57806370a082311161016f57806370a08231146103d0578063715018a614610404578063791a2519146104185780638985abc8146104375780638c3cefa31461044c575f80fd5b8063370158ea1461036a5780633ccfd60b1461037e5780635c2bf58e146103925780637065cb48146103b1575f80fd5b806318160ddd116101e557806318160ddd146102ad57806323b872dd146102cb57806323f5c02d146102ea5780632f54bf6e14610321578063313ce5671461034f575f80fd5b80626950231461021f57806303ee438c1461024057806306fdde031461026a578063095ea7b31461027e575f80fd5b3661021b57005b5f80fd5b34801561022a575f80fd5b5061023e610239366004611225565b6106a5565b005b34801561024b575f80fd5b506102546106e1565b604051610261919061123c565b60405180910390f35b348015610275575f80fd5b5061025461076d565b348015610289575f80fd5b5061029d6102983660046112a2565b6107fd565b6040519015158152602001610261565b3480156102b8575f80fd5b506002545b604051908152602001610261565b3480156102d6575f80fd5b5061029d6102e53660046112ca565b610816565b3480156102f5575f80fd5b50600d54610309906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032c575f80fd5b5061029d61033b366004611303565b600a6020525f908152604090205460ff1681565b34801561035a575f80fd5b5060405160128152602001610261565b348015610375575f80fd5b50610254610839565b348015610389575f80fd5b5061023e610846565b34801561039d575f80fd5b5061023e6103ac366004611332565b6108ad565b3480156103bc575f80fd5b5061023e6103cb366004611303565b6108ee565b3480156103db575f80fd5b506102bd6103ea366004611303565b6001600160a01b03165f9081526020819052604090205490565b34801561040f575f80fd5b5061023e610919565b348015610423575f80fd5b5061023e610432366004611225565b61092c565b348015610442575f80fd5b506102bd600f5481565b348015610457575f80fd5b5061023e610466366004611332565b61095f565b348015610476575f80fd5b506005546001600160a01b0316610309565b348015610493575f80fd5b5061023e6104a2366004611225565b6109ab565b3480156104b2575f80fd5b5061023e6104c136600461135f565b6109de565b3480156104d1575f80fd5b50610254610a1c565b3480156104e5575f80fd5b506102bd600e5481565b61023e610a2b565b348015610502575f80fd5b5061023e610511366004611303565b610b01565b348015610521575f80fd5b5061023e61053036600461140a565b610b51565b348015610540575f80fd5b5061029d61054f3660046112a2565b610ba9565b34801561055f575f80fd5b5061023e61056e36600461135f565b610bb6565b34801561057e575f80fd5b506102bd60075481565b348015610593575f80fd5b50600d5461029d90600160a01b900460ff1681565b3480156105b3575f80fd5b506102bd60065481565b3480156105c8575f80fd5b506102bd6105d736600461143b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561060c575f80fd5b5061023e61061b366004611225565b610bf0565b34801561062b575f80fd5b5061023e61063a366004611303565b610c82565b34801561064a575f80fd5b5061029d610659366004611303565b60096020525f908152604090205460ff1681565b348015610678575f80fd5b5060085461029d9060ff1681565b348015610691575f80fd5b5061023e6106a03660046112a2565b610cbc565b335f908152600a602052604090205460ff166106dc5760405162461bcd60e51b81526004016106d390611463565b60405180910390fd5b600f55565b600b80546106ee9061148b565b80601f016020809104026020016040519081016040528092919081815260200182805461071a9061148b565b80156107655780601f1061073c57610100808354040283529160200191610765565b820191905f5260205f20905b81548152906001019060200180831161074857829003601f168201915b505050505081565b60606003805461077c9061148b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a89061148b565b80156107f35780601f106107ca576101008083540402835291602001916107f3565b820191905f5260205f20905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b5f3361080a818585610d4e565b60019150505b92915050565b5f33610823858285610d60565b61082e858585610ddc565b506001949350505050565b600c80546106ee9061148b565b335f908152600a602052604090205460ff166108745760405162461bcd60e51b81526004016106d390611463565b6005546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156108aa573d5f803e3d5ffd5b50565b335f908152600a602052604090205460ff166108db5760405162461bcd60e51b81526004016106d390611463565b6008805460ff1916911515919091179055565b6108f6610e39565b6001600160a01b03165f908152600a60205260409020805460ff19166001179055565b610921610e39565b61092a5f610e66565b565b335f908152600a602052604090205460ff1661095a5760405162461bcd60e51b81526004016106d390611463565b600e55565b335f908152600a602052604090205460ff1661098d5760405162461bcd60e51b81526004016106d390611463565b600d8054911515600160a01b0260ff60a01b19909216919091179055565b335f908152600a602052604090205460ff166109d95760405162461bcd60e51b81526004016106d390611463565b600755565b335f908152600a602052604090205460ff16610a0c5760405162461bcd60e51b81526004016106d390611463565b600b610a188282611510565b5050565b60606004805461077c9061148b565b600d54600160a01b900460ff16610a765760405162461bcd60e51b815260206004820152600f60248201526e53616c65206e6f742061637469766560881b60448201526064016106d3565b600e545f90610a8d34670de0b6b3a76400006115e0565b610a9791906115f7565b9050600f54811115610adf5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b60448201526064016106d3565b80600f5f828254610af09190611616565b909155506108aa9050303383610ddc565b335f908152600a602052604090205460ff16610b2f5760405162461bcd60e51b81526004016106d390611463565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b335f908152600a602052604090205460ff16610b7f5760405162461bcd60e51b81526004016106d390611463565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f3361080a818585610ddc565b335f908152600a602052604090205460ff16610be45760405162461bcd60e51b81526004016106d390611463565b600c610a188282611510565b335f908152600a602052604090205460ff16610c1e5760405162461bcd60e51b81526004016106d390611463565b60065481610c2b60025490565b610c359190611629565b1115610c785760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016106d3565b6108aa3082610eb7565b610c8a610e39565b6001600160a01b038116610cb357604051631e4fbdf760e01b81525f60048201526024016106d3565b6108aa81610e66565b335f908152600a602052604090205460ff16610cea5760405162461bcd60e51b81526004016106d390611463565b60065481610cf760025490565b610d019190611629565b1115610d445760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016106d3565b610a188282610eb7565b610d5b8383836001610eeb565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610dd65781811015610dc857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106d3565b610dd684848484035f610eeb565b50505050565b6001600160a01b038316610e0557604051634b637e8f60e11b81525f60048201526024016106d3565b6001600160a01b038216610e2e5760405163ec442f0560e01b81525f60048201526024016106d3565b610d5b838383610fbd565b6005546001600160a01b0316331461092a5760405163118cdaa760e01b81523360048201526024016106d3565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610ee05760405163ec442f0560e01b81525f60048201526024016106d3565b610a185f8383610fbd565b6001600160a01b038416610f145760405163e602df0560e01b81525f60048201526024016106d3565b6001600160a01b038316610f3d57604051634a1406b160e11b81525f60048201526024016106d3565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610dd657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610faf91815260200190565b60405180910390a350505050565b60085460ff16156110075760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c9cc8185c99481c185d5cd95960621b60448201526064016106d3565b6001600160a01b0383165f9081526009602052604090205460ff16156110625760405162461bcd60e51b815260206004820152601060248201526f14d95b99195c881a5cc81c185d5cd95960821b60448201526064016106d3565b5f60075411801561107b57506001600160a01b03831615155b801561109557506005546001600160a01b03848116911614155b156110f8576007548082116110df5760405162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b60448201526064016106d3565b6110ea8430836110ff565b6110f48183611616565b9150505b610d5b8383835b6001600160a01b038316611129578060025f82825461111e9190611629565b909155506111999050565b6001600160a01b0383165f908152602081905260409020548181101561117b5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016106d3565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166111b5576002805482900390556111d3565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161121891815260200190565b60405180910390a3505050565b5f60208284031215611235575f80fd5b5035919050565b5f6020808352835180828501525f5b818110156112675785810183015185820160400152820161124b565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461129d575f80fd5b919050565b5f80604083850312156112b3575f80fd5b6112bc83611287565b946020939093013593505050565b5f805f606084860312156112dc575f80fd5b6112e584611287565b92506112f360208501611287565b9150604084013590509250925092565b5f60208284031215611313575f80fd5b61131c82611287565b9392505050565b8035801515811461129d575f80fd5b5f60208284031215611342575f80fd5b61131c82611323565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561136f575f80fd5b813567ffffffffffffffff80821115611386575f80fd5b818401915084601f830112611399575f80fd5b8135818111156113ab576113ab61134b565b604051601f8201601f19908116603f011681019083821181831017156113d3576113d361134b565b816040528281528760208487010111156113eb575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f806040838503121561141b575f80fd5b61142483611287565b915061143260208401611323565b90509250929050565b5f806040838503121561144c575f80fd5b61145583611287565b915061143260208401611287565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b600181811c9082168061149f57607f821691505b6020821081036114bd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610d5b575f81815260208120601f850160051c810160208610156114e95750805b601f850160051c820191505b81811015611508578281556001016114f5565b505050505050565b815167ffffffffffffffff81111561152a5761152a61134b565b61153e81611538845461148b565b846114c3565b602080601f831160018114611571575f841561155a5750858301515b5f19600386901b1c1916600185901b178555611508565b5f85815260208120601f198616915b8281101561159f57888601518255948401946001909101908401611580565b50858210156115bc57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610810576108106115cc565b5f8261161157634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610810576108106115cc565b80820180821115610810576108106115cc56fea264697066735822122080a399fa430c329f9b973b13805cae3547aa1852b5060fe293ed326201f6cdba64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610214575f3560e01c80638da5cb5b1161011e578063ab29511b116100a8578063ed2d03fe1161006d578063ed2d03fe14610601578063f2fde38b14610620578063f95843a31461063f578063fb2cb34e1461066d578063fd4d43c514610686575f80fd5b8063ab29511b14610554578063acb2ad6f14610573578063bc8893b414610588578063d5abeb01146105a8578063dd62ed3e146105bd575f80fd5b80639b6860c8116100ee5780639b6860c8146104da5780639c4a4b8c146104ef5780639e955149146104f7578063a56de01914610516578063a9059cbb14610535575f80fd5b80638da5cb5b1461046b5780638f02bb5b14610488578063918b5be1146104a757806395d89b41146104c6575f80fd5b8063370158ea1161019f57806370a082311161016f57806370a08231146103d0578063715018a614610404578063791a2519146104185780638985abc8146104375780638c3cefa31461044c575f80fd5b8063370158ea1461036a5780633ccfd60b1461037e5780635c2bf58e146103925780637065cb48146103b1575f80fd5b806318160ddd116101e557806318160ddd146102ad57806323b872dd146102cb57806323f5c02d146102ea5780632f54bf6e14610321578063313ce5671461034f575f80fd5b80626950231461021f57806303ee438c1461024057806306fdde031461026a578063095ea7b31461027e575f80fd5b3661021b57005b5f80fd5b34801561022a575f80fd5b5061023e610239366004611225565b6106a5565b005b34801561024b575f80fd5b506102546106e1565b604051610261919061123c565b60405180910390f35b348015610275575f80fd5b5061025461076d565b348015610289575f80fd5b5061029d6102983660046112a2565b6107fd565b6040519015158152602001610261565b3480156102b8575f80fd5b506002545b604051908152602001610261565b3480156102d6575f80fd5b5061029d6102e53660046112ca565b610816565b3480156102f5575f80fd5b50600d54610309906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032c575f80fd5b5061029d61033b366004611303565b600a6020525f908152604090205460ff1681565b34801561035a575f80fd5b5060405160128152602001610261565b348015610375575f80fd5b50610254610839565b348015610389575f80fd5b5061023e610846565b34801561039d575f80fd5b5061023e6103ac366004611332565b6108ad565b3480156103bc575f80fd5b5061023e6103cb366004611303565b6108ee565b3480156103db575f80fd5b506102bd6103ea366004611303565b6001600160a01b03165f9081526020819052604090205490565b34801561040f575f80fd5b5061023e610919565b348015610423575f80fd5b5061023e610432366004611225565b61092c565b348015610442575f80fd5b506102bd600f5481565b348015610457575f80fd5b5061023e610466366004611332565b61095f565b348015610476575f80fd5b506005546001600160a01b0316610309565b348015610493575f80fd5b5061023e6104a2366004611225565b6109ab565b3480156104b2575f80fd5b5061023e6104c136600461135f565b6109de565b3480156104d1575f80fd5b50610254610a1c565b3480156104e5575f80fd5b506102bd600e5481565b61023e610a2b565b348015610502575f80fd5b5061023e610511366004611303565b610b01565b348015610521575f80fd5b5061023e61053036600461140a565b610b51565b348015610540575f80fd5b5061029d61054f3660046112a2565b610ba9565b34801561055f575f80fd5b5061023e61056e36600461135f565b610bb6565b34801561057e575f80fd5b506102bd60075481565b348015610593575f80fd5b50600d5461029d90600160a01b900460ff1681565b3480156105b3575f80fd5b506102bd60065481565b3480156105c8575f80fd5b506102bd6105d736600461143b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561060c575f80fd5b5061023e61061b366004611225565b610bf0565b34801561062b575f80fd5b5061023e61063a366004611303565b610c82565b34801561064a575f80fd5b5061029d610659366004611303565b60096020525f908152604090205460ff1681565b348015610678575f80fd5b5060085461029d9060ff1681565b348015610691575f80fd5b5061023e6106a03660046112a2565b610cbc565b335f908152600a602052604090205460ff166106dc5760405162461bcd60e51b81526004016106d390611463565b60405180910390fd5b600f55565b600b80546106ee9061148b565b80601f016020809104026020016040519081016040528092919081815260200182805461071a9061148b565b80156107655780601f1061073c57610100808354040283529160200191610765565b820191905f5260205f20905b81548152906001019060200180831161074857829003601f168201915b505050505081565b60606003805461077c9061148b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a89061148b565b80156107f35780601f106107ca576101008083540402835291602001916107f3565b820191905f5260205f20905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b5f3361080a818585610d4e565b60019150505b92915050565b5f33610823858285610d60565b61082e858585610ddc565b506001949350505050565b600c80546106ee9061148b565b335f908152600a602052604090205460ff166108745760405162461bcd60e51b81526004016106d390611463565b6005546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156108aa573d5f803e3d5ffd5b50565b335f908152600a602052604090205460ff166108db5760405162461bcd60e51b81526004016106d390611463565b6008805460ff1916911515919091179055565b6108f6610e39565b6001600160a01b03165f908152600a60205260409020805460ff19166001179055565b610921610e39565b61092a5f610e66565b565b335f908152600a602052604090205460ff1661095a5760405162461bcd60e51b81526004016106d390611463565b600e55565b335f908152600a602052604090205460ff1661098d5760405162461bcd60e51b81526004016106d390611463565b600d8054911515600160a01b0260ff60a01b19909216919091179055565b335f908152600a602052604090205460ff166109d95760405162461bcd60e51b81526004016106d390611463565b600755565b335f908152600a602052604090205460ff16610a0c5760405162461bcd60e51b81526004016106d390611463565b600b610a188282611510565b5050565b60606004805461077c9061148b565b600d54600160a01b900460ff16610a765760405162461bcd60e51b815260206004820152600f60248201526e53616c65206e6f742061637469766560881b60448201526064016106d3565b600e545f90610a8d34670de0b6b3a76400006115e0565b610a9791906115f7565b9050600f54811115610adf5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b60448201526064016106d3565b80600f5f828254610af09190611616565b909155506108aa9050303383610ddc565b335f908152600a602052604090205460ff16610b2f5760405162461bcd60e51b81526004016106d390611463565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b335f908152600a602052604090205460ff16610b7f5760405162461bcd60e51b81526004016106d390611463565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f3361080a818585610ddc565b335f908152600a602052604090205460ff16610be45760405162461bcd60e51b81526004016106d390611463565b600c610a188282611510565b335f908152600a602052604090205460ff16610c1e5760405162461bcd60e51b81526004016106d390611463565b60065481610c2b60025490565b610c359190611629565b1115610c785760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016106d3565b6108aa3082610eb7565b610c8a610e39565b6001600160a01b038116610cb357604051631e4fbdf760e01b81525f60048201526024016106d3565b6108aa81610e66565b335f908152600a602052604090205460ff16610cea5760405162461bcd60e51b81526004016106d390611463565b60065481610cf760025490565b610d019190611629565b1115610d445760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016106d3565b610a188282610eb7565b610d5b8383836001610eeb565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610dd65781811015610dc857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106d3565b610dd684848484035f610eeb565b50505050565b6001600160a01b038316610e0557604051634b637e8f60e11b81525f60048201526024016106d3565b6001600160a01b038216610e2e5760405163ec442f0560e01b81525f60048201526024016106d3565b610d5b838383610fbd565b6005546001600160a01b0316331461092a5760405163118cdaa760e01b81523360048201526024016106d3565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610ee05760405163ec442f0560e01b81525f60048201526024016106d3565b610a185f8383610fbd565b6001600160a01b038416610f145760405163e602df0560e01b81525f60048201526024016106d3565b6001600160a01b038316610f3d57604051634a1406b160e11b81525f60048201526024016106d3565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610dd657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610faf91815260200190565b60405180910390a350505050565b60085460ff16156110075760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c9cc8185c99481c185d5cd95960621b60448201526064016106d3565b6001600160a01b0383165f9081526009602052604090205460ff16156110625760405162461bcd60e51b815260206004820152601060248201526f14d95b99195c881a5cc81c185d5cd95960821b60448201526064016106d3565b5f60075411801561107b57506001600160a01b03831615155b801561109557506005546001600160a01b03848116911614155b156110f8576007548082116110df5760405162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b60448201526064016106d3565b6110ea8430836110ff565b6110f48183611616565b9150505b610d5b8383835b6001600160a01b038316611129578060025f82825461111e9190611629565b909155506111999050565b6001600160a01b0383165f908152602081905260409020548181101561117b5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016106d3565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166111b5576002805482900390556111d3565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161121891815260200190565b60405180910390a3505050565b5f60208284031215611235575f80fd5b5035919050565b5f6020808352835180828501525f5b818110156112675785810183015185820160400152820161124b565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461129d575f80fd5b919050565b5f80604083850312156112b3575f80fd5b6112bc83611287565b946020939093013593505050565b5f805f606084860312156112dc575f80fd5b6112e584611287565b92506112f360208501611287565b9150604084013590509250925092565b5f60208284031215611313575f80fd5b61131c82611287565b9392505050565b8035801515811461129d575f80fd5b5f60208284031215611342575f80fd5b61131c82611323565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561136f575f80fd5b813567ffffffffffffffff80821115611386575f80fd5b818401915084601f830112611399575f80fd5b8135818111156113ab576113ab61134b565b604051601f8201601f19908116603f011681019083821181831017156113d3576113d361134b565b816040528281528760208487010111156113eb575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f806040838503121561141b575f80fd5b61142483611287565b915061143260208401611323565b90509250929050565b5f806040838503121561144c575f80fd5b61145583611287565b915061143260208401611287565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b600181811c9082168061149f57607f821691505b6020821081036114bd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610d5b575f81815260208120601f850160051c810160208610156114e95750805b601f850160051c820191505b81811015611508578281556001016114f5565b505050505050565b815167ffffffffffffffff81111561152a5761152a61134b565b61153e81611538845461148b565b846114c3565b602080601f831160018114611571575f841561155a5750858301515b5f19600386901b1c1916600185901b178555611508565b5f85815260208120601f198616915b8281101561159f57888601518255948401946001909101908401611580565b50858210156115bc57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610810576108106115cc565b5f8261161157634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610810576108106115cc565b80820180821115610810576108106115cc56fea264697066735822122080a399fa430c329f9b973b13805cae3547aa1852b5060fe293ed326201f6cdba64736f6c63430008140033

Deployed Bytecode Sourcemap

25615:20468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34592:669;;;;;;;;;;-1:-1:-1;34592:669:0;;;;;:::i;:::-;;:::i;:::-;;25963:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13000:91;;;;;;;;;;;;;:::i;15293:190::-;;;;;;;;;;-1:-1:-1;15293:190:0;;;;;:::i;:::-;;:::i;:::-;;;1354:14:1;;1347:22;1329:41;;1317:2;1302:18;15293:190:0;1189:187:1;14102:99:0;;;;;;;;;;-1:-1:-1;14181:12:0;;14102:99;;;1527:25:1;;;1515:2;1500:18;14102:99:0;1381:177:1;16093:249:0;;;;;;;;;;-1:-1:-1;16093:249:0;;;;;:::i;:::-;;:::i;26072:27::-;;;;;;;;;;-1:-1:-1;26072:27:0;;;;-1:-1:-1;;;;;26072:27:0;;;;;;-1:-1:-1;;;;;2060:32:1;;;2042:51;;2030:2;2015:18;26072:27:0;1896:203:1;25897:39:0;;;;;;;;;;-1:-1:-1;25897:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13953:84;;;;;;;;;;-1:-1:-1;13953:84:0;;14027:2;2437:36:1;;2425:2;2410:18;13953:84:0;2295:184:1;26019:18:0;;;;;;;;;;;;;:::i;39242:827::-;;;;;;;;;;;;;:::i;29996:469::-;;;;;;;;;;-1:-1:-1;29996:469:0;;;;;:::i;:::-;;:::i;28801:402::-;;;;;;;;;;-1:-1:-1;28801:402:0;;;;;:::i;:::-;;:::i;14264:118::-;;;;;;;;;;-1:-1:-1;14264:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;14356:18:0;14329:7;14356:18;;;;;;;;;;;;14264:118;24722:103;;;;;;;;;;;;;:::i;33673:639::-;;;;;;;;;;-1:-1:-1;33673:639:0;;;;;:::i;:::-;;:::i;26398:35::-;;;;;;;;;;;;;;;;35557:695;;;;;;;;;;-1:-1:-1;35557:695:0;;;;;:::i;:::-;;:::i;24047:87::-;;;;;;;;;;-1:-1:-1;24120:6:0;;-1:-1:-1;;;;;24120:6:0;24047:87;;29371:441;;;;;;;;;;-1:-1:-1;29371:441:0;;;;;:::i;:::-;;:::i;27795:345::-;;;;;;;;;;-1:-1:-1;27795:345:0;;;;;:::i;:::-;;:::i;13210:95::-;;;;;;;;;;;;;:::i;26289:45::-;;;;;;;;;;;;;;;;36564:2318;;;:::i;28276:373::-;;;;;;;;;;-1:-1:-1;28276:373:0;;;;;:::i;:::-;;:::i;30665:533::-;;;;;;;;;;-1:-1:-1;30665:533:0;;;;;:::i;:::-;;:::i;14587:182::-;;;;;;;;;;-1:-1:-1;14587:182:0;;;;;:::i;:::-;;:::i;27371:304::-;;;;;;;;;;-1:-1:-1;27371:304:0;;;;;:::i;:::-;;:::i;25714:26::-;;;;;;;;;;;;;;;;26206:36;;;;;;;;;;-1:-1:-1;26206:36:0;;;;-1:-1:-1;;;26206:36:0;;;;;;25656:47;;;;;;;;;;;;;;;;14832:142;;;;;;;;;;-1:-1:-1;14832:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;14939:18:0;;;14912:7;14939:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14832:142;32492:917;;;;;;;;;;-1:-1:-1;32492:917:0;;;;;:::i;:::-;;:::i;24980:220::-;;;;;;;;;;-1:-1:-1;24980:220:0;;;;;:::i;:::-;;:::i;25821:51::-;;;;;;;;;;-1:-1:-1;25821:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25768:34;;;;;;;;;;-1:-1:-1;25768:34:0;;;;;;;;31414:838;;;;;;;;;;-1:-1:-1;31414:838:0;;;;;:::i;:::-;;:::i;34592:669::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;;;;;;;;;34944:16:::1;:25:::0;34592:669::o;25963:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13000:91::-;13045:13;13078:5;13071:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13000:91;:::o;15293:190::-;15366:4;4384:10;15422:31;4384:10;15438:7;15447:5;15422:8;:31::i;:::-;15471:4;15464:11;;;15293:190;;;;;:::o;16093:249::-;16180:4;4384:10;16238:37;16254:4;4384:10;16269:5;16238:15;:37::i;:::-;16286:26;16296:4;16302:2;16306:5;16286:9;:26::i;:::-;-1:-1:-1;16330:4:0;;16093:249;-1:-1:-1;;;;16093:249:0:o;26019:18::-;;;;;;;:::i;39242:827::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;24120:6;;39649:48:::1;::::0;-1:-1:-1;;;;;24120:6:0;;;;39675:21:::1;39649:48:::0;::::1;;;::::0;::::1;::::0;;;39675:21;24120:6;39649:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39242:827::o:0;29996:469::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;30246:14:::1;:23:::0;;-1:-1:-1;;30246:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29996:469::o;28801:402::-;23933:13;:11;:13::i;:::-;-1:-1:-1;;;;;29015:17:0::1;;::::0;;;:7:::1;:17;::::0;;;;:24;;-1:-1:-1;;29015:24:0::1;29035:4;29015:24;::::0;;28801:402::o;24722:103::-;23933:13;:11;:13::i;:::-;24787:30:::1;24814:1;24787:18;:30::i;:::-;24722:103::o:0;33673:639::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;34010:15:::1;:26:::0;33673:639::o;35557:695::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;35919:16:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;35919:25:0::1;-1:-1:-1::0;;;;35919:25:0;;::::1;::::0;;;::::1;::::0;;35557:695::o;29371:441::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;29609:11:::1;:23:::0;29371:441::o;27795:345::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;27988:11:::1;:20;28002:6:::0;27988:11;:20:::1;:::i;:::-;;27795:345:::0;:::o;13210:95::-;13257:13;13290:7;13283:14;;;;;:::i;36564:2318::-;36933:16;;-1:-1:-1;;;36933:16:0;;;;36925:44;;;;-1:-1:-1;;;36925:44:0;;7551:2:1;36925:44:0;;;7533:21:1;7590:2;7570:18;;;7563:30;-1:-1:-1;;;7609:18:1;;;7602:45;7664:18;;36925:44:0;7349:339:1;36925:44:0;37339:15;;37296:19;;37319:16;:9;37331:4;37319:16;:::i;:::-;37318:36;;;;:::i;:::-;37296:58;;37712:16;;37697:11;:31;;37689:61;;;;-1:-1:-1;;;37689:61:0;;8422:2:1;37689:61:0;;;8404:21:1;8461:2;8441:18;;;8434:30;-1:-1:-1;;;8480:18:1;;;8473:47;8537:18;;37689:61:0;8220:341:1;37689:61:0;38115:11;38095:16;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;38477:49:0;;-1:-1:-1;38495:4:0;38502:10;38514:11;38477:9;:49::i;28276:373::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;28478:12:::1;:23:::0;;-1:-1:-1;;;;;;28478:23:0::1;-1:-1:-1::0;;;;;28478:23:0;;;::::1;::::0;;;::::1;::::0;;28276:373::o;30665:533::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30952:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:34;;-1:-1:-1;;30952:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30665:533::o;14587:182::-;14656:4;4384:10;14712:27;4384:10;14729:2;14733:5;14712:9;:27::i;27371:304::-;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;27545:4:::1;:14;27552:7:::0;27545:4;:14:::1;:::i;32492:917::-:0;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;32834:9:::1;;32824:6;32808:13;14181:12:::0;;;14102:99;32808:13:::1;:22;;;;:::i;:::-;:35;;32800:66;;;::::0;-1:-1:-1;;;32800:66:0;;9031:2:1;32800:66:0::1;::::0;::::1;9013:21:1::0;9070:2;9050:18;;;9043:30;-1:-1:-1;;;9089:18:1;;;9082:48;9147:18;;32800:66:0::1;8829:342:1::0;32800:66:0::1;33121:28;33135:4;33142:6;33121:5;:28::i;24980:220::-:0;23933:13;:11;:13::i;:::-;-1:-1:-1;;;;;25065:22:0;::::1;25061:93;;25111:31;::::0;-1:-1:-1;;;25111:31:0;;25139:1:::1;25111:31;::::0;::::1;2042:51:1::0;2015:18;;25111:31:0::1;1896:203:1::0;25061:93:0::1;25164:28;25183:8;25164:18;:28::i;31414:838::-:0;27041:10;27033:19;;;;:7;:19;;;;;;;;27025:46;;;;-1:-1:-1;;;27025:46:0;;;;;;;:::i;:::-;31736:9:::1;;31726:6;31710:13;14181:12:::0;;;14102:99;31710:13:::1;:22;;;;:::i;:::-;:35;;31702:66;;;::::0;-1:-1:-1;;;31702:66:0;;9031:2:1;31702:66:0::1;::::0;::::1;9013:21:1::0;9070:2;9050:18;;;9043:30;-1:-1:-1;;;9089:18:1;;;9082:48;9147:18;;31702:66:0::1;8829:342:1::0;31702:66:0::1;31999:17;32005:2;32009:6;31999:5;:17::i;20152:130::-:0;20237:37;20246:5;20253:7;20262:5;20269:4;20237:8;:37::i;:::-;20152:130;;;:::o;21884:486::-;-1:-1:-1;;;;;14939:18:0;;;21984:24;14939:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;22051:36:0;;22047:316;;;22127:5;22108:16;:24;22104:132;;;22160:60;;-1:-1:-1;;;22160:60:0;;-1:-1:-1;;;;;9396:32:1;;22160:60:0;;;9378:51:1;9445:18;;;9438:34;;;9488:18;;;9481:34;;;9351:18;;22160:60:0;9176:345:1;22104:132:0;22279:57;22288:5;22295:7;22323:5;22304:16;:24;22330:5;22279:8;:57::i;:::-;21973:397;21884:486;;;:::o;16727:308::-;-1:-1:-1;;;;;16811:18:0;;16807:88;;16853:30;;-1:-1:-1;;;16853:30:0;;16880:1;16853:30;;;2042:51:1;2015:18;;16853:30:0;1896:203:1;16807:88:0;-1:-1:-1;;;;;16909:16:0;;16905:88;;16949:32;;-1:-1:-1;;;16949:32:0;;16978:1;16949:32;;;2042:51:1;2015:18;;16949:32:0;1896:203:1;16905:88:0;17003:24;17011:4;17017:2;17021:5;17003:7;:24::i;24212:166::-;24120:6;;-1:-1:-1;;;;;24120:6:0;4384:10;24272:23;24268:103;;24319:40;;-1:-1:-1;;;24319:40:0;;4384:10;24319:40;;;2042:51:1;2015:18;;24319:40:0;1896:203:1;25360:191:0;25453:6;;;-1:-1:-1;;;;;25470:17:0;;;-1:-1:-1;;;;;;25470:17:0;;;;;;;25503:40;;25453:6;;;25470:17;25453:6;;25503:40;;25434:16;;25503:40;25423:128;25360:191;:::o;18847:213::-;-1:-1:-1;;;;;18918:21:0;;18914:93;;18963:32;;-1:-1:-1;;;18963:32:0;;18992:1;18963:32;;;2042:51:1;2015:18;;18963:32:0;1896:203:1;18914:93:0;19017:35;19033:1;19037:7;19046:5;19017:7;:35::i;21149:443::-;-1:-1:-1;;;;;21262:19:0;;21258:91;;21305:32;;-1:-1:-1;;;21305:32:0;;21334:1;21305:32;;;2042:51:1;2015:18;;21305:32:0;1896:203:1;21258:91:0;-1:-1:-1;;;;;21363:21:0;;21359:92;;21408:31;;-1:-1:-1;;;21408:31:0;;21436:1;21408:31;;;2042:51:1;2015:18;;21408:31:0;1896:203:1;21359:92:0;-1:-1:-1;;;;;21461:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;21507:78;;;;21558:7;-1:-1:-1;;;;;21542:31:0;21551:5;-1:-1:-1;;;;;21542:31:0;;21567:5;21542:31;;;;1527:25:1;;1515:2;1500:18;;1381:177;21542:31:0;;;;;;;;21149:443;;;;:::o;40445:4666::-;40913:14;;;;40912:15;40904:48;;;;-1:-1:-1;;;40904:48:0;;9728:2:1;40904:48:0;;;9710:21:1;9767:2;9747:18;;;9740:30;-1:-1:-1;;;9786:18:1;;;9779:50;9846:18;;40904:48:0;9526:344:1;40904:48:0;-1:-1:-1;;;;;41352:25:0;;;;;;:19;:25;;;;;;;;41351:26;41343:55;;;;-1:-1:-1;;;41343:55:0;;10077:2:1;41343:55:0;;;10059:21:1;10116:2;10096:18;;;10089:30;-1:-1:-1;;;10135:18:1;;;10128:46;10191:18;;41343:55:0;9875:340:1;41343:55:0;41817:1;41803:11;;:15;:37;;;;-1:-1:-1;;;;;;41822:18:0;;;;41803:37;:56;;;;-1:-1:-1;24120:6:0;;-1:-1:-1;;;;;41844:15:0;;;24120:6;;41844:15;;41803:56;41799:2350;;;42286:11;;42728;;;42720:40;;;;-1:-1:-1;;;42720:40:0;;10422:2:1;42720:40:0;;;10404:21:1;10461:2;10441:18;;;10434:30;-1:-1:-1;;;10480:18:1;;;10473:46;10536:18;;42720:40:0;10220:340:1;42720:40:0;43195:39;43209:4;43223;43230:3;43195:13;:39::i;:::-;43681:12;43690:3;43681:12;;:::i;:::-;;;41861:2288;41799:2350;44613:30;44627:4;44633:2;44637:5;17359:1135;-1:-1:-1;;;;;17449:18:0;;17445:552;;17603:5;17587:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;17445:552:0;;-1:-1:-1;17445:552:0;;-1:-1:-1;;;;;17663:15:0;;17641:19;17663:15;;;;;;;;;;;17697:19;;;17693:117;;;17744:50;;-1:-1:-1;;;17744:50:0;;-1:-1:-1;;;;;9396:32:1;;17744:50:0;;;9378:51:1;9445:18;;;9438:34;;;9488:18;;;9481:34;;;9351:18;;17744:50:0;9176:345:1;17693:117:0;-1:-1:-1;;;;;17933:15:0;;:9;:15;;;;;;;;;;17951:19;;;;17933:37;;17445:552;-1:-1:-1;;;;;18013:16:0;;18009:435;;18179:12;:21;;;;;;;18009:435;;;-1:-1:-1;;;;;18395:13:0;;:9;:13;;;;;;;;;;:22;;;;;;18009:435;18476:2;-1:-1:-1;;;;;18461:25:0;18470:4;-1:-1:-1;;;;;18461:25:0;;18480:5;18461:25;;;;1527::1;;1515:2;1500:18;;1381:177;18461:25:0;;;;;;;;17359:1135;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:173::-;820:20;;-1:-1:-1;;;;;869:31:1;;859:42;;849:70;;915:1;912;905:12;849:70;752:173;;;:::o;930:254::-;998:6;1006;1059:2;1047:9;1038:7;1034:23;1030:32;1027:52;;;1075:1;1072;1065:12;1027:52;1098:29;1117:9;1098:29;:::i;:::-;1088:39;1174:2;1159:18;;;;1146:32;;-1:-1:-1;;;930:254:1:o;1563:328::-;1640:6;1648;1656;1709:2;1697:9;1688:7;1684:23;1680:32;1677:52;;;1725:1;1722;1715:12;1677:52;1748:29;1767:9;1748:29;:::i;:::-;1738:39;;1796:38;1830:2;1819:9;1815:18;1796:38;:::i;:::-;1786:48;;1881:2;1870:9;1866:18;1853:32;1843:42;;1563:328;;;;;:::o;2104:186::-;2163:6;2216:2;2204:9;2195:7;2191:23;2187:32;2184:52;;;2232:1;2229;2222:12;2184:52;2255:29;2274:9;2255:29;:::i;:::-;2245:39;2104:186;-1:-1:-1;;;2104:186:1:o;2484:160::-;2549:20;;2605:13;;2598:21;2588:32;;2578:60;;2634:1;2631;2624:12;2649:180;2705:6;2758:2;2746:9;2737:7;2733:23;2729:32;2726:52;;;2774:1;2771;2764:12;2726:52;2797:26;2813:9;2797:26;:::i;2834:127::-;2895:10;2890:3;2886:20;2883:1;2876:31;2926:4;2923:1;2916:15;2950:4;2947:1;2940:15;2966:922;3035:6;3088:2;3076:9;3067:7;3063:23;3059:32;3056:52;;;3104:1;3101;3094:12;3056:52;3144:9;3131:23;3173:18;3214:2;3206:6;3203:14;3200:34;;;3230:1;3227;3220:12;3200:34;3268:6;3257:9;3253:22;3243:32;;3313:7;3306:4;3302:2;3298:13;3294:27;3284:55;;3335:1;3332;3325:12;3284:55;3371:2;3358:16;3393:2;3389;3386:10;3383:36;;;3399:18;;:::i;:::-;3474:2;3468:9;3442:2;3528:13;;-1:-1:-1;;3524:22:1;;;3548:2;3520:31;3516:40;3504:53;;;3572:18;;;3592:22;;;3569:46;3566:72;;;3618:18;;:::i;:::-;3658:10;3654:2;3647:22;3693:2;3685:6;3678:18;3733:7;3728:2;3723;3719;3715:11;3711:20;3708:33;3705:53;;;3754:1;3751;3744:12;3705:53;3810:2;3805;3801;3797:11;3792:2;3784:6;3780:15;3767:46;3855:1;3833:15;;;3850:2;3829:24;3822:35;;;;-1:-1:-1;3837:6:1;2966:922;-1:-1:-1;;;;;2966:922:1:o;3893:254::-;3958:6;3966;4019:2;4007:9;3998:7;3994:23;3990:32;3987:52;;;4035:1;4032;4025:12;3987:52;4058:29;4077:9;4058:29;:::i;:::-;4048:39;;4106:35;4137:2;4126:9;4122:18;4106:35;:::i;:::-;4096:45;;3893:254;;;;;:::o;4152:260::-;4220:6;4228;4281:2;4269:9;4260:7;4256:23;4252:32;4249:52;;;4297:1;4294;4287:12;4249:52;4320:29;4339:9;4320:29;:::i;:::-;4310:39;;4368:38;4402:2;4391:9;4387:18;4368:38;:::i;4417:338::-;4619:2;4601:21;;;4658:2;4638:18;;;4631:30;-1:-1:-1;;;4692:2:1;4677:18;;4670:44;4746:2;4731:18;;4417:338::o;4760:380::-;4839:1;4835:12;;;;4882;;;4903:61;;4957:4;4949:6;4945:17;4935:27;;4903:61;5010:2;5002:6;4999:14;4979:18;4976:38;4973:161;;5056:10;5051:3;5047:20;5044:1;5037:31;5091:4;5088:1;5081:15;5119:4;5116:1;5109:15;4973:161;;4760:380;;;:::o;5271:545::-;5373:2;5368:3;5365:11;5362:448;;;5409:1;5434:5;5430:2;5423:17;5479:4;5475:2;5465:19;5549:2;5537:10;5533:19;5530:1;5526:27;5520:4;5516:38;5585:4;5573:10;5570:20;5567:47;;;-1:-1:-1;5608:4:1;5567:47;5663:2;5658:3;5654:12;5651:1;5647:20;5641:4;5637:31;5627:41;;5718:82;5736:2;5729:5;5726:13;5718:82;;;5781:17;;;5762:1;5751:13;5718:82;;;5722:3;;;5271:545;;;:::o;5992:1352::-;6118:3;6112:10;6145:18;6137:6;6134:30;6131:56;;;6167:18;;:::i;:::-;6196:97;6286:6;6246:38;6278:4;6272:11;6246:38;:::i;:::-;6240:4;6196:97;:::i;:::-;6348:4;;6412:2;6401:14;;6429:1;6424:663;;;;7131:1;7148:6;7145:89;;;-1:-1:-1;7200:19:1;;;7194:26;7145:89;-1:-1:-1;;5949:1:1;5945:11;;;5941:24;5937:29;5927:40;5973:1;5969:11;;;5924:57;7247:81;;6394:944;;6424:663;5218:1;5211:14;;;5255:4;5242:18;;-1:-1:-1;;6460:20:1;;;6578:236;6592:7;6589:1;6586:14;6578:236;;;6681:19;;;6675:26;6660:42;;6773:27;;;;6741:1;6729:14;;;;6608:19;;6578:236;;;6582:3;6842:6;6833:7;6830:19;6827:201;;;6903:19;;;6897:26;-1:-1:-1;;6986:1:1;6982:14;;;6998:3;6978:24;6974:37;6970:42;6955:58;6940:74;;6827:201;-1:-1:-1;;;;;7074:1:1;7058:14;;;7054:22;7041:36;;-1:-1:-1;5992:1352:1:o;7693:127::-;7754:10;7749:3;7745:20;7742:1;7735:31;7785:4;7782:1;7775:15;7809:4;7806:1;7799:15;7825:168;7898:9;;;7929;;7946:15;;;7940:22;;7926:37;7916:71;;7967:18;;:::i;7998:217::-;8038:1;8064;8054:132;;8108:10;8103:3;8099:20;8096:1;8089:31;8143:4;8140:1;8133:15;8171:4;8168:1;8161:15;8054:132;-1:-1:-1;8200:9:1;;7998:217::o;8566:128::-;8633:9;;;8654:11;;;8651:37;;;8668:18;;:::i;8699:125::-;8764:9;;;8785:10;;;8782:36;;;8798:18;;:::i

Swarm Source

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