ERC-20
Overview
Max Total Supply
200,000,000 WIVA
Holders
232
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
365,041.24362 WIVAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WIVA
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract WIVA is ERC20, ERC20Burnable, ERC20Snapshot, ERC20Capped, Ownable { constructor() ERC20("WIVA", "WIVA") ERC20Capped(200000000 * (10 ** 18)) { ERC20._mint(msg.sender, 200000000 * 10 ** decimals()); } function snapshot() public onlyOwner { _snapshot(); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal override(ERC20, ERC20Snapshot) { super._beforeTokenTransfer(from, to, amount); } function transferToOwner(uint256 amount) public onlyOwner { _transfer(address(this), owner(), amount); } /** * @dev See {ERC20-_mint}. */ function _mint(address account, uint256 amount) internal virtual override(ERC20Capped, ERC20) { require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); super._mint(account, amount); } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of 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 defaut 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, 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: * * - `to` 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); } /** * @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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * 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 { } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Context.sol"; /** * @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 { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC20.sol"; /** * @dev Extension of {ERC20} that adds a cap to the supply of tokens. */ abstract contract ERC20Capped is ERC20 { uint256 immutable private _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor (uint256 cap_) { require(cap_ > 0, "ERC20Capped: cap is 0"); _cap = cap_; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } /** * @dev See {ERC20-_mint}. */ function _mint(address account, uint256 amount) internal virtual override { require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); super._mint(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Arrays.sol"; import "../../../utils/Counters.sol"; /** * @dev This contract extends an ERC20 token with a snapshot mechanism. When a snapshot is created, the balances and * total supply at the time are recorded for later access. * * This can be used to safely create mechanisms based on token balances such as trustless dividends or weighted voting. * In naive implementations it's possible to perform a "double spend" attack by reusing the same balance from different * accounts. By using snapshots to calculate dividends or voting power, those attacks no longer apply. It can also be * used to create an efficient ERC20 forking mechanism. * * Snapshots are created by the internal {_snapshot} function, which will emit the {Snapshot} event and return a * snapshot id. To get the total supply at the time of a snapshot, call the function {totalSupplyAt} with the snapshot * id. To get the balance of an account at the time of a snapshot, call the {balanceOfAt} function with the snapshot id * and the account address. * * ==== Gas Costs * * Snapshots are efficient. Snapshot creation is _O(1)_. Retrieval of balances or total supply from a snapshot is _O(log * n)_ in the number of snapshots that have been created, although _n_ for a specific account will generally be much * smaller since identical balances in subsequent snapshots are stored as a single entry. * * There is a constant overhead for normal ERC20 transfers due to the additional snapshot bookkeeping. This overhead is * only significant for the first transfer that immediately follows a snapshot for a particular account. Subsequent * transfers will have normal cost until the next snapshot, and so on. */ abstract contract ERC20Snapshot is ERC20 { // Inspired by Jordi Baylina's MiniMeToken to record historical balances: // https://github.com/Giveth/minimd/blob/ea04d950eea153a04c51fa510b068b9dded390cb/contracts/MiniMeToken.sol using Arrays for uint256[]; using Counters for Counters.Counter; // Snapshotted values have arrays of ids and the value corresponding to that id. These could be an array of a // Snapshot struct, but that would impede usage of functions that work on an array. struct Snapshots { uint256[] ids; uint256[] values; } mapping (address => Snapshots) private _accountBalanceSnapshots; Snapshots private _totalSupplySnapshots; // Snapshot ids increase monotonically, with the first value being 1. An id of 0 is invalid. Counters.Counter private _currentSnapshotId; /** * @dev Emitted by {_snapshot} when a snapshot identified by `id` is created. */ event Snapshot(uint256 id); /** * @dev Creates a new snapshot and returns its snapshot id. * * Emits a {Snapshot} event that contains the same id. * * {_snapshot} is `internal` and you have to decide how to expose it externally. Its usage may be restricted to a * set of accounts, for example using {AccessControl}, or it may be open to the public. * * [WARNING] * ==== * While an open way of calling {_snapshot} is required for certain trust minimization mechanisms such as forking, * you must consider that it can potentially be used by attackers in two ways. * * First, it can be used to increase the cost of retrieval of values from snapshots, although it will grow * logarithmically thus rendering this attack ineffective in the long term. Second, it can be used to target * specific accounts and increase the cost of ERC20 transfers for them, in the ways specified in the Gas Costs * section above. * * We haven't measured the actual numbers; if this is something you're interested in please reach out to us. * ==== */ function _snapshot() internal virtual returns (uint256) { _currentSnapshotId.increment(); uint256 currentId = _currentSnapshotId.current(); emit Snapshot(currentId); return currentId; } /** * @dev Retrieves the balance of `account` at the time `snapshotId` was created. */ function balanceOfAt(address account, uint256 snapshotId) public view virtual returns (uint256) { (bool snapshotted, uint256 value) = _valueAt(snapshotId, _accountBalanceSnapshots[account]); return snapshotted ? value : balanceOf(account); } /** * @dev Retrieves the total supply at the time `snapshotId` was created. */ function totalSupplyAt(uint256 snapshotId) public view virtual returns(uint256) { (bool snapshotted, uint256 value) = _valueAt(snapshotId, _totalSupplySnapshots); return snapshotted ? value : totalSupply(); } // Update balance and/or total supply snapshots before the values are modified. This is implemented // in the _beforeTokenTransfer hook, which is executed for _mint, _burn, and _transfer operations. function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // mint _updateAccountSnapshot(to); _updateTotalSupplySnapshot(); } else if (to == address(0)) { // burn _updateAccountSnapshot(from); _updateTotalSupplySnapshot(); } else { // transfer _updateAccountSnapshot(from); _updateAccountSnapshot(to); } } function _valueAt(uint256 snapshotId, Snapshots storage snapshots) private view returns (bool, uint256) { require(snapshotId > 0, "ERC20Snapshot: id is 0"); // solhint-disable-next-line max-line-length require(snapshotId <= _currentSnapshotId.current(), "ERC20Snapshot: nonexistent id"); // When a valid snapshot is queried, there are three possibilities: // a) The queried value was not modified after the snapshot was taken. Therefore, a snapshot entry was never // created for this id, and all stored snapshot ids are smaller than the requested one. The value that corresponds // to this id is the current one. // b) The queried value was modified after the snapshot was taken. Therefore, there will be an entry with the // requested id, and its value is the one to return. // c) More snapshots were created after the requested one, and the queried value was later modified. There will be // no entry for the requested id: the value that corresponds to it is that of the smallest snapshot id that is // larger than the requested one. // // In summary, we need to find an element in an array, returning the index of the smallest value that is larger if // it is not found, unless said value doesn't exist (e.g. when all values are smaller). Arrays.findUpperBound does // exactly this. uint256 index = snapshots.ids.findUpperBound(snapshotId); if (index == snapshots.ids.length) { return (false, 0); } else { return (true, snapshots.values[index]); } } function _updateAccountSnapshot(address account) private { _updateSnapshot(_accountBalanceSnapshots[account], balanceOf(account)); } function _updateTotalSupplySnapshot() private { _updateSnapshot(_totalSupplySnapshots, totalSupply()); } function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) private { uint256 currentId = _currentSnapshotId.current(); if (_lastSnapshotId(snapshots.ids) < currentId) { snapshots.ids.push(currentId); snapshots.values.push(currentValue); } } function _lastSnapshotId(uint256[] storage ids) private view returns (uint256) { if (ids.length == 0) { return 0; } else { return ids[ids.length - 1]; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./math/Math.sol"; /** * @dev Collection of functions related to array types. */ library Arrays { /** * @dev Searches a sorted `array` and returns the first index that contains * a value greater or equal to `element`. If no such index exists (i.e. all * values in the array are strictly less than `element`), the array length is * returned. Time complexity O(log n). * * `array` is expected to be sorted in ascending order, and to contain no * repeated elements. */ function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) { if (array.length == 0) { return 0; } uint256 low = 0; uint256 high = array.length; while (low < high) { uint256 mid = Math.average(low, high); // Note that mid will always be strictly less than high (i.e. it will be a valid array index) // because Math.average rounds down (it does integer division with truncation). if (array[mid] > element) { high = mid; } else { low = mid + 1; } } // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound. if (low > 0 && array[low - 1] == element) { return low - 1; } else { return low; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Snapshot","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"balanceOfAt","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":"cap","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":"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":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshot","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":"uint256","name":"snapshotId","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506aa56fa5b99019a5c80000006040518060400160405280600481526020017f57495641000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f57495641000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000a29291906200068e565b508060049080519060200190620000bb9291906200068e565b5050506000811162000104576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000fb906200079d565b60405180910390fd5b80608081815250505060006200011f6200020960201b60201c565b905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200020333620001d36200021160201b60201c565b600a620001e19190620008c7565b630bebc200620001f2919062000a04565b6200021a60201b62000f441760201c565b62000baa565b600033905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200028d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028490620007bf565b60405180910390fd5b620002a1600083836200037f60201b60201c565b8060026000828254620002b591906200080f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200030c91906200080f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003739190620007e1565b60405180910390a35050565b620003978383836200039c60201b620010981760201c565b505050565b620003b48383836200049760201b620011521760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200041157620003fb826200049c60201b60201c565b6200040b620004ff60201b60201c565b62000492565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200046e5762000458836200049c60201b60201c565b62000468620004ff60201b60201c565b62000491565b6200047f836200049c60201b60201c565b62000490826200049c60201b60201c565b5b5b505050565b505050565b620004fc600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020620004f0836200052360201b60201c565b6200056b60201b60201c565b50565b62000521600662000515620005fe60201b60201c565b6200056b60201b60201c565b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006200058460086200060860201b620011571760201c565b9050806200059b846000016200061660201b60201c565b1015620005f95782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b6000600254905090565b600081600001549050919050565b600080828054905014156200062f576000905062000689565b816001838054905062000643919062000a65565b815481106200067b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490505b919050565b8280546200069c9062000ab7565b90600052602060002090601f016020900481019282620006c057600085556200070c565b82601f10620006db57805160ff19168380011785556200070c565b828001600101855582156200070c579182015b828111156200070b578251825591602001919060010190620006ee565b5b5090506200071b91906200071f565b5090565b5b808211156200073a57600081600090555060010162000720565b5090565b60006200074d601583620007fe565b91506200075a8262000b58565b602082019050919050565b600062000774601f83620007fe565b9150620007818262000b81565b602082019050919050565b620007978162000aa0565b82525050565b60006020820190508181036000830152620007b8816200073e565b9050919050565b60006020820190508181036000830152620007da8162000765565b9050919050565b6000602082019050620007f860008301846200078c565b92915050565b600082825260208201905092915050565b60006200081c8262000aa0565b9150620008298362000aa0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000861576200086062000aed565b5b828201905092915050565b6000808291508390505b6001851115620008be5780860481111562000896576200089562000aed565b5b6001851615620008a65780820291505b8081029050620008b68562000b4b565b945062000876565b94509492505050565b6000620008d48262000aa0565b9150620008e18362000aaa565b9250620009107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000918565b905092915050565b6000826200092a5760019050620009fd565b816200093a5760009050620009fd565b81600181146200095357600281146200095e5762000994565b6001915050620009fd565b60ff84111562000973576200097262000aed565b5b8360020a9150848211156200098d576200098c62000aed565b5b50620009fd565b5060208310610133831016604e8410600b8410161715620009ce5782820a905083811115620009c857620009c762000aed565b5b620009fd565b620009dd84848460016200086c565b92509050818404811115620009f757620009f662000aed565b5b81810290505b9392505050565b600062000a118262000aa0565b915062000a1e8362000aa0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a5a5762000a5962000aed565b5b828202905092915050565b600062000a728262000aa0565b915062000a7f8362000aa0565b92508282101562000a955762000a9462000aed565b5b828203905092915050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000ad057607f821691505b6020821081141562000ae75762000ae662000b1c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b608051612a4b62000bc660003960006106130152612a4b6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b85780639711715a1161007c5780639711715a14610365578063981b24d01461036f578063a457c2d71461039f578063a9059cbb146103cf578063dd62ed3e146103ff578063f2fde38b1461042f57610142565b8063715018a6146102e757806379cc6790146102f157806387c1ed121461030d5780638da5cb5b1461032957806395d89b411461034757610142565b8063355274ea1161010a578063355274ea14610201578063395093511461021f57806340c10f191461024f57806342966c681461026b5780634ee2cd7e1461028757806370a08231146102b757610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b3578063313ce567146101e3575b600080fd5b61014f61044b565b60405161015c91906120fd565b60405180910390f35b61017f600480360381019061017a9190611dbd565b6104dd565b60405161018c91906120e2565b60405180910390f35b61019d6104fb565b6040516101aa919061231f565b60405180910390f35b6101cd60048036038101906101c89190611d6e565b610505565b6040516101da91906120e2565b60405180910390f35b6101eb610606565b6040516101f8919061233a565b60405180910390f35b61020961060f565b604051610216919061231f565b60405180910390f35b61023960048036038101906102349190611dbd565b610637565b60405161024691906120e2565b60405180910390f35b61026960048036038101906102649190611dbd565b6106e3565b005b61028560048036038101906102809190611df9565b61076d565b005b6102a1600480360381019061029c9190611dbd565b610781565b6040516102ae919061231f565b60405180910390f35b6102d160048036038101906102cc9190611d09565b6107f1565b6040516102de919061231f565b60405180910390f35b6102ef610839565b005b61030b60048036038101906103069190611dbd565b610976565b005b61032760048036038101906103229190611df9565b6109fa565b005b610331610a8b565b60405161033e91906120c7565b60405180910390f35b61034f610ab5565b60405161035c91906120fd565b60405180910390f35b61036d610b47565b005b61038960048036038101906103849190611df9565b610bce565b604051610396919061231f565b60405180910390f35b6103b960048036038101906103b49190611dbd565b610bff565b6040516103c691906120e2565b60405180910390f35b6103e960048036038101906103e49190611dbd565b610cf3565b6040516103f691906120e2565b60405180910390f35b61041960048036038101906104149190611d32565b610d11565b604051610426919061231f565b60405180910390f35b61044960048036038101906104449190611d09565b610d98565b005b60606003805461045a906124b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610486906124b4565b80156104d35780601f106104a8576101008083540402835291602001916104d3565b820191906000526020600020905b8154815290600101906020018083116104b657829003601f168201915b5050505050905090565b60006104f16104ea611165565b848461116d565b6001905092915050565b6000600254905090565b6000610512848484611338565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061055d611165565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d4906121df565b60405180910390fd5b6105fa856105e9611165565b85846105f591906123f8565b61116d565b60019150509392505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60006106d9610644611165565b848460016000610652611165565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106d49190612371565b61116d565b6001905092915050565b6106eb611165565b73ffffffffffffffffffffffffffffffffffffffff16610709610a8b565b73ffffffffffffffffffffffffffffffffffffffff161461075f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610756906121ff565b60405180910390fd5b61076982826115b7565b5050565b61077e610778611165565b82611621565b50565b60008060006107ce84600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206117f5565b91509150816107e5576107e0856107f1565b6107e7565b805b9250505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610841611165565b73ffffffffffffffffffffffffffffffffffffffff1661085f610a8b565b73ffffffffffffffffffffffffffffffffffffffff16146108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac906121ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061098983610984611165565b610d11565b9050818110156109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c59061221f565b60405180910390fd5b6109eb836109da611165565b84846109e691906123f8565b61116d565b6109f58383611621565b505050565b610a02611165565b73ffffffffffffffffffffffffffffffffffffffff16610a20610a8b565b73ffffffffffffffffffffffffffffffffffffffff1614610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d906121ff565b60405180910390fd5b610a8830610a82610a8b565b83611338565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ac4906124b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610af0906124b4565b8015610b3d5780601f10610b1257610100808354040283529160200191610b3d565b820191906000526020600020905b815481529060010190602001808311610b2057829003601f168201915b5050505050905090565b610b4f611165565b73ffffffffffffffffffffffffffffffffffffffff16610b6d610a8b565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba906121ff565b60405180910390fd5b610bcb611913565b50565b6000806000610bde8460066117f5565b9150915081610bf457610bef6104fb565b610bf6565b805b92505050919050565b60008060016000610c0e611165565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906122df565b60405180910390fd5b610ce8610cd6611165565b858584610ce391906123f8565b61116d565b600191505092915050565b6000610d07610d00611165565b8484611338565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610da0611165565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610a8b565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906121ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b9061217f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab906122ff565b60405180910390fd5b610fc06000838361196b565b8060026000828254610fd29190612371565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110279190612371565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161108c919061231f565b60405180910390a35050565b6110a3838383611152565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ee576110e18261197b565b6110e96119ce565b61114d565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111395761112c8361197b565b6111346119ce565b61114c565b6111428361197b565b61114b8261197b565b5b5b505050565b505050565b600081600001549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061229f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112449061219f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161132b919061231f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f9061225f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f9061213f565b60405180910390fd5b61142383838361196b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a0906121bf565b60405180910390fd5b81816114b591906123f8565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115459190612371565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115a9919061231f565b60405180910390a350505050565b6115bf61060f565b816115c86104fb565b6115d29190612371565b1115611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a9061227f565b60405180910390fd5b61161d82826119e2565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116889061223f565b60405180910390fd5b61169d8260008361196b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a9061215f565b60405180910390fd5b818161172f91906123f8565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461178391906123f8565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117e8919061231f565b60405180910390a3505050565b6000806000841161183b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611832906122bf565b60405180910390fd5b6118456008611157565b841115611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e9061211f565b60405180910390fd5b600061189f8585600001611a4c90919063ffffffff16565b905083600001805490508114156118bd57600080925092505061190c565b60018460010182815481106118fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015492509250505b9250929050565b600061191f6008611b72565b600061192b6008611157565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb678160405161195c919061231f565b60405180910390a18091505090565b611976838383611098565b505050565b6119cb600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206119c6836107f1565b611b88565b50565b6119e060066119db6104fb565b611b88565b565b6119ea61060f565b816119f36104fb565b6119fd9190612371565b1115611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a359061227f565b60405180910390fd5b611a488282610f44565b5050565b60008083805490501415611a635760009050611b6c565b600080848054905090505b80821015611aed576000611a828383611c05565b905084868281548110611abe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001541115611ad757809150611ae7565b600181611ae49190612371565b92505b50611a6e565b600082118015611b4b57508385600184611b0791906123f8565b81548110611b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154145b15611b6657600182611b5d91906123f8565b92505050611b6c565b81925050505b92915050565b6001816000016000828254019250508190555050565b6000611b946008611157565b905080611ba384600001611c6c565b1015611c005782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b600060028083611c1591906124e6565b600285611c2291906124e6565b611c2c9190612371565b611c3691906123c7565b600283611c4391906123c7565b600285611c5091906123c7565b611c5a9190612371565b611c649190612371565b905092915050565b60008082805490501415611c835760009050611cda565b8160018380549050611c9591906123f8565b81548110611ccc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490505b919050565b600081359050611cee816129e7565b92915050565b600081359050611d03816129fe565b92915050565b600060208284031215611d1b57600080fd5b6000611d2984828501611cdf565b91505092915050565b60008060408385031215611d4557600080fd5b6000611d5385828601611cdf565b9250506020611d6485828601611cdf565b9150509250929050565b600080600060608486031215611d8357600080fd5b6000611d9186828701611cdf565b9350506020611da286828701611cdf565b9250506040611db386828701611cf4565b9150509250925092565b60008060408385031215611dd057600080fd5b6000611dde85828601611cdf565b9250506020611def85828601611cf4565b9150509250929050565b600060208284031215611e0b57600080fd5b6000611e1984828501611cf4565b91505092915050565b611e2b8161242c565b82525050565b611e3a8161243e565b82525050565b6000611e4b82612355565b611e558185612360565b9350611e65818560208601612481565b611e6e816125a4565b840191505092915050565b6000611e86601d83612360565b9150611e91826125b5565b602082019050919050565b6000611ea9602383612360565b9150611eb4826125de565b604082019050919050565b6000611ecc602283612360565b9150611ed78261262d565b604082019050919050565b6000611eef602683612360565b9150611efa8261267c565b604082019050919050565b6000611f12602283612360565b9150611f1d826126cb565b604082019050919050565b6000611f35602683612360565b9150611f408261271a565b604082019050919050565b6000611f58602883612360565b9150611f6382612769565b604082019050919050565b6000611f7b602083612360565b9150611f86826127b8565b602082019050919050565b6000611f9e602483612360565b9150611fa9826127e1565b604082019050919050565b6000611fc1602183612360565b9150611fcc82612830565b604082019050919050565b6000611fe4602583612360565b9150611fef8261287f565b604082019050919050565b6000612007601983612360565b9150612012826128ce565b602082019050919050565b600061202a602483612360565b9150612035826128f7565b604082019050919050565b600061204d601683612360565b915061205882612946565b602082019050919050565b6000612070602583612360565b915061207b8261296f565b604082019050919050565b6000612093601f83612360565b915061209e826129be565b602082019050919050565b6120b28161246a565b82525050565b6120c181612474565b82525050565b60006020820190506120dc6000830184611e22565b92915050565b60006020820190506120f76000830184611e31565b92915050565b600060208201905081810360008301526121178184611e40565b905092915050565b6000602082019050818103600083015261213881611e79565b9050919050565b6000602082019050818103600083015261215881611e9c565b9050919050565b6000602082019050818103600083015261217881611ebf565b9050919050565b6000602082019050818103600083015261219881611ee2565b9050919050565b600060208201905081810360008301526121b881611f05565b9050919050565b600060208201905081810360008301526121d881611f28565b9050919050565b600060208201905081810360008301526121f881611f4b565b9050919050565b6000602082019050818103600083015261221881611f6e565b9050919050565b6000602082019050818103600083015261223881611f91565b9050919050565b6000602082019050818103600083015261225881611fb4565b9050919050565b6000602082019050818103600083015261227881611fd7565b9050919050565b6000602082019050818103600083015261229881611ffa565b9050919050565b600060208201905081810360008301526122b88161201d565b9050919050565b600060208201905081810360008301526122d881612040565b9050919050565b600060208201905081810360008301526122f881612063565b9050919050565b6000602082019050818103600083015261231881612086565b9050919050565b600060208201905061233460008301846120a9565b92915050565b600060208201905061234f60008301846120b8565b92915050565b600081519050919050565b600082825260208201905092915050565b600061237c8261246a565b91506123878361246a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123bc576123bb612517565b5b828201905092915050565b60006123d28261246a565b91506123dd8361246a565b9250826123ed576123ec612546565b5b828204905092915050565b60006124038261246a565b915061240e8361246a565b92508282101561242157612420612517565b5b828203905092915050565b60006124378261244a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561249f578082015181840152602081019050612484565b838111156124ae576000848401525b50505050565b600060028204905060018216806124cc57607f821691505b602082108114156124e0576124df612575565b5b50919050565b60006124f18261246a565b91506124fc8361246a565b92508261250c5761250b612546565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6129f08161242c565b81146129fb57600080fd5b50565b612a078161246a565b8114612a1257600080fd5b5056fea2646970667358221220e966158da1109bbef5b0c8c3e2080b4049b272e9ef6d94ea84e1571fa8e7d2a764736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b85780639711715a1161007c5780639711715a14610365578063981b24d01461036f578063a457c2d71461039f578063a9059cbb146103cf578063dd62ed3e146103ff578063f2fde38b1461042f57610142565b8063715018a6146102e757806379cc6790146102f157806387c1ed121461030d5780638da5cb5b1461032957806395d89b411461034757610142565b8063355274ea1161010a578063355274ea14610201578063395093511461021f57806340c10f191461024f57806342966c681461026b5780634ee2cd7e1461028757806370a08231146102b757610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b3578063313ce567146101e3575b600080fd5b61014f61044b565b60405161015c91906120fd565b60405180910390f35b61017f600480360381019061017a9190611dbd565b6104dd565b60405161018c91906120e2565b60405180910390f35b61019d6104fb565b6040516101aa919061231f565b60405180910390f35b6101cd60048036038101906101c89190611d6e565b610505565b6040516101da91906120e2565b60405180910390f35b6101eb610606565b6040516101f8919061233a565b60405180910390f35b61020961060f565b604051610216919061231f565b60405180910390f35b61023960048036038101906102349190611dbd565b610637565b60405161024691906120e2565b60405180910390f35b61026960048036038101906102649190611dbd565b6106e3565b005b61028560048036038101906102809190611df9565b61076d565b005b6102a1600480360381019061029c9190611dbd565b610781565b6040516102ae919061231f565b60405180910390f35b6102d160048036038101906102cc9190611d09565b6107f1565b6040516102de919061231f565b60405180910390f35b6102ef610839565b005b61030b60048036038101906103069190611dbd565b610976565b005b61032760048036038101906103229190611df9565b6109fa565b005b610331610a8b565b60405161033e91906120c7565b60405180910390f35b61034f610ab5565b60405161035c91906120fd565b60405180910390f35b61036d610b47565b005b61038960048036038101906103849190611df9565b610bce565b604051610396919061231f565b60405180910390f35b6103b960048036038101906103b49190611dbd565b610bff565b6040516103c691906120e2565b60405180910390f35b6103e960048036038101906103e49190611dbd565b610cf3565b6040516103f691906120e2565b60405180910390f35b61041960048036038101906104149190611d32565b610d11565b604051610426919061231f565b60405180910390f35b61044960048036038101906104449190611d09565b610d98565b005b60606003805461045a906124b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610486906124b4565b80156104d35780601f106104a8576101008083540402835291602001916104d3565b820191906000526020600020905b8154815290600101906020018083116104b657829003601f168201915b5050505050905090565b60006104f16104ea611165565b848461116d565b6001905092915050565b6000600254905090565b6000610512848484611338565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061055d611165565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d4906121df565b60405180910390fd5b6105fa856105e9611165565b85846105f591906123f8565b61116d565b60019150509392505050565b60006012905090565b60007f000000000000000000000000000000000000000000a56fa5b99019a5c8000000905090565b60006106d9610644611165565b848460016000610652611165565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106d49190612371565b61116d565b6001905092915050565b6106eb611165565b73ffffffffffffffffffffffffffffffffffffffff16610709610a8b565b73ffffffffffffffffffffffffffffffffffffffff161461075f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610756906121ff565b60405180910390fd5b61076982826115b7565b5050565b61077e610778611165565b82611621565b50565b60008060006107ce84600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206117f5565b91509150816107e5576107e0856107f1565b6107e7565b805b9250505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610841611165565b73ffffffffffffffffffffffffffffffffffffffff1661085f610a8b565b73ffffffffffffffffffffffffffffffffffffffff16146108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac906121ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061098983610984611165565b610d11565b9050818110156109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c59061221f565b60405180910390fd5b6109eb836109da611165565b84846109e691906123f8565b61116d565b6109f58383611621565b505050565b610a02611165565b73ffffffffffffffffffffffffffffffffffffffff16610a20610a8b565b73ffffffffffffffffffffffffffffffffffffffff1614610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d906121ff565b60405180910390fd5b610a8830610a82610a8b565b83611338565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ac4906124b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610af0906124b4565b8015610b3d5780601f10610b1257610100808354040283529160200191610b3d565b820191906000526020600020905b815481529060010190602001808311610b2057829003601f168201915b5050505050905090565b610b4f611165565b73ffffffffffffffffffffffffffffffffffffffff16610b6d610a8b565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba906121ff565b60405180910390fd5b610bcb611913565b50565b6000806000610bde8460066117f5565b9150915081610bf457610bef6104fb565b610bf6565b805b92505050919050565b60008060016000610c0e611165565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906122df565b60405180910390fd5b610ce8610cd6611165565b858584610ce391906123f8565b61116d565b600191505092915050565b6000610d07610d00611165565b8484611338565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610da0611165565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610a8b565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906121ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b9061217f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab906122ff565b60405180910390fd5b610fc06000838361196b565b8060026000828254610fd29190612371565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110279190612371565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161108c919061231f565b60405180910390a35050565b6110a3838383611152565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ee576110e18261197b565b6110e96119ce565b61114d565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111395761112c8361197b565b6111346119ce565b61114c565b6111428361197b565b61114b8261197b565b5b5b505050565b505050565b600081600001549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061229f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112449061219f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161132b919061231f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f9061225f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f9061213f565b60405180910390fd5b61142383838361196b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a0906121bf565b60405180910390fd5b81816114b591906123f8565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115459190612371565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115a9919061231f565b60405180910390a350505050565b6115bf61060f565b816115c86104fb565b6115d29190612371565b1115611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a9061227f565b60405180910390fd5b61161d82826119e2565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116889061223f565b60405180910390fd5b61169d8260008361196b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a9061215f565b60405180910390fd5b818161172f91906123f8565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461178391906123f8565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117e8919061231f565b60405180910390a3505050565b6000806000841161183b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611832906122bf565b60405180910390fd5b6118456008611157565b841115611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e9061211f565b60405180910390fd5b600061189f8585600001611a4c90919063ffffffff16565b905083600001805490508114156118bd57600080925092505061190c565b60018460010182815481106118fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015492509250505b9250929050565b600061191f6008611b72565b600061192b6008611157565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb678160405161195c919061231f565b60405180910390a18091505090565b611976838383611098565b505050565b6119cb600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206119c6836107f1565b611b88565b50565b6119e060066119db6104fb565b611b88565b565b6119ea61060f565b816119f36104fb565b6119fd9190612371565b1115611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a359061227f565b60405180910390fd5b611a488282610f44565b5050565b60008083805490501415611a635760009050611b6c565b600080848054905090505b80821015611aed576000611a828383611c05565b905084868281548110611abe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001541115611ad757809150611ae7565b600181611ae49190612371565b92505b50611a6e565b600082118015611b4b57508385600184611b0791906123f8565b81548110611b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154145b15611b6657600182611b5d91906123f8565b92505050611b6c565b81925050505b92915050565b6001816000016000828254019250508190555050565b6000611b946008611157565b905080611ba384600001611c6c565b1015611c005782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b600060028083611c1591906124e6565b600285611c2291906124e6565b611c2c9190612371565b611c3691906123c7565b600283611c4391906123c7565b600285611c5091906123c7565b611c5a9190612371565b611c649190612371565b905092915050565b60008082805490501415611c835760009050611cda565b8160018380549050611c9591906123f8565b81548110611ccc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490505b919050565b600081359050611cee816129e7565b92915050565b600081359050611d03816129fe565b92915050565b600060208284031215611d1b57600080fd5b6000611d2984828501611cdf565b91505092915050565b60008060408385031215611d4557600080fd5b6000611d5385828601611cdf565b9250506020611d6485828601611cdf565b9150509250929050565b600080600060608486031215611d8357600080fd5b6000611d9186828701611cdf565b9350506020611da286828701611cdf565b9250506040611db386828701611cf4565b9150509250925092565b60008060408385031215611dd057600080fd5b6000611dde85828601611cdf565b9250506020611def85828601611cf4565b9150509250929050565b600060208284031215611e0b57600080fd5b6000611e1984828501611cf4565b91505092915050565b611e2b8161242c565b82525050565b611e3a8161243e565b82525050565b6000611e4b82612355565b611e558185612360565b9350611e65818560208601612481565b611e6e816125a4565b840191505092915050565b6000611e86601d83612360565b9150611e91826125b5565b602082019050919050565b6000611ea9602383612360565b9150611eb4826125de565b604082019050919050565b6000611ecc602283612360565b9150611ed78261262d565b604082019050919050565b6000611eef602683612360565b9150611efa8261267c565b604082019050919050565b6000611f12602283612360565b9150611f1d826126cb565b604082019050919050565b6000611f35602683612360565b9150611f408261271a565b604082019050919050565b6000611f58602883612360565b9150611f6382612769565b604082019050919050565b6000611f7b602083612360565b9150611f86826127b8565b602082019050919050565b6000611f9e602483612360565b9150611fa9826127e1565b604082019050919050565b6000611fc1602183612360565b9150611fcc82612830565b604082019050919050565b6000611fe4602583612360565b9150611fef8261287f565b604082019050919050565b6000612007601983612360565b9150612012826128ce565b602082019050919050565b600061202a602483612360565b9150612035826128f7565b604082019050919050565b600061204d601683612360565b915061205882612946565b602082019050919050565b6000612070602583612360565b915061207b8261296f565b604082019050919050565b6000612093601f83612360565b915061209e826129be565b602082019050919050565b6120b28161246a565b82525050565b6120c181612474565b82525050565b60006020820190506120dc6000830184611e22565b92915050565b60006020820190506120f76000830184611e31565b92915050565b600060208201905081810360008301526121178184611e40565b905092915050565b6000602082019050818103600083015261213881611e79565b9050919050565b6000602082019050818103600083015261215881611e9c565b9050919050565b6000602082019050818103600083015261217881611ebf565b9050919050565b6000602082019050818103600083015261219881611ee2565b9050919050565b600060208201905081810360008301526121b881611f05565b9050919050565b600060208201905081810360008301526121d881611f28565b9050919050565b600060208201905081810360008301526121f881611f4b565b9050919050565b6000602082019050818103600083015261221881611f6e565b9050919050565b6000602082019050818103600083015261223881611f91565b9050919050565b6000602082019050818103600083015261225881611fb4565b9050919050565b6000602082019050818103600083015261227881611fd7565b9050919050565b6000602082019050818103600083015261229881611ffa565b9050919050565b600060208201905081810360008301526122b88161201d565b9050919050565b600060208201905081810360008301526122d881612040565b9050919050565b600060208201905081810360008301526122f881612063565b9050919050565b6000602082019050818103600083015261231881612086565b9050919050565b600060208201905061233460008301846120a9565b92915050565b600060208201905061234f60008301846120b8565b92915050565b600081519050919050565b600082825260208201905092915050565b600061237c8261246a565b91506123878361246a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123bc576123bb612517565b5b828201905092915050565b60006123d28261246a565b91506123dd8361246a565b9250826123ed576123ec612546565b5b828204905092915050565b60006124038261246a565b915061240e8361246a565b92508282101561242157612420612517565b5b828203905092915050565b60006124378261244a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561249f578082015181840152602081019050612484565b838111156124ae576000848401525b50505050565b600060028204905060018216806124cc57607f821691505b602082108114156124e0576124df612575565b5b50919050565b60006124f18261246a565b91506124fc8361246a565b92508261250c5761250b612546565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6129f08161242c565b81146129fb57600080fd5b50565b612a078161246a565b8114612a1257600080fd5b5056fea2646970667358221220e966158da1109bbef5b0c8c3e2080b4049b272e9ef6d94ea84e1571fa8e7d2a764736f6c63430008040033
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.