ETH Price: $3,464.03 (+3.91%)

Token

Make Ethereum Great Again (MEGA)
 

Overview

Max Total Supply

1,000,000,000 MEGA

Holders

279

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.673911866 MEGA

Value
$0.00
0xa50c08f58801c07be3f050229571d6e31fa466d6
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:
MEGA

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**
*TG: https://t.me/MegaEthportal
*Twitter: x.com/megaoneth
*Web: megaeth.org
*/

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

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

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

/**
 * @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);
}
/**
 * @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 9;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedInnerCall();

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason or custom error, it is bubbled
     * up by this function (like regular Solidity function calls). However, if
     * the call reverted with no returned reason, this function reverts with a
     * {FailedInnerCall} error.
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
     * unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {FailedInnerCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}
/**
 * @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);
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

}

contract MEGA is Context, ERC20, Ownable {
    using Address for address;
    using SafeMath for uint256;
    uint256 private started;
    uint256 private end;
    uint256 private _supply;
    uint256 private tax = 30; //30%
    address payable private _teamWallet;
    bool public swapping;
    bool private tradingEnabled;

    event TradingEnabled(
        bool indexed tradingActivated
    );

    constructor(uint256 _end) ERC20("Make Ethereum Great Again", "MEGA") Ownable(msg.sender) {

        _teamWallet = payable(msg.sender);
        _supply = 1 * 10 ** 9 * 10 ** decimals();
        end = _end;

        _mint(owner(), _supply);
    }

    receive() external payable {

  	}

    function burn(uint256 amount) public {
        _burn(msg.sender, amount * 10 ** decimals());
    }

    function enableTrading() public onlyOwner {
        tradingEnabled = true;
        started = block.timestamp;

        emit TradingEnabled(true);
    }

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        
        if(!tradingEnabled && from != owner() && to != owner()) {
            revert("!Trading");
        }

        else if(block.timestamp <= started + end && from != owner() && to != owner()) {
            require(tx.gasprice <= block.basefee + 5 gwei, "Gas price too high");
            uint256 balance = balanceOf(to);
            require(balance + amount <= ((totalSupply() * 2000) / 100000), "Transfer amount exceeds maximum wallet");
            uint256 integerAmount = amount / 10**decimals();
            require(integerAmount != amount, "Amount cannot be integer value");
            uint256 taxAmount = amount.mul(tax).div(100);
            super._update(from, _teamWallet, taxAmount);
            super._update(from, to, amount.sub(taxAmount));
        }

        else {
            super._update(from, to, amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_end","type":"uint256"}],"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":"bool","name":"tradingActivated","type":"bool"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052601e60095534801562000015575f80fd5b50604051620019c3380380620019c3833981016040819052620000389162000749565b336040518060400160405280601981526020017f4d616b6520457468657265756d20477265617420416761696e00000000000000815250604051806040016040528060048152602001634d45474160e01b81525081600390816200009d9190620007fe565b506004620000ac8282620007fe565b5050506001600160a01b038116620000de57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620000e98162000151565b50600a80546001600160a01b0319163317905562000105600990565b6200011290600a620009d3565b6200012290633b9aca00620009e3565b60085560078190556200014a620001416005546001600160a01b031690565b600854620001a2565b5062000a97565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620001cd5760405163ec442f0560e01b81525f6004820152602401620000d5565b620001da5f8383620001de565b5050565b600a54600160a81b900460ff161580156200020757506005546001600160a01b03848116911614155b80156200022257506005546001600160a01b03838116911614155b156200025c5760405162461bcd60e51b81526020600482015260086024820152672154726164696e6760c01b6044820152606401620000d5565b6007546006546200026e9190620009fd565b42111580156200028c57506005546001600160a01b03848116911614155b8015620002a757506005546001600160a01b03838116911614155b156200047957620002be4864012a05f200620009fd565b3a1115620003045760405162461bcd60e51b815260206004820152601260248201527108ec2e640e0e4d2c6ca40e8dede40d0d2ced60731b6044820152606401620000d5565b6001600160a01b0382165f90815260208190526040902054600254620186a09062000332906107d0620009e3565b6200033e919062000a13565b6200034a8383620009fd565b1115620003a95760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657220616d6f756e742065786365656473206d6178696d756d206044820152651dd85b1b195d60d21b6064820152608401620000d5565b5f620003b86009600a620009d3565b620003c4908462000a13565b9050828103620004175760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e742063616e6e6f7420626520696e74656765722076616c756500006044820152606401620000d5565b5f6200043c606462000435600954876200048b60201b90919060201c565b906200051a565b600a54909150620004599087906001600160a01b03168362000563565b6200047186866200046b878562000692565b62000563565b505050505050565b6200048683838362000563565b505050565b5f825f036200049c57505f62000514565b5f620004a98385620009e3565b905082620004b8858362000a13565b14620005115760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401620000d5565b90505b92915050565b5f6200051183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620006db60201b60201c565b6001600160a01b03831662000591578060025f828254620005859190620009fd565b90915550620006039050565b6001600160a01b0383165f9081526020819052604090205481811015620005e55760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000d5565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821662000621576002805482900390556200063f565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200068591815260200190565b60405180910390a3505050565b5f6200051183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200071560201b60201c565b5f8183620006fe5760405162461bcd60e51b8152600401620000d5919062000a33565b505f6200070c848662000a13565b95945050505050565b5f81848411156200073b5760405162461bcd60e51b8152600401620000d5919062000a33565b505f6200070c848662000a81565b5f602082840312156200075a575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200078a57607f821691505b602082108103620007a957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200048657805f5260205f20601f840160051c81016020851015620007d65750805b601f840160051c820191505b81811015620007f7575f8155600101620007e2565b5050505050565b81516001600160401b038111156200081a576200081a62000761565b62000832816200082b845462000775565b84620007af565b602080601f83116001811462000868575f8415620008505750858301515b5f19600386901b1c1916600185901b17855562000471565b5f85815260208120601f198616915b82811015620008985788860151825594840194600190910190840162000877565b5085821015620008b657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200091a57815f1904821115620008fe57620008fe620008c6565b808516156200090c57918102915b93841c9390800290620008df565b509250929050565b5f82620009325750600162000514565b816200094057505f62000514565b8160018114620009595760028114620009645762000984565b600191505062000514565b60ff841115620009785762000978620008c6565b50506001821b62000514565b5060208310610133831016604e8410600b8410161715620009a9575081810a62000514565b620009b58383620008da565b805f1904821115620009cb57620009cb620008c6565b029392505050565b5f6200051160ff84168362000922565b8082028115828204841417620005145762000514620008c6565b80820180821115620005145762000514620008c6565b5f8262000a2e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602080835283518060208501525f5b8181101562000a615785810183015185820160400152820162000a43565b505f604082860101526040601f19601f8301168501019250505092915050565b81810381811115620005145762000514620008c6565b610f1e8062000aa55f395ff3fe6080604052600436106100e7575f3560e01c806370a082311161008757806395d89b411161005757806395d89b4114610267578063a9059cbb1461027b578063dd62ed3e1461029a578063f2fde38b146102de575f80fd5b806370a08231146101e4578063715018a6146102185780638a8c523c1461022c5780638da5cb5b14610240575f80fd5b806318160ddd116100c257806318160ddd1461016b57806323b872dd14610189578063313ce567146101a857806342966c68146101c3575f80fd5b806306fdde03146100f2578063095ea7b31461011c5780631732cded1461014b575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b506101066102fd565b6040516101139190610c29565b60405180910390f35b348015610127575f80fd5b5061013b610136366004610c90565b61038d565b6040519015158152602001610113565b348015610156575f80fd5b50600a5461013b90600160a01b900460ff1681565b348015610176575f80fd5b506002545b604051908152602001610113565b348015610194575f80fd5b5061013b6101a3366004610cb8565b6103a6565b3480156101b3575f80fd5b5060405160098152602001610113565b3480156101ce575f80fd5b506101e26101dd366004610cf1565b6103c9565b005b3480156101ef575f80fd5b5061017b6101fe366004610d08565b6001600160a01b03165f9081526020819052604090205490565b348015610223575f80fd5b506101e26103eb565b348015610237575f80fd5b506101e26103fe565b34801561024b575f80fd5b506005546040516001600160a01b039091168152602001610113565b348015610272575f80fd5b5061010661044a565b348015610286575f80fd5b5061013b610295366004610c90565b610459565b3480156102a5575f80fd5b5061017b6102b4366004610d21565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156102e9575f80fd5b506101e26102f8366004610d08565b610466565b60606003805461030c90610d52565b80601f016020809104026020016040519081016040528092919081815260200182805461033890610d52565b80156103835780601f1061035a57610100808354040283529160200191610383565b820191905f5260205f20905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b5f3361039a8185856104a5565b60019150505b92915050565b5f336103b38582856104b7565b6103be858585610532565b506001949350505050565b6103e8336103d96009600a610e7e565b6103e39084610e8c565b61058f565b50565b6103f36105c7565b6103fc5f6105f4565b565b6104066105c7565b600a805460ff60a81b1916600160a81b179055426006556040516001907fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a905f90a2565b60606004805461030c90610d52565b5f3361039a818585610532565b61046e6105c7565b6001600160a01b03811661049c57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6103e8816105f4565b6104b28383836001610645565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811461052c578181101561051e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610493565b61052c84848484035f610645565b50505050565b6001600160a01b03831661055b57604051634b637e8f60e11b81525f6004820152602401610493565b6001600160a01b0382166105845760405163ec442f0560e01b81525f6004820152602401610493565b6104b2838383610717565b6001600160a01b0382166105b857604051634b637e8f60e11b81525f6004820152602401610493565b6105c3825f83610717565b5050565b6005546001600160a01b031633146103fc5760405163118cdaa760e01b8152336004820152602401610493565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03841661066e5760405163e602df0560e01b81525f6004820152602401610493565b6001600160a01b03831661069757604051634a1406b160e11b81525f6004820152602401610493565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561052c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161070991815260200190565b60405180910390a350505050565b600a54600160a81b900460ff1615801561073f57506005546001600160a01b03848116911614155b801561075957506005546001600160a01b03838116911614155b156107915760405162461bcd60e51b81526020600482015260086024820152672154726164696e6760c01b6044820152606401610493565b6007546006546107a19190610ea3565b42111580156107be57506005546001600160a01b03848116911614155b80156107d857506005546001600160a01b03838116911614155b1561098d576107ec4864012a05f200610ea3565b3a11156108305760405162461bcd60e51b815260206004820152601260248201527108ec2e640e0e4d2c6ca40e8dede40d0d2ced60731b6044820152606401610493565b6001600160a01b0382165f90815260208190526040902054600254620186a09061085c906107d0610e8c565b6108669190610eb6565b6108708383610ea3565b11156108cd5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657220616d6f756e742065786365656473206d6178696d756d206044820152651dd85b1b195d60d21b6064820152608401610493565b5f6108da6009600a610e7e565b6108e49084610eb6565b90508281036109355760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e742063616e6e6f7420626520696e74656765722076616c756500006044820152606401610493565b5f61095660646109506009548761099890919063ffffffff16565b90610a1d565b600a549091506109719087906001600160a01b031683610a5e565b61098586866109808785610b84565b610a5e565b505050505050565b6104b2838383610a5e565b5f825f036109a757505f6103a0565b5f6109b28385610e8c565b9050826109bf8583610eb6565b14610a165760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610493565b9392505050565b5f610a1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610bc5565b6001600160a01b038316610a88578060025f828254610a7d9190610ea3565b90915550610af89050565b6001600160a01b0383165f9081526020819052604090205481811015610ada5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610493565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b1457600280548290039055610b32565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b7791815260200190565b60405180910390a3505050565b5f610a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bfa565b5f8183610be55760405162461bcd60e51b81526004016104939190610c29565b505f610bf18486610eb6565b95945050505050565b5f8184841115610c1d5760405162461bcd60e51b81526004016104939190610c29565b505f610bf18486610ed5565b5f602080835283518060208501525f5b81811015610c5557858101830151858201604001528201610c39565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610c8b575f80fd5b919050565b5f8060408385031215610ca1575f80fd5b610caa83610c75565b946020939093013593505050565b5f805f60608486031215610cca575f80fd5b610cd384610c75565b9250610ce160208501610c75565b9150604084013590509250925092565b5f60208284031215610d01575f80fd5b5035919050565b5f60208284031215610d18575f80fd5b610a1682610c75565b5f8060408385031215610d32575f80fd5b610d3b83610c75565b9150610d4960208401610c75565b90509250929050565b600181811c90821680610d6657607f821691505b602082108103610d8457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115610dd857815f1904821115610dbe57610dbe610d8a565b80851615610dcb57918102915b93841c9390800290610da3565b509250929050565b5f82610dee575060016103a0565b81610dfa57505f6103a0565b8160018114610e105760028114610e1a57610e36565b60019150506103a0565b60ff841115610e2b57610e2b610d8a565b50506001821b6103a0565b5060208310610133831016604e8410600b8410161715610e59575081810a6103a0565b610e638383610d9e565b805f1904821115610e7657610e76610d8a565b029392505050565b5f610a1660ff841683610de0565b80820281158282048414176103a0576103a0610d8a565b808201808211156103a0576103a0610d8a565b5f82610ed057634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156103a0576103a0610d8a56fea264697066735822122042a6ce0b6fd76327b9aaffcb6b7c358ab68d9dfbd49e70aa0877ca4c91f31d2c64736f6c634300081600330000000000000000000000000000000000000000000000000000000000000003

Deployed Bytecode

0x6080604052600436106100e7575f3560e01c806370a082311161008757806395d89b411161005757806395d89b4114610267578063a9059cbb1461027b578063dd62ed3e1461029a578063f2fde38b146102de575f80fd5b806370a08231146101e4578063715018a6146102185780638a8c523c1461022c5780638da5cb5b14610240575f80fd5b806318160ddd116100c257806318160ddd1461016b57806323b872dd14610189578063313ce567146101a857806342966c68146101c3575f80fd5b806306fdde03146100f2578063095ea7b31461011c5780631732cded1461014b575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b506101066102fd565b6040516101139190610c29565b60405180910390f35b348015610127575f80fd5b5061013b610136366004610c90565b61038d565b6040519015158152602001610113565b348015610156575f80fd5b50600a5461013b90600160a01b900460ff1681565b348015610176575f80fd5b506002545b604051908152602001610113565b348015610194575f80fd5b5061013b6101a3366004610cb8565b6103a6565b3480156101b3575f80fd5b5060405160098152602001610113565b3480156101ce575f80fd5b506101e26101dd366004610cf1565b6103c9565b005b3480156101ef575f80fd5b5061017b6101fe366004610d08565b6001600160a01b03165f9081526020819052604090205490565b348015610223575f80fd5b506101e26103eb565b348015610237575f80fd5b506101e26103fe565b34801561024b575f80fd5b506005546040516001600160a01b039091168152602001610113565b348015610272575f80fd5b5061010661044a565b348015610286575f80fd5b5061013b610295366004610c90565b610459565b3480156102a5575f80fd5b5061017b6102b4366004610d21565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156102e9575f80fd5b506101e26102f8366004610d08565b610466565b60606003805461030c90610d52565b80601f016020809104026020016040519081016040528092919081815260200182805461033890610d52565b80156103835780601f1061035a57610100808354040283529160200191610383565b820191905f5260205f20905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b5f3361039a8185856104a5565b60019150505b92915050565b5f336103b38582856104b7565b6103be858585610532565b506001949350505050565b6103e8336103d96009600a610e7e565b6103e39084610e8c565b61058f565b50565b6103f36105c7565b6103fc5f6105f4565b565b6104066105c7565b600a805460ff60a81b1916600160a81b179055426006556040516001907fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a905f90a2565b60606004805461030c90610d52565b5f3361039a818585610532565b61046e6105c7565b6001600160a01b03811661049c57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6103e8816105f4565b6104b28383836001610645565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811461052c578181101561051e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610493565b61052c84848484035f610645565b50505050565b6001600160a01b03831661055b57604051634b637e8f60e11b81525f6004820152602401610493565b6001600160a01b0382166105845760405163ec442f0560e01b81525f6004820152602401610493565b6104b2838383610717565b6001600160a01b0382166105b857604051634b637e8f60e11b81525f6004820152602401610493565b6105c3825f83610717565b5050565b6005546001600160a01b031633146103fc5760405163118cdaa760e01b8152336004820152602401610493565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03841661066e5760405163e602df0560e01b81525f6004820152602401610493565b6001600160a01b03831661069757604051634a1406b160e11b81525f6004820152602401610493565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561052c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161070991815260200190565b60405180910390a350505050565b600a54600160a81b900460ff1615801561073f57506005546001600160a01b03848116911614155b801561075957506005546001600160a01b03838116911614155b156107915760405162461bcd60e51b81526020600482015260086024820152672154726164696e6760c01b6044820152606401610493565b6007546006546107a19190610ea3565b42111580156107be57506005546001600160a01b03848116911614155b80156107d857506005546001600160a01b03838116911614155b1561098d576107ec4864012a05f200610ea3565b3a11156108305760405162461bcd60e51b815260206004820152601260248201527108ec2e640e0e4d2c6ca40e8dede40d0d2ced60731b6044820152606401610493565b6001600160a01b0382165f90815260208190526040902054600254620186a09061085c906107d0610e8c565b6108669190610eb6565b6108708383610ea3565b11156108cd5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657220616d6f756e742065786365656473206d6178696d756d206044820152651dd85b1b195d60d21b6064820152608401610493565b5f6108da6009600a610e7e565b6108e49084610eb6565b90508281036109355760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e742063616e6e6f7420626520696e74656765722076616c756500006044820152606401610493565b5f61095660646109506009548761099890919063ffffffff16565b90610a1d565b600a549091506109719087906001600160a01b031683610a5e565b61098586866109808785610b84565b610a5e565b505050505050565b6104b2838383610a5e565b5f825f036109a757505f6103a0565b5f6109b28385610e8c565b9050826109bf8583610eb6565b14610a165760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610493565b9392505050565b5f610a1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610bc5565b6001600160a01b038316610a88578060025f828254610a7d9190610ea3565b90915550610af89050565b6001600160a01b0383165f9081526020819052604090205481811015610ada5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610493565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b1457600280548290039055610b32565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b7791815260200190565b60405180910390a3505050565b5f610a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bfa565b5f8183610be55760405162461bcd60e51b81526004016104939190610c29565b505f610bf18486610eb6565b95945050505050565b5f8184841115610c1d5760405162461bcd60e51b81526004016104939190610c29565b505f610bf18486610ed5565b5f602080835283518060208501525f5b81811015610c5557858101830151858201604001528201610c39565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610c8b575f80fd5b919050565b5f8060408385031215610ca1575f80fd5b610caa83610c75565b946020939093013593505050565b5f805f60608486031215610cca575f80fd5b610cd384610c75565b9250610ce160208501610c75565b9150604084013590509250925092565b5f60208284031215610d01575f80fd5b5035919050565b5f60208284031215610d18575f80fd5b610a1682610c75565b5f8060408385031215610d32575f80fd5b610d3b83610c75565b9150610d4960208401610c75565b90509250929050565b600181811c90821680610d6657607f821691505b602082108103610d8457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115610dd857815f1904821115610dbe57610dbe610d8a565b80851615610dcb57918102915b93841c9390800290610da3565b509250929050565b5f82610dee575060016103a0565b81610dfa57505f6103a0565b8160018114610e105760028114610e1a57610e36565b60019150506103a0565b60ff841115610e2b57610e2b610d8a565b50506001821b6103a0565b5060208310610133831016604e8410600b8410161715610e59575081810a6103a0565b610e638383610d9e565b805f1904821115610e7657610e76610d8a565b029392505050565b5f610a1660ff841683610de0565b80820281158282048414176103a0576103a0610d8a565b808201808211156103a0576103a0610d8a565b5f82610ed057634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156103a0576103a0610d8a56fea264697066735822122042a6ce0b6fd76327b9aaffcb6b7c358ab68d9dfbd49e70aa0877ca4c91f31d2c64736f6c63430008160033

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

0000000000000000000000000000000000000000000000000000000000000003

-----Decoded View---------------
Arg [0] : _end (uint256): 3

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000003


Deployed Bytecode Sourcemap

32360:1981:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12575:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14867:190;;;;;;;;;;-1:-1:-1;14867:190:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;14867:190:0;1004:187:1;32638:20:0;;;;;;;;;;-1:-1:-1;32638:20:0;;;;-1:-1:-1;;;32638:20:0;;;;;;13676:99;;;;;;;;;;-1:-1:-1;13755:12:0;;13676:99;;;1342:25:1;;;1330:2;1315:18;13676:99:0;1196:177:1;15635:249:0;;;;;;;;;;-1:-1:-1;15635:249:0;;;;;:::i;:::-;;:::i;13528:83::-;;;;;;;;;;-1:-1:-1;13528:83:0;;13602:1;1853:36:1;;1841:2;1826:18;13528:83:0;1711:184:1;33080:100:0;;;;;;;;;;-1:-1:-1;33080:100:0;;;;;:::i;:::-;;:::i;:::-;;13838:118;;;;;;;;;;-1:-1:-1;13838:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;13930:18:0;13903:7;13930:18;;;;;;;;;;;;13838:118;30379:103;;;;;;;;;;;;;:::i;33188:156::-;;;;;;;;;;;;;:::i;29704:87::-;;;;;;;;;;-1:-1:-1;29777:6:0;;29704:87;;-1:-1:-1;;;;;29777:6:0;;;2422:51:1;;2410:2;2395:18;29704:87:0;2276:203:1;12785:95:0;;;;;;;;;;;;;:::i;14161:182::-;;;;;;;;;;-1:-1:-1;14161:182:0;;;;;:::i;:::-;;:::i;14406:142::-;;;;;;;;;;-1:-1:-1;14406:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;14513:18:0;;;14486:7;14513:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14406:142;30637:220;;;;;;;;;;-1:-1:-1;30637:220:0;;;;;:::i;:::-;;:::i;12575:91::-;12620:13;12653:5;12646:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12575:91;:::o;14867:190::-;14940:4;4010:10;14996:31;4010:10;15012:7;15021:5;14996:8;:31::i;:::-;15045:4;15038:11;;;14867:190;;;;;:::o;15635:249::-;15722:4;4010:10;15780:37;15796:4;4010:10;15811:5;15780:15;:37::i;:::-;15828:26;15838:4;15844:2;15848:5;15828:9;:26::i;:::-;-1:-1:-1;15872:4:0;;15635:249;-1:-1:-1;;;;15635:249:0:o;33080:100::-;33128:44;33134:10;33155:16;13602:1;33155:2;:16;:::i;:::-;33146:25;;:6;:25;:::i;:::-;33128:5;:44::i;:::-;33080:100;:::o;30379:103::-;29590:13;:11;:13::i;:::-;30444:30:::1;30471:1;30444:18;:30::i;:::-;30379:103::o:0;33188:156::-;29590:13;:11;:13::i;:::-;33241:14:::1;:21:::0;;-1:-1:-1;;;;33241:21:0::1;-1:-1:-1::0;;;33241:21:0::1;::::0;;33283:15:::1;33273:7;:25:::0;33316:20:::1;::::0;33258:4:::1;::::0;33316:20:::1;::::0;33241:21;;33316:20:::1;33188:156::o:0;12785:95::-;12832:13;12865:7;12858:14;;;;;:::i;14161:182::-;14230:4;4010:10;14286:27;4010:10;14303:2;14307:5;14286:9;:27::i;30637:220::-;29590:13;:11;:13::i;:::-;-1:-1:-1;;;;;30722:22:0;::::1;30718:93;;30768:31;::::0;-1:-1:-1;;;30768:31:0;;30796:1:::1;30768:31;::::0;::::1;2422:51:1::0;2395:18;;30768:31:0::1;;;;;;;;30718:93;30821:28;30840:8;30821:18;:28::i;19694:130::-:0;19779:37;19788:5;19795:7;19804:5;19811:4;19779:8;:37::i;:::-;19694:130;;;:::o;21410:487::-;-1:-1:-1;;;;;14513:18:0;;;21510:24;14513:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;21577:37:0;;21573:317;;21654:5;21635:16;:24;21631:132;;;21687:60;;-1:-1:-1;;;21687:60:0;;-1:-1:-1;;;;;5036:32:1;;21687:60:0;;;5018:51:1;5085:18;;;5078:34;;;5128:18;;;5121:34;;;4991:18;;21687:60:0;4816:345:1;21631:132:0;21806:57;21815:5;21822:7;21850:5;21831:16;:24;21857:5;21806:8;:57::i;:::-;21499:398;21410:487;;;:::o;16269:308::-;-1:-1:-1;;;;;16353:18:0;;16349:88;;16395:30;;-1:-1:-1;;;16395:30:0;;16422:1;16395:30;;;2422:51:1;2395:18;;16395:30:0;2276:203:1;16349:88:0;-1:-1:-1;;;;;16451:16:0;;16447:88;;16491:32;;-1:-1:-1;;;16491:32:0;;16520:1;16491:32;;;2422:51:1;2395:18;;16491:32:0;2276:203:1;16447:88:0;16545:24;16553:4;16559:2;16563:5;16545:7;:24::i;18930:211::-;-1:-1:-1;;;;;19001:21:0;;18997:91;;19046:30;;-1:-1:-1;;;19046:30:0;;19073:1;19046:30;;;2422:51:1;2395:18;;19046:30:0;2276:203:1;18997:91:0;19098:35;19106:7;19123:1;19127:5;19098:7;:35::i;:::-;18930:211;;:::o;29869:166::-;29777:6;;-1:-1:-1;;;;;29777:6:0;4010:10;29929:23;29925:103;;29976:40;;-1:-1:-1;;;29976:40:0;;4010:10;29976:40;;;2422:51:1;2395:18;;29976:40:0;2276:203:1;31017:191:0;31110:6;;;-1:-1:-1;;;;;31127:17:0;;;-1:-1:-1;;;;;;31127:17:0;;;;;;;31160:40;;31110:6;;;31127:17;31110:6;;31160:40;;31091:16;;31160:40;31080:128;31017:191;:::o;20675:443::-;-1:-1:-1;;;;;20788:19:0;;20784:91;;20831:32;;-1:-1:-1;;;20831:32:0;;20860:1;20831:32;;;2422:51:1;2395:18;;20831:32:0;2276:203:1;20784:91:0;-1:-1:-1;;;;;20889:21:0;;20885:92;;20934:31;;-1:-1:-1;;;20934:31:0;;20962:1;20934:31;;;2422:51:1;2395:18;;20934:31:0;2276:203:1;20885:92:0;-1:-1:-1;;;;;20987:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;21033:78;;;;21084:7;-1:-1:-1;;;;;21068:31:0;21077:5;-1:-1:-1;;;;;21068:31:0;;21093:5;21068:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;21068:31:0;;;;;;;;20675:443;;;;:::o;33352:986::-;33488:14;;-1:-1:-1;;;33488:14:0;;;;33487:15;:34;;;;-1:-1:-1;29777:6:0;;-1:-1:-1;;;;;33506:15:0;;;29777:6;;33506:15;;33487:34;:51;;;;-1:-1:-1;29777:6:0;;-1:-1:-1;;;;;33525:13:0;;;29777:6;;33525:13;;33487:51;33484:847;;;33555:18;;-1:-1:-1;;;33555:18:0;;5368:2:1;33555:18:0;;;5350:21:1;5407:1;5387:18;;;5380:29;-1:-1:-1;;;5425:18:1;;;5418:38;5473:18;;33555::0;5166:331:1;33484:847:0;33634:3;;33624:7;;:13;;;;:::i;:::-;33605:15;:32;;:51;;;;-1:-1:-1;29777:6:0;;-1:-1:-1;;;;;33641:15:0;;;29777:6;;33641:15;;33605:51;:68;;;;-1:-1:-1;29777:6:0;;-1:-1:-1;;;;;33660:13:0;;;29777:6;;33660:13;;33605:68;33602:729;;;33713:22;:13;33729:6;33713:22;:::i;:::-;33698:11;:37;;33690:68;;;;-1:-1:-1;;;33690:68:0;;5834:2:1;33690:68:0;;;5816:21:1;5873:2;5853:18;;;5846:30;-1:-1:-1;;;5892:18:1;;;5885:48;5950:18;;33690:68:0;5632:342:1;33690:68:0;-1:-1:-1;;;;;13930:18:0;;33773:15;13930:18;;;;;;;;;;;13755:12;;33873:6;;33849:20;;33865:4;33849:20;:::i;:::-;33848:31;;;;:::i;:::-;33827:16;33837:6;33827:7;:16;:::i;:::-;:53;;33819:104;;;;-1:-1:-1;;;33819:104:0;;6403:2:1;33819:104:0;;;6385:21:1;6442:2;6422:18;;;6415:30;6481:34;6461:18;;;6454:62;-1:-1:-1;;;6532:18:1;;;6525:36;6578:19;;33819:104:0;6201:402:1;33819:104:0;33938:21;33971:14;13602:1;33971:2;:14;:::i;:::-;33962:23;;:6;:23;:::i;:::-;33938:47;;34025:6;34008:13;:23;34000:66;;;;-1:-1:-1;;;34000:66:0;;6810:2:1;34000:66:0;;;6792:21:1;6849:2;6829:18;;;6822:30;6888:32;6868:18;;;6861:60;6938:18;;34000:66:0;6608:354:1;34000:66:0;34081:17;34101:24;34121:3;34101:15;34112:3;;34101:6;:10;;:15;;;;:::i;:::-;:19;;:24::i;:::-;34160:11;;34081:44;;-1:-1:-1;34140:43:0;;34154:4;;-1:-1:-1;;;;;34160:11:0;34081:44;34140:13;:43::i;:::-;34198:46;34212:4;34218:2;34222:21;:6;34233:9;34222:10;:21::i;:::-;34198:13;:46::i;:::-;33675:581;;;19694:130;;;:::o;33602:729::-;34288:31;34302:4;34308:2;34312:6;34288:13;:31::i;31768:246::-;31826:7;31850:1;31855;31850:6;31846:47;;-1:-1:-1;31880:1:0;31873:8;;31846:47;31903:9;31915:5;31919:1;31915;:5;:::i;:::-;31903:17;-1:-1:-1;31948:1:0;31939:5;31943:1;31903:17;31939:5;:::i;:::-;:10;31931:56;;;;-1:-1:-1;;;31931:56:0;;7169:2:1;31931:56:0;;;7151:21:1;7208:2;7188:18;;;7181:30;7247:34;7227:18;;;7220:62;-1:-1:-1;;;7298:18:1;;;7291:31;7339:19;;31931:56:0;6967:397:1;31931:56:0;32005:1;31768:246;-1:-1:-1;;;31768:246:0:o;32022:132::-;32080:7;32107:39;32111:1;32114;32107:39;;;;;;;;;;;;;;;;;:3;:39::i;16901:1135::-;-1:-1:-1;;;;;16991:18:0;;16987:552;;17145:5;17129:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;16987:552:0;;-1:-1:-1;16987:552:0;;-1:-1:-1;;;;;17205:15:0;;17183:19;17205:15;;;;;;;;;;;17239:19;;;17235:117;;;17286:50;;-1:-1:-1;;;17286:50:0;;-1:-1:-1;;;;;5036:32:1;;17286:50:0;;;5018:51:1;5085:18;;;5078:34;;;5128:18;;;5121:34;;;4991:18;;17286:50:0;4816:345:1;17235:117:0;-1:-1:-1;;;;;17475:15:0;;:9;:15;;;;;;;;;;17493:19;;;;17475:37;;16987:552;-1:-1:-1;;;;;17555:16:0;;17551:435;;17721:12;:21;;;;;;;17551:435;;;-1:-1:-1;;;;;17937:13:0;;:9;:13;;;;;;;;;;:22;;;;;;17551:435;18018:2;-1:-1:-1;;;;;18003:25:0;18012:4;-1:-1:-1;;;;;18003:25:0;;18022:5;18003:25;;;;1342::1;;1330:2;1315:18;;1196:177;18003:25:0;;;;;;;;16901:1135;;;:::o;31426:136::-;31484:7;31511:43;31515:1;31518;31511:43;;;;;;;;;;;;;;;;;:3;:43::i;32162:189::-;32248:7;32283:12;32276:5;32268:28;;;;-1:-1:-1;;;32268:28:0;;;;;;;;:::i;:::-;-1:-1:-1;32307:9:0;32319:5;32323:1;32319;:5;:::i;:::-;32307:17;32162:189;-1:-1:-1;;;;;32162:189:0:o;31570:190::-;31656:7;31692:12;31684:6;;;;31676:29;;;;-1:-1:-1;;;31676:29:0;;;;;;;;:::i;:::-;-1:-1:-1;31716:9:0;31728:5;31732:1;31728;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:180::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;-1:-1:-1;2051:23:1;;1900:180;-1:-1:-1;1900:180:1:o;2085:186::-;2144:6;2197:2;2185:9;2176:7;2172:23;2168:32;2165:52;;;2213:1;2210;2203:12;2165:52;2236:29;2255:9;2236:29;:::i;2484:260::-;2552:6;2560;2613:2;2601:9;2592:7;2588:23;2584:32;2581:52;;;2629:1;2626;2619:12;2581:52;2652:29;2671:9;2652:29;:::i;:::-;2642:39;;2700:38;2734:2;2723:9;2719:18;2700:38;:::i;:::-;2690:48;;2484:260;;;;;:::o;2749:380::-;2828:1;2824:12;;;;2871;;;2892:61;;2946:4;2938:6;2934:17;2924:27;;2892:61;2999:2;2991:6;2988:14;2968:18;2965:38;2962:161;;3045:10;3040:3;3036:20;3033:1;3026:31;3080:4;3077:1;3070:15;3108:4;3105:1;3098:15;2962:161;;2749:380;;;:::o;3134:127::-;3195:10;3190:3;3186:20;3183:1;3176:31;3226:4;3223:1;3216:15;3250:4;3247:1;3240:15;3266:416;3355:1;3392:5;3355:1;3406:270;3427:7;3417:8;3414:21;3406:270;;;3486:4;3482:1;3478:6;3474:17;3468:4;3465:27;3462:53;;;3495:18;;:::i;:::-;3545:7;3535:8;3531:22;3528:55;;;3565:16;;;;3528:55;3644:22;;;;3604:15;;;;3406:270;;;3410:3;3266:416;;;;;:::o;3687:806::-;3736:5;3766:8;3756:80;;-1:-1:-1;3807:1:1;3821:5;;3756:80;3855:4;3845:76;;-1:-1:-1;3892:1:1;3906:5;;3845:76;3937:4;3955:1;3950:59;;;;4023:1;4018:130;;;;3930:218;;3950:59;3980:1;3971:10;;3994:5;;;4018:130;4055:3;4045:8;4042:17;4039:43;;;4062:18;;:::i;:::-;-1:-1:-1;;4118:1:1;4104:16;;4133:5;;3930:218;;4232:2;4222:8;4219:16;4213:3;4207:4;4204:13;4200:36;4194:2;4184:8;4181:16;4176:2;4170:4;4167:12;4163:35;4160:77;4157:159;;;-1:-1:-1;4269:19:1;;;4301:5;;4157:159;4348:34;4373:8;4367:4;4348:34;:::i;:::-;4418:6;4414:1;4410:6;4406:19;4397:7;4394:32;4391:58;;;4429:18;;:::i;:::-;4467:20;;3687:806;-1:-1:-1;;;3687:806:1:o;4498:140::-;4556:5;4585:47;4626:4;4616:8;4612:19;4606:4;4585:47;:::i;4643:168::-;4716:9;;;4747;;4764:15;;;4758:22;;4744:37;4734:71;;4785:18;;:::i;5502:125::-;5567:9;;;5588:10;;;5585:36;;;5601:18;;:::i;5979:217::-;6019:1;6045;6035:132;;6089:10;6084:3;6080:20;6077:1;6070:31;6124:4;6121:1;6114:15;6152:4;6149:1;6142:15;6035:132;-1:-1:-1;6181:9:1;;5979:217::o;7369:128::-;7436:9;;;7457:11;;;7454:37;;;7471:18;;:::i

Swarm Source

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