ETH Price: $2,220.65 (-4.36%)

Token

Cash DAO (CASH)
 

Overview

Max Total Supply

1,000,000 CASH

Holders

8

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Fake_Phishing463017
Balance
5,000 CASH

Value
$0.00
0xd8077bae1d76ed883904563515bcda3fef985cea
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CashDAO

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.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/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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


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

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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


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

pragma solidity ^0.8.20;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        emit Transfer(from, to, value);
    }

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

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

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

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

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

// File: cashdao.sol


pragma solidity ^0.8.20;





// CashDAO合約,繼承自OpenZeppelin的ERC20和ReentrancyGuard
// CashDAO contract, inheriting from OpenZeppelin's ERC20 and ReentrancyGuard
contract CashDAO is ERC20, ReentrancyGuard {



    // 定義事件,用於記錄CASH代幣的購買和銷售
    // Events for logging the purchase and sale of CASH tokens
    event CASHBought(address indexed buyer, uint256 ethAmount, uint256 cashAmount);
    event CASHSold (address  indexed seller,uint256 cashAmount, uint256 ethAmount);



    // 建構函數,為Cash DAO團隊和合約內部池鑄造初始代幣
    // Constructor to mint initial tokens for the Cash DAO team and the contract's internal pool
    constructor() ERC20("Cash DAO", "CASH") {

        // CashDAO - Pre-angel Round Investor / BD Lead - "Brain"
        _mint(address(0xd8077BaE1D76ED883904563515bcda3fef985cEA), 5000 * 10 ** decimals());

        // CashDAO - Pre-angel Round Investor / Engineer / Design Lead - "Tonny"
        _mint(address(0x96a9f7faEC5C1bB9a85002fad26058F732D14eF4), 3000 * 10 ** decimals());

        // CashDAO - CEO / OG - "DL"
        _mint(address(0xfa1b70E944bDcD14f72aa7022229EEcd11E39684), 1500 * 10 ** decimals());

        // CashDAO - Marketing director - "Bobby Sosen"
        _mint(address(0xE9961E0f167d0679a00EC63EB8Ab5e2aFf4AfE2F), 1500 * 10 ** decimals());

        // CashDAO - Senior Dev.- "Mayank Sharma"
        _mint(address(0x486A6af541A4fB1e72e8bD62567557Ddcd957160), 1500 * 10 ** decimals());

        // CashDAO - Founder / CTO - "YC Wong"
        _mint(address(0xFc36Adb372556C16ea79CEaf9f59A83a47aDB687), 6000 * 10 ** decimals());

        // CashDAO - Team & Partners Foundation Reserve
        _mint(msg.sender, 281500 * 10 ** decimals()); // 30% of total supply for team and our partners 

        // CashDAO - Internal Swapping Pool Reserve
        _mint(address(this), 700000 * 10 ** decimals());
    }



    // 計算CASH在合約外的流通總量
    // Calculate the circulation of CASH outsdie the contract.
    uint256 circulatedAmount = 300000 * 10 ** decimals();



    // 計算使用ETH購買CASH的數量
    // Calculate the amount of CASH that can be bought with ETH
    function calculatePurchaseAmount(uint256 ethAmount) public view returns (uint256) {

        // 確保交易金額不超過 99 ETH (防止用戶購買總流通量的99%)
        // Ensure the transaction amount does not exceed 99 ETH
        require(ethAmount < 99, "Each transaction amount can not more than 99 ETH.");

        // 計算購買金額,包含1%的費用
        // Calculate purchase amount including a 1% fee
        return (ethAmount * balanceOf(address(this)) / (10 ** decimals())) * 99 / 100; // 1ETH for each % of the pool & 1% fee back to DeFi pool
    }



    // 計算出售CASH獲得的ETH數量
    // Calculate the amount of ETH obtained by selling CASH
    function calculateSellAmount(uint256 cashAmount) public view returns (uint256) {

        // 確保池中有CASH代幣
        // Ensure there is CASH in the pool
        require(balanceOf(address(this)) > 0, "No CASH in pool");

        // 計算賣出金額,包含1%的費用
        // Calculate sell amount including a 1% fee
        return (cashAmount * address(this).balance) / circulatedAmount * 99 / 100;
    }



    // 出售CASH以換取ETH
    // Sell CASH in exchange for ETH
    function sellCASH(uint256 cashAmount) public nonReentrant {

        // 確保賣家有足夠的CASH代幣
        // Ensure the seller has sufficient CASH balance
        require(balanceOf(msg.sender) >= cashAmount, "Insufficient CASH balance");
        uint256 ethAmount = calculateSellAmount(cashAmount);

        // 確保合約有足夠的ETH儲備
        // Ensure there is sufficient ETH in the reserve
        require(ethAmount <= address(this).balance, "Insufficient ETH in the reserve");

        // 轉移CASH代幣給合約
        // Transfer CASH tokens to the contract
        circulatedAmount -= cashAmount;
        _transfer(msg.sender, address(this), cashAmount);

        // 使用call方法傳送ETH給賣家,取代transfer方法
        // Use call method to send ETH to the seller, replacing transfer
        (bool sent, ) = payable(msg.sender).call{value: ethAmount}("");
        require(sent, "Failed to send ETH");

        // 觸發銷售事件
        // Trigger the sale event
        emit CASHSold(msg.sender, cashAmount, ethAmount);
    }



    // Fallback函數,處理接收ETH並購買CASH
    // Fallback function to handle receiving ETH and buying CASH
    fallback() external payable nonReentrant {
        uint256 amount = (msg.value * balanceOf(address(this)) / (10 ** decimals())) * 99 / 100;
        _transfer(address(this), msg.sender, amount);
        circulatedAmount += amount;
        emit CASHBought(msg.sender, msg.value,amount);
    }



    // Receive函數,同樣處理接收ETH並購買CASH
    // Receive function, similarly handling receiving ETH and buying CASH
    receive() external payable nonReentrant {
        uint256 amount = (msg.value * balanceOf(address(this)) / (10 ** decimals())) * 99 / 100;
        _transfer(address(this), msg.sender, amount);
        circulatedAmount += amount;
        emit CASHBought(msg.sender, msg.value,amount);
    }
}



