Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Marketplace
Overview
Max Total Supply
0 GLTM
Holders
0
Total Transfers
-
Market
Fully Diluted Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GLTM
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-14 */ /** *Submitted for verification at Etherscan.io on 2022-10-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity 0.8.7; /** * @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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity 0.8.7; /** * @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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity 0.8.7; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity 0.8.7; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity 0.8.7; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity 0.8.7; /** * @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.zeppelin.solutions/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}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; 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; } /** * @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; } _balances[to] += amount; 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; _balances[account] += amount; 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; } _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 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 {} /** * @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 {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity 0.8.7; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } pragma solidity 0.8.7; contract GLTM is ERC20, ERC20Burnable, Pausable, Ownable { using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private minterSet; /* Maximum Supply for the token that can be minted */ uint256 public immutable MaxSupply; event LogMinterModified(address minter, bool role); constructor(uint256 maxSupply) ERC20("Golteum", "GLTM") { MaxSupply = maxSupply; } modifier onlyMinter { require(isMinter(_msgSender()), "GLTM: Not a minter"); _; } /** * @dev Returns the Maximum Supply of the token. */ function getMaxSupply() public view virtual returns (uint256) { return MaxSupply; } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } function mint(address to, uint256 amount) public onlyMinter { require(super.totalSupply() + amount <= getMaxSupply(), "GLTM: cap exceeded"); _mint(to, amount); } function isMinter(address wallet) public view returns(bool) { return minterSet.contains(wallet); } function getAllMinters() external view returns(address[] memory) { uint256 total = minterSet.length(); address[] memory minters = new address[](total); for(uint256 i=0;i<total;i++){ minters[i] = minterSet.at(i); } return minters; } function setMinters(address[] calldata minters) external onlyOwner { for(uint256 i = 0; i < minters.length; i++){ require(minters[i] != address(0), "Minter address cannot be null address"); minterSet.add(minters[i]); emit LogMinterModified(minters[i], true); } } function removeMinters(address[] memory minters) public onlyOwner { for(uint256 i = 0; i < minters.length; i++){ minterSet.remove(minters[i]); emit LogMinterModified(minters[i], false); } } function _beforeTokenTransfer(address from, address to, uint256 amount) internal whenNotPaused override { super._beforeTokenTransfer(from, to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"bool","name":"role","type":"bool"}],"name":"LogMinterModified","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"minters","type":"address[]"}],"name":"removeMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"minters","type":"address[]"}],"name":"setMinters","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":"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"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162001965380380620019658339810160408190526200003491620001b6565b6040805180820182526007815266476f6c7465756d60c81b602080830191825283518085019094526004845263474c544d60e01b9084015281519192916200007f9160039162000110565b5080516200009590600490602084019062000110565b50506005805460ff1916905550620000ad33620000b6565b6080526200020d565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011e90620001d0565b90600052602060002090601f0160209004810192826200014257600085556200018d565b82601f106200015d57805160ff19168380011785556200018d565b828001600101855582156200018d579182015b828111156200018d57825182559160200191906001019062000170565b506200019b9291506200019f565b5090565b5b808211156200019b5760008155600101620001a0565b600060208284031215620001c957600080fd5b5051919050565b600181811c90821680620001e557607f821691505b602082108114156200020757634e487b7160e01b600052602260045260246000fd5b50919050565b60805161172e620002376000396000818161024d01528181610372015261050f015261172e6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063a045442c11610097578063aa271e1a11610071578063aa271e1a1461035a578063b36c12841461036d578063dd62ed3e14610394578063f2fde38b146103a757600080fd5b8063a045442c1461031f578063a457c2d714610334578063a9059cbb1461034757600080fd5b806370a08231146102a2578063715018a6146102cb57806379cc6790146102d35780638456cb59146102e65780638da5cb5b146102ee57806395d89b411461031757600080fd5b80633f4ba83a1161014b5780634c0f38c2116101255780634c0f38c21461024b578063547d0096146102715780635c975abb146102845780635fc1964f1461028f57600080fd5b80633f4ba83a1461021b57806340c10f191461022557806342966c681461023857600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806323b872dd146101e6578063313ce567146101f95780633950935114610208575b600080fd5b61019b6103ba565b6040516101a891906115c6565b60405180910390f35b6101c46101bf3660046113f5565b61044c565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b6101c46101f43660046113b9565b610466565b604051601281526020016101a8565b6101c46102163660046113f5565b61048a565b6102236104ac565b005b6102236102333660046113f5565b6104be565b610223610246366004611560565b610593565b7f00000000000000000000000000000000000000000000000000000000000000006101d8565b61022361027f36600461141f565b6105a0565b60055460ff166101c4565b61022361029d366004611494565b6106f4565b6101d86102b036600461136b565b6001600160a01b031660009081526020819052604090205490565b6102236107b1565b6102236102e13660046113f5565b6107c3565b6102236107d8565b60055461010090046001600160a01b03166040516001600160a01b0390911681526020016101a8565b61019b6107e8565b6103276107f7565b6040516101a89190611579565b6101c46103423660046113f5565b6108a7565b6101c46103553660046113f5565b610922565b6101c461036836600461136b565b610930565b6101d87f000000000000000000000000000000000000000000000000000000000000000081565b6101d86103a2366004611386565b61093d565b6102236103b536600461136b565b610968565b6060600380546103c99061164a565b80601f01602080910402602001604051908101604052809291908181526020018280546103f59061164a565b80156104425780601f1061041757610100808354040283529160200191610442565b820191906000526020600020905b81548152906001019060200180831161042557829003601f168201915b5050505050905090565b60003361045a8185856109de565b60019150505b92915050565b600033610474858285610b02565b61047f858585610b7c565b506001949350505050565b60003361045a81858561049d838361093d565b6104a7919061161b565b6109de565b6104b4610d55565b6104bc610db5565b565b6104c733610930565b61050d5760405162461bcd60e51b815260206004820152601260248201527123a62a269d102737ba10309036b4b73a32b960711b60448201526064015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008161053860025490565b610542919061161b565b11156105855760405162461bcd60e51b815260206004820152601260248201527111d315134e8818d85c08195e18d95959195960721b6044820152606401610504565b61058f8282610e07565b5050565b61059d3382610ef2565b50565b6105a8610d55565b60005b818110156106ef5760008383838181106105c7576105c76116cc565b90506020020160208101906105dc919061136b565b6001600160a01b031614156106415760405162461bcd60e51b815260206004820152602560248201527f4d696e74657220616464726573732063616e6e6f74206265206e756c6c206164604482015264647265737360d81b6064820152608401610504565b610673838383818110610656576106566116cc565b905060200201602081019061066b919061136b565b60069061104c565b507f68b1bbb762345c0ec66eb9b3f6010c5e0edac0f4fd593c1911853dbe0e1f85188383838181106106a7576106a76116cc565b90506020020160208101906106bc919061136b565b604080516001600160a01b039092168252600160208301520160405180910390a1806106e781611685565b9150506105ab565b505050565b6106fc610d55565b60005b815181101561058f5761073582828151811061071d5761071d6116cc565b6020026020010151600661106890919063ffffffff16565b507f68b1bbb762345c0ec66eb9b3f6010c5e0edac0f4fd593c1911853dbe0e1f8518828281518110610769576107696116cc565b602002602001015160006040516107979291906001600160a01b039290921682521515602082015260400190565b60405180910390a1806107a981611685565b9150506106ff565b6107b9610d55565b6104bc600061107d565b6107ce823383610b02565b61058f8282610ef2565b6107e0610d55565b6104bc6110d7565b6060600480546103c99061164a565b606060006108056006611114565b905060008167ffffffffffffffff811115610822576108226116e2565b60405190808252806020026020018201604052801561084b578160200160208202803683370190505b50905060005b828110156108a05761086460068261111e565b828281518110610876576108766116cc565b6001600160a01b03909216602092830291909101909101528061089881611685565b915050610851565b5092915050565b600033816108b5828661093d565b9050838110156109155760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610504565b61047f82868684036109de565b60003361045a818585610b7c565b600061046060068361112a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610970610d55565b6001600160a01b0381166109d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610504565b61059d8161107d565b6001600160a01b038316610a405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610504565b6001600160a01b038216610aa15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610504565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610b0e848461093d565b90506000198114610b765781811015610b695760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610504565b610b7684848484036109de565b50505050565b6001600160a01b038316610be05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610504565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610504565b610c4d83838361114c565b6001600160a01b03831660009081526020819052604090205481811015610cc55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610504565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610cfc90849061161b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d4891815260200190565b60405180910390a3610b76565b6005546001600160a01b036101009091041633146104bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610504565b610dbd611154565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610e5d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610504565b610e696000838361114c565b8060026000828254610e7b919061161b565b90915550506001600160a01b03821660009081526020819052604081208054839290610ea890849061161b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610f525760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610504565b610f5e8260008361114c565b6001600160a01b03821660009081526020819052604090205481811015610fd25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610504565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611001908490611633565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000611061836001600160a01b03841661119d565b9392505050565b6000611061836001600160a01b0384166111ec565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6110df6112df565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610dea3390565b6000610460825490565b60006110618383611325565b6001600160a01b03811660009081526001830160205260408120541515611061565b6106ef6112df565b60055460ff166104bc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610504565b60008181526001830160205260408120546111e457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610460565b506000610460565b600081815260018301602052604081205480156112d5576000611210600183611633565b855490915060009061122490600190611633565b9050818114611289576000866000018281548110611244576112446116cc565b9060005260206000200154905080876000018481548110611267576112676116cc565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061129a5761129a6116b6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610460565b6000915050610460565b60055460ff16156104bc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610504565b600082600001828154811061133c5761133c6116cc565b9060005260206000200154905092915050565b80356001600160a01b038116811461136657600080fd5b919050565b60006020828403121561137d57600080fd5b6110618261134f565b6000806040838503121561139957600080fd5b6113a28361134f565b91506113b06020840161134f565b90509250929050565b6000806000606084860312156113ce57600080fd5b6113d78461134f565b92506113e56020850161134f565b9150604084013590509250925092565b6000806040838503121561140857600080fd5b6114118361134f565b946020939093013593505050565b6000806020838503121561143257600080fd5b823567ffffffffffffffff8082111561144a57600080fd5b818501915085601f83011261145e57600080fd5b81358181111561146d57600080fd5b8660208260051b850101111561148257600080fd5b60209290920196919550909350505050565b600060208083850312156114a757600080fd5b823567ffffffffffffffff808211156114bf57600080fd5b818501915085601f8301126114d357600080fd5b8135818111156114e5576114e56116e2565b8060051b604051601f19603f8301168101818110858211171561150a5761150a6116e2565b604052828152858101935084860182860187018a101561152957600080fd5b600095505b838610156115535761153f8161134f565b85526001959095019493860193860161152e565b5098975050505050505050565b60006020828403121561157257600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156115ba5783516001600160a01b031683529284019291840191600101611595565b50909695505050505050565b600060208083528351808285015260005b818110156115f3578581018301518582016040015282016115d7565b81811115611605576000604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561162e5761162e6116a0565b500190565b600082821015611645576116456116a0565b500390565b600181811c9082168061165e57607f821691505b6020821081141561167f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611699576116996116a0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212203baf6ebdd1aae0f7a54a7cc0de90fdadf70e73fc221f96d26338b57280aa699464736f6c6343000807003300000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
-----Decoded View---------------
Arg [0] : maxSupply (uint256): 100000000000000000000000000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Deployed ByteCode Sourcemap
37176:2302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25199:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27550:201;;;;;;:::i;:::-;;:::i;:::-;;;4507:14:1;;4500:22;4482:41;;4470:2;4455:18;27550:201:0;4342:187:1;26319:108:0;26407:12;;26319:108;;;11798:25:1;;;11786:2;11771:18;26319:108:0;11652:177:1;28331:295:0;;;;;;:::i;:::-;;:::i;26161:93::-;;;26244:2;11976:36:1;;11964:2;11949:18;26161:93:0;11834:184:1;29035:238:0;;;;;;:::i;:::-;;:::i;37985:67::-;;;:::i;:::-;;38062:184;;;;;;:::i;:::-;;:::i;36567:91::-;;;;;;:::i;:::-;;:::i;37807:97::-;37887:9;37807:97;;38696:324;;;;;;:::i;:::-;;:::i;18460:86::-;18531:7;;;;18460:86;;39028:240;;;;;;:::i;:::-;;:::i;26490:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26591:18:0;26564:7;26591:18;;;;;;;;;;;;26490:127;15971:103;;;:::i;36977:164::-;;;;;;:::i;:::-;;:::i;37914:63::-;;;:::i;15323:87::-;15396:6;;;;;-1:-1:-1;;;;;15396:6:0;15323:87;;-1:-1:-1;;;;;3346:32:1;;;3328:51;;3316:2;3301:18;15323:87:0;3182:203:1;25418:104:0;;;:::i;38374:314::-;;;:::i;:::-;;;;;;;:::i;29776:436::-;;;;;;:::i;:::-;;:::i;26823:193::-;;;;;;:::i;:::-;;:::i;38254:112::-;;;;;;:::i;:::-;;:::i;37413:34::-;;;;;27079:151;;;;;;:::i;:::-;;:::i;16229:201::-;;;;;;:::i;:::-;;:::i;25199:100::-;25253:13;25286:5;25279:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25199:100;:::o;27550:201::-;27633:4;13955:10;27689:32;13955:10;27705:7;27714:6;27689:8;:32::i;:::-;27739:4;27732:11;;;27550:201;;;;;:::o;28331:295::-;28462:4;13955:10;28520:38;28536:4;13955:10;28551:6;28520:15;:38::i;:::-;28569:27;28579:4;28585:2;28589:6;28569:9;:27::i;:::-;-1:-1:-1;28614:4:0;;28331:295;-1:-1:-1;;;;28331:295:0:o;29035:238::-;29123:4;13955:10;29179:64;13955:10;29195:7;29232:10;29204:25;13955:10;29195:7;29204:9;:25::i;:::-;:38;;;;:::i;:::-;29179:8;:64::i;37985:67::-;15209:13;:11;:13::i;:::-;38034:10:::1;:8;:10::i;:::-;37985:67::o:0;38062:184::-;37662:22;13955:10;38254:112;:::i;37662:22::-;37654:53;;;;-1:-1:-1;;;37654:53:0;;8069:2:1;37654:53:0;;;8051:21:1;8108:2;8088:18;;;8081:30;-1:-1:-1;;;8127:18:1;;;8120:48;8185:18;;37654:53:0;;;;;;;;;37887:9;38163:6:::1;38141:19;26407:12:::0;;;26319:108;38141:19:::1;:28;;;;:::i;:::-;:46;;38133:77;;;::::0;-1:-1:-1;;;38133:77:0;;10741:2:1;38133:77:0::1;::::0;::::1;10723:21:1::0;10780:2;10760:18;;;10753:30;-1:-1:-1;;;10799:18:1;;;10792:48;10857:18;;38133:77:0::1;10539:342:1::0;38133:77:0::1;38221:17;38227:2;38231:6;38221:5;:17::i;:::-;38062:184:::0;;:::o;36567:91::-;36623:27;13955:10;36643:6;36623:5;:27::i;:::-;36567:91;:::o;38696:324::-;15209:13;:11;:13::i;:::-;38778:9:::1;38774:239;38793:18:::0;;::::1;38774:239;;;38862:1;38840:7:::0;;38848:1;38840:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38840:24:0::1;;;38832:74;;;::::0;-1:-1:-1;;;38832:74:0;;9524:2:1;38832:74:0::1;::::0;::::1;9506:21:1::0;9563:2;9543:18;;;9536:30;9602:34;9582:18;;;9575:62;-1:-1:-1;;;9653:18:1;;;9646:35;9698:19;;38832:74:0::1;9322:401:1::0;38832:74:0::1;38921:25;38935:7;;38943:1;38935:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38921:9;::::0;:13:::1;:25::i;:::-;;38966:35;38984:7;;38992:1;38984:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38966:35;::::0;;-1:-1:-1;;;;;3576:32:1;;;3558:51;;38996:4:0::1;3640:2:1::0;3625:18;;3618:50;3531:18;38966:35:0::1;;;;;;;38813:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38774:239;;;;38696:324:::0;;:::o;39028:240::-;15209:13;:11;:13::i;:::-;39109:9:::1;39105:154;39128:7;:14;39124:1;:18;39105:154;;;39163:28;39180:7;39188:1;39180:10;;;;;;;;:::i;:::-;;;;;;;39163:9;:16;;:28;;;;:::i;:::-;;39211:36;39229:7;39237:1;39229:10;;;;;;;;:::i;:::-;;;;;;;39241:5;39211:36;;;;;;-1:-1:-1::0;;;;;3576:32:1;;;;3558:51;;3652:14;3645:22;3640:2;3625:18;;3618:50;3546:2;3531:18;;3390:284;39211:36:0::1;;;;;;;;39144:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39105:154;;15971:103:::0;15209:13;:11;:13::i;:::-;16036:30:::1;16063:1;16036:18;:30::i;36977:164::-:0;37054:46;37070:7;13955:10;37093:6;37054:15;:46::i;:::-;37111:22;37117:7;37126:6;37111:5;:22::i;37914:63::-;15209:13;:11;:13::i;:::-;37961:8:::1;:6;:8::i;25418:104::-:0;25474:13;25507:7;25500:14;;;;;:::i;38374:314::-;38421:16;38450:13;38466:18;:9;:16;:18::i;:::-;38450:34;;38495:24;38536:5;38522:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38522:20:0;;38495:47;;38567:9;38563:83;38581:5;38579:1;:7;38563:83;;;38619:15;:9;38632:1;38619:12;:15::i;:::-;38606:7;38614:1;38606:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38606:28:0;;;:10;;;;;;;;;;;:28;38587:3;;;;:::i;:::-;;;;38563:83;;;-1:-1:-1;38673:7:0;38374:314;-1:-1:-1;;38374:314:0:o;29776:436::-;29869:4;13955:10;29869:4;29952:25;13955:10;29969:7;29952:9;:25::i;:::-;29925:52;;30016:15;29996:16;:35;;29988:85;;;;-1:-1:-1;;;29988:85:0;;11088:2:1;29988:85:0;;;11070:21:1;11127:2;11107:18;;;11100:30;11166:34;11146:18;;;11139:62;-1:-1:-1;;;11217:18:1;;;11210:35;11262:19;;29988:85:0;10886:401:1;29988:85:0;30109:60;30118:5;30125:7;30153:15;30134:16;:34;30109:8;:60::i;26823:193::-;26902:4;13955:10;26958:28;13955:10;26975:2;26979:6;26958:9;:28::i;38254:112::-;38308:4;38332:26;:9;38351:6;38332:18;:26::i;27079:151::-;-1:-1:-1;;;;;27195:18:0;;;27168:7;27195:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27079:151::o;16229:201::-;15209:13;:11;:13::i;:::-;-1:-1:-1;;;;;16318:22:0;::::1;16310:73;;;::::0;-1:-1:-1;;;16310:73:0;;6494:2:1;16310:73:0::1;::::0;::::1;6476:21:1::0;6533:2;6513:18;;;6506:30;6572:34;6552:18;;;6545:62;-1:-1:-1;;;6623:18:1;;;6616:36;6669:19;;16310:73:0::1;6292:402:1::0;16310:73:0::1;16394:28;16413:8;16394:18;:28::i;33401:380::-:0;-1:-1:-1;;;;;33537:19:0;;33529:68;;;;-1:-1:-1;;;33529:68:0;;10336:2:1;33529:68:0;;;10318:21:1;10375:2;10355:18;;;10348:30;10414:34;10394:18;;;10387:62;-1:-1:-1;;;10465:18:1;;;10458:34;10509:19;;33529:68:0;10134:400:1;33529:68:0;-1:-1:-1;;;;;33616:21:0;;33608:68;;;;-1:-1:-1;;;33608:68:0;;6901:2:1;33608:68:0;;;6883:21:1;6940:2;6920:18;;;6913:30;6979:34;6959:18;;;6952:62;-1:-1:-1;;;7030:18:1;;;7023:32;7072:19;;33608:68:0;6699:398:1;33608:68:0;-1:-1:-1;;;;;33689:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33741:32;;11798:25:1;;;33741:32:0;;11771:18:1;33741:32:0;;;;;;;33401:380;;;:::o;34072:453::-;34207:24;34234:25;34244:5;34251:7;34234:9;:25::i;:::-;34207:52;;-1:-1:-1;;34274:16:0;:37;34270:248;;34356:6;34336:16;:26;;34328:68;;;;-1:-1:-1;;;34328:68:0;;7304:2:1;34328:68:0;;;7286:21:1;7343:2;7323:18;;;7316:30;7382:31;7362:18;;;7355:59;7431:18;;34328:68:0;7102:353:1;34328:68:0;34440:51;34449:5;34456:7;34484:6;34465:16;:25;34440:8;:51::i;:::-;34196:329;34072:453;;;:::o;30682:671::-;-1:-1:-1;;;;;30813:18:0;;30805:68;;;;-1:-1:-1;;;30805:68:0;;9930:2:1;30805:68:0;;;9912:21:1;9969:2;9949:18;;;9942:30;10008:34;9988:18;;;9981:62;-1:-1:-1;;;10059:18:1;;;10052:35;10104:19;;30805:68:0;9728:401:1;30805:68:0;-1:-1:-1;;;;;30892:16:0;;30884:64;;;;-1:-1:-1;;;30884:64:0;;5338:2:1;30884:64:0;;;5320:21:1;5377:2;5357:18;;;5350:30;5416:34;5396:18;;;5389:62;-1:-1:-1;;;5467:18:1;;;5460:33;5510:19;;30884:64:0;5136:399:1;30884:64:0;30961:38;30982:4;30988:2;30992:6;30961:20;:38::i;:::-;-1:-1:-1;;;;;31034:15:0;;31012:19;31034:15;;;;;;;;;;;31068:21;;;;31060:72;;;;-1:-1:-1;;;31060:72:0;;7662:2:1;31060:72:0;;;7644:21:1;7701:2;7681:18;;;7674:30;7740:34;7720:18;;;7713:62;-1:-1:-1;;;7791:18:1;;;7784:36;7837:19;;31060:72:0;7460:402:1;31060:72:0;-1:-1:-1;;;;;31168:15:0;;;:9;:15;;;;;;;;;;;31186:20;;;31168:38;;31228:13;;;;;;;;:23;;31200:6;;31168:9;31228:23;;31200:6;;31228:23;:::i;:::-;;;;;;;;31284:2;-1:-1:-1;;;;;31269:26:0;31278:4;-1:-1:-1;;;;;31269:26:0;;31288:6;31269:26;;;;11798:25:1;;11786:2;11771:18;;11652:177;31269:26:0;;;;;;;;31308:37;38696:324;15488:132;15396:6;;-1:-1:-1;;;;;15396:6:0;;;;;13955:10;15552:23;15544:68;;;;-1:-1:-1;;;15544:68:0;;8761:2:1;15544:68:0;;;8743:21:1;;;8780:18;;;8773:30;8839:34;8819:18;;;8812:62;8891:18;;15544:68:0;8559:356:1;19315:120:0;18324:16;:14;:16::i;:::-;19374:7:::1;:15:::0;;-1:-1:-1;;19374:15:0::1;::::0;;19405:22:::1;13955:10:::0;19414:12:::1;19405:22;::::0;-1:-1:-1;;;;;3346:32:1;;;3328:51;;3316:2;3301:18;19405:22:0::1;;;;;;;19315:120::o:0;31640:399::-;-1:-1:-1;;;;;31724:21:0;;31716:65;;;;-1:-1:-1;;;31716:65:0;;11494:2:1;31716:65:0;;;11476:21:1;11533:2;11513:18;;;11506:30;11572:33;11552:18;;;11545:61;11623:18;;31716:65:0;11292:355:1;31716:65:0;31794:49;31823:1;31827:7;31836:6;31794:20;:49::i;:::-;31872:6;31856:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;31889:18:0;;:9;:18;;;;;;;;;;:28;;31911:6;;31889:9;:28;;31911:6;;31889:28;:::i;:::-;;;;-1:-1:-1;;31933:37:0;;11798:25:1;;;-1:-1:-1;;;;;31933:37:0;;;31950:1;;31933:37;;11786:2:1;11771:18;31933:37:0;;;;;;;38062:184;;:::o;32372:591::-;-1:-1:-1;;;;;32456:21:0;;32448:67;;;;-1:-1:-1;;;32448:67:0;;9122:2:1;32448:67:0;;;9104:21:1;9161:2;9141:18;;;9134:30;9200:34;9180:18;;;9173:62;-1:-1:-1;;;9251:18:1;;;9244:31;9292:19;;32448:67:0;8920:397:1;32448:67:0;32528:49;32549:7;32566:1;32570:6;32528:20;:49::i;:::-;-1:-1:-1;;;;;32615:18:0;;32590:22;32615:18;;;;;;;;;;;32652:24;;;;32644:71;;;;-1:-1:-1;;;32644:71:0;;6091:2:1;32644:71:0;;;6073:21:1;6130:2;6110:18;;;6103:30;6169:34;6149:18;;;6142:62;-1:-1:-1;;;6220:18:1;;;6213:32;6262:19;;32644:71:0;5889:398:1;32644:71:0;-1:-1:-1;;;;;32751:18:0;;:9;:18;;;;;;;;;;32772:23;;;32751:44;;32817:12;:22;;32789:6;;32751:9;32817:22;;32789:6;;32817:22;:::i;:::-;;;;-1:-1:-1;;32857:37:0;;11798:25:1;;;32883:1:0;;-1:-1:-1;;;;;32857:37:0;;;;;11786:2:1;11771:18;32857:37:0;;;;;;;38774:239:::1;38696:324:::0;;:::o;8402:152::-;8472:4;8496:50;8501:3;-1:-1:-1;;;;;8521:23:0;;8496:4;:50::i;:::-;8489:57;8402:152;-1:-1:-1;;;8402:152:0:o;8730:158::-;8803:4;8827:53;8835:3;-1:-1:-1;;;;;8855:23:0;;8827:7;:53::i;16590:191::-;16683:6;;;-1:-1:-1;;;;;16700:17:0;;;16683:6;16700:17;;;-1:-1:-1;;;;;;16700:17:0;;;;;;16733:40;;16683:6;;;;;;;;16733:40;;16664:16;;16733:40;16653:128;16590:191;:::o;19056:118::-;18065:19;:17;:19::i;:::-;19116:7:::1;:14:::0;;-1:-1:-1;;19116:14:0::1;19126:4;19116:14;::::0;;19146:20:::1;19153:12;13955:10:::0;;13875:98;9227:117;9290:7;9317:19;9325:3;4711:18;;4628:109;9698:158;9772:7;9823:22;9827:3;9839:5;9823:3;:22::i;8974:167::-;-1:-1:-1;;;;;9108:23:0;;9054:4;4510:19;;;:12;;;:19;;;;;;:24;;9078:55;4413:129;39276:199;18065:19;:17;:19::i;18804:108::-;18531:7;;;;18863:41;;;;-1:-1:-1;;;18863:41:0;;5742:2:1;18863:41:0;;;5724:21:1;5781:2;5761:18;;;5754:30;-1:-1:-1;;;5800:18:1;;;5793:50;5860:18;;18863:41:0;5540:344:1;2317:414:0;2380:4;4510:19;;;:12;;;:19;;;;;;2397:327;;-1:-1:-1;2440:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;2623:18;;2601:19;;;:12;;;:19;;;;;;:40;;;;2656:11;;2397:327;-1:-1:-1;2707:5:0;2700:12;;2907:1420;2973:4;3112:19;;;:12;;;:19;;;;;;3148:15;;3144:1176;;3523:21;3547:14;3560:1;3547:10;:14;:::i;:::-;3596:18;;3523:38;;-1:-1:-1;3576:17:0;;3596:22;;3617:1;;3596:22;:::i;:::-;3576:42;;3652:13;3639:9;:26;3635:405;;3686:17;3706:3;:11;;3718:9;3706:22;;;;;;;;:::i;:::-;;;;;;;;;3686:42;;3860:9;3831:3;:11;;3843:13;3831:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3945:23;;;:12;;;:23;;;;;:36;;;3635:405;4121:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4216:3;:12;;:19;4229:5;4216:19;;;;;;;;;;;4209:26;;;4259:4;4252:11;;;;;;;3144:1176;4303:5;4296:12;;;;;18619:108;18531:7;;;;18689:9;18681:38;;;;-1:-1:-1;;;18681:38:0;;8416:2:1;18681:38:0;;;8398:21:1;8455:2;8435:18;;;8428:30;-1:-1:-1;;;8474:18:1;;;8467:46;8530:18;;18681:38:0;8214:340:1;5091:120:0;5158:7;5185:3;:11;;5197:5;5185:18;;;;;;;;:::i;:::-;;;;;;;;;5178:25;;5091:120;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:1:o;1240:615::-;1326:6;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:52;;;1403:1;1400;1393:12;1355:52;1443:9;1430:23;1472:18;1513:2;1505:6;1502:14;1499:34;;;1529:1;1526;1519:12;1499:34;1567:6;1556:9;1552:22;1542:32;;1612:7;1605:4;1601:2;1597:13;1593:27;1583:55;;1634:1;1631;1624:12;1583:55;1674:2;1661:16;1700:2;1692:6;1689:14;1686:34;;;1716:1;1713;1706:12;1686:34;1769:7;1764:2;1754:6;1751:1;1747:14;1743:2;1739:23;1735:32;1732:45;1729:65;;;1790:1;1787;1780:12;1729:65;1821:2;1813:11;;;;;1843:6;;-1:-1:-1;1240:615:1;;-1:-1:-1;;;;1240:615:1:o;1860:1132::-;1944:6;1975:2;2018;2006:9;1997:7;1993:23;1989:32;1986:52;;;2034:1;2031;2024:12;1986:52;2074:9;2061:23;2103:18;2144:2;2136:6;2133:14;2130:34;;;2160:1;2157;2150:12;2130:34;2198:6;2187:9;2183:22;2173:32;;2243:7;2236:4;2232:2;2228:13;2224:27;2214:55;;2265:1;2262;2255:12;2214:55;2301:2;2288:16;2323:2;2319;2316:10;2313:36;;;2329:18;;:::i;:::-;2375:2;2372:1;2368:10;2407:2;2401:9;2470:2;2466:7;2461:2;2457;2453:11;2449:25;2441:6;2437:38;2525:6;2513:10;2510:22;2505:2;2493:10;2490:18;2487:46;2484:72;;;2536:18;;:::i;:::-;2572:2;2565:22;2622:18;;;2656:15;;;;-1:-1:-1;2691:11:1;;;2721;;;2717:20;;2714:33;-1:-1:-1;2711:53:1;;;2760:1;2757;2750:12;2711:53;2782:1;2773:10;;2792:169;2806:2;2803:1;2800:9;2792:169;;;2863:23;2882:3;2863:23;:::i;:::-;2851:36;;2824:1;2817:9;;;;;2907:12;;;;2939;;2792:169;;;-1:-1:-1;2980:6:1;1860:1132;-1:-1:-1;;;;;;;;1860:1132:1:o;2997:180::-;3056:6;3109:2;3097:9;3088:7;3084:23;3080:32;3077:52;;;3125:1;3122;3115:12;3077:52;-1:-1:-1;3148:23:1;;2997:180;-1:-1:-1;2997:180:1:o;3679:658::-;3850:2;3902:21;;;3972:13;;3875:18;;;3994:22;;;3821:4;;3850:2;4073:15;;;;4047:2;4032:18;;;3821:4;4116:195;4130:6;4127:1;4124:13;4116:195;;;4195:13;;-1:-1:-1;;;;;4191:39:1;4179:52;;4286:15;;;;4251:12;;;;4227:1;4145:9;4116:195;;;-1:-1:-1;4328:3:1;;3679:658;-1:-1:-1;;;;;;3679:658:1:o;4534:597::-;4646:4;4675:2;4704;4693:9;4686:21;4736:6;4730:13;4779:6;4774:2;4763:9;4759:18;4752:34;4804:1;4814:140;4828:6;4825:1;4822:13;4814:140;;;4923:14;;;4919:23;;4913:30;4889:17;;;4908:2;4885:26;4878:66;4843:10;;4814:140;;;4972:6;4969:1;4966:13;4963:91;;;5042:1;5037:2;5028:6;5017:9;5013:22;5009:31;5002:42;4963:91;-1:-1:-1;5115:2:1;5094:15;-1:-1:-1;;5090:29:1;5075:45;;;;5122:2;5071:54;;4534:597;-1:-1:-1;;;4534:597:1:o;12023:128::-;12063:3;12094:1;12090:6;12087:1;12084:13;12081:39;;;12100:18;;:::i;:::-;-1:-1:-1;12136:9:1;;12023:128::o;12156:125::-;12196:4;12224:1;12221;12218:8;12215:34;;;12229:18;;:::i;:::-;-1:-1:-1;12266:9:1;;12156:125::o;12286:380::-;12365:1;12361:12;;;;12408;;;12429:61;;12483:4;12475:6;12471:17;12461:27;;12429:61;12536:2;12528:6;12525:14;12505:18;12502:38;12499:161;;;12582:10;12577:3;12573:20;12570:1;12563:31;12617:4;12614:1;12607:15;12645:4;12642:1;12635:15;12499:161;;12286:380;;;:::o;12671:135::-;12710:3;-1:-1:-1;;12731:17:1;;12728:43;;;12751:18;;:::i;:::-;-1:-1:-1;12798:1:1;12787:13;;12671:135::o;12811:127::-;12872:10;12867:3;12863:20;12860:1;12853:31;12903:4;12900:1;12893:15;12927:4;12924:1;12917:15;12943:127;13004:10;12999:3;12995:20;12992:1;12985:31;13035:4;13032:1;13025:15;13059:4;13056:1;13049:15;13075:127;13136:10;13131:3;13127:20;13124:1;13117:31;13167:4;13164:1;13157:15;13191:4;13188:1;13181:15;13207:127;13268:10;13263:3;13259:20;13256:1;13249:31;13299:4;13296:1;13289:15;13323:4;13320:1;13313:15
Swarm Source
ipfs://3baf6ebdd1aae0f7a54a7cc0de90fdadf70e73fc221f96d26338b57280aa6994
Loading...
Loading
[ 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.