ETH Price: $3,312.62 (-5.06%)

Token

covKEEP underwriter token (covKEEP)
 

Overview

Max Total Supply

280,794.192544475305888408 covKEEP

Holders

54

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
74.278372014494389307 covKEEP

Value
$0.00
0x7c0e55e53cb928eec47e69eaa7004fa546c11b62
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:
UnderwriterToken

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 9 : UnderwriterToken.sol
// ▓▓▌ ▓▓ ▐▓▓ ▓▓▓▓▓▓▓▓▓▓▌▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄
// ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▌▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
//   ▓▓▓▓▓▓    ▓▓▓▓▓▓▓▀    ▐▓▓▓▓▓▓    ▐▓▓▓▓▓   ▓▓▓▓▓▓     ▓▓▓▓▓   ▐▓▓▓▓▓▌   ▐▓▓▓▓▓▓
//   ▓▓▓▓▓▓▄▄▓▓▓▓▓▓▓▀      ▐▓▓▓▓▓▓▄▄▄▄         ▓▓▓▓▓▓▄▄▄▄         ▐▓▓▓▓▓▌   ▐▓▓▓▓▓▓
//   ▓▓▓▓▓▓▓▓▓▓▓▓▓▀        ▐▓▓▓▓▓▓▓▓▓▓         ▓▓▓▓▓▓▓▓▓▓         ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
//   ▓▓▓▓▓▓▀▀▓▓▓▓▓▓▄       ▐▓▓▓▓▓▓▀▀▀▀         ▓▓▓▓▓▓▀▀▀▀         ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▀
//   ▓▓▓▓▓▓   ▀▓▓▓▓▓▓▄     ▐▓▓▓▓▓▓     ▓▓▓▓▓   ▓▓▓▓▓▓     ▓▓▓▓▓   ▐▓▓▓▓▓▌
// ▓▓▓▓▓▓▓▓▓▓ █▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  ▓▓▓▓▓▓▓▓▓▓
// ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  ▓▓▓▓▓▓▓▓▓▓
//
//                           Trust math, not hardware.

// SPDX-License-Identifier: MIT

pragma solidity 0.8.5;

import "@thesis/solidity-contracts/contracts/token/ERC20WithPermit.sol";

/// @title  UnderwriterToken
/// @notice Underwriter tokens represent an ownership share in the underlying
///         collateral of the asset-specific pool. Underwriter tokens are minted
///         when a user deposits ERC20 tokens into asset-specific pool and they
///         are burned when a user exits the position. Underwriter tokens
///         natively support meta transactions. Users can authorize a transfer
///         of their underwriter tokens with a signature conforming EIP712
///         standard instead of an on-chain transaction from their address.
///         Anyone can submit this signature on the user's behalf by calling the
///         permit function, as specified in EIP2612 standard, paying gas fees,
///         and possibly performing other actions in the same transaction.
contract UnderwriterToken is ERC20WithPermit {
    constructor(string memory _name, string memory _symbol)
        ERC20WithPermit(_name, _symbol)
    {}
}

File 2 of 9 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/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.
 *
 * By default, the owner account will be the one that deploys the contract. 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;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

File 4 of 9 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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 5 of 9 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 6 of 9 : ERC20WithPermit.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/access/Ownable.sol";

import "./IERC20WithPermit.sol";
import "./IReceiveApproval.sol";