// Copyright © 2023 Cash DAO. All rights reserved.

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"},{"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":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cashAmount","type":"uint256"}],"name":"CASHBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"cashAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"CASHSold","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculatePurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cashAmount","type":"uint256"}],"name":"calculateSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cashAmount","type":"uint256"}],"name":"sellCASH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000146200034c60201b60201c565b600a62000022919062000794565b620493e0620000329190620007e4565b60065534801562000041575f80fd5b506040518060400160405280600881526020017f436173682044414f0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43415348000000000000000000000000000000000000000000000000000000008152508160039081620000bf919062000a89565b508060049081620000d1919062000a89565b50505060016005819055506200012e73d8077bae1d76ed883904563515bcda3fef985cea620001056200034c60201b60201c565b600a62000113919062000794565b611388620001229190620007e4565b6200035460201b60201c565b620001807396a9f7faec5c1bb9a85002fad26058f732d14ef4620001576200034c60201b60201c565b600a62000165919062000794565b610bb8620001749190620007e4565b6200035460201b60201c565b620001d273fa1b70e944bdcd14f72aa7022229eecd11e39684620001a96200034c60201b60201c565b600a620001b7919062000794565b6105dc620001c69190620007e4565b6200035460201b60201c565b6200022473e9961e0f167d0679a00ec63eb8ab5e2aff4afe2f620001fb6200034c60201b60201c565b600a62000209919062000794565b6105dc620002189190620007e4565b6200035460201b60201c565b6200027673486a6af541a4fb1e72e8bd62567557ddcd9571606200024d6200034c60201b60201c565b600a6200025b919062000794565b6105dc6200026a9190620007e4565b6200035460201b60201c565b620002c873fc36adb372556c16ea79ceaf9f59a83a47adb6876200029f6200034c60201b60201c565b600a620002ad919062000794565b611770620002bc9190620007e4565b6200035460201b60201c565b6200030733620002dd6200034c60201b60201c565b600a620002eb919062000794565b62044b9c620002fb9190620007e4565b6200035460201b60201c565b62000346306200031c6200034c60201b60201c565b600a6200032a919062000794565b620aae606200033a9190620007e4565b6200035460201b60201c565b62000c6c565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003c7575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620003be919062000bb0565b60405180910390fd5b620003da5f8383620003de60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000432578060025f82825462000425919062000bcb565b9250508190555062000503565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620004be578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620004b59392919062000c16565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200054c578060025f828254039250508190555062000596565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005f5919062000c51565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200068c5780860481111562000664576200066362000602565b5b6001851615620006745780820291505b808102905062000684856200062f565b945062000644565b94509492505050565b5f82620006a6576001905062000778565b81620006b5575f905062000778565b8160018114620006ce5760028114620006d9576200070f565b600191505062000778565b60ff841115620006ee57620006ed62000602565b5b8360020a91508482111562000708576200070762000602565b5b5062000778565b5060208310610133831016604e8410600b8410161715620007495782820a90508381111562000743576200074262000602565b5b62000778565b6200075884848460016200063b565b9250905081840481111562000772576200077162000602565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620007a0826200077f565b9150620007ad8362000788565b9250620007dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000695565b905092915050565b5f620007f0826200077f565b9150620007fd836200077f565b92508282026200080d816200077f565b9150828204841483151762000827576200082662000602565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620008aa57607f821691505b602082108103620008c057620008bf62000865565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008e7565b620009308683620008e7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620009716200096b62000965846200077f565b62000948565b6200077f565b9050919050565b5f819050919050565b6200098c8362000951565b620009a46200099b8262000978565b848454620008f3565b825550505050565b5f90565b620009ba620009ac565b620009c781848462000981565b505050565b5b81811015620009ee57620009e25f82620009b0565b600181019050620009cd565b5050565b601f82111562000a3d5762000a0781620008c6565b62000a1284620008d8565b8101602085101562000a22578190505b62000a3a62000a3185620008d8565b830182620009cc565b50505b505050565b5f82821c905092915050565b5f62000a5f5f198460080262000a42565b1980831691505092915050565b5f62000a79838362000a4e565b9150826002028217905092915050565b62000a94826200082e565b67ffffffffffffffff81111562000ab05762000aaf62000838565b5b62000abc825462000892565b62000ac9828285620009f2565b5f60209050601f83116001811462000aff575f841562000aea578287015190505b62000af6858262000a6c565b86555062000b65565b601f19841662000b0f86620008c6565b5f5b8281101562000b385784890151825560018201915060208501945060208101905062000b11565b8683101562000b58578489015162000b54601f89168262000a4e565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b988262000b6d565b9050919050565b62000baa8162000b8c565b82525050565b5f60208201905062000bc55f83018462000b9f565b92915050565b5f62000bd7826200077f565b915062000be4836200077f565b925082820190508082111562000bff5762000bfe62000602565b5b92915050565b62000c10816200077f565b82525050565b5f60608201905062000c2b5f83018662000b9f565b62000c3a602083018562000c05565b62000c49604083018462000c05565b949350505050565b5f60208201905062000c665f83018462000c05565b92915050565b6119758062000c7a5f395ff3fe6080604052600436106100aa575f3560e01c8063313ce56711610063578063313ce5671461038557806370a08231146103af57806395d89b41146103eb578063a6b02bc314610415578063a9059cbb14610451578063dd62ed3e1461048d57610182565b80630500b3091461025557806306fdde031461027d578063095ea7b3146102a757806318160ddd146102e3578063194f17b51461030d57806323b872dd1461034957610182565b36610182576100b76104c9565b5f606460636100c4610518565b600a6100d09190611162565b6100d930610520565b346100e491906111ac565b6100ee919061121a565b6100f891906111ac565b610102919061121a565b905061010f303383610565565b8060065f828254610120919061124a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fc53211b2c9e4e3008482a2d6a2a5784f7446018c161aa5eaf9fabd6b048833d4348360405161016f92919061128c565b60405180910390a250610180610655565b005b61018a6104c9565b5f60646063610197610518565b600a6101a39190611162565b6101ac30610520565b346101b791906111ac565b6101c1919061121a565b6101cb91906111ac565b6101d5919061121a565b90506101e2303383610565565b8060065f8282546101f3919061124a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fc53211b2c9e4e3008482a2d6a2a5784f7446018c161aa5eaf9fabd6b048833d4348360405161024292919061128c565b60405180910390a250610253610655565b005b348015610260575f80fd5b5061027b600480360381019061027691906112e1565b61065f565b005b348015610288575f80fd5b50610291610829565b60405161029e9190611396565b60405180910390f35b3480156102b2575f80fd5b506102cd60048036038101906102c89190611410565b6108b9565b6040516102da9190611468565b60405180910390f35b3480156102ee575f80fd5b506102f76108db565b6040516103049190611481565b60405180910390f35b348015610318575f80fd5b50610333600480360381019061032e91906112e1565b6108e4565b6040516103409190611481565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a919061149a565b610967565b60405161037c9190611468565b60405180910390f35b348015610390575f80fd5b50610399610518565b6040516103a691906114f9565b60405180910390f35b3480156103ba575f80fd5b506103d560048036038101906103d09190611512565b610520565b6040516103e29190611481565b60405180910390f35b3480156103f6575f80fd5b506103ff610995565b60405161040c9190611396565b60405180910390f35b348015610420575f80fd5b5061043b600480360381019061043691906112e1565b610a25565b6040516104489190611481565b60405180910390f35b34801561045c575f80fd5b5061047760048036038101906104729190611410565b610aba565b6040516104849190611468565b60405180910390f35b348015610498575f80fd5b506104b360048036038101906104ae919061153d565b610adc565b6040516104c09190611481565b60405180910390f35b60026005540361050e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610505906115c5565b60405180910390fd5b6002600581905550565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105d5575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105cc91906115f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610645575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161063c91906115f2565b60405180910390fd5b610650838383610b5e565b505050565b6001600581905550565b6106676104c9565b8061067133610520565b10156106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a990611655565b60405180910390fd5b5f6106bc826108e4565b905047811115610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f8906116bd565b60405180910390fd5b8160065f82825461071291906116db565b92505081905550610724333084610565565b5f3373ffffffffffffffffffffffffffffffffffffffff16826040516107499061173b565b5f6040518083038185875af1925050503d805f8114610783576040519150601f19603f3d011682016040523d82523d5f602084013e610788565b606091505b50509050806107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390611799565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f97813aa3a5042d5da977c9bad376f5aa27448403a29c9ce910a61e4f9569f5a1848460405161081492919061128c565b60405180910390a25050610826610655565b50565b606060038054610838906117e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610864906117e4565b80156108af5780601f10610886576101008083540402835291602001916108af565b820191905f5260205f20905b81548152906001019060200180831161089257829003601f168201915b5050505050905090565b5f806108c3610d77565b90506108d0818585610d7e565b600191505092915050565b5f600254905090565b5f806108ef30610520565b1161092f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109269061185e565b60405180910390fd5b60646063600654478561094291906111ac565b61094c919061121a565b61095691906111ac565b610960919061121a565b9050919050565b5f80610971610d77565b905061097e858285610d90565b610989858585610565565b60019150509392505050565b6060600480546109a4906117e4565b80601f01602080910402602001604051908101604052809291908181526020018280546109d0906117e4565b8015610a1b5780601f106109f257610100808354040283529160200191610a1b565b820191905f5260205f20905b8154815290600101906020018083116109fe57829003601f168201915b5050505050905090565b5f60638210610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a60906118ec565b60405180910390fd5b60646063610a75610518565b600a610a819190611162565b610a8a30610520565b85610a9591906111ac565b610a9f919061121a565b610aa991906111ac565b610ab3919061121a565b9050919050565b5f80610ac4610d77565b9050610ad1818585610565565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bae578060025f828254610ba2919061124a565b92505081905550610c7c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c37578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c2e9392919061190a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc3578060025f8282540392505081905550610d0d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d6a9190611481565b60405180910390a3505050565b5f33905090565b610d8b8383836001610e22565b505050565b5f610d9b8484610adc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e1c5781811015610e0d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e049392919061190a565b60405180910390fd5b610e1b84848484035f610e22565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e92575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e8991906115f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f02575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ef991906115f2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610feb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fe29190611481565b60405180910390a35b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156110735780860481111561104f5761104e610ff1565b5b600185161561105e5780820291505b808102905061106c8561101e565b9450611033565b94509492505050565b5f8261108b5760019050611146565b81611098575f9050611146565b81600181146110ae57600281146110b8576110e7565b6001915050611146565b60ff8411156110ca576110c9610ff1565b5b8360020a9150848211156110e1576110e0610ff1565b5b50611146565b5060208310610133831016604e8410600b841016171561111c5782820a90508381111561111757611116610ff1565b5b611146565b611129848484600161102a565b925090508184048111156111405761113f610ff1565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61116c8261114d565b915061117783611156565b92506111a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461107c565b905092915050565b5f6111b68261114d565b91506111c18361114d565b92508282026111cf8161114d565b915082820484148315176111e6576111e5610ff1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6112248261114d565b915061122f8361114d565b92508261123f5761123e6111ed565b5b828204905092915050565b5f6112548261114d565b915061125f8361114d565b925082820190508082111561127757611276610ff1565b5b92915050565b6112868161114d565b82525050565b5f60408201905061129f5f83018561127d565b6112ac602083018461127d565b9392505050565b5f80fd5b6112c08161114d565b81146112ca575f80fd5b50565b5f813590506112db816112b7565b92915050565b5f602082840312156112f6576112f56112b3565b5b5f611303848285016112cd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611343578082015181840152602081019050611328565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6113688261130c565b6113728185611316565b9350611382818560208601611326565b61138b8161134e565b840191505092915050565b5f6020820190508181035f8301526113ae818461135e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113df826113b6565b9050919050565b6113ef816113d5565b81146113f9575f80fd5b50565b5f8135905061140a816113e6565b92915050565b5f8060408385031215611426576114256112b3565b5b5f611433858286016113fc565b9250506020611444858286016112cd565b9150509250929050565b5f8115159050919050565b6114628161144e565b82525050565b5f60208201905061147b5f830184611459565b92915050565b5f6020820190506114945f83018461127d565b92915050565b5f805f606084860312156114b1576114b06112b3565b5b5f6114be868287016113fc565b93505060206114cf868287016113fc565b92505060406114e0868287016112cd565b9150509250925092565b6114f381611156565b82525050565b5f60208201905061150c5f8301846114ea565b92915050565b5f60208284031215611527576115266112b3565b5b5f611534848285016113fc565b91505092915050565b5f8060408385031215611553576115526112b3565b5b5f611560858286016113fc565b9250506020611571858286016113fc565b9150509250929050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6115af601f83611316565b91506115ba8261157b565b602082019050919050565b5f6020820190508181035f8301526115dc816115a3565b9050919050565b6115ec816113d5565b82525050565b5f6020820190506116055f8301846115e3565b92915050565b7f496e73756666696369656e7420434153482062616c616e6365000000000000005f82015250565b5f61163f601983611316565b915061164a8261160b565b602082019050919050565b5f6020820190508181035f83015261166c81611633565b9050919050565b7f496e73756666696369656e742045544820696e207468652072657365727665005f82015250565b5f6116a7601f83611316565b91506116b282611673565b602082019050919050565b5f6020820190508181035f8301526116d48161169b565b9050919050565b5f6116e58261114d565b91506116f08361114d565b925082820390508181111561170857611707610ff1565b5b92915050565b5f81905092915050565b50565b5f6117265f8361170e565b915061173182611718565b5f82019050919050565b5f6117458261171b565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f611783601283611316565b915061178e8261174f565b602082019050919050565b5f6020820190508181035f8301526117b081611777565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806117fb57607f821691505b60208210810361180e5761180d6117b7565b5b50919050565b7f4e6f204341534820696e20706f6f6c00000000000000000000000000000000005f82015250565b5f611848600f83611316565b915061185382611814565b602082019050919050565b5f6020820190508181035f8301526118758161183c565b9050919050565b7f45616368207472616e73616374696f6e20616d6f756e742063616e206e6f74205f8201527f6d6f7265207468616e203939204554482e000000000000000000000000000000602082015250565b5f6118d6603183611316565b91506118e18261187c565b604082019050919050565b5f6020820190508181035f830152611903816118ca565b9050919050565b5f60608201905061191d5f8301866115e3565b61192a602083018561127d565b611937604083018461127d565b94935050505056fea26469706673582212200eac6803bb8a481de34ffce5fd408042b2f5fd50b016ba76012d63fe527bcde764736f6c63430008170033

