Overview
AVAX Balance
AVAX Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 247,165 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 56167478 | 62 days ago | IN | 0 AVAX | 0.00004727 | ||||
Approve | 55798586 | 70 days ago | IN | 0 AVAX | 0.00007529 | ||||
Approve | 55798514 | 70 days ago | IN | 0 AVAX | 0.00011717 | ||||
Approve | 55384867 | 78 days ago | IN | 0 AVAX | 0.00005902 | ||||
Approve | 55283734 | 81 days ago | IN | 0 AVAX | 0.00003865 | ||||
Approve | 51870734 | 159 days ago | IN | 0 AVAX | 0.00078789 | ||||
Approve | 51355014 | 172 days ago | IN | 0 AVAX | 0.00083249 | ||||
Approve | 51355012 | 172 days ago | IN | 0 AVAX | 0.00083249 | ||||
Approve | 50995738 | 180 days ago | IN | 0 AVAX | 0.00125122 | ||||
Transfer | 50995464 | 180 days ago | IN | 0 AVAX | 0.00065614 | ||||
Transfer | 50995463 | 180 days ago | IN | 0 AVAX | 0.00137345 | ||||
Approve | 47941596 | 254 days ago | IN | 0 AVAX | 0.00127483 | ||||
Approve | 47040686 | 276 days ago | IN | 0 AVAX | 0.0008347 | ||||
Approve | 44099290 | 347 days ago | IN | 0 AVAX | 0.00074359 | ||||
Approve | 43873211 | 352 days ago | IN | 0 AVAX | 0.00125122 | ||||
Approve | 43852420 | 353 days ago | IN | 0 AVAX | 0.00124136 | ||||
Approve | 43828444 | 353 days ago | IN | 0 AVAX | 0.00125122 | ||||
Approve | 42886926 | 376 days ago | IN | 0 AVAX | 0.00125122 | ||||
Approve | 42693654 | 380 days ago | IN | 0 AVAX | 0.00127483 | ||||
Approve | 42092371 | 395 days ago | IN | 0 AVAX | 0.00476673 | ||||
Approve | 41026020 | 420 days ago | IN | 0 AVAX | 0.00078789 | ||||
Approve | 40826734 | 425 days ago | IN | 0 AVAX | 0.00124136 | ||||
Approve | 40740372 | 427 days ago | IN | 0 AVAX | 0.00125122 | ||||
Approve | 40652457 | 429 days ago | IN | 0 AVAX | 0.00124136 | ||||
Approve | 40365200 | 435 days ago | IN | 0 AVAX | 0.00125122 |
Loading...
Loading
Contract Name:
XPower
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2021-11-05 */ // Sources flattened with hardhat v2.6.8 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // 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) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @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/[email protected] pragma solidity ^0.8.0; /** * @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: * * - `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"); unchecked { _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"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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: * * - `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"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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: * * - `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 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/[email protected] pragma solidity ^0.8.0; /** * @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"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } } // File @openzeppelin/contracts/utils/structs/[email protected] 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. */ 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; 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; assembly { result := store } return result; } } // File contracts/XPower.sol // solhint-disable not-rely-on-time // solhint-disable no-empty-blocks pragma solidity ^0.8.0; contract XPower is ERC20, ERC20Burnable, Ownable { using EnumerableSet for EnumerableSet.UintSet; /** set of nonce-hashes already minted for */ EnumerableSet.UintSet private _hashes; constructor() ERC20("XPower", "XPOW") {} /** @return number of decimal places of the token */ function decimals() public view virtual override returns (uint8) { return 0; } /** mint tokens for nonce (and sender) */ function mint(uint256 _nonce) public { // calculate nonce-hash of nonce for sender and interval bytes32 nonceHash = _hash(_nonce, msg.sender, interval()); require(!_hashes.contains(uint256(nonceHash)), "duplicate nonce-hash"); // calculate amount of tokens for nonce-hash uint256 amount = _amount(nonceHash); require(amount > 0, "empty nonce-hash"); // ensure unique nonce-hash (to be used once) _hashes.add(uint256(nonceHash)); // mint tokens for minter (i.e. nonce provider) _mint(msg.sender, amount); // mint tokens for owner (5.88% of total supply) _mint(owner(), amount / 2); } /** @return current interval (in hours) */ function interval() public view returns (uint256) { return block.timestamp / (1 hours); } /** @return seconds left for current interval */ function deadline() public view returns (uint256) { return block.timestamp % (1 hours); } /** @return hash of nonce for sender and interval */ function _hash( uint256 _nonce, address _sender, uint256 _interval ) internal pure returns (bytes32) { return keccak256(abi.encode(_nonce, _sender, _interval)); } /** @return 2 ** |leading-zeros(nonce-hash)| - 1 */ function _amount(bytes32 _nonceHash) internal pure returns (uint256) { return 2**_zeros(_nonceHash) - 1; } /** @return leading zeros for nonce-hash */ function _zeros(bytes32 _nonceHash) internal pure returns (uint8) { uint8 counter = 0; for (uint8 i = 0; i < 32; i++) { bytes1 b = _nonceHash[i]; if (b == 0x00) { counter += 2; continue; } if ( b == 0x01 || b == 0x02 || b == 0x03 || b == 0x04 || b == 0x05 || b == 0x06 || b == 0x07 || b == 0x08 || b == 0x09 || b == 0x0a || b == 0x0b || b == 0x0c || b == 0x0d || b == 0x0e || b == 0x0f ) { counter += 1; break; } break; } return counter; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"deadline","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":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nonce","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600681526020017f58506f77657200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f58504f5700000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620001a6565b508060049080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61282e80620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063a0712d6811610071578063a0712d68146102fa578063a457c2d714610316578063a9059cbb14610346578063dd62ed3e14610376578063f2fde38b146103a657610121565b8063715018a61461027a57806379cc6790146102845780638da5cb5b146102a0578063947a36fb146102be57806395d89b41146102dc57610121565b806329dcb0cf116100f457806329dcb0cf146101c2578063313ce567146101e057806339509351146101fe57806342966c681461022e57806370a082311461024a57610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e6103c2565b60405161013b9190611d13565b60405180910390f35b61015e600480360381019061015991906119f6565b610454565b60405161016b9190611cf8565b60405180910390f35b61017c610472565b6040516101899190611f15565b60405180910390f35b6101ac60048036038101906101a791906119a7565b61047c565b6040516101b99190611cf8565b60405180910390f35b6101ca610574565b6040516101d79190611f15565b60405180910390f35b6101e8610589565b6040516101f59190611f67565b60405180910390f35b610218600480360381019061021391906119f6565b61058e565b6040516102259190611cf8565b60405180910390f35b61024860048036038101906102439190611a32565b61063a565b005b610264600480360381019061025f9190611942565b61064e565b6040516102719190611f15565b60405180910390f35b610282610696565b005b61029e600480360381019061029991906119f6565b61071e565b005b6102a8610799565b6040516102b59190611cdd565b60405180910390f35b6102c66107c3565b6040516102d39190611f15565b60405180910390f35b6102e46107d8565b6040516102f19190611d13565b60405180910390f35b610314600480360381019061030f9190611a32565b61086a565b005b610330600480360381019061032b91906119f6565b61096b565b60405161033d9190611cf8565b60405180910390f35b610360600480360381019061035b91906119f6565b610a56565b60405161036d9190611cf8565b60405180910390f35b610390600480360381019061038b919061196b565b610a74565b60405161039d9190611f15565b60405180910390f35b6103c060048036038101906103bb9190611942565b610afb565b005b6060600380546103d190612289565b80601f01602080910402602001604051908101604052809291908181526020018280546103fd90612289565b801561044a5780601f1061041f5761010080835404028352916020019161044a565b820191906000526020600020905b81548152906001019060200180831161042d57829003601f168201915b5050505050905090565b6000610468610461610bf3565b8484610bfb565b6001905092915050565b6000600254905090565b6000610489848484610dc6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104d4610bf3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054b90611e15565b60405180910390fd5b61056885610560610bf3565b858403610bfb565b60019150509392505050565b6000610e104261058491906122e5565b905090565b600090565b600061063061059b610bf3565b8484600160006105a9610bf3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461062b9190611f9e565b610bfb565b6001905092915050565b61064b610645610bf3565b82611047565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61069e610bf3565b73ffffffffffffffffffffffffffffffffffffffff166106bc610799565b73ffffffffffffffffffffffffffffffffffffffff1614610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990611e35565b60405180910390fd5b61071c600061121e565b565b60006107318361072c610bf3565b610a74565b905081811015610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90611e55565b60405180910390fd5b61078a83610782610bf3565b848403610bfb565b6107948383611047565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610e10426107d3919061202b565b905090565b6060600480546107e790612289565b80601f016020809104026020016040519081016040528092919081815260200182805461081390612289565b80156108605780601f1061083557610100808354040283529160200191610860565b820191906000526020600020905b81548152906001019060200180831161084357829003601f168201915b5050505050905090565b600061087e82336108796107c3565b6112e4565b90506108978160001c600661131a90919063ffffffff16565b156108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90611d75565b60405180910390fd5b60006108e282611334565b905060008111610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90611d95565b60405180910390fd5b61093e8260001c600661135e90919063ffffffff16565b506109493382611378565b610966610954610799565b600283610961919061202b565b611378565b505050565b6000806001600061097a610bf3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90611ed5565b60405180910390fd5b610a4b610a42610bf3565b85858403610bfb565b600191505092915050565b6000610a6a610a63610bf3565b8484610dc6565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b03610bf3565b73ffffffffffffffffffffffffffffffffffffffff16610b21610799565b73ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e90611e35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90611db5565b60405180910390fd5b610bf08161121e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290611eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290611dd5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610db99190611f15565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90611e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90611d35565b60405180910390fd5b610eb18383836114d8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611df5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fca9190611f9e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161102e9190611f15565b60405180910390a36110418484846114dd565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90611e75565b60405180910390fd5b6110c3826000836114d8565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090611d55565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546111a091906121cd565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112059190611f15565b60405180910390a3611219836000846114dd565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008383836040516020016112fb93929190611f30565b6040516020818303038152906040528051906020012090509392505050565b600061132c836000018360001b6114e2565b905092915050565b6000600161134183611505565b600261134d91906120af565b61135791906121cd565b9050919050565b6000611370836000018360001b6118a8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90611ef5565b60405180910390fd5b6113f4600083836114d8565b80600260008282546114069190611f9e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145b9190611f9e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114c09190611f15565b60405180910390a36114d4600083836114dd565b5050565b505050565b505050565b600080836001016000848152602001908152602001600020541415905092915050565b6000806000905060005b60208160ff16101561189e576000848260ff1660208110611559577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b9050600060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156115a25760028361159a9190611ff4565b92505061188b565b600160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115fb5750600260f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061162b5750600360f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061165b5750600460f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061168b5750600560f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116bb5750600660f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116eb5750600760f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061171b5750600860f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061174b5750600960f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061177b5750600a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117ab5750600b60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117db5750600c60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061180b5750600d60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061183b5750600e60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061186b5750600f60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156118855760018361187d9190611ff4565b92505061189e565b5061189e565b8080611896906122bb565b91505061150f565b5080915050919050565b60006118b483836114e2565b61190d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611912565b600090505b92915050565b600081359050611927816127ca565b92915050565b60008135905061193c816127e1565b92915050565b60006020828403121561195457600080fd5b600061196284828501611918565b91505092915050565b6000806040838503121561197e57600080fd5b600061198c85828601611918565b925050602061199d85828601611918565b9150509250929050565b6000806000606084860312156119bc57600080fd5b60006119ca86828701611918565b93505060206119db86828701611918565b92505060406119ec8682870161192d565b9150509250925092565b60008060408385031215611a0957600080fd5b6000611a1785828601611918565b9250506020611a288582860161192d565b9150509250929050565b600060208284031215611a4457600080fd5b6000611a528482850161192d565b91505092915050565b611a6481612201565b82525050565b611a7381612213565b82525050565b6000611a8482611f82565b611a8e8185611f8d565b9350611a9e818560208601612256565b611aa7816123a3565b840191505092915050565b6000611abf602383611f8d565b9150611aca826123c1565b604082019050919050565b6000611ae2602283611f8d565b9150611aed82612410565b604082019050919050565b6000611b05601483611f8d565b9150611b108261245f565b602082019050919050565b6000611b28601083611f8d565b9150611b3382612488565b602082019050919050565b6000611b4b602683611f8d565b9150611b56826124b1565b604082019050919050565b6000611b6e602283611f8d565b9150611b7982612500565b604082019050919050565b6000611b91602683611f8d565b9150611b9c8261254f565b604082019050919050565b6000611bb4602883611f8d565b9150611bbf8261259e565b604082019050919050565b6000611bd7602083611f8d565b9150611be2826125ed565b602082019050919050565b6000611bfa602483611f8d565b9150611c0582612616565b604082019050919050565b6000611c1d602183611f8d565b9150611c2882612665565b604082019050919050565b6000611c40602583611f8d565b9150611c4b826126b4565b604082019050919050565b6000611c63602483611f8d565b9150611c6e82612703565b604082019050919050565b6000611c86602583611f8d565b9150611c9182612752565b604082019050919050565b6000611ca9601f83611f8d565b9150611cb4826127a1565b602082019050919050565b611cc88161223f565b82525050565b611cd781612249565b82525050565b6000602082019050611cf26000830184611a5b565b92915050565b6000602082019050611d0d6000830184611a6a565b92915050565b60006020820190508181036000830152611d2d8184611a79565b905092915050565b60006020820190508181036000830152611d4e81611ab2565b9050919050565b60006020820190508181036000830152611d6e81611ad5565b9050919050565b60006020820190508181036000830152611d8e81611af8565b9050919050565b60006020820190508181036000830152611dae81611b1b565b9050919050565b60006020820190508181036000830152611dce81611b3e565b9050919050565b60006020820190508181036000830152611dee81611b61565b9050919050565b60006020820190508181036000830152611e0e81611b84565b9050919050565b60006020820190508181036000830152611e2e81611ba7565b9050919050565b60006020820190508181036000830152611e4e81611bca565b9050919050565b60006020820190508181036000830152611e6e81611bed565b9050919050565b60006020820190508181036000830152611e8e81611c10565b9050919050565b60006020820190508181036000830152611eae81611c33565b9050919050565b60006020820190508181036000830152611ece81611c56565b9050919050565b60006020820190508181036000830152611eee81611c79565b9050919050565b60006020820190508181036000830152611f0e81611c9c565b9050919050565b6000602082019050611f2a6000830184611cbf565b92915050565b6000606082019050611f456000830186611cbf565b611f526020830185611a5b565b611f5f6040830184611cbf565b949350505050565b6000602082019050611f7c6000830184611cce565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611fa98261223f565b9150611fb48361223f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611fe957611fe8612316565b5b828201905092915050565b6000611fff82612249565b915061200a83612249565b92508260ff038211156120205761201f612316565b5b828201905092915050565b60006120368261223f565b91506120418361223f565b92508261205157612050612345565b5b828204905092915050565b6000808291508390505b60018511156120a65780860481111561208257612081612316565b5b60018516156120915780820291505b808102905061209f856123b4565b9450612066565b94509492505050565b60006120ba8261223f565b91506120c583612249565b92506120f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846120fa565b905092915050565b60008261210a57600190506121c6565b8161211857600090506121c6565b816001811461212e576002811461213857612167565b60019150506121c6565b60ff84111561214a57612149612316565b5b8360020a91508482111561216157612160612316565b5b506121c6565b5060208310610133831016604e8410600b841016171561219c5782820a90508381111561219757612196612316565b5b6121c6565b6121a9848484600161205c565b925090508184048111156121c0576121bf612316565b5b81810290505b9392505050565b60006121d88261223f565b91506121e38361223f565b9250828210156121f6576121f5612316565b5b828203905092915050565b600061220c8261221f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612274578082015181840152602081019050612259565b83811115612283576000848401525b50505050565b600060028204905060018216806122a157607f821691505b602082108114156122b5576122b4612374565b5b50919050565b60006122c682612249565b915060ff8214156122da576122d9612316565b5b600182019050919050565b60006122f08261223f565b91506122fb8361223f565b92508261230b5761230a612345565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f6475706c6963617465206e6f6e63652d68617368000000000000000000000000600082015250565b7f656d707479206e6f6e63652d6861736800000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6127d381612201565b81146127de57600080fd5b50565b6127ea8161223f565b81146127f557600080fd5b5056fea264697066735822122055a194565ee71b8a86f385ef277416f32182897976ff3243100e02e9bfe59a4064736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063a0712d6811610071578063a0712d68146102fa578063a457c2d714610316578063a9059cbb14610346578063dd62ed3e14610376578063f2fde38b146103a657610121565b8063715018a61461027a57806379cc6790146102845780638da5cb5b146102a0578063947a36fb146102be57806395d89b41146102dc57610121565b806329dcb0cf116100f457806329dcb0cf146101c2578063313ce567146101e057806339509351146101fe57806342966c681461022e57806370a082311461024a57610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e6103c2565b60405161013b9190611d13565b60405180910390f35b61015e600480360381019061015991906119f6565b610454565b60405161016b9190611cf8565b60405180910390f35b61017c610472565b6040516101899190611f15565b60405180910390f35b6101ac60048036038101906101a791906119a7565b61047c565b6040516101b99190611cf8565b60405180910390f35b6101ca610574565b6040516101d79190611f15565b60405180910390f35b6101e8610589565b6040516101f59190611f67565b60405180910390f35b610218600480360381019061021391906119f6565b61058e565b6040516102259190611cf8565b60405180910390f35b61024860048036038101906102439190611a32565b61063a565b005b610264600480360381019061025f9190611942565b61064e565b6040516102719190611f15565b60405180910390f35b610282610696565b005b61029e600480360381019061029991906119f6565b61071e565b005b6102a8610799565b6040516102b59190611cdd565b60405180910390f35b6102c66107c3565b6040516102d39190611f15565b60405180910390f35b6102e46107d8565b6040516102f19190611d13565b60405180910390f35b610314600480360381019061030f9190611a32565b61086a565b005b610330600480360381019061032b91906119f6565b61096b565b60405161033d9190611cf8565b60405180910390f35b610360600480360381019061035b91906119f6565b610a56565b60405161036d9190611cf8565b60405180910390f35b610390600480360381019061038b919061196b565b610a74565b60405161039d9190611f15565b60405180910390f35b6103c060048036038101906103bb9190611942565b610afb565b005b6060600380546103d190612289565b80601f01602080910402602001604051908101604052809291908181526020018280546103fd90612289565b801561044a5780601f1061041f5761010080835404028352916020019161044a565b820191906000526020600020905b81548152906001019060200180831161042d57829003601f168201915b5050505050905090565b6000610468610461610bf3565b8484610bfb565b6001905092915050565b6000600254905090565b6000610489848484610dc6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104d4610bf3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054b90611e15565b60405180910390fd5b61056885610560610bf3565b858403610bfb565b60019150509392505050565b6000610e104261058491906122e5565b905090565b600090565b600061063061059b610bf3565b8484600160006105a9610bf3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461062b9190611f9e565b610bfb565b6001905092915050565b61064b610645610bf3565b82611047565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61069e610bf3565b73ffffffffffffffffffffffffffffffffffffffff166106bc610799565b73ffffffffffffffffffffffffffffffffffffffff1614610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990611e35565b60405180910390fd5b61071c600061121e565b565b60006107318361072c610bf3565b610a74565b905081811015610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90611e55565b60405180910390fd5b61078a83610782610bf3565b848403610bfb565b6107948383611047565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610e10426107d3919061202b565b905090565b6060600480546107e790612289565b80601f016020809104026020016040519081016040528092919081815260200182805461081390612289565b80156108605780601f1061083557610100808354040283529160200191610860565b820191906000526020600020905b81548152906001019060200180831161084357829003601f168201915b5050505050905090565b600061087e82336108796107c3565b6112e4565b90506108978160001c600661131a90919063ffffffff16565b156108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90611d75565b60405180910390fd5b60006108e282611334565b905060008111610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90611d95565b60405180910390fd5b61093e8260001c600661135e90919063ffffffff16565b506109493382611378565b610966610954610799565b600283610961919061202b565b611378565b505050565b6000806001600061097a610bf3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90611ed5565b60405180910390fd5b610a4b610a42610bf3565b85858403610bfb565b600191505092915050565b6000610a6a610a63610bf3565b8484610dc6565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b03610bf3565b73ffffffffffffffffffffffffffffffffffffffff16610b21610799565b73ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e90611e35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90611db5565b60405180910390fd5b610bf08161121e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290611eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290611dd5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610db99190611f15565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90611e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90611d35565b60405180910390fd5b610eb18383836114d8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611df5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fca9190611f9e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161102e9190611f15565b60405180910390a36110418484846114dd565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90611e75565b60405180910390fd5b6110c3826000836114d8565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090611d55565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546111a091906121cd565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112059190611f15565b60405180910390a3611219836000846114dd565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008383836040516020016112fb93929190611f30565b6040516020818303038152906040528051906020012090509392505050565b600061132c836000018360001b6114e2565b905092915050565b6000600161134183611505565b600261134d91906120af565b61135791906121cd565b9050919050565b6000611370836000018360001b6118a8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90611ef5565b60405180910390fd5b6113f4600083836114d8565b80600260008282546114069190611f9e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145b9190611f9e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114c09190611f15565b60405180910390a36114d4600083836114dd565b5050565b505050565b505050565b600080836001016000848152602001908152602001600020541415905092915050565b6000806000905060005b60208160ff16101561189e576000848260ff1660208110611559577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b9050600060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156115a25760028361159a9190611ff4565b92505061188b565b600160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115fb5750600260f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061162b5750600360f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061165b5750600460f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061168b5750600560f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116bb5750600660f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116eb5750600760f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061171b5750600860f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061174b5750600960f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061177b5750600a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117ab5750600b60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117db5750600c60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061180b5750600d60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061183b5750600e60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061186b5750600f60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156118855760018361187d9190611ff4565b92505061189e565b5061189e565b8080611896906122bb565b91505061150f565b5080915050919050565b60006118b483836114e2565b61190d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611912565b600090505b92915050565b600081359050611927816127ca565b92915050565b60008135905061193c816127e1565b92915050565b60006020828403121561195457600080fd5b600061196284828501611918565b91505092915050565b6000806040838503121561197e57600080fd5b600061198c85828601611918565b925050602061199d85828601611918565b9150509250929050565b6000806000606084860312156119bc57600080fd5b60006119ca86828701611918565b93505060206119db86828701611918565b92505060406119ec8682870161192d565b9150509250925092565b60008060408385031215611a0957600080fd5b6000611a1785828601611918565b9250506020611a288582860161192d565b9150509250929050565b600060208284031215611a4457600080fd5b6000611a528482850161192d565b91505092915050565b611a6481612201565b82525050565b611a7381612213565b82525050565b6000611a8482611f82565b611a8e8185611f8d565b9350611a9e818560208601612256565b611aa7816123a3565b840191505092915050565b6000611abf602383611f8d565b9150611aca826123c1565b604082019050919050565b6000611ae2602283611f8d565b9150611aed82612410565b604082019050919050565b6000611b05601483611f8d565b9150611b108261245f565b602082019050919050565b6000611b28601083611f8d565b9150611b3382612488565b602082019050919050565b6000611b4b602683611f8d565b9150611b56826124b1565b604082019050919050565b6000611b6e602283611f8d565b9150611b7982612500565b604082019050919050565b6000611b91602683611f8d565b9150611b9c8261254f565b604082019050919050565b6000611bb4602883611f8d565b9150611bbf8261259e565b604082019050919050565b6000611bd7602083611f8d565b9150611be2826125ed565b602082019050919050565b6000611bfa602483611f8d565b9150611c0582612616565b604082019050919050565b6000611c1d602183611f8d565b9150611c2882612665565b604082019050919050565b6000611c40602583611f8d565b9150611c4b826126b4565b604082019050919050565b6000611c63602483611f8d565b9150611c6e82612703565b604082019050919050565b6000611c86602583611f8d565b9150611c9182612752565b604082019050919050565b6000611ca9601f83611f8d565b9150611cb4826127a1565b602082019050919050565b611cc88161223f565b82525050565b611cd781612249565b82525050565b6000602082019050611cf26000830184611a5b565b92915050565b6000602082019050611d0d6000830184611a6a565b92915050565b60006020820190508181036000830152611d2d8184611a79565b905092915050565b60006020820190508181036000830152611d4e81611ab2565b9050919050565b60006020820190508181036000830152611d6e81611ad5565b9050919050565b60006020820190508181036000830152611d8e81611af8565b9050919050565b60006020820190508181036000830152611dae81611b1b565b9050919050565b60006020820190508181036000830152611dce81611b3e565b9050919050565b60006020820190508181036000830152611dee81611b61565b9050919050565b60006020820190508181036000830152611e0e81611b84565b9050919050565b60006020820190508181036000830152611e2e81611ba7565b9050919050565b60006020820190508181036000830152611e4e81611bca565b9050919050565b60006020820190508181036000830152611e6e81611bed565b9050919050565b60006020820190508181036000830152611e8e81611c10565b9050919050565b60006020820190508181036000830152611eae81611c33565b9050919050565b60006020820190508181036000830152611ece81611c56565b9050919050565b60006020820190508181036000830152611eee81611c79565b9050919050565b60006020820190508181036000830152611f0e81611c9c565b9050919050565b6000602082019050611f2a6000830184611cbf565b92915050565b6000606082019050611f456000830186611cbf565b611f526020830185611a5b565b611f5f6040830184611cbf565b949350505050565b6000602082019050611f7c6000830184611cce565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611fa98261223f565b9150611fb48361223f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611fe957611fe8612316565b5b828201905092915050565b6000611fff82612249565b915061200a83612249565b92508260ff038211156120205761201f612316565b5b828201905092915050565b60006120368261223f565b91506120418361223f565b92508261205157612050612345565b5b828204905092915050565b6000808291508390505b60018511156120a65780860481111561208257612081612316565b5b60018516156120915780820291505b808102905061209f856123b4565b9450612066565b94509492505050565b60006120ba8261223f565b91506120c583612249565b92506120f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846120fa565b905092915050565b60008261210a57600190506121c6565b8161211857600090506121c6565b816001811461212e576002811461213857612167565b60019150506121c6565b60ff84111561214a57612149612316565b5b8360020a91508482111561216157612160612316565b5b506121c6565b5060208310610133831016604e8410600b841016171561219c5782820a90508381111561219757612196612316565b5b6121c6565b6121a9848484600161205c565b925090508184048111156121c0576121bf612316565b5b81810290505b9392505050565b60006121d88261223f565b91506121e38361223f565b9250828210156121f6576121f5612316565b5b828203905092915050565b600061220c8261221f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612274578082015181840152602081019050612259565b83811115612283576000848401525b50505050565b600060028204905060018216806122a157607f821691505b602082108114156122b5576122b4612374565b5b50919050565b60006122c682612249565b915060ff8214156122da576122d9612316565b5b600182019050919050565b60006122f08261223f565b91506122fb8361223f565b92508261230b5761230a612345565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f6475706c6963617465206e6f6e63652d68617368000000000000000000000000600082015250565b7f656d707479206e6f6e63652d6861736800000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6127d381612201565b81146127de57600080fd5b50565b6127ea8161223f565b81146127f557600080fd5b5056fea264697066735822122055a194565ee71b8a86f385ef277416f32182897976ff3243100e02e9bfe59a4064736f6c63430008040033
Deployed Bytecode Sourcemap
32715:2890:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8811:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10978:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9931:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11629:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34089:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33026:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12530:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19269:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10102:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2595:94;;;:::i;:::-;;19679:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1944:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33924:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9030:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33173:695;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13248:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10442:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10680:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2844:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8811:100;8865:13;8898:5;8891:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8811:100;:::o;10978:169::-;11061:4;11078:39;11087:12;:10;:12::i;:::-;11101:7;11110:6;11078:8;:39::i;:::-;11135:4;11128:11;;10978:169;;;;:::o;9931:108::-;9992:7;10019:12;;10012:19;;9931:108;:::o;11629:492::-;11769:4;11786:36;11796:6;11804:9;11815:6;11786:9;:36::i;:::-;11835:24;11862:11;:19;11874:6;11862:19;;;;;;;;;;;;;;;:33;11882:12;:10;:12::i;:::-;11862:33;;;;;;;;;;;;;;;;11835:60;;11934:6;11914:16;:26;;11906:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12021:57;12030:6;12038:12;:10;:12::i;:::-;12071:6;12052:16;:25;12021:8;:57::i;:::-;12109:4;12102:11;;;11629:492;;;;;:::o;34089:103::-;34130:7;34176;34157:15;:27;;;;:::i;:::-;34150:34;;34089:103;:::o;33026:92::-;33084:5;33026:92;:::o;12530:215::-;12618:4;12635:80;12644:12;:10;:12::i;:::-;12658:7;12704:10;12667:11;:25;12679:12;:10;:12::i;:::-;12667:25;;;;;;;;;;;;;;;:34;12693:7;12667:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12635:8;:80::i;:::-;12733:4;12726:11;;12530:215;;;;:::o;19269:91::-;19325:27;19331:12;:10;:12::i;:::-;19345:6;19325:5;:27::i;:::-;19269:91;:::o;10102:127::-;10176:7;10203:9;:18;10213:7;10203:18;;;;;;;;;;;;;;;;10196:25;;10102:127;;;:::o;2595:94::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2660:21:::1;2678:1;2660:9;:21::i;:::-;2595:94::o:0;19679:368::-;19756:24;19783:32;19793:7;19802:12;:10;:12::i;:::-;19783:9;:32::i;:::-;19756:59;;19854:6;19834:16;:26;;19826:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;19937:58;19946:7;19955:12;:10;:12::i;:::-;19988:6;19969:16;:25;19937:8;:58::i;:::-;20017:22;20023:7;20032:6;20017:5;:22::i;:::-;19679:368;;;:::o;1944:87::-;1990:7;2017:6;;;;;;;;;;;2010:13;;1944:87;:::o;33924:103::-;33965:7;34011;33992:15;:27;;;;:::i;:::-;33985:34;;33924:103;:::o;9030:104::-;9086:13;9119:7;9112:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9030:104;:::o;33173:695::-;33287:17;33307:37;33313:6;33321:10;33333;:8;:10::i;:::-;33307:5;:37::i;:::-;33287:57;;33364:36;33389:9;33381:18;;33364:7;:16;;:36;;;;:::i;:::-;33363:37;33355:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33490:14;33507:18;33515:9;33507:7;:18::i;:::-;33490:35;;33553:1;33544:6;:10;33536:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;33641:31;33661:9;33653:18;;33641:7;:11;;:31;;;;:::i;:::-;;33740:25;33746:10;33758:6;33740:5;:25::i;:::-;33834:26;33840:7;:5;:7::i;:::-;33858:1;33849:6;:10;;;;:::i;:::-;33834:5;:26::i;:::-;33173:695;;;:::o;13248:413::-;13341:4;13358:24;13385:11;:25;13397:12;:10;:12::i;:::-;13385:25;;;;;;;;;;;;;;;:34;13411:7;13385:34;;;;;;;;;;;;;;;;13358:61;;13458:15;13438:16;:35;;13430:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13551:67;13560:12;:10;:12::i;:::-;13574:7;13602:15;13583:16;:34;13551:8;:67::i;:::-;13649:4;13642:11;;;13248:413;;;;:::o;10442:175::-;10528:4;10545:42;10555:12;:10;:12::i;:::-;10569:9;10580:6;10545:9;:42::i;:::-;10605:4;10598:11;;10442:175;;;;:::o;10680:151::-;10769:7;10796:11;:18;10808:5;10796:18;;;;;;;;;;;;;;;:27;10815:7;10796:27;;;;;;;;;;;;;;;;10789:34;;10680:151;;;;:::o;2844:192::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2953:1:::1;2933:22;;:8;:22;;;;2925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3009:19;3019:8;3009:9;:19::i;:::-;2844:192:::0;:::o;726:98::-;779:7;806:10;799:17;;726:98;:::o;16932:380::-;17085:1;17068:19;;:5;:19;;;;17060:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17166:1;17147:21;;:7;:21;;;;17139:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17250:6;17220:11;:18;17232:5;17220:18;;;;;;;;;;;;;;;:27;17239:7;17220:27;;;;;;;;;;;;;;;:36;;;;17288:7;17272:32;;17281:5;17272:32;;;17297:6;17272:32;;;;;;:::i;:::-;;;;;;;;16932:380;;;:::o;14151:733::-;14309:1;14291:20;;:6;:20;;;;14283:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14393:1;14372:23;;:9;:23;;;;14364:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14448:47;14469:6;14477:9;14488:6;14448:20;:47::i;:::-;14508:21;14532:9;:17;14542:6;14532:17;;;;;;;;;;;;;;;;14508:41;;14585:6;14568:13;:23;;14560:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14706:6;14690:13;:22;14670:9;:17;14680:6;14670:17;;;;;;;;;;;;;;;:42;;;;14758:6;14734:9;:20;14744:9;14734:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14799:9;14782:35;;14791:6;14782:35;;;14810:6;14782:35;;;;;;:::i;:::-;;;;;;;;14830:46;14850:6;14858:9;14869:6;14830:19;:46::i;:::-;14151:733;;;;:::o;15903:591::-;16006:1;15987:21;;:7;:21;;;;15979:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16059:49;16080:7;16097:1;16101:6;16059:20;:49::i;:::-;16121:22;16146:9;:18;16156:7;16146:18;;;;;;;;;;;;;;;;16121:43;;16201:6;16183:14;:24;;16175:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16320:6;16303:14;:23;16282:9;:18;16292:7;16282:18;;;;;;;;;;;;;;;:44;;;;16364:6;16348:12;;:22;;;;;;;:::i;:::-;;;;;;;;16414:1;16388:37;;16397:7;16388:37;;;16418:6;16388:37;;;;;;:::i;:::-;;;;;;;;16438:48;16458:7;16475:1;16479:6;16438:19;:48::i;:::-;15903:591;;;:::o;3044:173::-;3100:16;3119:6;;;;;;;;;;;3100:25;;3145:8;3136:6;;:17;;;;;;;;;;;;;;;;;;3200:8;3169:40;;3190:8;3169:40;;;;;;;;;;;;3044:173;;:::o;34258:208::-;34382:7;34430:6;34438:7;34447:9;34419:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34409:49;;;;;;34402:56;;34258:208;;;;;:::o;30914:146::-;30991:4;31015:37;31025:3;:10;;31045:5;31037:14;;31015:9;:37::i;:::-;31008:44;;30914:146;;;;:::o;34531:120::-;34591:7;34642:1;34621:18;34628:10;34621:6;:18::i;:::-;34618:1;:21;;;;:::i;:::-;:25;;;;:::i;:::-;34611:32;;34531:120;;;:::o;30384:131::-;30451:4;30475:32;30480:3;:10;;30500:5;30492:14;;30475:4;:32::i;:::-;30468:39;;30384:131;;;;:::o;15171:399::-;15274:1;15255:21;;:7;:21;;;;15247:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15325:49;15354:1;15358:7;15367:6;15325:20;:49::i;:::-;15403:6;15387:12;;:22;;;;;;;:::i;:::-;;;;;;;;15442:6;15420:9;:18;15430:7;15420:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15485:7;15464:37;;15481:1;15464:37;;;15494:6;15464:37;;;;;;:::i;:::-;;;;;;;;15514:48;15542:1;15546:7;15555:6;15514:19;:48::i;:::-;15171:399;;:::o;17912:125::-;;;;:::o;18641:124::-;;;;:::o;23877:129::-;23950:4;23997:1;23974:3;:12;;:19;23987:5;23974:19;;;;;;;;;;;;:24;;23967:31;;23877:129;;;;:::o;34708:894::-;34767:5;34785:13;34801:1;34785:17;;34818:7;34813:757;34835:2;34831:1;:6;;;34813:757;;;34859:8;34870:10;34881:1;34870:13;;;;;;;;;;;;;;;;;;;;34859:24;;34907:4;34902:9;;:1;:9;;;;34898:89;;;34943:1;34932:12;;;;;:::i;:::-;;;34963:8;;;34898:89;35028:4;35023:9;;:1;:9;;;;:39;;;;35058:4;35053:9;;:1;:9;;;;35023:39;:69;;;;35088:4;35083:9;;:1;:9;;;;35023:69;:99;;;;35118:4;35113:9;;:1;:9;;;;35023:99;:129;;;;35148:4;35143:9;;:1;:9;;;;35023:129;:159;;;;35178:4;35173:9;;:1;:9;;;;35023:159;:189;;;;35208:4;35203:9;;:1;:9;;;;35023:189;:219;;;;35238:4;35233:9;;:1;:9;;;;35023:219;:249;;;;35268:4;35263:9;;:1;:9;;;;35023:249;:279;;;;35298:4;35293:9;;:1;:9;;;;35023:279;:309;;;;35328:4;35323:9;;:1;:9;;;;35023:309;:339;;;;35358:4;35353:9;;:1;:9;;;;35023:339;:369;;;;35388:4;35383:9;;:1;:9;;;;35023:369;:399;;;;35418:4;35413:9;;:1;:9;;;;35023:399;:429;;;;35448:4;35443:9;;:1;:9;;;;35023:429;35001:538;;;35498:1;35487:12;;;;;:::i;:::-;;;35518:5;;;35001:538;35553:5;;;34813:757;34839:3;;;;;:::i;:::-;;;;34813:757;;;;35587:7;35580:14;;;34708:894;;;:::o;21781:414::-;21844:4;21866:21;21876:3;21881:5;21866:9;:21::i;:::-;21861:327;;21904:3;:11;;21921:5;21904:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22087:3;:11;;:18;;;;22065:3;:12;;:19;22078:5;22065:19;;;;;;;;;;;:40;;;;22127:4;22120:11;;;;21861:327;22171:5;22164:12;;21781:414;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;356:6;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;633:6;641;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;1055:6;1063;1071;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;1604:6;1612;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:262::-;2008:6;2057:2;2045:9;2036:7;2032:23;2028:32;2025:2;;;2073:1;2070;2063:12;2025:2;2116:1;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2087:117;2015:196;;;;:::o;2217:118::-;2304:24;2322:5;2304:24;:::i;:::-;2299:3;2292:37;2282:53;;:::o;2341:109::-;2422:21;2437:5;2422:21;:::i;:::-;2417:3;2410:34;2400:50;;:::o;2456:364::-;2544:3;2572:39;2605:5;2572:39;:::i;:::-;2627:71;2691:6;2686:3;2627:71;:::i;:::-;2620:78;;2707:52;2752:6;2747:3;2740:4;2733:5;2729:16;2707:52;:::i;:::-;2784:29;2806:6;2784:29;:::i;:::-;2779:3;2775:39;2768:46;;2548:272;;;;;:::o;2826:366::-;2968:3;2989:67;3053:2;3048:3;2989:67;:::i;:::-;2982:74;;3065:93;3154:3;3065:93;:::i;:::-;3183:2;3178:3;3174:12;3167:19;;2972:220;;;:::o;3198:366::-;3340:3;3361:67;3425:2;3420:3;3361:67;:::i;:::-;3354:74;;3437:93;3526:3;3437:93;:::i;:::-;3555:2;3550:3;3546:12;3539:19;;3344:220;;;:::o;3570:366::-;3712:3;3733:67;3797:2;3792:3;3733:67;:::i;:::-;3726:74;;3809:93;3898:3;3809:93;:::i;:::-;3927:2;3922:3;3918:12;3911:19;;3716:220;;;:::o;3942:366::-;4084:3;4105:67;4169:2;4164:3;4105:67;:::i;:::-;4098:74;;4181:93;4270:3;4181:93;:::i;:::-;4299:2;4294:3;4290:12;4283:19;;4088:220;;;:::o;4314:366::-;4456:3;4477:67;4541:2;4536:3;4477:67;:::i;:::-;4470:74;;4553:93;4642:3;4553:93;:::i;:::-;4671:2;4666:3;4662:12;4655:19;;4460:220;;;:::o;4686:366::-;4828:3;4849:67;4913:2;4908:3;4849:67;:::i;:::-;4842:74;;4925:93;5014:3;4925:93;:::i;:::-;5043:2;5038:3;5034:12;5027:19;;4832:220;;;:::o;5058:366::-;5200:3;5221:67;5285:2;5280:3;5221:67;:::i;:::-;5214:74;;5297:93;5386:3;5297:93;:::i;:::-;5415:2;5410:3;5406:12;5399:19;;5204:220;;;:::o;5430:366::-;5572:3;5593:67;5657:2;5652:3;5593:67;:::i;:::-;5586:74;;5669:93;5758:3;5669:93;:::i;:::-;5787:2;5782:3;5778:12;5771:19;;5576:220;;;:::o;5802:366::-;5944:3;5965:67;6029:2;6024:3;5965:67;:::i;:::-;5958:74;;6041:93;6130:3;6041:93;:::i;:::-;6159:2;6154:3;6150:12;6143:19;;5948:220;;;:::o;6174:366::-;6316:3;6337:67;6401:2;6396:3;6337:67;:::i;:::-;6330:74;;6413:93;6502:3;6413:93;:::i;:::-;6531:2;6526:3;6522:12;6515:19;;6320:220;;;:::o;6546:366::-;6688:3;6709:67;6773:2;6768:3;6709:67;:::i;:::-;6702:74;;6785:93;6874:3;6785:93;:::i;:::-;6903:2;6898:3;6894:12;6887:19;;6692:220;;;:::o;6918:366::-;7060:3;7081:67;7145:2;7140:3;7081:67;:::i;:::-;7074:74;;7157:93;7246:3;7157:93;:::i;:::-;7275:2;7270:3;7266:12;7259:19;;7064:220;;;:::o;7290:366::-;7432:3;7453:67;7517:2;7512:3;7453:67;:::i;:::-;7446:74;;7529:93;7618:3;7529:93;:::i;:::-;7647:2;7642:3;7638:12;7631:19;;7436:220;;;:::o;7662:366::-;7804:3;7825:67;7889:2;7884:3;7825:67;:::i;:::-;7818:74;;7901:93;7990:3;7901:93;:::i;:::-;8019:2;8014:3;8010:12;8003:19;;7808:220;;;:::o;8034:366::-;8176:3;8197:67;8261:2;8256:3;8197:67;:::i;:::-;8190:74;;8273:93;8362:3;8273:93;:::i;:::-;8391:2;8386:3;8382:12;8375:19;;8180:220;;;:::o;8406:118::-;8493:24;8511:5;8493:24;:::i;:::-;8488:3;8481:37;8471:53;;:::o;8530:112::-;8613:22;8629:5;8613:22;:::i;:::-;8608:3;8601:35;8591:51;;:::o;8648:222::-;8741:4;8779:2;8768:9;8764:18;8756:26;;8792:71;8860:1;8849:9;8845:17;8836:6;8792:71;:::i;:::-;8746:124;;;;:::o;8876:210::-;8963:4;9001:2;8990:9;8986:18;8978:26;;9014:65;9076:1;9065:9;9061:17;9052:6;9014:65;:::i;:::-;8968:118;;;;:::o;9092:313::-;9205:4;9243:2;9232:9;9228:18;9220:26;;9292:9;9286:4;9282:20;9278:1;9267:9;9263:17;9256:47;9320:78;9393:4;9384:6;9320:78;:::i;:::-;9312:86;;9210:195;;;;:::o;9411:419::-;9577:4;9615:2;9604:9;9600:18;9592:26;;9664:9;9658:4;9654:20;9650:1;9639:9;9635:17;9628:47;9692:131;9818:4;9692:131;:::i;:::-;9684:139;;9582:248;;;:::o;9836:419::-;10002:4;10040:2;10029:9;10025:18;10017:26;;10089:9;10083:4;10079:20;10075:1;10064:9;10060:17;10053:47;10117:131;10243:4;10117:131;:::i;:::-;10109:139;;10007:248;;;:::o;10261:419::-;10427:4;10465:2;10454:9;10450:18;10442:26;;10514:9;10508:4;10504:20;10500:1;10489:9;10485:17;10478:47;10542:131;10668:4;10542:131;:::i;:::-;10534:139;;10432:248;;;:::o;10686:419::-;10852:4;10890:2;10879:9;10875:18;10867:26;;10939:9;10933:4;10929:20;10925:1;10914:9;10910:17;10903:47;10967:131;11093:4;10967:131;:::i;:::-;10959:139;;10857:248;;;:::o;11111:419::-;11277:4;11315:2;11304:9;11300:18;11292:26;;11364:9;11358:4;11354:20;11350:1;11339:9;11335:17;11328:47;11392:131;11518:4;11392:131;:::i;:::-;11384:139;;11282:248;;;:::o;11536:419::-;11702:4;11740:2;11729:9;11725:18;11717:26;;11789:9;11783:4;11779:20;11775:1;11764:9;11760:17;11753:47;11817:131;11943:4;11817:131;:::i;:::-;11809:139;;11707:248;;;:::o;11961:419::-;12127:4;12165:2;12154:9;12150:18;12142:26;;12214:9;12208:4;12204:20;12200:1;12189:9;12185:17;12178:47;12242:131;12368:4;12242:131;:::i;:::-;12234:139;;12132:248;;;:::o;12386:419::-;12552:4;12590:2;12579:9;12575:18;12567:26;;12639:9;12633:4;12629:20;12625:1;12614:9;12610:17;12603:47;12667:131;12793:4;12667:131;:::i;:::-;12659:139;;12557:248;;;:::o;12811:419::-;12977:4;13015:2;13004:9;13000:18;12992:26;;13064:9;13058:4;13054:20;13050:1;13039:9;13035:17;13028:47;13092:131;13218:4;13092:131;:::i;:::-;13084:139;;12982:248;;;:::o;13236:419::-;13402:4;13440:2;13429:9;13425:18;13417:26;;13489:9;13483:4;13479:20;13475:1;13464:9;13460:17;13453:47;13517:131;13643:4;13517:131;:::i;:::-;13509:139;;13407:248;;;:::o;13661:419::-;13827:4;13865:2;13854:9;13850:18;13842:26;;13914:9;13908:4;13904:20;13900:1;13889:9;13885:17;13878:47;13942:131;14068:4;13942:131;:::i;:::-;13934:139;;13832:248;;;:::o;14086:419::-;14252:4;14290:2;14279:9;14275:18;14267:26;;14339:9;14333:4;14329:20;14325:1;14314:9;14310:17;14303:47;14367:131;14493:4;14367:131;:::i;:::-;14359:139;;14257:248;;;:::o;14511:419::-;14677:4;14715:2;14704:9;14700:18;14692:26;;14764:9;14758:4;14754:20;14750:1;14739:9;14735:17;14728:47;14792:131;14918:4;14792:131;:::i;:::-;14784:139;;14682:248;;;:::o;14936:419::-;15102:4;15140:2;15129:9;15125:18;15117:26;;15189:9;15183:4;15179:20;15175:1;15164:9;15160:17;15153:47;15217:131;15343:4;15217:131;:::i;:::-;15209:139;;15107:248;;;:::o;15361:419::-;15527:4;15565:2;15554:9;15550:18;15542:26;;15614:9;15608:4;15604:20;15600:1;15589:9;15585:17;15578:47;15642:131;15768:4;15642:131;:::i;:::-;15634:139;;15532:248;;;:::o;15786:222::-;15879:4;15917:2;15906:9;15902:18;15894:26;;15930:71;15998:1;15987:9;15983:17;15974:6;15930:71;:::i;:::-;15884:124;;;;:::o;16014:442::-;16163:4;16201:2;16190:9;16186:18;16178:26;;16214:71;16282:1;16271:9;16267:17;16258:6;16214:71;:::i;:::-;16295:72;16363:2;16352:9;16348:18;16339:6;16295:72;:::i;:::-;16377;16445:2;16434:9;16430:18;16421:6;16377:72;:::i;:::-;16168:288;;;;;;:::o;16462:214::-;16551:4;16589:2;16578:9;16574:18;16566:26;;16602:67;16666:1;16655:9;16651:17;16642:6;16602:67;:::i;:::-;16556:120;;;;:::o;16682:99::-;16734:6;16768:5;16762:12;16752:22;;16741:40;;;:::o;16787:169::-;16871:11;16905:6;16900:3;16893:19;16945:4;16940:3;16936:14;16921:29;;16883:73;;;;:::o;16962:305::-;17002:3;17021:20;17039:1;17021:20;:::i;:::-;17016:25;;17055:20;17073:1;17055:20;:::i;:::-;17050:25;;17209:1;17141:66;17137:74;17134:1;17131:81;17128:2;;;17215:18;;:::i;:::-;17128:2;17259:1;17256;17252:9;17245:16;;17006:261;;;;:::o;17273:237::-;17311:3;17330:18;17346:1;17330:18;:::i;:::-;17325:23;;17362:18;17378:1;17362:18;:::i;:::-;17357:23;;17452:1;17446:4;17442:12;17439:1;17436:19;17433:2;;;17458:18;;:::i;:::-;17433:2;17502:1;17499;17495:9;17488:16;;17315:195;;;;:::o;17516:185::-;17556:1;17573:20;17591:1;17573:20;:::i;:::-;17568:25;;17607:20;17625:1;17607:20;:::i;:::-;17602:25;;17646:1;17636:2;;17651:18;;:::i;:::-;17636:2;17693:1;17690;17686:9;17681:14;;17558:143;;;;:::o;17707:848::-;17768:5;17775:4;17799:6;17790:15;;17823:5;17814:14;;17837:712;17858:1;17848:8;17845:15;17837:712;;;17953:4;17948:3;17944:14;17938:4;17935:24;17932:2;;;17962:18;;:::i;:::-;17932:2;18012:1;18002:8;17998:16;17995:2;;;18427:4;18420:5;18416:16;18407:25;;17995:2;18477:4;18471;18467:15;18459:23;;18507:32;18530:8;18507:32;:::i;:::-;18495:44;;17837:712;;;17780:775;;;;;;;:::o;18561:281::-;18619:5;18643:23;18661:4;18643:23;:::i;:::-;18635:31;;18687:25;18703:8;18687:25;:::i;:::-;18675:37;;18731:104;18768:66;18758:8;18752:4;18731:104;:::i;:::-;18722:113;;18625:217;;;;:::o;18848:1073::-;18902:5;19093:8;19083:2;;19114:1;19105:10;;19116:5;;19083:2;19142:4;19132:2;;19159:1;19150:10;;19161:5;;19132:2;19228:4;19276:1;19271:27;;;;19312:1;19307:191;;;;19221:277;;19271:27;19289:1;19280:10;;19291:5;;;19307:191;19352:3;19342:8;19339:17;19336:2;;;19359:18;;:::i;:::-;19336:2;19408:8;19405:1;19401:16;19392:25;;19443:3;19436:5;19433:14;19430:2;;;19450:18;;:::i;:::-;19430:2;19483:5;;;19221:277;;19607:2;19597:8;19594:16;19588:3;19582:4;19579:13;19575:36;19557:2;19547:8;19544:16;19539:2;19533:4;19530:12;19526:35;19510:111;19507:2;;;19663:8;19657:4;19653:19;19644:28;;19698:3;19691:5;19688:14;19685:2;;;19705:18;;:::i;:::-;19685:2;19738:5;;19507:2;19778:42;19816:3;19806:8;19800:4;19797:1;19778:42;:::i;:::-;19763:57;;;;19852:4;19847:3;19843:14;19836:5;19833:25;19830:2;;;19861:18;;:::i;:::-;19830:2;19910:4;19903:5;19899:16;19890:25;;18908:1013;;;;;;:::o;19927:191::-;19967:4;19987:20;20005:1;19987:20;:::i;:::-;19982:25;;20021:20;20039:1;20021:20;:::i;:::-;20016:25;;20060:1;20057;20054:8;20051:2;;;20065:18;;:::i;:::-;20051:2;20110:1;20107;20103:9;20095:17;;19972:146;;;;:::o;20124:96::-;20161:7;20190:24;20208:5;20190:24;:::i;:::-;20179:35;;20169:51;;;:::o;20226:90::-;20260:7;20303:5;20296:13;20289:21;20278:32;;20268:48;;;:::o;20322:126::-;20359:7;20399:42;20392:5;20388:54;20377:65;;20367:81;;;:::o;20454:77::-;20491:7;20520:5;20509:16;;20499:32;;;:::o;20537:86::-;20572:7;20612:4;20605:5;20601:16;20590:27;;20580:43;;;:::o;20629:307::-;20697:1;20707:113;20721:6;20718:1;20715:13;20707:113;;;20806:1;20801:3;20797:11;20791:18;20787:1;20782:3;20778:11;20771:39;20743:2;20740:1;20736:10;20731:15;;20707:113;;;20838:6;20835:1;20832:13;20829:2;;;20918:1;20909:6;20904:3;20900:16;20893:27;20829:2;20678:258;;;;:::o;20942:320::-;20986:6;21023:1;21017:4;21013:12;21003:22;;21070:1;21064:4;21060:12;21091:18;21081:2;;21147:4;21139:6;21135:17;21125:27;;21081:2;21209;21201:6;21198:14;21178:18;21175:38;21172:2;;;21228:18;;:::i;:::-;21172:2;20993:269;;;;:::o;21268:167::-;21305:3;21328:22;21344:5;21328:22;:::i;:::-;21319:31;;21372:4;21365:5;21362:15;21359:2;;;21380:18;;:::i;:::-;21359:2;21427:1;21420:5;21416:13;21409:20;;21309:126;;;:::o;21441:176::-;21473:1;21490:20;21508:1;21490:20;:::i;:::-;21485:25;;21524:20;21542:1;21524:20;:::i;:::-;21519:25;;21563:1;21553:2;;21568:18;;:::i;:::-;21553:2;21609:1;21606;21602:9;21597:14;;21475:142;;;;:::o;21623:180::-;21671:77;21668:1;21661:88;21768:4;21765:1;21758:15;21792:4;21789:1;21782:15;21809:180;21857:77;21854:1;21847:88;21954:4;21951:1;21944:15;21978:4;21975:1;21968:15;21995:180;22043:77;22040:1;22033:88;22140:4;22137:1;22130:15;22164:4;22161:1;22154:15;22181:102;22222:6;22273:2;22269:7;22264:2;22257:5;22253:14;22249:28;22239:38;;22229:54;;;:::o;22289:102::-;22331:8;22378:5;22375:1;22371:13;22350:34;;22340:51;;;:::o;22397:222::-;22537:34;22533:1;22525:6;22521:14;22514:58;22606:5;22601:2;22593:6;22589:15;22582:30;22503:116;:::o;22625:221::-;22765:34;22761:1;22753:6;22749:14;22742:58;22834:4;22829:2;22821:6;22817:15;22810:29;22731:115;:::o;22852:170::-;22992:22;22988:1;22980:6;22976:14;22969:46;22958:64;:::o;23028:166::-;23168:18;23164:1;23156:6;23152:14;23145:42;23134:60;:::o;23200:225::-;23340:34;23336:1;23328:6;23324:14;23317:58;23409:8;23404:2;23396:6;23392:15;23385:33;23306:119;:::o;23431:221::-;23571:34;23567:1;23559:6;23555:14;23548:58;23640:4;23635:2;23627:6;23623:15;23616:29;23537:115;:::o;23658:225::-;23798:34;23794:1;23786:6;23782:14;23775:58;23867:8;23862:2;23854:6;23850:15;23843:33;23764:119;:::o;23889:227::-;24029:34;24025:1;24017:6;24013:14;24006:58;24098:10;24093:2;24085:6;24081:15;24074:35;23995:121;:::o;24122:182::-;24262:34;24258:1;24250:6;24246:14;24239:58;24228:76;:::o;24310:223::-;24450:34;24446:1;24438:6;24434:14;24427:58;24519:6;24514:2;24506:6;24502:15;24495:31;24416:117;:::o;24539:220::-;24679:34;24675:1;24667:6;24663:14;24656:58;24748:3;24743:2;24735:6;24731:15;24724:28;24645:114;:::o;24765:224::-;24905:34;24901:1;24893:6;24889:14;24882:58;24974:7;24969:2;24961:6;24957:15;24950:32;24871:118;:::o;24995:223::-;25135:34;25131:1;25123:6;25119:14;25112:58;25204:6;25199:2;25191:6;25187:15;25180:31;25101:117;:::o;25224:224::-;25364:34;25360:1;25352:6;25348:14;25341:58;25433:7;25428:2;25420:6;25416:15;25409:32;25330:118;:::o;25454:181::-;25594:33;25590:1;25582:6;25578:14;25571:57;25560:75;:::o;25641:122::-;25714:24;25732:5;25714:24;:::i;:::-;25707:5;25704:35;25694:2;;25753:1;25750;25743:12;25694:2;25684:79;:::o;25769:122::-;25842:24;25860:5;25842:24;:::i;:::-;25835:5;25832:35;25822:2;;25881:1;25878;25871:12;25822:2;25812:79;:::o
Swarm Source
ipfs://55a194565ee71b8a86f385ef277416f32182897976ff3243100e02e9bfe59a40
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.