/// @title  ERC20WithPermit
/// @notice Burnable ERC20 token with EIP2612 permit functionality. User can
///         authorize a transfer of their token with a signature conforming
///         EIP712 standard instead of an on-chain transaction from their
///         address. Anyone can submit this signature on the user's behalf by
///         calling the permit function, as specified in EIP2612 standard,
///         paying gas fees, and possibly performing other actions in the same
///         transaction.
contract ERC20WithPermit is IERC20WithPermit, Ownable {
    /// @notice The amount of tokens owned by the given account.
    mapping(address => uint256) public override balanceOf;

    /// @notice The remaining number of tokens that spender will be
    ///         allowed to spend on behalf of owner through `transferFrom` and
    ///         `burnFrom`. This is zero by default.
    mapping(address => mapping(address => uint256)) public override allowance;

    /// @notice Returns the current nonce for EIP2612 permission for the
    ///         provided token owner for a replay protection. Used to construct
    ///         EIP2612 signature provided to `permit` function.
    mapping(address => uint256) public override nonces;

    uint256 public immutable cachedChainId;
    bytes32 public immutable cachedDomainSeparator;

    /// @notice Returns EIP2612 Permit message hash. Used to construct EIP2612
    ///         signature provided to `permit` function.
    bytes32 public constant override PERMIT_TYPEHASH =
        keccak256(
            "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
        );

    /// @notice The amount of tokens in existence.
    uint256 public override totalSupply;

    /// @notice The name of the token.
    string public override name;

    /// @notice The symbol of the token.
    string public override symbol;

    /// @notice The decimals places of the token.
    uint8 public constant override decimals = 18;

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;

        cachedChainId = block.chainid;
        cachedDomainSeparator = buildDomainSeparator();
    }

    /// @notice Moves `amount` tokens from the caller's account to `recipient`.
    /// @return True if the operation succeeded, reverts otherwise.
    /// @dev Requirements:
    ///       - `recipient` cannot be the zero address,
    ///       - the caller must have a balance of at least `amount`.
    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /// @notice Moves `amount` tokens from `sender` to `recipient` using the
    ///         allowance mechanism. `amount` is then deducted from the caller's
    ///         allowance unless the allowance was made for `type(uint256).max`.
    /// @return True if the operation succeeded, reverts otherwise.
    /// @dev Requirements:
    ///      - `sender` and `recipient` cannot be the zero address,
    ///      - `sender` must have a balance of at least `amount`,
    ///      - the caller must have allowance for `sender`'s tokens of at least
    ///        `amount`.
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        uint256 currentAllowance = allowance[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "Transfer amount exceeds allowance"
            );
            _approve(sender, msg.sender, currentAllowance - amount);
        }
        _transfer(sender, recipient, amount);
        return true;
    }

    /// @notice EIP2612 approval made with secp256k1 signature.
    ///         Users can authorize a transfer of their tokens with a signature
    ///         conforming EIP712 standard, rather than an on-chain transaction
    ///         from their address. Anyone can submit this signature on the
    ///         user's behalf by calling the permit function, paying gas fees,
    ///         and possibly performing other actions in the same transaction.
    /// @dev    The deadline argument can be set to `type(uint256).max to create
    ///         permits that effectively never expire.  If the `amount` is set
    ///         to `type(uint256).max` then `transferFrom` and `burnFrom` will
    ///         not reduce an allowance.
    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external override {
        /* solhint-disable-next-line not-rely-on-time */
        require(deadline >= block.timestamp, "Permission expired");

        // Validate `s` and `v` values for a malleability concern described in EIP2.
        // Only signatures with `s` value in the lower half of the secp256k1
        // curve's order and `v` value of 27 or 28 are considered valid.
        require(
            uint256(s) <=
                0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
            "Invalid signature 's' value"
        );
        require(v == 27 || v == 28, "Invalid signature 'v' value");

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR(),
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        amount,
                        nonces[owner]++,
                        deadline
                    )
                )
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(
            recoveredAddress != address(0) && recoveredAddress == owner,
            "Invalid signature"
        );
        _approve(owner, spender, amount);
    }

    /// @notice Creates `amount` tokens and assigns them to `account`,
    ///         increasing the total supply.
    /// @dev Requirements:
    ///      - `recipient` cannot be the zero address.
    function mint(address recipient, uint256 amount) external onlyOwner {
        require(recipient != address(0), "Mint to the zero address");

        beforeTokenTransfer(address(0), recipient, amount);

        totalSupply += amount;
        balanceOf[recipient] += amount;
        emit Transfer(address(0), recipient, amount);
    }

    /// @notice Destroys `amount` tokens from the caller.
    /// @dev Requirements:
    ///       - the caller must have a balance of at least `amount`.
    function burn(uint256 amount) external override {
        _burn(msg.sender, amount);
    }

    /// @notice Destroys `amount` of tokens from `account` using the allowance
    ///         mechanism. `amount` is then deducted from the caller's allowance
    ///         unless the allowance was made for `type(uint256).max`.
    /// @dev Requirements:
    ///      - `account` must have a balance of at least `amount`,
    ///      - the caller must have allowance for `account`'s tokens of at least
    ///        `amount`.
    function burnFrom(address account, uint256 amount) external override {
        uint256 currentAllowance = allowance[account][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "Burn amount exceeds allowance"
            );
            _approve(account, msg.sender, currentAllowance - amount);
        }
        _burn(account, amount);
    }

    /// @notice Calls `receiveApproval` function on spender previously approving
    ///         the spender to withdraw from the caller multiple times, up to
    ///         the `amount` amount. If this function is called again, it
    ///         overwrites the current allowance with `amount`. Reverts if the
    ///         approval reverted or if `receiveApproval` call on the spender
    ///         reverted.
    /// @return True if both approval and `receiveApproval` calls succeeded.
    /// @dev If the `amount` is set to `type(uint256).max` then
    ///      `transferFrom` and `burnFrom` will not reduce an allowance.
    function approveAndCall(
        address spender,
        uint256 amount,
        bytes memory extraData
    ) external override returns (bool) {
        if (approve(spender, amount)) {
            IReceiveApproval(spender).receiveApproval(
                msg.sender,
                amount,
                address(this),
                extraData
            );
            return true;
        }
        return false;
    }

    /// @notice Sets `amount` as the allowance of `spender` over the caller's
    ///         tokens.
    /// @return True if the operation succeeded.
    /// @dev If the `amount` is set to `type(uint256).max` then
    ///      `transferFrom` and `burnFrom` will not reduce an allowance.
    ///      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
    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /// @notice Returns hash of EIP712 Domain struct with the token name as
    ///         a signing domain and token contract as a verifying contract.
    ///         Used to construct EIP2612 signature provided to `permit`
    ///         function.
    /* solhint-disable-next-line func-name-mixedcase */
    function DOMAIN_SEPARATOR() public view override returns (bytes32) {
        // As explained in EIP-2612, if the DOMAIN_SEPARATOR contains the
        // chainId and is defined at contract deployment instead of
        // reconstructed for every signature, there is a risk of possible replay
        // attacks between chains in the event of a future chain split.
        // To address this issue, we check the cached chain ID against the
        // current one and in case they are different, we build domain separator
        // from scratch.
        if (block.chainid == cachedChainId) {
            return cachedDomainSeparator;
        } else {
            return buildDomainSeparator();
        }
    }

    /// @dev Hook that is called before any transfer of tokens. This includes
    ///      minting and burning.
    ///
    /// Calling conditions:
    /// - when `from` and `to` are both non-zero, `amount` of `from`'s tokens
    ///   will be to transferred to `to`.
    /// - when `from` is zero, `amount` tokens will be minted for `to`.
    /// - when `to` is zero, `amount` of ``from``'s tokens will be burned.
    /// - `from` and `to` are never both zero.
    // slither-disable-next-line dead-code
    function beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _burn(address account, uint256 amount) internal {
        uint256 currentBalance = balanceOf[account];
        require(currentBalance >= amount, "Burn amount exceeds balance");

        beforeTokenTransfer(account, address(0), amount);

        balanceOf[account] = currentBalance - amount;
        totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "Transfer from the zero address");
        require(recipient != address(0), "Transfer to the zero address");
        require(recipient != address(this), "Transfer to the token address");

        beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = balanceOf[sender];
        require(senderBalance >= amount, "Transfer amount exceeds balance");
        balanceOf[sender] = senderBalance - amount;
        balanceOf[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "Approve from the zero address");
        require(spender != address(0), "Approve to the zero address");
        allowance[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function buildDomainSeparator() private view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256(
                        "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                    ),
                    keccak256(bytes(name)),
                    keccak256(bytes("1")),
                    block.chainid,
                    address(this)
                )
            );
    }
}