Deployed Bytecode

0x6080604052600436106100aa575f3560e01c8063313ce56711610063578063313ce5671461038557806370a08231146103af57806395d89b41146103eb578063a6b02bc314610415578063a9059cbb14610451578063dd62ed3e1461048d57610182565b80630500b3091461025557806306fdde031461027d578063095ea7b3146102a757806318160ddd146102e3578063194f17b51461030d57806323b872dd1461034957610182565b36610182576100b76104c9565b5f606460636100c4610518565b600a6100d09190611162565b6100d930610520565b346100e491906111ac565b6100ee919061121a565b6100f891906111ac565b610102919061121a565b905061010f303383610565565b8060065f828254610120919061124a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fc53211b2c9e4e3008482a2d6a2a5784f7446018c161aa5eaf9fabd6b048833d4348360405161016f92919061128c565b60405180910390a250610180610655565b005b61018a6104c9565b5f60646063610197610518565b600a6101a39190611162565b6101ac30610520565b346101b791906111ac565b6101c1919061121a565b6101cb91906111ac565b6101d5919061121a565b90506101e2303383610565565b8060065f8282546101f3919061124a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fc53211b2c9e4e3008482a2d6a2a5784f7446018c161aa5eaf9fabd6b048833d4348360405161024292919061128c565b60405180910390a250610253610655565b005b348015610260575f80fd5b5061027b600480360381019061027691906112e1565b61065f565b005b348015610288575f80fd5b50610291610829565b60405161029e9190611396565b60405180910390f35b3480156102b2575f80fd5b506102cd60048036038101906102c89190611410565b6108b9565b6040516102da9190611468565b60405180910390f35b3480156102ee575f80fd5b506102f76108db565b6040516103049190611481565b60405180910390f35b348015610318575f80fd5b50610333600480360381019061032e91906112e1565b6108e4565b6040516103409190611481565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a919061149a565b610967565b60405161037c9190611468565b60405180910390f35b348015610390575f80fd5b50610399610518565b6040516103a691906114f9565b60405180910390f35b3480156103ba575f80fd5b506103d560048036038101906103d09190611512565b610520565b6040516103e29190611481565b60405180910390f35b3480156103f6575f80fd5b506103ff610995565b60405161040c9190611396565b60405180910390f35b348015610420575f80fd5b5061043b600480360381019061043691906112e1565b610a25565b6040516104489190611481565b60405180910390f35b34801561045c575f80fd5b5061047760048036038101906104729190611410565b610aba565b6040516104849190611468565b60405180910390f35b348015610498575f80fd5b506104b360048036038101906104ae919061153d565b610adc565b6040516104c09190611481565b60405180910390f35b60026005540361050e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610505906115c5565b60405180910390fd5b6002600581905550565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105d5575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105cc91906115f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610645575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161063c91906115f2565b60405180910390fd5b610650838383610b5e565b505050565b6001600581905550565b6106676104c9565b8061067133610520565b10156106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a990611655565b60405180910390fd5b5f6106bc826108e4565b905047811115610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f8906116bd565b60405180910390fd5b8160065f82825461071291906116db565b92505081905550610724333084610565565b5f3373ffffffffffffffffffffffffffffffffffffffff16826040516107499061173b565b5f6040518083038185875af1925050503d805f8114610783576040519150601f19603f3d011682016040523d82523d5f602084013e610788565b606091505b50509050806107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390611799565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f97813aa3a5042d5da977c9bad376f5aa27448403a29c9ce910a61e4f9569f5a1848460405161081492919061128c565b60405180910390a25050610826610655565b50565b606060038054610838906117e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610864906117e4565b80156108af5780601f10610886576101008083540402835291602001916108af565b820191905f5260205f20905b81548152906001019060200180831161089257829003601f168201915b5050505050905090565b5f806108c3610d77565b90506108d0818585610d7e565b600191505092915050565b5f600254905090565b5f806108ef30610520565b1161092f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109269061185e565b60405180910390fd5b60646063600654478561094291906111ac565b61094c919061121a565b61095691906111ac565b610960919061121a565b9050919050565b5f80610971610d77565b905061097e858285610d90565b610989858585610565565b60019150509392505050565b6060600480546109a4906117e4565b80601f01602080910402602001604051908101604052809291908181526020018280546109d0906117e4565b8015610a1b5780601f106109f257610100808354040283529160200191610a1b565b820191905f5260205f20905b8154815290600101906020018083116109fe57829003601f168201915b5050505050905090565b5f60638210610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a60906118ec565b60405180910390fd5b60646063610a75610518565b600a610a819190611162565b610a8a30610520565b85610a9591906111ac565b610a9f919061121a565b610aa991906111ac565b610ab3919061121a565b9050919050565b5f80610ac4610d77565b9050610ad1818585610565565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bae578060025f828254610ba2919061124a565b92505081905550610c7c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c37578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c2e9392919061190a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc3578060025f8282540392505081905550610d0d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d6a9190611481565b60405180910390a3505050565b5f33905090565b610d8b8383836001610e22565b505050565b5f610d9b8484610adc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e1c5781811015610e0d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e049392919061190a565b60405180910390fd5b610e1b84848484035f610e22565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e92575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e8991906115f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f02575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ef991906115f2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610feb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fe29190611481565b60405180910390a35b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156110735780860481111561104f5761104e610ff1565b5b600185161561105e5780820291505b808102905061106c8561101e565b9450611033565b94509492505050565b5f8261108b5760019050611146565b81611098575f9050611146565b81600181146110ae57600281146110b8576110e7565b6001915050611146565b60ff8411156110ca576110c9610ff1565b5b8360020a9150848211156110e1576110e0610ff1565b5b50611146565b5060208310610133831016604e8410600b841016171561111c5782820a90508381111561111757611116610ff1565b5b611146565b611129848484600161102a565b925090508184048111156111405761113f610ff1565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61116c8261114d565b915061117783611156565b92506111a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461107c565b905092915050565b5f6111b68261114d565b91506111c18361114d565b92508282026111cf8161114d565b915082820484148315176111e6576111e5610ff1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6112248261114d565b915061122f8361114d565b92508261123f5761123e6111ed565b5b828204905092915050565b5f6112548261114d565b915061125f8361114d565b925082820190508082111561127757611276610ff1565b5b92915050565b6112868161114d565b82525050565b5f60408201905061129f5f83018561127d565b6112ac602083018461127d565b9392505050565b5f80fd5b6112c08161114d565b81146112ca575f80fd5b50565b5f813590506112db816112b7565b92915050565b5f602082840312156112f6576112f56112b3565b5b5f611303848285016112cd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611343578082015181840152602081019050611328565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6113688261130c565b6113728185611316565b9350611382818560208601611326565b61138b8161134e565b840191505092915050565b5f6020820190508181035f8301526113ae818461135e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113df826113b6565b9050919050565b6113ef816113d5565b81146113f9575f80fd5b50565b5f8135905061140a816113e6565b92915050565b5f8060408385031215611426576114256112b3565b5b5f611433858286016113fc565b9250506020611444858286016112cd565b9150509250929050565b5f8115159050919050565b6114628161144e565b82525050565b5f60208201905061147b5f830184611459565b92915050565b5f6020820190506114945f83018461127d565b92915050565b5f805f606084860312156114b1576114b06112b3565b5b5f6114be868287016113fc565b93505060206114cf868287016113fc565b92505060406114e0868287016112cd565b9150509250925092565b6114f381611156565b82525050565b5f60208201905061150c5f8301846114ea565b92915050565b5f60208284031215611527576115266112b3565b5b5f611534848285016113fc565b91505092915050565b5f8060408385031215611553576115526112b3565b5b5f611560858286016113fc565b9250506020611571858286016113fc565b9150509250929050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6115af601f83611316565b91506115ba8261157b565b602082019050919050565b5f6020820190508181035f8301526115dc816115a3565b9050919050565b6115ec816113d5565b82525050565b5f6020820190506116055f8301846115e3565b92915050565b7f496e73756666696369656e7420434153482062616c616e6365000000000000005f82015250565b5f61163f601983611316565b915061164a8261160b565b602082019050919050565b5f6020820190508181035f83015261166c81611633565b9050919050565b7f496e73756666696369656e742045544820696e207468652072657365727665005f82015250565b5f6116a7601f83611316565b91506116b282611673565b602082019050919050565b5f6020820190508181035f8301526116d48161169b565b9050919050565b5f6116e58261114d565b91506116f08361114d565b925082820390508181111561170857611707610ff1565b5b92915050565b5f81905092915050565b50565b5f6117265f8361170e565b915061173182611718565b5f82019050919050565b5f6117458261171b565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f611783601283611316565b915061178e8261174f565b602082019050919050565b5f6020820190508181035f8301526117b081611777565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806117fb57607f821691505b60208210810361180e5761180d6117b7565b5b50919050565b7f4e6f204341534820696e20706f6f6c00000000000000000000000000000000005f82015250565b5f611848600f83611316565b915061185382611814565b602082019050919050565b5f6020820190508181035f8301526118758161183c565b9050919050565b7f45616368207472616e73616374696f6e20616d6f756e742063616e206e6f74205f8201527f6d6f7265207468616e203939204554482e000000000000000000000000000000602082015250565b5f6118d6603183611316565b91506118e18261187c565b604082019050919050565b5f6020820190508181035f830152611903816118ca565b9050919050565b5f60608201905061191d5f8301866115e3565b61192a602083018561127d565b611937604083018461127d565b94935050505056fea26469706673582212200eac6803bb8a481de34ffce5fd408042b2f5fd50b016ba76012d63fe527bcde764736f6c63430008170033