File 7 of 9 : IApproveAndCall.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/// @notice An interface that should be implemented by tokens supporting
///         `approveAndCall`/`receiveApproval` pattern.
interface IApproveAndCall {
    /// @notice Executes `receiveApproval` function on spender as specified in
    ///         `IReceiveApproval` interface. Approves spender to withdraw from
    ///         the caller multiple times, up to the `amount`. If this
    ///         function is called again, it overwrites the current allowance
    ///         with `amount`. Reverts if the approval reverted or if
    ///         `receiveApproval` call on the spender reverted.
    function approveAndCall(
        address spender,
        uint256 amount,
        bytes memory extraData
    ) external returns (bool);
}

File 8 of 9 : IERC20WithPermit.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";

import "./IApproveAndCall.sol";

/// @title  IERC20WithPermit
/// @notice Burnable ERC20 token with EIP2612 permit functionality. User can
///         authorize a transfer of their token with a signature conforming
///         EIP712 standard instead of an on-chain transaction from their
///         address. Anyone can submit this signature on the user's behalf by
///         calling the permit function, as specified in EIP2612 standard,
///         paying gas fees, and possibly performing other actions in the same
///         transaction.
interface IERC20WithPermit is IERC20, IERC20Metadata, IApproveAndCall {
    /// @notice EIP2612 approval made with secp256k1 signature.
    ///         Users can authorize a transfer of their tokens with a signature
    ///         conforming EIP712 standard, rather than an on-chain transaction
    ///         from their address. Anyone can submit this signature on the
    ///         user's behalf by calling the permit function, paying gas fees,
    ///         and possibly performing other actions in the same transaction.
    /// @dev    The deadline argument can be set to `type(uint256).max to create
    ///         permits that effectively never expire.
    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /// @notice Destroys `amount` tokens from the caller.
    function burn(uint256 amount) external;

    /// @notice Destroys `amount` of tokens from `account`, deducting the amount
    ///         from caller's allowance.
    function burnFrom(address account, uint256 amount) external;

    /// @notice Returns hash of EIP712 Domain struct with the token name as
    ///         a signing domain and token contract as a verifying contract.
    ///         Used to construct EIP2612 signature provided to `permit`
    ///         function.
    /* solhint-disable-next-line func-name-mixedcase */
    function DOMAIN_SEPARATOR() external view returns (bytes32);

    /// @notice Returns the current nonce for EIP2612 permission for the
    ///         provided token owner for a replay protection. Used to construct
    ///         EIP2612 signature provided to `permit` function.
    function nonces(address owner) external view returns (uint256);

    /// @notice Returns EIP2612 Permit message hash. Used to construct EIP2612
    ///         signature provided to `permit` function.
    /* solhint-disable-next-line func-name-mixedcase */
    function PERMIT_TYPEHASH() external pure returns (bytes32);
}

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

pragma solidity ^0.8.4;

/// @notice An interface that should be implemented by contracts supporting
///         `approveAndCall`/`receiveApproval` pattern.
interface IReceiveApproval {
    /// @notice Receives approval to spend tokens. Called as a result of
    ///         `approveAndCall` call on the token.
    function receiveApproval(
        address from,
        uint256 amount,
        address token,
        bytes calldata extraData
    ) external;
}

Settings
{
  "evmVersion": "berlin",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cachedChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cachedDomainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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"}]

60c06040523480156200001157600080fd5b50604051620030de380380620030de833981810160405281019062000037919062000326565b818160006200004b6200014460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350816005908051906020019062000101929190620001f8565b5080600690805190602001906200011a929190620001f8565b504660808181525050620001336200014c60201b60201c565b60a0818152505050505050620006cb565b600033905090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600560405162000180919062000469565b60405180910390206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001620001dd95949392919062000482565b60405160208183030381529060405280519060200120905090565b8280546200020690620005dc565b90600052602060002090601f0160209004810192826200022a576000855562000276565b82601f106200024557805160ff191683800117855562000276565b8280016001018555821562000276579182015b828111156200027557825182559160200191906001019062000258565b5b50905062000285919062000289565b5090565b5b80821115620002a45760008160009055506001016200028a565b5090565b6000620002bf620002b98462000508565b620004df565b905082815260208101848484011115620002de57620002dd620006ab565b5b620002eb848285620005a6565b509392505050565b600082601f8301126200030b576200030a620006a6565b5b81516200031d848260208601620002a8565b91505092915050565b6000806040838503121562000340576200033f620006b5565b5b600083015167ffffffffffffffff811115620003615762000360620006b0565b5b6200036f85828601620002f3565b925050602083015167ffffffffffffffff811115620003935762000392620006b0565b5b620003a185828601620002f3565b9150509250929050565b620003b6816200055e565b82525050565b620003c78162000572565b82525050565b60008154620003dc81620005dc565b620003e8818662000553565b9450600182166000811462000406576001811462000418576200044f565b60ff198316865281860193506200044f565b62000423856200053e565b60005b83811015620004475781548189015260018201915060208101905062000426565b838801955050505b50505092915050565b62000463816200059c565b82525050565b6000620004778284620003cd565b915081905092915050565b600060a082019050620004996000830188620003bc565b620004a86020830187620003bc565b620004b76040830186620003bc565b620004c6606083018562000458565b620004d56080830184620003ab565b9695505050505050565b6000620004eb620004fe565b9050620004f9828262000612565b919050565b6000604051905090565b600067ffffffffffffffff82111562000526576200052562000677565b5b6200053182620006ba565b9050602081019050919050565b60008190508160005260206000209050919050565b600081905092915050565b60006200056b826200057c565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620005c6578082015181840152602081019050620005a9565b83811115620005d6576000848401525b50505050565b60006002820490506001821680620005f557607f821691505b602082108114156200060c576200060b62000648565b5b50919050565b6200061d82620006ba565b810181811067ffffffffffffffff821117156200063f576200063e62000677565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60805160a0516129df620006ff600039600081816106550152610bd601526000818161062d01526109bb01526129df6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063771da5c5116100b8578063a9059cbb1161007c578063a9059cbb14610355578063b4f94b2e14610385578063cae9ca51146103a3578063d505accf146103d3578063dd62ed3e146103ef578063f2fde38b1461041f57610142565b8063771da5c5146102af57806379cc6790146102cd5780637ecebe00146102e95780638da5cb5b1461031957806395d89b411461033757610142565b8063313ce5671161010a578063313ce567146102015780633644e5151461021f57806340c10f191461023d57806342966c681461025957806370a0823114610275578063715018a6146102a557610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b357806330adf81f146101e3575b600080fd5b61014f61043b565b60405161015c91906120a4565b60405180910390f35b61017f600480360381019061017a9190611a3e565b6104c9565b60405161018c9190611f75565b60405180910390f35b61019d6104e0565b6040516101aa91906122c6565b60405180910390f35b6101cd60048036038101906101c89190611949565b6104e6565b6040516101da9190611f75565b60405180910390f35b6101eb610600565b6040516101f89190611f90565b60405180910390f35b610209610624565b60405161021691906122e1565b60405180910390f35b610227610629565b6040516102349190611f90565b60405180910390f35b61025760048036038101906102529190611a3e565b610689565b005b610273600480360381019061026e9190611aed565b61085a565b005b61028f600480360381019061028a91906118dc565b610867565b60405161029c91906122c6565b60405180910390f35b6102ad61087f565b005b6102b76109b9565b6040516102c491906122c6565b60405180910390f35b6102e760048036038101906102e29190611a3e565b6109dd565b005b61030360048036038101906102fe91906118dc565b610aee565b60405161031091906122c6565b60405180910390f35b610321610b06565b60405161032e9190611f0e565b60405180910390f35b61033f610b2f565b60405161034c91906120a4565b60405180910390f35b61036f600480360381019061036a9190611a3e565b610bbd565b60405161037c9190611f75565b60405180910390f35b61038d610bd4565b60405161039a9190611f90565b60405180910390f35b6103bd60048036038101906103b89190611a7e565b610bf8565b6040516103ca9190611f75565b60405180910390f35b6103ed60048036038101906103e8919061199c565b610c8f565b005b61040960048036038101906104049190611909565b610f73565b60405161041691906122c6565b60405180910390f35b610439600480360381019061043491906118dc565b610f98565b005b60058054610448906124e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610474906124e0565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b505050505081565b60006104d6338484611141565b6001905092915050565b60045481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105e957828110156105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990612106565b60405180910390fd5b6105e8853385846105e3919061240b565b611141565b5b6105f485858561130c565b60019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60007f000000000000000000000000000000000000000000000000000000000000000046141561067b577f00000000000000000000000000000000000000000000000000000000000000009050610686565b6106836115fd565b90505b90565b6106916116a5565b73ffffffffffffffffffffffffffffffffffffffff166106af610b06565b73ffffffffffffffffffffffffffffffffffffffff1614610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90612206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90612266565b60405180910390fd5b610781600083836116ad565b806004600082825461079391906123b5565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107e991906123b5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161084e91906122c6565b60405180910390a35050565b61086433826116b2565b50565b60016020528060005260406000206000915090505481565b6108876116a5565b73ffffffffffffffffffffffffffffffffffffffff166108a5610b06565b73ffffffffffffffffffffffffffffffffffffffff16146108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290612206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610adf5781811015610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906121a6565b60405180910390fd5b610ade83338484610ad9919061240b565b611141565b5b610ae983836116b2565b505050565b60036020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610b3c906124e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b68906124e0565b8015610bb55780601f10610b8a57610100808354040283529160200191610bb5565b820191906000526020600020905b815481529060010190602001808311610b9857829003601f168201915b505050505081565b6000610bca33848461130c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610c0484846104c9565b15610c83578373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401610c489493929190611f29565b600060405180830381600087803b158015610c6257600080fd5b505af1158015610c76573d6000803e3d6000fd5b5050505060019050610c88565b600090505b9392505050565b42841015610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990612226565b60405180910390fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08160001c1115610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f90612246565b60405180910390fd5b601b8360ff161480610d4d5750601c8360ff16145b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390612126565b60405180910390fd5b6000610d96610629565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9898989600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e0a90612543565b919050558a604051602001610e2496959493929190611fab565b60405160208183030381529060405280519060200120604051602001610e4b929190611ed7565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051610e88949392919061205f565b6020604051602081039080840390855afa158015610eaa573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610f1e57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612166565b60405180910390fd5b610f68898989611141565b505050505050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b610fa06116a5565b73ffffffffffffffffffffffffffffffffffffffff16610fbe610b06565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90612206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906120e6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890612186565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906120c6565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112ff91906122c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611373906122a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390612286565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290612146565b60405180910390fd5b6114668383836116ad565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e4906121c6565b60405180910390fd5b81816114f9919061240b565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158b91906123b5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115ef91906122c6565b60405180910390a350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600560405161162f9190611ec0565b60405180910390206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120463060405160200161168a95949392919061200c565b60405160208183030381529060405280519060200120905090565b600033905090565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611739576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611730906121e6565b60405180910390fd5b611745836000846116ad565b8181611751919061240b565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546117a6919061240b565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161180b91906122c6565b60405180910390a3505050565b600061182b61182684612321565b6122fc565b90508281526020810184848401111561184757611846612628565b5b61185284828561249e565b509392505050565b6000813590506118698161294d565b92915050565b60008135905061187e81612964565b92915050565b600082601f83011261189957611898612623565b5b81356118a9848260208601611818565b91505092915050565b6000813590506118c18161297b565b92915050565b6000813590506118d681612992565b92915050565b6000602082840312156118f2576118f1612632565b5b60006119008482850161185a565b91505092915050565b600080604083850312156119205761191f612632565b5b600061192e8582860161185a565b925050602061193f8582860161185a565b9150509250929050565b60008060006060848603121561196257611961612632565b5b60006119708682870161185a565b93505060206119818682870161185a565b9250506040611992868287016118b2565b9150509250925092565b600080600080600080600060e0888a0312156119bb576119ba612632565b5b60006119c98a828b0161185a565b97505060206119da8a828b0161185a565b96505060406119eb8a828b016118b2565b95505060606119fc8a828b016118b2565b9450506080611a0d8a828b016118c7565b93505060a0611a1e8a828b0161186f565b92505060c0611a2f8a828b0161186f565b91505092959891949750929550565b60008060408385031215611a5557611a54612632565b5b6000611a638582860161185a565b9250506020611a74858286016118b2565b9150509250929050565b600080600060608486031215611a9757611a96612632565b5b6000611aa58682870161185a565b9350506020611ab6868287016118b2565b925050604084013567ffffffffffffffff811115611ad757611ad661262d565b5b611ae386828701611884565b9150509250925092565b600060208284031215611b0357611b02612632565b5b6000611b11848285016118b2565b91505092915050565b611b238161243f565b82525050565b611b3281612451565b82525050565b611b418161245d565b82525050565b611b58611b538261245d565b61258c565b82525050565b6000611b6982612367565b611b73818561237d565b9350611b838185602086016124ad565b611b8c81612637565b840191505092915050565b60008154611ba4816124e0565b611bae818661238e565b94506001821660008114611bc95760018114611bda57611c0d565b60ff19831686528186019350611c0d565b611be385612352565b60005b83811015611c0557815481890152600182019150602081019050611be6565b838801955050505b50505092915050565b6000611c2182612372565b611c2b8185612399565b9350611c3b8185602086016124ad565b611c4481612637565b840191505092915050565b6000611c5c601b83612399565b9150611c6782612648565b602082019050919050565b6000611c7f602683612399565b9150611c8a82612671565b604082019050919050565b6000611ca2602183612399565b9150611cad826126c0565b604082019050919050565b6000611cc56002836123aa565b9150611cd08261270f565b600282019050919050565b6000611ce8601b83612399565b9150611cf382612738565b602082019050919050565b6000611d0b601d83612399565b9150611d1682612761565b602082019050919050565b6000611d2e601183612399565b9150611d398261278a565b602082019050919050565b6000611d51601d83612399565b9150611d5c826127b3565b602082019050919050565b6000611d74601d83612399565b9150611d7f826127dc565b602082019050919050565b6000611d97601f83612399565b9150611da282612805565b602082019050919050565b6000611dba601b83612399565b9150611dc58261282e565b602082019050919050565b6000611ddd602083612399565b9150611de882612857565b602082019050919050565b6000611e00601283612399565b9150611e0b82612880565b602082019050919050565b6000611e23601b83612399565b9150611e2e826128a9565b602082019050919050565b6000611e46601883612399565b9150611e51826128d2565b602082019050919050565b6000611e69601c83612399565b9150611e74826128fb565b602082019050919050565b6000611e8c601e83612399565b9150611e9782612924565b602082019050919050565b611eab81612487565b82525050565b611eba81612491565b82525050565b6000611ecc8284611b97565b915081905092915050565b6000611ee282611cb8565b9150611eee8285611b47565b602082019150611efe8284611b47565b6020820191508190509392505050565b6000602082019050611f236000830184611b1a565b92915050565b6000608082019050611f3e6000830187611b1a565b611f4b6020830186611ea2565b611f586040830185611b1a565b8181036060830152611f6a8184611b5e565b905095945050505050565b6000602082019050611f8a6000830184611b29565b92915050565b6000602082019050611fa56000830184611b38565b92915050565b600060c082019050611fc06000830189611b38565b611fcd6020830188611b1a565b611fda6040830187611b1a565b611fe76060830186611ea2565b611ff46080830185611ea2565b61200160a0830184611ea2565b979650505050505050565b600060a0820190506120216000830188611b38565b61202e6020830187611b38565b61203b6040830186611b38565b6120486060830185611ea2565b6120556080830184611b1a565b9695505050505050565b60006080820190506120746000830187611b38565b6120816020830186611eb1565b61208e6040830185611b38565b61209b6060830184611b38565b95945050505050565b600060208201905081810360008301526120be8184611c16565b905092915050565b600060208201905081810360008301526120df81611c4f565b9050919050565b600060208201905081810360008301526120ff81611c72565b9050919050565b6000602082019050818103600083015261211f81611c95565b9050919050565b6000602082019050818103600083015261213f81611cdb565b9050919050565b6000602082019050818103600083015261215f81611cfe565b9050919050565b6000602082019050818103600083015261217f81611d21565b9050919050565b6000602082019050818103600083015261219f81611d44565b9050919050565b600060208201905081810360008301526121bf81611d67565b9050919050565b600060208201905081810360008301526121df81611d8a565b9050919050565b600060208201905081810360008301526121ff81611dad565b9050919050565b6000602082019050818103600083015261221f81611dd0565b9050919050565b6000602082019050818103600083015261223f81611df3565b9050919050565b6000602082019050818103600083015261225f81611e16565b9050919050565b6000602082019050818103600083015261227f81611e39565b9050919050565b6000602082019050818103600083015261229f81611e5c565b9050919050565b600060208201905081810360008301526122bf81611e7f565b9050919050565b60006020820190506122db6000830184611ea2565b92915050565b60006020820190506122f66000830184611eb1565b92915050565b6000612306612317565b90506123128282612512565b919050565b6000604051905090565b600067ffffffffffffffff82111561233c5761233b6125f4565b5b61234582612637565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006123c082612487565b91506123cb83612487565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612400576123ff612596565b5b828201905092915050565b600061241682612487565b915061242183612487565b92508282101561243457612433612596565b5b828203905092915050565b600061244a82612467565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124cb5780820151818401526020810190506124b0565b838111156124da576000848401525b50505050565b600060028204905060018216806124f857607f821691505b6020821081141561250c5761250b6125c5565b5b50919050565b61251b82612637565b810181811067ffffffffffffffff8211171561253a576125396125f4565b5b80604052505050565b600061254e82612487565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561258157612580612596565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265202776272076616c75650000000000600082015250565b7f5472616e7366657220746f2074686520746f6b656e2061646472657373000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b7f4275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b7f4275726e20616d6f756e7420657863656564732062616c616e63650000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5065726d697373696f6e20657870697265640000000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265202773272076616c75650000000000600082015250565b7f4d696e7420746f20746865207a65726f20616464726573730000000000000000600082015250565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b6129568161243f565b811461296157600080fd5b50565b61296d8161245d565b811461297857600080fd5b50565b61298481612487565b811461298f57600080fd5b50565b61299b81612491565b81146129a657600080fd5b5056fea264697066735822122021a908b81de327bb92c8bb6ef7b2b9b0c6769fcad6347c9bed19317f88bc629b64736f6c63430008050033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000019636f764b45455020756e64657277726974657220746f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000007636f764b45455000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063771da5c5116100b8578063a9059cbb1161007c578063a9059cbb14610355578063b4f94b2e14610385578063cae9ca51146103a3578063d505accf146103d3578063dd62ed3e146103ef578063f2fde38b1461041f57610142565b8063771da5c5146102af57806379cc6790146102cd5780637ecebe00146102e95780638da5cb5b1461031957806395d89b411461033757610142565b8063313ce5671161010a578063313ce567146102015780633644e5151461021f57806340c10f191461023d57806342966c681461025957806370a0823114610275578063715018a6146102a557610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b357806330adf81f146101e3575b600080fd5b61014f61043b565b60405161015c91906120a4565b60405180910390f35b61017f600480360381019061017a9190611a3e565b6104c9565b60405161018c9190611f75565b60405180910390f35b61019d6104e0565b6040516101aa91906122c6565b60405180910390f35b6101cd60048036038101906101c89190611949565b6104e6565b6040516101da9190611f75565b60405180910390f35b6101eb610600565b6040516101f89190611f90565b60405180910390f35b610209610624565b60405161021691906122e1565b60405180910390f35b610227610629565b6040516102349190611f90565b60405180910390f35b61025760048036038101906102529190611a3e565b610689565b005b610273600480360381019061026e9190611aed565b61085a565b005b61028f600480360381019061028a91906118dc565b610867565b60405161029c91906122c6565b60405180910390f35b6102ad61087f565b005b6102b76109b9565b6040516102c491906122c6565b60405180910390f35b6102e760048036038101906102e29190611a3e565b6109dd565b005b61030360048036038101906102fe91906118dc565b610aee565b60405161031091906122c6565b60405180910390f35b610321610b06565b60405161032e9190611f0e565b60405180910390f35b61033f610b2f565b60405161034c91906120a4565b60405180910390f35b61036f600480360381019061036a9190611a3e565b610bbd565b60405161037c9190611f75565b60405180910390f35b61038d610bd4565b60405161039a9190611f90565b60405180910390f35b6103bd60048036038101906103b89190611a7e565b610bf8565b6040516103ca9190611f75565b60405180910390f35b6103ed60048036038101906103e8919061199c565b610c8f565b005b61040960048036038101906104049190611909565b610f73565b60405161041691906122c6565b60405180910390f35b610439600480360381019061043491906118dc565b610f98565b005b60058054610448906124e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610474906124e0565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b505050505081565b60006104d6338484611141565b6001905092915050565b60045481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105e957828110156105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990612106565b60405180910390fd5b6105e8853385846105e3919061240b565b611141565b5b6105f485858561130c565b60019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60007f000000000000000000000000000000000000000000000000000000000000000146141561067b577f7ea667d286f0fb7a630afcb816b0725cb88e232332e125dd71b81f5bb92f7b4d9050610686565b6106836115fd565b90505b90565b6106916116a5565b73ffffffffffffffffffffffffffffffffffffffff166106af610b06565b73ffffffffffffffffffffffffffffffffffffffff1614610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90612206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90612266565b60405180910390fd5b610781600083836116ad565b806004600082825461079391906123b5565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107e991906123b5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161084e91906122c6565b60405180910390a35050565b61086433826116b2565b50565b60016020528060005260406000206000915090505481565b6108876116a5565b73ffffffffffffffffffffffffffffffffffffffff166108a5610b06565b73ffffffffffffffffffffffffffffffffffffffff16146108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290612206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000181565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610adf5781811015610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906121a6565b60405180910390fd5b610ade83338484610ad9919061240b565b611141565b5b610ae983836116b2565b505050565b60036020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610b3c906124e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b68906124e0565b8015610bb55780601f10610b8a57610100808354040283529160200191610bb5565b820191906000526020600020905b815481529060010190602001808311610b9857829003601f168201915b505050505081565b6000610bca33848461130c565b6001905092915050565b7f7ea667d286f0fb7a630afcb816b0725cb88e232332e125dd71b81f5bb92f7b4d81565b6000610c0484846104c9565b15610c83578373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401610c489493929190611f29565b600060405180830381600087803b158015610c6257600080fd5b505af1158015610c76573d6000803e3d6000fd5b5050505060019050610c88565b600090505b9392505050565b42841015610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990612226565b60405180910390fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08160001c1115610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f90612246565b60405180910390fd5b601b8360ff161480610d4d5750601c8360ff16145b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390612126565b60405180910390fd5b6000610d96610629565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9898989600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e0a90612543565b919050558a604051602001610e2496959493929190611fab565b60405160208183030381529060405280519060200120604051602001610e4b929190611ed7565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051610e88949392919061205f565b6020604051602081039080840390855afa158015610eaa573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610f1e57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612166565b60405180910390fd5b610f68898989611141565b505050505050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b610fa06116a5565b73ffffffffffffffffffffffffffffffffffffffff16610fbe610b06565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90612206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906120e6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890612186565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906120c6565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112ff91906122c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611373906122a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390612286565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290612146565b60405180910390fd5b6114668383836116ad565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e4906121c6565b60405180910390fd5b81816114f9919061240b565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158b91906123b5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115ef91906122c6565b60405180910390a350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600560405161162f9190611ec0565b60405180910390206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120463060405160200161168a95949392919061200c565b60405160208183030381529060405280519060200120905090565b600033905090565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611739576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611730906121e6565b60405180910390fd5b611745836000846116ad565b8181611751919061240b565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546117a6919061240b565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161180b91906122c6565b60405180910390a3505050565b600061182b61182684612321565b6122fc565b90508281526020810184848401111561184757611846612628565b5b61185284828561249e565b509392505050565b6000813590506118698161294d565b92915050565b60008135905061187e81612964565b92915050565b600082601f83011261189957611898612623565b5b81356118a9848260208601611818565b91505092915050565b6000813590506118c18161297b565b92915050565b6000813590506118d681612992565b92915050565b6000602082840312156118f2576118f1612632565b5b60006119008482850161185a565b91505092915050565b600080604083850312156119205761191f612632565b5b600061192e8582860161185a565b925050602061193f8582860161185a565b9150509250929050565b60008060006060848603121561196257611961612632565b5b60006119708682870161185a565b93505060206119818682870161185a565b9250506040611992868287016118b2565b9150509250925092565b600080600080600080600060e0888a0312156119bb576119ba612632565b5b60006119c98a828b0161185a565b97505060206119da8a828b0161185a565b96505060406119eb8a828b016118b2565b95505060606119fc8a828b016118b2565b9450506080611a0d8a828b016118c7565b93505060a0611a1e8a828b0161186f565b92505060c0611a2f8a828b0161186f565b91505092959891949750929550565b60008060408385031215611a5557611a54612632565b5b6000611a638582860161185a565b9250506020611a74858286016118b2565b9150509250929050565b600080600060608486031215611a9757611a96612632565b5b6000611aa58682870161185a565b9350506020611ab6868287016118b2565b925050604084013567ffffffffffffffff811115611ad757611ad661262d565b5b611ae386828701611884565b9150509250925092565b600060208284031215611b0357611b02612632565b5b6000611b11848285016118b2565b91505092915050565b611b238161243f565b82525050565b611b3281612451565b82525050565b611b418161245d565b82525050565b611b58611b538261245d565b61258c565b82525050565b6000611b6982612367565b611b73818561237d565b9350611b838185602086016124ad565b611b8c81612637565b840191505092915050565b60008154611ba4816124e0565b611bae818661238e565b94506001821660008114611bc95760018114611bda57611c0d565b60ff19831686528186019350611c0d565b611be385612352565b60005b83811015611c0557815481890152600182019150602081019050611be6565b838801955050505b50505092915050565b6000611c2182612372565b611c2b8185612399565b9350611c3b8185602086016124ad565b611c4481612637565b840191505092915050565b6000611c5c601b83612399565b9150611c6782612648565b602082019050919050565b6000611c7f602683612399565b9150611c8a82612671565b604082019050919050565b6000611ca2602183612399565b9150611cad826126c0565b604082019050919050565b6000611cc56002836123aa565b9150611cd08261270f565b600282019050919050565b6000611ce8601b83612399565b9150611cf382612738565b602082019050919050565b6000611d0b601d83612399565b9150611d1682612761565b602082019050919050565b6000611d2e601183612399565b9150611d398261278a565b602082019050919050565b6000611d51601d83612399565b9150611d5c826127b3565b602082019050919050565b6000611d74601d83612399565b9150611d7f826127dc565b602082019050919050565b6000611d97601f83612399565b9150611da282612805565b602082019050919050565b6000611dba601b83612399565b9150611dc58261282e565b602082019050919050565b6000611ddd602083612399565b9150611de882612857565b602082019050919050565b6000611e00601283612399565b9150611e0b82612880565b602082019050919050565b6000611e23601b83612399565b9150611e2e826128a9565b602082019050919050565b6000611e46601883612399565b9150611e51826128d2565b602082019050919050565b6000611e69601c83612399565b9150611e74826128fb565b602082019050919050565b6000611e8c601e83612399565b9150611e9782612924565b602082019050919050565b611eab81612487565b82525050565b611eba81612491565b82525050565b6000611ecc8284611b97565b915081905092915050565b6000611ee282611cb8565b9150611eee8285611b47565b602082019150611efe8284611b47565b6020820191508190509392505050565b6000602082019050611f236000830184611b1a565b92915050565b6000608082019050611f3e6000830187611b1a565b611f4b6020830186611ea2565b611f586040830185611b1a565b8181036060830152611f6a8184611b5e565b905095945050505050565b6000602082019050611f8a6000830184611b29565b92915050565b6000602082019050611fa56000830184611b38565b92915050565b600060c082019050611fc06000830189611b38565b611fcd6020830188611b1a565b611fda6040830187611b1a565b611fe76060830186611ea2565b611ff46080830185611ea2565b61200160a0830184611ea2565b979650505050505050565b600060a0820190506120216000830188611b38565b61202e6020830187611b38565b61203b6040830186611b38565b6120486060830185611ea2565b6120556080830184611b1a565b9695505050505050565b60006080820190506120746000830187611b38565b6120816020830186611eb1565b61208e6040830185611b38565b61209b6060830184611b38565b95945050505050565b600060208201905081810360008301526120be8184611c16565b905092915050565b600060208201905081810360008301526120df81611c4f565b9050919050565b600060208201905081810360008301526120ff81611c72565b9050919050565b6000602082019050818103600083015261211f81611c95565b9050919050565b6000602082019050818103600083015261213f81611cdb565b9050919050565b6000602082019050818103600083015261215f81611cfe565b9050919050565b6000602082019050818103600083015261217f81611d21565b9050919050565b6000602082019050818103600083015261219f81611d44565b9050919050565b600060208201905081810360008301526121bf81611d67565b9050919050565b600060208201905081810360008301526121df81611d8a565b9050919050565b600060208201905081810360008301526121ff81611dad565b9050919050565b6000602082019050818103600083015261221f81611dd0565b9050919050565b6000602082019050818103600083015261223f81611df3565b9050919050565b6000602082019050818103600083015261225f81611e16565b9050919050565b6000602082019050818103600083015261227f81611e39565b9050919050565b6000602082019050818103600083015261229f81611e5c565b9050919050565b600060208201905081810360008301526122bf81611e7f565b9050919050565b60006020820190506122db6000830184611ea2565b92915050565b60006020820190506122f66000830184611eb1565b92915050565b6000612306612317565b90506123128282612512565b919050565b6000604051905090565b600067ffffffffffffffff82111561233c5761233b6125f4565b5b61234582612637565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006123c082612487565b91506123cb83612487565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612400576123ff612596565b5b828201905092915050565b600061241682612487565b915061242183612487565b92508282101561243457612433612596565b5b828203905092915050565b600061244a82612467565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124cb5780820151818401526020810190506124b0565b838111156124da576000848401525b50505050565b600060028204905060018216806124f857607f821691505b6020821081141561250c5761250b6125c5565b5b50919050565b61251b82612637565b810181811067ffffffffffffffff8211171561253a576125396125f4565b5b80604052505050565b600061254e82612487565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561258157612580612596565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265202776272076616c75650000000000600082015250565b7f5472616e7366657220746f2074686520746f6b656e2061646472657373000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b7f4275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b7f4275726e20616d6f756e7420657863656564732062616c616e63650000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5065726d697373696f6e20657870697265640000000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265202773272076616c75650000000000600082015250565b7f4d696e7420746f20746865207a65726f20616464726573730000000000000000600082015250565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b6129568161243f565b811461296157600080fd5b50565b61296d8161245d565b811461297857600080fd5b50565b61298481612487565b811461298f57600080fd5b50565b61299b81612491565b81146129a657600080fd5b5056fea264697066735822122021a908b81de327bb92c8bb6ef7b2b9b0c6769fcad6347c9bed19317f88bc629b64736f6c63430008050033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000019636f764b45455020756e64657277726974657220746f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000007636f764b45455000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): covKEEP underwriter token
Arg [1] : _symbol (string): covKEEP

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [3] : 636f764b45455020756e64657277726974657220746f6b656e00000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 636f764b45455000000000000000000000000000000000000000000000000000


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.