Deployed Bytecode Sourcemap

26076:5251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:21;:19;:21::i;:::-;31081:14:::1;31165:3;31160:2;31145:10;:8;:10::i;:::-;31139:2;:16;;;;:::i;:::-;31111:24;31129:4;31111:9;:24::i;:::-;31099:9;:36;;;;:::i;:::-;:57;;;;:::i;:::-;31098:64;;;;:::i;:::-;:70;;;;:::i;:::-;31081:87;;31179:44;31197:4;31204:10;31216:6;31179:9;:44::i;:::-;31254:6;31234:16;;:26;;;;;;;:::i;:::-;;;;;;;;31287:10;31276:40;;;31299:9;31309:6;31276:40;;;;;;;:::i;:::-;;;;;;;;31070:254;2389:20:::0;:18;:20::i;:::-;26076:5251;;2345:21;:19;:21::i;:::-;30641:14:::1;30725:3;30720:2;30705:10;:8;:10::i;:::-;30699:2;:16;;;;:::i;:::-;30671:24;30689:4;30671:9;:24::i;:::-;30659:9;:36;;;;:::i;:::-;:57;;;;:::i;:::-;30658:64;;;;:::i;:::-;:70;;;;:::i;:::-;30641:87;;30739:44;30757:4;30764:10;30776:6;30739:9;:44::i;:::-;30814:6;30794:16;;:26;;;;;;;:::i;:::-;;;;;;;;30847:10;30836:40;;;30859:9;30869:6;30836:40;;;;;;;:::i;:::-;;;;;;;;30630:254;2389:20:::0;:18;:20::i;:::-;26076:5251;29362:1095;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16537:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18830:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17639:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28852:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19598:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17490:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17801:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16747:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28150:586;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18124:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18369:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2425:293;1827:1;2559:7;;:19;2551:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1827:1;2692:7;:18;;;;2425:293::o;17490:84::-;17539:5;17564:2;17557:9;;17490:84;:::o;17801:118::-;17866:7;17893:9;:18;17903:7;17893:18;;;;;;;;;;;;;;;;17886:25;;17801:118;;;:::o;20232:308::-;20332:1;20316:18;;:4;:18;;;20312:88;;20385:1;20358:30;;;;;;;;;;;:::i;:::-;;;;;;;;20312:88;20428:1;20414:16;;:2;:16;;;20410:88;;20483:1;20454:32;;;;;;;;;;;:::i;:::-;;;;;;;;20410:88;20508:24;20516:4;20522:2;20526:5;20508:7;:24::i;:::-;20232:308;;;:::o;2726:213::-;1783:1;2909:7;:22;;;;2726:213::o;29362:1095::-;2345:21;:19;:21::i;:::-;29571:10:::1;29546:21;29556:10;29546:9;:21::i;:::-;:35;;29538:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29622:17;29642:31;29662:10;29642:19;:31::i;:::-;29622:51;;29811:21;29798:9;:34;;29790:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29988:10;29968:16;;:30;;;;;;;:::i;:::-;;;;;;;;30009:48;30019:10;30039:4;30046:10;30009:9;:48::i;:::-;30215:9;30238:10;30230:24;;30262:9;30230:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30214:62;;;30295:4;30287:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;30415:10;30406:43;;;30427:10;30439:9;30406:43;;;;;;;:::i;:::-;;;;;;;;29420:1037;;2389:20:::0;:18;:20::i;:::-;29362:1095;:::o;16537:91::-;16582:13;16615:5;16608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16537:91;:::o;18830:190::-;18903:4;18920:13;18936:12;:10;:12::i;:::-;18920:28;;18959:31;18968:5;18975:7;18984:5;18959:8;:31::i;:::-;19008:4;19001:11;;;18830:190;;;;:::o;17639:99::-;17691:7;17718:12;;17711:19;;17639:99;:::o;28852:429::-;28922:7;29062:1;29035:24;29053:4;29035:9;:24::i;:::-;:28;29027:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29270:3;29265:2;29246:16;;29221:21;29208:10;:34;;;;:::i;:::-;29207:55;;;;:::i;:::-;:60;;;;:::i;:::-;:66;;;;:::i;:::-;29200:73;;28852:429;;;:::o;19598:249::-;19685:4;19702:15;19720:12;:10;:12::i;:::-;19702:30;;19743:37;19759:4;19765:7;19774:5;19743:15;:37::i;:::-;19791:26;19801:4;19807:2;19811:5;19791:9;:26::i;:::-;19835:4;19828:11;;;19598:249;;;;;:::o;16747:95::-;16794:13;16827:7;16820:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16747:95;:::o;28150:586::-;28223:7;28416:2;28404:9;:14;28396:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28667:3;28662:2;28647:10;:8;:10::i;:::-;28641:2;:16;;;;:::i;:::-;28613:24;28631:4;28613:9;:24::i;:::-;28601:9;:36;;;;:::i;:::-;:57;;;;:::i;:::-;28600:64;;;;:::i;:::-;:70;;;;:::i;:::-;28593:77;;28150:586;;;:::o;18124:182::-;18193:4;18210:13;18226:12;:10;:12::i;:::-;18210:28;;18249:27;18259:5;18266:2;18270:5;18249:9;:27::i;:::-;18294:4;18287:11;;;18124:182;;;;:::o;18369:142::-;18449:7;18476:11;:18;18488:5;18476:18;;;;;;;;;;;;;;;:27;18495:7;18476:27;;;;;;;;;;;;;;;;18469:34;;18369:142;;;;:::o;20864:1135::-;20970:1;20954:18;;:4;:18;;;20950:552;;21108:5;21092:12;;:21;;;;;;;:::i;:::-;;;;;;;;20950:552;;;21146:19;21168:9;:15;21178:4;21168:15;;;;;;;;;;;;;;;;21146:37;;21216:5;21202:11;:19;21198:117;;;21274:4;21280:11;21293:5;21249:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21198:117;21470:5;21456:11;:19;21438:9;:15;21448:4;21438:15;;;;;;;;;;;;;;;:37;;;;21131:371;20950:552;21532:1;21518:16;;:2;:16;;;21514:435;;21700:5;21684:12;;:21;;;;;;;;;;;21514:435;;;21917:5;21900:9;:13;21910:2;21900:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21514:435;21981:2;21966:25;;21975:4;21966:25;;;21985:5;21966:25;;;;;;:::i;:::-;;;;;;;;20864:1135;;;:::o;10665:98::-;10718:7;10745:10;10738:17;;10665:98;:::o;23657:130::-;23742:37;23751:5;23758:7;23767:5;23774:4;23742:8;:37::i;:::-;23657:130;;;:::o;25373:487::-;25473:24;25500:25;25510:5;25517:7;25500:9;:25::i;:::-;25473:52;;25560:17;25540:16;:37;25536:317;;25617:5;25598:16;:24;25594:132;;;25677:7;25686:16;25704:5;25650:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25594:132;25769:57;25778:5;25785:7;25813:5;25794:16;:24;25820:5;25769:8;:57::i;:::-;25536:317;25462:398;25373:487;;;:::o;24638:443::-;24768:1;24751:19;;:5;:19;;;24747:91;;24823:1;24794:32;;;;;;;;;;;:::i;:::-;;;;;;;;24747:91;24871:1;24852:21;;:7;:21;;;24848:92;;24925:1;24897:31;;;;;;;;;;;:::i;:::-;;;;;;;;24848:92;24980:5;24950:11;:18;24962:5;24950:18;;;;;;;;;;;;;;;:27;24969:7;24950:27;;;;;;;;;;;;;;;:35;;;;25000:9;24996:78;;;25047:7;25031:31;;25040:5;25031:31;;;25056:5;25031:31;;;;;;:::i;:::-;;;;;;;;24996:78;24638:443;;;;:::o;7:180:1:-;55:77;52:1;45:88;152:4;149:1;142:15;176:4;173:1;166:15;193:102;235:8;282:5;279:1;275:13;254:34;;193:102;;;:::o;301:848::-;362:5;369:4;393:6;384:15;;417:5;408:14;;431:712;452:1;442:8;439:15;431:712;;;547:4;542:3;538:14;532:4;529:24;526:50;;;556:18;;:::i;:::-;526:50;606:1;596:8;592:16;589:451;;;1021:4;1014:5;1010:16;1001:25;;589:451;1071:4;1065;1061:15;1053:23;;1101:32;1124:8;1101:32;:::i;:::-;1089:44;;431:712;;;301:848;;;;;;;:::o;1155:1073::-;1209:5;1400:8;1390:40;;1421:1;1412:10;;1423:5;;1390:40;1449:4;1439:36;;1466:1;1457:10;;1468:5;;1439:36;1535:4;1583:1;1578:27;;;;1619:1;1614:191;;;;1528:277;;1578:27;1596:1;1587:10;;1598:5;;;1614:191;1659:3;1649:8;1646:17;1643:43;;;1666:18;;:::i;:::-;1643:43;1715:8;1712:1;1708:16;1699:25;;1750:3;1743:5;1740:14;1737:40;;;1757:18;;:::i;:::-;1737:40;1790:5;;;1528:277;;1914:2;1904:8;1901:16;1895:3;1889:4;1886:13;1882:36;1864:2;1854:8;1851:16;1846:2;1840:4;1837:12;1833:35;1817:111;1814:246;;;1970:8;1964:4;1960:19;1951:28;;2005:3;1998:5;1995:14;1992:40;;;2012:18;;:::i;:::-;1992:40;2045:5;;1814:246;2085:42;2123:3;2113:8;2107:4;2104:1;2085:42;:::i;:::-;2070:57;;;;2159:4;2154:3;2150:14;2143:5;2140:25;2137:51;;;2168:18;;:::i;:::-;2137:51;2217:4;2210:5;2206:16;2197:25;;1155:1073;;;;;;:::o;2234:77::-;2271:7;2300:5;2289:16;;2234:77;;;:::o;2317:86::-;2352:7;2392:4;2385:5;2381:16;2370:27;;2317:86;;;:::o;2409:281::-;2467:5;2491:23;2509:4;2491:23;:::i;:::-;2483:31;;2535:25;2551:8;2535:25;:::i;:::-;2523:37;;2579:104;2616:66;2606:8;2600:4;2579:104;:::i;:::-;2570:113;;2409:281;;;;:::o;2696:410::-;2736:7;2759:20;2777:1;2759:20;:::i;:::-;2754:25;;2793:20;2811:1;2793:20;:::i;:::-;2788:25;;2848:1;2845;2841:9;2870:30;2888:11;2870:30;:::i;:::-;2859:41;;3049:1;3040:7;3036:15;3033:1;3030:22;3010:1;3003:9;2983:83;2960:139;;3079:18;;:::i;:::-;2960:139;2744:362;2696:410;;;;:::o;3112:180::-;3160:77;3157:1;3150:88;3257:4;3254:1;3247:15;3281:4;3278:1;3271:15;3298:185;3338:1;3355:20;3373:1;3355:20;:::i;:::-;3350:25;;3389:20;3407:1;3389:20;:::i;:::-;3384:25;;3428:1;3418:35;;3433:18;;:::i;:::-;3418:35;3475:1;3472;3468:9;3463:14;;3298:185;;;;:::o;3489:191::-;3529:3;3548:20;3566:1;3548:20;:::i;:::-;3543:25;;3582:20;3600:1;3582:20;:::i;:::-;3577:25;;3625:1;3622;3618:9;3611:16;;3646:3;3643:1;3640:10;3637:36;;;3653:18;;:::i;:::-;3637:36;3489:191;;;;:::o;3686:118::-;3773:24;3791:5;3773:24;:::i;:::-;3768:3;3761:37;3686:118;;:::o;3810:332::-;3931:4;3969:2;3958:9;3954:18;3946:26;;3982:71;4050:1;4039:9;4035:17;4026:6;3982:71;:::i;:::-;4063:72;4131:2;4120:9;4116:18;4107:6;4063:72;:::i;:::-;3810:332;;;;;:::o;4229:117::-;4338:1;4335;4328:12;4475:122;4548:24;4566:5;4548:24;:::i;:::-;4541:5;4538:35;4528:63;;4587:1;4584;4577:12;4528:63;4475:122;:::o;4603:139::-;4649:5;4687:6;4674:20;4665:29;;4703:33;4730:5;4703:33;:::i;:::-;4603:139;;;;:::o;4748:329::-;4807:6;4856:2;4844:9;4835:7;4831:23;4827:32;4824:119;;;4862:79;;:::i;:::-;4824:119;4982:1;5007:53;5052:7;5043:6;5032:9;5028:22;5007:53;:::i;:::-;4997:63;;4953:117;4748:329;;;;:::o;5083:99::-;5135:6;5169:5;5163:12;5153:22;;5083:99;;;:::o;5188:169::-;5272:11;5306:6;5301:3;5294:19;5346:4;5341:3;5337:14;5322:29;;5188:169;;;;:::o;5363:246::-;5444:1;5454:113;5468:6;5465:1;5462:13;5454:113;;;5553:1;5548:3;5544:11;5538:18;5534:1;5529:3;5525:11;5518:39;5490:2;5487:1;5483:10;5478:15;;5454:113;;;5601:1;5592:6;5587:3;5583:16;5576:27;5425:184;5363:246;;;:::o;5615:102::-;5656:6;5707:2;5703:7;5698:2;5691:5;5687:14;5683:28;5673:38;;5615:102;;;:::o;5723:377::-;5811:3;5839:39;5872:5;5839:39;:::i;:::-;5894:71;5958:6;5953:3;5894:71;:::i;:::-;5887:78;;5974:65;6032:6;6027:3;6020:4;6013:5;6009:16;5974:65;:::i;:::-;6064:29;6086:6;6064:29;:::i;:::-;6059:3;6055:39;6048:46;;5815:285;5723:377;;;;:::o;6106:313::-;6219:4;6257:2;6246:9;6242:18;6234:26;;6306:9;6300:4;6296:20;6292:1;6281:9;6277:17;6270:47;6334:78;6407:4;6398:6;6334:78;:::i;:::-;6326:86;;6106:313;;;;:::o;6425:126::-;6462:7;6502:42;6495:5;6491:54;6480:65;;6425:126;;;:::o;6557:96::-;6594:7;6623:24;6641:5;6623:24;:::i;:::-;6612:35;;6557:96;;;:::o;6659:122::-;6732:24;6750:5;6732:24;:::i;:::-;6725:5;6722:35;6712:63;;6771:1;6768;6761:12;6712:63;6659:122;:::o;6787:139::-;6833:5;6871:6;6858:20;6849:29;;6887:33;6914:5;6887:33;:::i;:::-;6787:139;;;;:::o;6932:474::-;7000:6;7008;7057:2;7045:9;7036:7;7032:23;7028:32;7025:119;;;7063:79;;:::i;:::-;7025:119;7183:1;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7154:117;7310:2;7336:53;7381:7;7372:6;7361:9;7357:22;7336:53;:::i;:::-;7326:63;;7281:118;6932:474;;;;;:::o;7412:90::-;7446:7;7489:5;7482:13;7475:21;7464:32;;7412:90;;;:::o;7508:109::-;7589:21;7604:5;7589:21;:::i;:::-;7584:3;7577:34;7508:109;;:::o;7623:210::-;7710:4;7748:2;7737:9;7733:18;7725:26;;7761:65;7823:1;7812:9;7808:17;7799:6;7761:65;:::i;:::-;7623:210;;;;:::o;7839:222::-;7932:4;7970:2;7959:9;7955:18;7947:26;;7983:71;8051:1;8040:9;8036:17;8027:6;7983:71;:::i;:::-;7839:222;;;;:::o;8067:619::-;8144:6;8152;8160;8209:2;8197:9;8188:7;8184:23;8180:32;8177:119;;;8215:79;;:::i;:::-;8177:119;8335:1;8360:53;8405:7;8396:6;8385:9;8381:22;8360:53;:::i;:::-;8350:63;;8306:117;8462:2;8488:53;8533:7;8524:6;8513:9;8509:22;8488:53;:::i;:::-;8478:63;;8433:118;8590:2;8616:53;8661:7;8652:6;8641:9;8637:22;8616:53;:::i;:::-;8606:63;;8561:118;8067:619;;;;;:::o;8692:112::-;8775:22;8791:5;8775:22;:::i;:::-;8770:3;8763:35;8692:112;;:::o;8810:214::-;8899:4;8937:2;8926:9;8922:18;8914:26;;8950:67;9014:1;9003:9;8999:17;8990:6;8950:67;:::i;:::-;8810:214;;;;:::o;9030:329::-;9089:6;9138:2;9126:9;9117:7;9113:23;9109:32;9106:119;;;9144:79;;:::i;:::-;9106:119;9264:1;9289:53;9334:7;9325:6;9314:9;9310:22;9289:53;:::i;:::-;9279:63;;9235:117;9030:329;;;;:::o;9365:474::-;9433:6;9441;9490:2;9478:9;9469:7;9465:23;9461:32;9458:119;;;9496:79;;:::i;:::-;9458:119;9616:1;9641:53;9686:7;9677:6;9666:9;9662:22;9641:53;:::i;:::-;9631:63;;9587:117;9743:2;9769:53;9814:7;9805:6;9794:9;9790:22;9769:53;:::i;:::-;9759:63;;9714:118;9365:474;;;;;:::o;9845:181::-;9985:33;9981:1;9973:6;9969:14;9962:57;9845:181;:::o;10032:366::-;10174:3;10195:67;10259:2;10254:3;10195:67;:::i;:::-;10188:74;;10271:93;10360:3;10271:93;:::i;:::-;10389:2;10384:3;10380:12;10373:19;;10032:366;;;:::o;10404:419::-;10570:4;10608:2;10597:9;10593:18;10585:26;;10657:9;10651:4;10647:20;10643:1;10632:9;10628:17;10621:47;10685:131;10811:4;10685:131;:::i;:::-;10677:139;;10404:419;;;:::o;10829:118::-;10916:24;10934:5;10916:24;:::i;:::-;10911:3;10904:37;10829:118;;:::o;10953:222::-;11046:4;11084:2;11073:9;11069:18;11061:26;;11097:71;11165:1;11154:9;11150:17;11141:6;11097:71;:::i;:::-;10953:222;;;;:::o;11181:175::-;11321:27;11317:1;11309:6;11305:14;11298:51;11181:175;:::o;11362:366::-;11504:3;11525:67;11589:2;11584:3;11525:67;:::i;:::-;11518:74;;11601:93;11690:3;11601:93;:::i;:::-;11719:2;11714:3;11710:12;11703:19;;11362:366;;;:::o;11734:419::-;11900:4;11938:2;11927:9;11923:18;11915:26;;11987:9;11981:4;11977:20;11973:1;11962:9;11958:17;11951:47;12015:131;12141:4;12015:131;:::i;:::-;12007:139;;11734:419;;;:::o;12159:181::-;12299:33;12295:1;12287:6;12283:14;12276:57;12159:181;:::o;12346:366::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:419::-;12884:4;12922:2;12911:9;12907:18;12899:26;;12971:9;12965:4;12961:20;12957:1;12946:9;12942:17;12935:47;12999:131;13125:4;12999:131;:::i;:::-;12991:139;;12718:419;;;:::o;13143:194::-;13183:4;13203:20;13221:1;13203:20;:::i;:::-;13198:25;;13237:20;13255:1;13237:20;:::i;:::-;13232:25;;13281:1;13278;13274:9;13266:17;;13305:1;13299:4;13296:11;13293:37;;;13310:18;;:::i;:::-;13293:37;13143:194;;;;:::o;13343:147::-;13444:11;13481:3;13466:18;;13343:147;;;;:::o;13496:114::-;;:::o;13616:398::-;13775:3;13796:83;13877:1;13872:3;13796:83;:::i;:::-;13789:90;;13888:93;13977:3;13888:93;:::i;:::-;14006:1;14001:3;13997:11;13990:18;;13616:398;;;:::o;14020:379::-;14204:3;14226:147;14369:3;14226:147;:::i;:::-;14219:154;;14390:3;14383:10;;14020:379;;;:::o;14405:168::-;14545:20;14541:1;14533:6;14529:14;14522:44;14405:168;:::o;14579:366::-;14721:3;14742:67;14806:2;14801:3;14742:67;:::i;:::-;14735:74;;14818:93;14907:3;14818:93;:::i;:::-;14936:2;14931:3;14927:12;14920:19;;14579:366;;;:::o;14951:419::-;15117:4;15155:2;15144:9;15140:18;15132:26;;15204:9;15198:4;15194:20;15190:1;15179:9;15175:17;15168:47;15232:131;15358:4;15232:131;:::i;:::-;15224:139;;14951:419;;;:::o;15376:180::-;15424:77;15421:1;15414:88;15521:4;15518:1;15511:15;15545:4;15542:1;15535:15;15562:320;15606:6;15643:1;15637:4;15633:12;15623:22;;15690:1;15684:4;15680:12;15711:18;15701:81;;15767:4;15759:6;15755:17;15745:27;;15701:81;15829:2;15821:6;15818:14;15798:18;15795:38;15792:84;;15848:18;;:::i;:::-;15792:84;15613:269;15562:320;;;:::o;15888:165::-;16028:17;16024:1;16016:6;16012:14;16005:41;15888:165;:::o;16059:366::-;16201:3;16222:67;16286:2;16281:3;16222:67;:::i;:::-;16215:74;;16298:93;16387:3;16298:93;:::i;:::-;16416:2;16411:3;16407:12;16400:19;;16059:366;;;:::o;16431:419::-;16597:4;16635:2;16624:9;16620:18;16612:26;;16684:9;16678:4;16674:20;16670:1;16659:9;16655:17;16648:47;16712:131;16838:4;16712:131;:::i;:::-;16704:139;;16431:419;;;:::o;16856:236::-;16996:34;16992:1;16984:6;16980:14;16973:58;17065:19;17060:2;17052:6;17048:15;17041:44;16856:236;:::o;17098:366::-;17240:3;17261:67;17325:2;17320:3;17261:67;:::i;:::-;17254:74;;17337:93;17426:3;17337:93;:::i;:::-;17455:2;17450:3;17446:12;17439:19;;17098:366;;;:::o;17470:419::-;17636:4;17674:2;17663:9;17659:18;17651:26;;17723:9;17717:4;17713:20;17709:1;17698:9;17694:17;17687:47;17751:131;17877:4;17751:131;:::i;:::-;17743:139;;17470:419;;;:::o;17895:442::-;18044:4;18082:2;18071:9;18067:18;18059:26;;18095:71;18163:1;18152:9;18148:17;18139:6;18095:71;:::i;:::-;18176:72;18244:2;18233:9;18229:18;18220:6;18176:72;:::i;:::-;18258;18326:2;18315:9;18311:18;18302:6;18258:72;:::i;:::-;17895:442;;;;;;:::o

Swarm Source

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