Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 24 from a total of 24 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 16552579 | 1114 days ago | IN | 0 ETH | 0.00089559 | ||||
| Set Donee | 16552576 | 1114 days ago | IN | 0 ETH | 0.00063902 | ||||
| Set Token Of Hop... | 16552574 | 1114 days ago | IN | 0 ETH | 0.00054674 | ||||
| Safe Transfer Fr... | 16065914 | 1182 days ago | IN | 0 ETH | 0.00068726 | ||||
| Mint | 15924079 | 1202 days ago | IN | 0.038 ETH | 0.00169876 | ||||
| Mint | 15646275 | 1240 days ago | IN | 0.038 ETH | 0.00123964 | ||||
| Mint | 15646076 | 1240 days ago | IN | 0.038 ETH | 0.00107967 | ||||
| Mint | 15617627 | 1244 days ago | IN | 0.038 ETH | 0.00051529 | ||||
| Mint | 15585980 | 1249 days ago | IN | 0.038 ETH | 0.00056124 | ||||
| Mint | 15576869 | 1250 days ago | IN | 0.038 ETH | 0.00093111 | ||||
| Mint | 15572949 | 1251 days ago | IN | 0.038 ETH | 0.00077426 | ||||
| Safe Transfer Fr... | 15543039 | 1255 days ago | IN | 0 ETH | 0.00047233 | ||||
| Set Paused State | 15537115 | 1256 days ago | IN | 0 ETH | 0.00027559 | ||||
| Safe Transfer Fr... | 15537022 | 1256 days ago | IN | 0 ETH | 0.00053667 | ||||
| Safe Transfer Fr... | 15537017 | 1256 days ago | IN | 0 ETH | 0.00046404 | ||||
| Safe Transfer Fr... | 15537012 | 1256 days ago | IN | 0 ETH | 0.00056311 | ||||
| Safe Transfer Fr... | 15537009 | 1256 days ago | IN | 0 ETH | 0.00062103 | ||||
| Safe Transfer Fr... | 15537006 | 1256 days ago | IN | 0 ETH | 0.00059065 | ||||
| Safe Transfer Fr... | 15537002 | 1256 days ago | IN | 0 ETH | 0.00065532 | ||||
| Safe Transfer Fr... | 15536996 | 1256 days ago | IN | 0 ETH | 0.00050014 | ||||
| Set Paused State | 15532761 | 1256 days ago | IN | 0 ETH | 0.00026733 | ||||
| Mint | 15532724 | 1256 days ago | IN | 0.038 ETH | 0.00065636 | ||||
| Set Paused State | 15532718 | 1256 days ago | IN | 0 ETH | 0.00015643 | ||||
| Give Away | 15531064 | 1257 days ago | IN | 0 ETH | 0.00622365 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SaveTheHamsters
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-09-14
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts@4.7.3/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts@4.7.3/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
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@4.7.3/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
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() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts@4.7.3/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts@4.7.3/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts@4.7.3/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` 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 tokenId
) 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.
* - `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 tokenId
) internal virtual {}
}
// File: hamster.sol
pragma solidity ^0.8.8;
contract SaveTheHamsters is ERC721, Ownable {
using Strings for uint256;
uint256 public constant MAX_SUPPLY = 2000;
uint256 public constant MAX_RESERVED = 20;
uint256 public constant PRICE = 0.038 ether;
address public _tokenOfHope;
address public _donee;
string public _baseTokenURI;
uint256 public _maxSupply;
uint256 public _totalSupply;
uint256 public _mintPrice;
bool public _paused;
uint256 private _reserved;
uint256 public _maxReserved;
constructor(
address tokenOfHope,
address donee,
string memory baseURI
) ERC721("Save The Hamsters", "HAM") {
_reserved = 0;
_maxReserved = MAX_RESERVED;
_totalSupply = 0;
_maxSupply = MAX_SUPPLY;
_baseTokenURI = baseURI;
_paused = true;
_mintPrice = PRICE;
_tokenOfHope = tokenOfHope;
_donee = donee;
}
function _baseURI() internal view virtual override returns (string memory) {
return _baseTokenURI;
}
function setBaseURI(string memory baseURI) external onlyOwner {
_baseTokenURI = baseURI;
}
function setPausedState(bool paused) external onlyOwner {
_paused = paused;
}
function setTokenOfHope(address addr) external onlyOwner {
_tokenOfHope = addr;
}
function setDonee(address addr) external onlyOwner {
_donee = addr;
}
function setMintPrice(uint256 mintPrice) external onlyOwner {
_mintPrice = mintPrice;
}
function mint(uint256 amount) public payable {
require( !_paused, "Sale paused" );
require( amount < 21, "You can adopt a maximum of 20 Hamsters" );
require( amount + _totalSupply <= _maxSupply, "Exceeds max supply" );
require( msg.value >= _mintPrice * amount, "Ether value sent is not correct" );
for(uint256 i; i < amount; i++){
_safeMint(msg.sender, _totalSupply + i);
}
_totalSupply += amount;
}
function reservedAmount() external view onlyOwner returns (uint256) {
return _reserved;
}
function giveAway(address to, uint256 amount) external onlyOwner() {
require( amount + _reserved <= _maxReserved, "Exceeds reserved Hamsters supply" );
require( amount + _totalSupply <= _maxSupply, "Exceeds max supply" );
require(to != address(0), "No hamsters were harmed");
for(uint256 i; i < amount; i++){
_safeMint(to, _totalSupply + i);
}
_reserved += amount;
_totalSupply += amount;
}
function withdraw() public onlyOwner {
uint256 balance = address(this).balance;
uint256 fees = balance / 10;
uint256 netBalance = balance - fees;
payable(_tokenOfHope).transfer(fees);
payable(_donee).transfer(netBalance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"tokenOfHope","type":"address"},{"internalType":"address","name":"donee","type":"address"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_RESERVED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_donee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenOfHope","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setDonee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPausedState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setTokenOfHope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200221538038062002215833981016040819052620000349162000260565b604080518082018252601181527053617665205468652048616d737465727360781b60208083019182528351808501909452600384526248414d60e81b908401528151919291620000889160009162000187565b5080516200009e90600190602084019062000187565b505050620000bb620000b56200013160201b60201c565b62000135565b6000600e8190556014600f55600b556107d0600a558051620000e590600990602084019062000187565b5050600d805460ff19166001179055668700cc75770000600c55600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055620003a1565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001959062000364565b90600052602060002090601f016020900481019282620001b9576000855562000204565b82601f10620001d457805160ff191683800117855562000204565b8280016001018555821562000204579182015b8281111562000204578251825591602001919060010190620001e7565b506200021292915062000216565b5090565b5b8082111562000212576000815560010162000217565b80516001600160a01b03811681146200024557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200027657600080fd5b62000281846200022d565b92506020620002928186016200022d565b60408601519093506001600160401b0380821115620002b057600080fd5b818701915087601f830112620002c557600080fd5b815181811115620002da57620002da6200024a565b604051601f8201601f19908116603f011681019083821181831017156200030557620003056200024a565b816040528281528a868487010111156200031e57600080fd5b600093505b8284101562000342578484018601518185018701529285019262000323565b82841115620003545760008684830101525b8096505050505050509250925092565b600181811c908216806200037957607f821691505b602082108114156200039b57634e487b7160e01b600052602260045260246000fd5b50919050565b611e6480620003b16000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063db9f60ff1161006f578063db9f60ff146105b0578063e985e9c5146105d0578063f2fde38b14610619578063f4a0a52814610639578063f92c45b71461065957600080fd5b8063b88d4fde1461053b578063c87b56dd1461055b578063ca8001441461057b578063cfc86f7b1461059b57600080fd5b806395d89b41116100e757806395d89b41146104b3578063a0712d68146104c8578063a22cb465146104db578063a41ce630146104fb578063b2f91a8b1461051b57600080fd5b8063715018a61461044557806378962b431461045a5780638d859f3e1461047a5780638da5cb5b1461049557600080fd5b806332cb6b0c1161019b57806342842e0e1161016a57806342842e0e146103b057806355f804b3146103d05780636352211e146103f05780636ba90c6e1461041057806370a082311461042557600080fd5b806332cb6b0c1461034f5780633ccfd60b146103655780633eaaf86b1461037a5780633fd004d51461039057600080fd5b8063095ea7b3116101e2578063095ea7b3146102c757806316c61ccc146102e957806322f4596f1461030357806323b872dd1461031957806331a6a0691461033957600080fd5b806301ffc9a7146102145780630387da421461024957806306fdde031461026d578063081812fc1461028f575b600080fd5b34801561022057600080fd5b5061023461022f3660046118e0565b61066e565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025f600c5481565b604051908152602001610240565b34801561027957600080fd5b506102826106c0565b6040516102409190611955565b34801561029b57600080fd5b506102af6102aa366004611968565b610752565b6040516001600160a01b039091168152602001610240565b3480156102d357600080fd5b506102e76102e236600461199d565b610779565b005b3480156102f557600080fd5b50600d546102349060ff1681565b34801561030f57600080fd5b5061025f600a5481565b34801561032557600080fd5b506102e76103343660046119c7565b610894565b34801561034557600080fd5b5061025f600f5481565b34801561035b57600080fd5b5061025f6107d081565b34801561037157600080fd5b506102e76108c5565b34801561038657600080fd5b5061025f600b5481565b34801561039c57600080fd5b506102e76103ab366004611a03565b610965565b3480156103bc57600080fd5b506102e76103cb3660046119c7565b61098f565b3480156103dc57600080fd5b506102e76103eb366004611aaa565b6109aa565b3480156103fc57600080fd5b506102af61040b366004611968565b6109c9565b34801561041c57600080fd5b5061025f601481565b34801561043157600080fd5b5061025f610440366004611a03565b610a29565b34801561045157600080fd5b506102e7610aaf565b34801561046657600080fd5b506008546102af906001600160a01b031681565b34801561048657600080fd5b5061025f668700cc7577000081565b3480156104a157600080fd5b506006546001600160a01b03166102af565b3480156104bf57600080fd5b50610282610ac3565b6102e76104d6366004611968565b610ad2565b3480156104e757600080fd5b506102e76104f6366004611b03565b610c71565b34801561050757600080fd5b506007546102af906001600160a01b031681565b34801561052757600080fd5b506102e7610536366004611a03565b610c7c565b34801561054757600080fd5b506102e7610556366004611b36565b610ca6565b34801561056757600080fd5b50610282610576366004611968565b610cd8565b34801561058757600080fd5b506102e761059636600461199d565b610d3f565b3480156105a757600080fd5b50610282610eb2565b3480156105bc57600080fd5b506102e76105cb366004611bb2565b610f40565b3480156105dc57600080fd5b506102346105eb366004611bcd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561062557600080fd5b506102e7610634366004611a03565b610f5b565b34801561064557600080fd5b506102e7610654366004611968565b610fd4565b34801561066557600080fd5b5061025f610fe1565b60006001600160e01b031982166380ac58cd60e01b148061069f57506001600160e01b03198216635b5e139f60e01b145b806106ba57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106cf90611bf7565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb90611bf7565b80156107485780601f1061071d57610100808354040283529160200191610748565b820191906000526020600020905b81548152906001019060200180831161072b57829003601f168201915b5050505050905090565b600061075d82610ff2565b506000908152600460205260409020546001600160a01b031690565b6000610784826109c9565b9050806001600160a01b0316836001600160a01b031614156107f75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610813575061081381336105eb565b6108855760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107ee565b61088f8383611051565b505050565b61089e33826110bf565b6108ba5760405162461bcd60e51b81526004016107ee90611c32565b61088f83838361113e565b6108cd6112da565b4760006108db600a83611cac565b905060006108e98284611cc0565b6007546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610924573d6000803e3d6000fd5b506008546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561095f573d6000803e3d6000fd5b50505050565b61096d6112da565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61088f83838360405180602001604052806000815250610ca6565b6109b26112da565b80516109c5906009906020840190611831565b5050565b6000818152600260205260408120546001600160a01b0316806106ba5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107ee565b60006001600160a01b038216610a935760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107ee565b506001600160a01b031660009081526003602052604090205490565b610ab76112da565b610ac16000611334565b565b6060600180546106cf90611bf7565b600d5460ff1615610b135760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b60448201526064016107ee565b60158110610b725760405162461bcd60e51b815260206004820152602660248201527f596f752063616e2061646f70742061206d6178696d756d206f662032302048616044820152656d737465727360d01b60648201526084016107ee565b600a54600b54610b829083611cd7565b1115610bc55760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016107ee565b80600c54610bd39190611cef565b341015610c225760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107ee565b60005b81811015610c5657610c443382600b54610c3f9190611cd7565b611386565b80610c4e81611d0e565b915050610c25565b5080600b6000828254610c699190611cd7565b909155505050565b6109c53383836113a0565b610c846112da565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610cb033836110bf565b610ccc5760405162461bcd60e51b81526004016107ee90611c32565b61095f8484848461146f565b6060610ce382610ff2565b6000610ced6114a2565b90506000815111610d0d5760405180602001604052806000815250610d38565b80610d17846114b1565b604051602001610d28929190611d29565b6040516020818303038152906040525b9392505050565b610d476112da565b600f54600e54610d579083611cd7565b1115610da55760405162461bcd60e51b815260206004820181905260248201527f457863656564732072657365727665642048616d737465727320737570706c7960448201526064016107ee565b600a54600b54610db59083611cd7565b1115610df85760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016107ee565b6001600160a01b038216610e4e5760405162461bcd60e51b815260206004820152601760248201527f4e6f2068616d73746572732077657265206861726d656400000000000000000060448201526064016107ee565b60005b81811015610e7d57610e6b8382600b54610c3f9190611cd7565b80610e7581611d0e565b915050610e51565b5080600e6000828254610e909190611cd7565b9250508190555080600b6000828254610ea99190611cd7565b90915550505050565b60098054610ebf90611bf7565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb90611bf7565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b505050505081565b610f486112da565b600d805460ff1916911515919091179055565b610f636112da565b6001600160a01b038116610fc85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ee565b610fd181611334565b50565b610fdc6112da565b600c55565b6000610feb6112da565b50600e5490565b6000818152600260205260409020546001600160a01b0316610fd15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107ee565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611086826109c9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806110cb836109c9565b9050806001600160a01b0316846001600160a01b0316148061111257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806111365750836001600160a01b031661112b84610752565b6001600160a01b0316145b949350505050565b826001600160a01b0316611151826109c9565b6001600160a01b0316146111b55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107ee565b6001600160a01b0382166112175760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107ee565b611222600082611051565b6001600160a01b038316600090815260036020526040812080546001929061124b908490611cc0565b90915550506001600160a01b0382166000908152600360205260408120805460019290611279908490611cd7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b03163314610ac15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ee565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109c58282604051806020016040528060008152506115af565b816001600160a01b0316836001600160a01b031614156114025760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107ee565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61147a84848461113e565b611486848484846115e2565b61095f5760405162461bcd60e51b81526004016107ee90611d58565b6060600980546106cf90611bf7565b6060816114d55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114ff57806114e981611d0e565b91506114f89050600a83611cac565b91506114d9565b60008167ffffffffffffffff81111561151a5761151a611a1e565b6040519080825280601f01601f191660200182016040528015611544576020820181803683370190505b5090505b841561113657611559600183611cc0565b9150611566600a86611daa565b611571906030611cd7565b60f81b81838151811061158657611586611dbe565b60200101906001600160f81b031916908160001a9053506115a8600a86611cac565b9450611548565b6115b983836116ef565b6115c660008484846115e2565b61088f5760405162461bcd60e51b81526004016107ee90611d58565b60006001600160a01b0384163b156116e457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611626903390899088908890600401611dd4565b602060405180830381600087803b15801561164057600080fd5b505af1925050508015611670575060408051601f3d908101601f1916820190925261166d91810190611e11565b60015b6116ca573d80801561169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b5080516116c25760405162461bcd60e51b81526004016107ee90611d58565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611136565b506001949350505050565b6001600160a01b0382166117455760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107ee565b6000818152600260205260409020546001600160a01b0316156117aa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107ee565b6001600160a01b03821660009081526003602052604081208054600192906117d3908490611cd7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461183d90611bf7565b90600052602060002090601f01602090048101928261185f57600085556118a5565b82601f1061187857805160ff19168380011785556118a5565b828001600101855582156118a5579182015b828111156118a557825182559160200191906001019061188a565b506118b19291506118b5565b5090565b5b808211156118b157600081556001016118b6565b6001600160e01b031981168114610fd157600080fd5b6000602082840312156118f257600080fd5b8135610d38816118ca565b60005b83811015611918578181015183820152602001611900565b8381111561095f5750506000910152565b600081518084526119418160208601602086016118fd565b601f01601f19169290920160200192915050565b602081526000610d386020830184611929565b60006020828403121561197a57600080fd5b5035919050565b80356001600160a01b038116811461199857600080fd5b919050565b600080604083850312156119b057600080fd5b6119b983611981565b946020939093013593505050565b6000806000606084860312156119dc57600080fd5b6119e584611981565b92506119f360208501611981565b9150604084013590509250925092565b600060208284031215611a1557600080fd5b610d3882611981565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611a4f57611a4f611a1e565b604051601f8501601f19908116603f01168101908282118183101715611a7757611a77611a1e565b81604052809350858152868686011115611a9057600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611abc57600080fd5b813567ffffffffffffffff811115611ad357600080fd5b8201601f81018413611ae457600080fd5b61113684823560208401611a34565b8035801515811461199857600080fd5b60008060408385031215611b1657600080fd5b611b1f83611981565b9150611b2d60208401611af3565b90509250929050565b60008060008060808587031215611b4c57600080fd5b611b5585611981565b9350611b6360208601611981565b925060408501359150606085013567ffffffffffffffff811115611b8657600080fd5b8501601f81018713611b9757600080fd5b611ba687823560208401611a34565b91505092959194509250565b600060208284031215611bc457600080fd5b610d3882611af3565b60008060408385031215611be057600080fd5b611be983611981565b9150611b2d60208401611981565b600181811c90821680611c0b57607f821691505b60208210811415611c2c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082611cbb57611cbb611c80565b500490565b600082821015611cd257611cd2611c96565b500390565b60008219821115611cea57611cea611c96565b500190565b6000816000190483118215151615611d0957611d09611c96565b500290565b6000600019821415611d2257611d22611c96565b5060010190565b60008351611d3b8184602088016118fd565b835190830190611d4f8183602088016118fd565b01949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082611db957611db9611c80565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e0790830184611929565b9695505050505050565b600060208284031215611e2357600080fd5b8151610d38816118ca56fea26469706673582212208ae727db0c044aa56f22701fac4cf32bb397817d607d34b4e7497dfa23efa89f64736f6c63430008080033000000000000000000000000d86fd633d3e7e407d78e909e7d191bbab3f56cbe000000000000000000000000da59e8bea5dccc48ff79c5383c0ab0b8e7ac5ab700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5359366443716b675256624e34396734564a6d365833775a3774347746793843446967746952696b354d64512f00000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063db9f60ff1161006f578063db9f60ff146105b0578063e985e9c5146105d0578063f2fde38b14610619578063f4a0a52814610639578063f92c45b71461065957600080fd5b8063b88d4fde1461053b578063c87b56dd1461055b578063ca8001441461057b578063cfc86f7b1461059b57600080fd5b806395d89b41116100e757806395d89b41146104b3578063a0712d68146104c8578063a22cb465146104db578063a41ce630146104fb578063b2f91a8b1461051b57600080fd5b8063715018a61461044557806378962b431461045a5780638d859f3e1461047a5780638da5cb5b1461049557600080fd5b806332cb6b0c1161019b57806342842e0e1161016a57806342842e0e146103b057806355f804b3146103d05780636352211e146103f05780636ba90c6e1461041057806370a082311461042557600080fd5b806332cb6b0c1461034f5780633ccfd60b146103655780633eaaf86b1461037a5780633fd004d51461039057600080fd5b8063095ea7b3116101e2578063095ea7b3146102c757806316c61ccc146102e957806322f4596f1461030357806323b872dd1461031957806331a6a0691461033957600080fd5b806301ffc9a7146102145780630387da421461024957806306fdde031461026d578063081812fc1461028f575b600080fd5b34801561022057600080fd5b5061023461022f3660046118e0565b61066e565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025f600c5481565b604051908152602001610240565b34801561027957600080fd5b506102826106c0565b6040516102409190611955565b34801561029b57600080fd5b506102af6102aa366004611968565b610752565b6040516001600160a01b039091168152602001610240565b3480156102d357600080fd5b506102e76102e236600461199d565b610779565b005b3480156102f557600080fd5b50600d546102349060ff1681565b34801561030f57600080fd5b5061025f600a5481565b34801561032557600080fd5b506102e76103343660046119c7565b610894565b34801561034557600080fd5b5061025f600f5481565b34801561035b57600080fd5b5061025f6107d081565b34801561037157600080fd5b506102e76108c5565b34801561038657600080fd5b5061025f600b5481565b34801561039c57600080fd5b506102e76103ab366004611a03565b610965565b3480156103bc57600080fd5b506102e76103cb3660046119c7565b61098f565b3480156103dc57600080fd5b506102e76103eb366004611aaa565b6109aa565b3480156103fc57600080fd5b506102af61040b366004611968565b6109c9565b34801561041c57600080fd5b5061025f601481565b34801561043157600080fd5b5061025f610440366004611a03565b610a29565b34801561045157600080fd5b506102e7610aaf565b34801561046657600080fd5b506008546102af906001600160a01b031681565b34801561048657600080fd5b5061025f668700cc7577000081565b3480156104a157600080fd5b506006546001600160a01b03166102af565b3480156104bf57600080fd5b50610282610ac3565b6102e76104d6366004611968565b610ad2565b3480156104e757600080fd5b506102e76104f6366004611b03565b610c71565b34801561050757600080fd5b506007546102af906001600160a01b031681565b34801561052757600080fd5b506102e7610536366004611a03565b610c7c565b34801561054757600080fd5b506102e7610556366004611b36565b610ca6565b34801561056757600080fd5b50610282610576366004611968565b610cd8565b34801561058757600080fd5b506102e761059636600461199d565b610d3f565b3480156105a757600080fd5b50610282610eb2565b3480156105bc57600080fd5b506102e76105cb366004611bb2565b610f40565b3480156105dc57600080fd5b506102346105eb366004611bcd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561062557600080fd5b506102e7610634366004611a03565b610f5b565b34801561064557600080fd5b506102e7610654366004611968565b610fd4565b34801561066557600080fd5b5061025f610fe1565b60006001600160e01b031982166380ac58cd60e01b148061069f57506001600160e01b03198216635b5e139f60e01b145b806106ba57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106cf90611bf7565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb90611bf7565b80156107485780601f1061071d57610100808354040283529160200191610748565b820191906000526020600020905b81548152906001019060200180831161072b57829003601f168201915b5050505050905090565b600061075d82610ff2565b506000908152600460205260409020546001600160a01b031690565b6000610784826109c9565b9050806001600160a01b0316836001600160a01b031614156107f75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610813575061081381336105eb565b6108855760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107ee565b61088f8383611051565b505050565b61089e33826110bf565b6108ba5760405162461bcd60e51b81526004016107ee90611c32565b61088f83838361113e565b6108cd6112da565b4760006108db600a83611cac565b905060006108e98284611cc0565b6007546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610924573d6000803e3d6000fd5b506008546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561095f573d6000803e3d6000fd5b50505050565b61096d6112da565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61088f83838360405180602001604052806000815250610ca6565b6109b26112da565b80516109c5906009906020840190611831565b5050565b6000818152600260205260408120546001600160a01b0316806106ba5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107ee565b60006001600160a01b038216610a935760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107ee565b506001600160a01b031660009081526003602052604090205490565b610ab76112da565b610ac16000611334565b565b6060600180546106cf90611bf7565b600d5460ff1615610b135760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b60448201526064016107ee565b60158110610b725760405162461bcd60e51b815260206004820152602660248201527f596f752063616e2061646f70742061206d6178696d756d206f662032302048616044820152656d737465727360d01b60648201526084016107ee565b600a54600b54610b829083611cd7565b1115610bc55760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016107ee565b80600c54610bd39190611cef565b341015610c225760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107ee565b60005b81811015610c5657610c443382600b54610c3f9190611cd7565b611386565b80610c4e81611d0e565b915050610c25565b5080600b6000828254610c699190611cd7565b909155505050565b6109c53383836113a0565b610c846112da565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610cb033836110bf565b610ccc5760405162461bcd60e51b81526004016107ee90611c32565b61095f8484848461146f565b6060610ce382610ff2565b6000610ced6114a2565b90506000815111610d0d5760405180602001604052806000815250610d38565b80610d17846114b1565b604051602001610d28929190611d29565b6040516020818303038152906040525b9392505050565b610d476112da565b600f54600e54610d579083611cd7565b1115610da55760405162461bcd60e51b815260206004820181905260248201527f457863656564732072657365727665642048616d737465727320737570706c7960448201526064016107ee565b600a54600b54610db59083611cd7565b1115610df85760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016107ee565b6001600160a01b038216610e4e5760405162461bcd60e51b815260206004820152601760248201527f4e6f2068616d73746572732077657265206861726d656400000000000000000060448201526064016107ee565b60005b81811015610e7d57610e6b8382600b54610c3f9190611cd7565b80610e7581611d0e565b915050610e51565b5080600e6000828254610e909190611cd7565b9250508190555080600b6000828254610ea99190611cd7565b90915550505050565b60098054610ebf90611bf7565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb90611bf7565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b505050505081565b610f486112da565b600d805460ff1916911515919091179055565b610f636112da565b6001600160a01b038116610fc85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ee565b610fd181611334565b50565b610fdc6112da565b600c55565b6000610feb6112da565b50600e5490565b6000818152600260205260409020546001600160a01b0316610fd15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107ee565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611086826109c9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806110cb836109c9565b9050806001600160a01b0316846001600160a01b0316148061111257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806111365750836001600160a01b031661112b84610752565b6001600160a01b0316145b949350505050565b826001600160a01b0316611151826109c9565b6001600160a01b0316146111b55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107ee565b6001600160a01b0382166112175760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107ee565b611222600082611051565b6001600160a01b038316600090815260036020526040812080546001929061124b908490611cc0565b90915550506001600160a01b0382166000908152600360205260408120805460019290611279908490611cd7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b03163314610ac15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ee565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109c58282604051806020016040528060008152506115af565b816001600160a01b0316836001600160a01b031614156114025760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107ee565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61147a84848461113e565b611486848484846115e2565b61095f5760405162461bcd60e51b81526004016107ee90611d58565b6060600980546106cf90611bf7565b6060816114d55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114ff57806114e981611d0e565b91506114f89050600a83611cac565b91506114d9565b60008167ffffffffffffffff81111561151a5761151a611a1e565b6040519080825280601f01601f191660200182016040528015611544576020820181803683370190505b5090505b841561113657611559600183611cc0565b9150611566600a86611daa565b611571906030611cd7565b60f81b81838151811061158657611586611dbe565b60200101906001600160f81b031916908160001a9053506115a8600a86611cac565b9450611548565b6115b983836116ef565b6115c660008484846115e2565b61088f5760405162461bcd60e51b81526004016107ee90611d58565b60006001600160a01b0384163b156116e457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611626903390899088908890600401611dd4565b602060405180830381600087803b15801561164057600080fd5b505af1925050508015611670575060408051601f3d908101601f1916820190925261166d91810190611e11565b60015b6116ca573d80801561169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b5080516116c25760405162461bcd60e51b81526004016107ee90611d58565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611136565b506001949350505050565b6001600160a01b0382166117455760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107ee565b6000818152600260205260409020546001600160a01b0316156117aa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107ee565b6001600160a01b03821660009081526003602052604081208054600192906117d3908490611cd7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461183d90611bf7565b90600052602060002090601f01602090048101928261185f57600085556118a5565b82601f1061187857805160ff19168380011785556118a5565b828001600101855582156118a5579182015b828111156118a557825182559160200191906001019061188a565b506118b19291506118b5565b5090565b5b808211156118b157600081556001016118b6565b6001600160e01b031981168114610fd157600080fd5b6000602082840312156118f257600080fd5b8135610d38816118ca565b60005b83811015611918578181015183820152602001611900565b8381111561095f5750506000910152565b600081518084526119418160208601602086016118fd565b601f01601f19169290920160200192915050565b602081526000610d386020830184611929565b60006020828403121561197a57600080fd5b5035919050565b80356001600160a01b038116811461199857600080fd5b919050565b600080604083850312156119b057600080fd5b6119b983611981565b946020939093013593505050565b6000806000606084860312156119dc57600080fd5b6119e584611981565b92506119f360208501611981565b9150604084013590509250925092565b600060208284031215611a1557600080fd5b610d3882611981565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611a4f57611a4f611a1e565b604051601f8501601f19908116603f01168101908282118183101715611a7757611a77611a1e565b81604052809350858152868686011115611a9057600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611abc57600080fd5b813567ffffffffffffffff811115611ad357600080fd5b8201601f81018413611ae457600080fd5b61113684823560208401611a34565b8035801515811461199857600080fd5b60008060408385031215611b1657600080fd5b611b1f83611981565b9150611b2d60208401611af3565b90509250929050565b60008060008060808587031215611b4c57600080fd5b611b5585611981565b9350611b6360208601611981565b925060408501359150606085013567ffffffffffffffff811115611b8657600080fd5b8501601f81018713611b9757600080fd5b611ba687823560208401611a34565b91505092959194509250565b600060208284031215611bc457600080fd5b610d3882611af3565b60008060408385031215611be057600080fd5b611be983611981565b9150611b2d60208401611981565b600181811c90821680611c0b57607f821691505b60208210811415611c2c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082611cbb57611cbb611c80565b500490565b600082821015611cd257611cd2611c96565b500390565b60008219821115611cea57611cea611c96565b500190565b6000816000190483118215151615611d0957611d09611c96565b500290565b6000600019821415611d2257611d22611c96565b5060010190565b60008351611d3b8184602088016118fd565b835190830190611d4f8183602088016118fd565b01949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082611db957611db9611c80565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e0790830184611929565b9695505050505050565b600060208284031215611e2357600080fd5b8151610d38816118ca56fea26469706673582212208ae727db0c044aa56f22701fac4cf32bb397817d607d34b4e7497dfa23efa89f64736f6c63430008080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d86fd633d3e7e407d78e909e7d191bbab3f56cbe000000000000000000000000da59e8bea5dccc48ff79c5383c0ab0b8e7ac5ab700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5359366443716b675256624e34396734564a6d365833775a3774347746793843446967746952696b354d64512f00000000000000000000
-----Decoded View---------------
Arg [0] : tokenOfHope (address): 0xD86fd633d3E7e407D78e909E7D191bBAb3f56CBE
Arg [1] : donee (address): 0xda59e8BEa5DcCC48Ff79c5383C0AB0b8e7Ac5AB7
Arg [2] : baseURI (string): ipfs://QmSY6dCqkgRVbN49g4VJm6X3wZ7t4wFy8CDigtiRik5MdQ/
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000d86fd633d3e7e407d78e909e7d191bbab3f56cbe
Arg [1] : 000000000000000000000000da59e8bea5dccc48ff79c5383c0ab0b8e7ac5ab7
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d5359366443716b675256624e34396734564a6d36583377
Arg [5] : 5a3774347746793843446967746952696b354d64512f00000000000000000000
Deployed Bytecode Sourcemap
38071:3094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24830:305;;;;;;;;;;-1:-1:-1;24830:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;24830:305:0;;;;;;;;38492:25;;;;;;;;;;;;;;;;;;;738::1;;;726:2;711:18;38492:25:0;592:177:1;25757:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27270:171::-;;;;;;;;;;-1:-1:-1;27270:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1874:32:1;;;1856:51;;1844:2;1829:18;27270:171:0;1710:203:1;26787:417:0;;;;;;;;;;-1:-1:-1;26787:417:0;;;;;:::i;:::-;;:::i;:::-;;38528:19;;;;;;;;;;-1:-1:-1;38528:19:0;;;;;;;;38418:25;;;;;;;;;;;;;;;;27970:336;;;;;;;;;;-1:-1:-1;27970:336:0;;;;;:::i;:::-;;:::i;38592:28::-;;;;;;;;;;;;;;;;38160:41;;;;;;;;;;;;38197:4;38160:41;;40871:291;;;;;;;;;;;;;:::i;38450:27::-;;;;;;;;;;;;;;;;39417:93;;;;;;;;;;-1:-1:-1;39417:93:0;;;;;:::i;:::-;;:::i;28377:185::-;;;;;;;;;;-1:-1:-1;28377:185:0;;;;;:::i;:::-;;:::i;39204:108::-;;;;;;;;;;-1:-1:-1;39204:108:0;;;;;:::i;:::-;;:::i;25468:222::-;;;;;;;;;;-1:-1:-1;25468:222:0;;;;;:::i;:::-;;:::i;38208:41::-;;;;;;;;;;;;38247:2;38208:41;;25199:207;;;;;;;;;;-1:-1:-1;25199:207:0;;;;;:::i;:::-;;:::i;5324:103::-;;;;;;;;;;;;;:::i;38350:21::-;;;;;;;;;;-1:-1:-1;38350:21:0;;;;-1:-1:-1;;;;;38350:21:0;;;38256:43;;;;;;;;;;;;38288:11;38256:43;;4676:87;;;;;;;;;;-1:-1:-1;4749:6:0;;-1:-1:-1;;;;;4749:6:0;4676:87;;25926:104;;;;;;;;;;;;;:::i;39714:507::-;;;;;;:::i;:::-;;:::i;27513:155::-;;;;;;;;;;-1:-1:-1;27513:155:0;;;;;:::i;:::-;;:::i;38316:27::-;;;;;;;;;;-1:-1:-1;38316:27:0;;;;-1:-1:-1;;;;;38316:27:0;;;39518:81;;;;;;;;;;-1:-1:-1;39518:81:0;;;;;:::i;:::-;;:::i;28633:323::-;;;;;;;;;;-1:-1:-1;28633:323:0;;;;;:::i;:::-;;:::i;26101:281::-;;;;;;;;;;-1:-1:-1;26101:281:0;;;;;:::i;:::-;;:::i;40340:523::-;;;;;;;;;;-1:-1:-1;40340:523:0;;;;;:::i;:::-;;:::i;38384:27::-;;;;;;;;;;;;;:::i;39320:89::-;;;;;;;;;;-1:-1:-1;39320:89:0;;;;;:::i;:::-;;:::i;27739:164::-;;;;;;;;;;-1:-1:-1;27739:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27860:25:0;;;27836:4;27860:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27739:164;5582:201;;;;;;;;;;-1:-1:-1;5582:201:0;;;;;:::i;:::-;;:::i;39607:99::-;;;;;;;;;;-1:-1:-1;39607:99:0;;;;;:::i;:::-;;:::i;40229:103::-;;;;;;;;;;;;;:::i;24830:305::-;24932:4;-1:-1:-1;;;;;;24969:40:0;;-1:-1:-1;;;24969:40:0;;:105;;-1:-1:-1;;;;;;;25026:48:0;;-1:-1:-1;;;25026:48:0;24969:105;:158;;;-1:-1:-1;;;;;;;;;;17663:40:0;;;25091:36;24949:178;24830:305;-1:-1:-1;;24830:305:0:o;25757:100::-;25811:13;25844:5;25837:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25757:100;:::o;27270:171::-;27346:7;27366:23;27381:7;27366:14;:23::i;:::-;-1:-1:-1;27409:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27409:24:0;;27270:171::o;26787:417::-;26868:13;26884:23;26899:7;26884:14;:23::i;:::-;26868:39;;26932:5;-1:-1:-1;;;;;26926:11:0;:2;-1:-1:-1;;;;;26926:11:0;;;26918:57;;;;-1:-1:-1;;;26918:57:0;;6237:2:1;26918:57:0;;;6219:21:1;6276:2;6256:18;;;6249:30;6315:34;6295:18;;;6288:62;-1:-1:-1;;;6366:18:1;;;6359:31;6407:19;;26918:57:0;;;;;;;;;3301:10;-1:-1:-1;;;;;27010:21:0;;;;:62;;-1:-1:-1;27035:37:0;27052:5;3301:10;27739:164;:::i;27035:37::-;26988:174;;;;-1:-1:-1;;;26988:174:0;;6639:2:1;26988:174:0;;;6621:21:1;6678:2;6658:18;;;6651:30;6717:34;6697:18;;;6690:62;6788:32;6768:18;;;6761:60;6838:19;;26988:174:0;6437:426:1;26988:174:0;27175:21;27184:2;27188:7;27175:8;:21::i;:::-;26857:347;26787:417;;:::o;27970:336::-;28165:41;3301:10;28198:7;28165:18;:41::i;:::-;28157:100;;;;-1:-1:-1;;;28157:100:0;;;;;;;:::i;:::-;28270:28;28280:4;28286:2;28290:7;28270:9;:28::i;40871:291::-;4562:13;:11;:13::i;:::-;40945:21:::1;40927:15;40992:12;41002:2;40945:21:::0;40992:12:::1;:::i;:::-;40977:27:::0;-1:-1:-1;41023:18:0::1;41044:14;40977:27:::0;41044:7;:14:::1;:::i;:::-;41079:12;::::0;41071:36:::1;::::0;41023:35;;-1:-1:-1;;;;;;41079:12:0::1;::::0;41071:36;::::1;;;::::0;41102:4;;41079:12:::1;41071:36:::0;41079:12;41071:36;41102:4;41079:12;41071:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;41126:6:0::1;::::0;41118:36:::1;::::0;-1:-1:-1;;;;;41126:6:0;;::::1;::::0;41118:36;::::1;;;::::0;41143:10;;41126:6:::1;41118:36:::0;41126:6;41118:36;41143:10;41126:6;41118:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40908:254;;;40871:291::o:0;39417:93::-;4562:13;:11;:13::i;:::-;39483:12:::1;:19:::0;;-1:-1:-1;;;;;;39483:19:0::1;-1:-1:-1::0;;;;;39483:19:0;;;::::1;::::0;;;::::1;::::0;;39417:93::o;28377:185::-;28515:39;28532:4;28538:2;28542:7;28515:39;;;;;;;;;;;;:16;:39::i;39204:108::-;4562:13;:11;:13::i;:::-;39277:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;39204:108:::0;:::o;25468:222::-;25540:7;25576:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25576:16:0;25611:19;25603:56;;;;-1:-1:-1;;;25603:56:0;;8004:2:1;25603:56:0;;;7986:21:1;8043:2;8023:18;;;8016:30;-1:-1:-1;;;8062:18:1;;;8055:54;8126:18;;25603:56:0;7802:348:1;25199:207:0;25271:7;-1:-1:-1;;;;;25299:19:0;;25291:73;;;;-1:-1:-1;;;25291:73:0;;8357:2:1;25291:73:0;;;8339:21:1;8396:2;8376:18;;;8369:30;8435:34;8415:18;;;8408:62;-1:-1:-1;;;8486:18:1;;;8479:39;8535:19;;25291:73:0;8155:405:1;25291:73:0;-1:-1:-1;;;;;;25382:16:0;;;;;:9;:16;;;;;;;25199:207::o;5324:103::-;4562:13;:11;:13::i;:::-;5389:30:::1;5416:1;5389:18;:30::i;:::-;5324:103::o:0;25926:104::-;25982:13;26015:7;26008:14;;;;;:::i;39714:507::-;39788:7;;;;39787:8;39778:34;;;;-1:-1:-1;;;39778:34:0;;8767:2:1;39778:34:0;;;8749:21:1;8806:2;8786:18;;;8779:30;-1:-1:-1;;;8825:18:1;;;8818:41;8876:18;;39778:34:0;8565:335:1;39778:34:0;39841:2;39832:6;:11;39823:64;;;;-1:-1:-1;;;39823:64:0;;9107:2:1;39823:64:0;;;9089:21:1;9146:2;9126:18;;;9119:30;9185:34;9165:18;;;9158:62;-1:-1:-1;;;9236:18:1;;;9229:36;9282:19;;39823:64:0;8905:402:1;39823:64:0;39932:10;;39916:12;;39907:21;;:6;:21;:::i;:::-;:35;;39898:68;;;;-1:-1:-1;;;39898:68:0;;9647:2:1;39898:68:0;;;9629:21:1;9686:2;9666:18;;;9659:30;-1:-1:-1;;;9705:18:1;;;9698:48;9763:18;;39898:68:0;9445:342:1;39898:68:0;40012:6;39999:10;;:19;;;;:::i;:::-;39986:9;:32;;39977:78;;;;-1:-1:-1;;;39977:78:0;;10167:2:1;39977:78:0;;;10149:21:1;10206:2;10186:18;;;10179:30;10245:33;10225:18;;;10218:61;10296:18;;39977:78:0;9965:355:1;39977:78:0;40080:9;40076:97;40095:6;40091:1;:10;40076:97;;;40122:39;40132:10;40159:1;40144:12;;:16;;;;:::i;:::-;40122:9;:39::i;:::-;40103:3;;;;:::i;:::-;;;;40076:97;;;;40207:6;40191:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;39714:507:0:o;27513:155::-;27608:52;3301:10;27641:8;27651;27608:18;:52::i;39518:81::-;4562:13;:11;:13::i;:::-;39578:6:::1;:13:::0;;-1:-1:-1;;;;;;39578:13:0::1;-1:-1:-1::0;;;;;39578:13:0;;;::::1;::::0;;;::::1;::::0;;39518:81::o;28633:323::-;28807:41;3301:10;28840:7;28807:18;:41::i;:::-;28799:100;;;;-1:-1:-1;;;28799:100:0;;;;;;;:::i;:::-;28910:38;28924:4;28930:2;28934:7;28943:4;28910:13;:38::i;26101:281::-;26174:13;26200:23;26215:7;26200:14;:23::i;:::-;26236:21;26260:10;:8;:10::i;:::-;26236:34;;26312:1;26294:7;26288:21;:25;:86;;;;;;;;;;;;;;;;;26340:7;26349:18;:7;:16;:18::i;:::-;26323:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26288:86;26281:93;26101:281;-1:-1:-1;;;26101:281:0:o;40340:523::-;4562:13;:11;:13::i;:::-;40457:12:::1;::::0;40444:9:::1;::::0;40435:18:::1;::::0;:6;:18:::1;:::i;:::-;:34;;40426:81;;;::::0;-1:-1:-1;;;40426:81:0;;11142:2:1;40426:81:0::1;::::0;::::1;11124:21:1::0;;;11161:18;;;11154:30;11220:34;11200:18;;;11193:62;11272:18;;40426:81:0::1;10940:356:1::0;40426:81:0::1;40552:10;::::0;40536:12:::1;::::0;40527:21:::1;::::0;:6;:21:::1;:::i;:::-;:35;;40518:68;;;::::0;-1:-1:-1;;;40518:68:0;;9647:2:1;40518:68:0::1;::::0;::::1;9629:21:1::0;9686:2;9666:18;;;9659:30;-1:-1:-1;;;9705:18:1;;;9698:48;9763:18;;40518:68:0::1;9445:342:1::0;40518:68:0::1;-1:-1:-1::0;;;;;40605:16:0;::::1;40597:52;;;::::0;-1:-1:-1;;;40597:52:0;;11503:2:1;40597:52:0::1;::::0;::::1;11485:21:1::0;11542:2;11522:18;;;11515:30;11581:25;11561:18;;;11554:53;11624:18;;40597:52:0::1;11301:347:1::0;40597:52:0::1;40700:9;40696:89;40715:6;40711:1;:10;40696:89;;;40742:31;40752:2;40771:1;40756:12;;:16;;;;:::i;40742:31::-;40723:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40696:89;;;;40816:6;40803:9;;:19;;;;;;;:::i;:::-;;;;;;;;40849:6;40833:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;40340:523:0:o;38384:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39320:89::-;4562:13;:11;:13::i;:::-;39385:7:::1;:16:::0;;-1:-1:-1;;39385:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39320:89::o;5582:201::-;4562:13;:11;:13::i;:::-;-1:-1:-1;;;;;5671:22:0;::::1;5663:73;;;::::0;-1:-1:-1;;;5663:73:0;;11855:2:1;5663:73:0::1;::::0;::::1;11837:21:1::0;11894:2;11874:18;;;11867:30;11933:34;11913:18;;;11906:62;-1:-1:-1;;;11984:18:1;;;11977:36;12030:19;;5663:73:0::1;11653:402:1::0;5663:73:0::1;5747:28;5766:8;5747:18;:28::i;:::-;5582:201:::0;:::o;39607:99::-;4562:13;:11;:13::i;:::-;39676:10:::1;:22:::0;39607:99::o;40229:103::-;40288:7;4562:13;:11;:13::i;:::-;-1:-1:-1;40315:9:0::1;::::0;40229:103;:::o;35245:135::-;30528:4;30552:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30552:16:0;35319:53;;;;-1:-1:-1;;;35319:53:0;;8004:2:1;35319:53:0;;;7986:21:1;8043:2;8023:18;;;8016:30;-1:-1:-1;;;8062:18:1;;;8055:54;8126:18;;35319:53:0;7802:348:1;34524:174:0;34599:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34599:29:0;-1:-1:-1;;;;;34599:29:0;;;;;;;;:24;;34653:23;34599:24;34653:14;:23::i;:::-;-1:-1:-1;;;;;34644:46:0;;;;;;;;;;;34524:174;;:::o;30757:264::-;30850:4;30867:13;30883:23;30898:7;30883:14;:23::i;:::-;30867:39;;30936:5;-1:-1:-1;;;;;30925:16:0;:7;-1:-1:-1;;;;;30925:16:0;;:52;;;-1:-1:-1;;;;;;27860:25:0;;;27836:4;27860:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30945:32;30925:87;;;;31005:7;-1:-1:-1;;;;;30981:31:0;:20;30993:7;30981:11;:20::i;:::-;-1:-1:-1;;;;;30981:31:0;;30925:87;30917:96;30757:264;-1:-1:-1;;;;30757:264:0:o;33780:625::-;33939:4;-1:-1:-1;;;;;33912:31:0;:23;33927:7;33912:14;:23::i;:::-;-1:-1:-1;;;;;33912:31:0;;33904:81;;;;-1:-1:-1;;;33904:81:0;;12262:2:1;33904:81:0;;;12244:21:1;12301:2;12281:18;;;12274:30;12340:34;12320:18;;;12313:62;-1:-1:-1;;;12391:18:1;;;12384:35;12436:19;;33904:81:0;12060:401:1;33904:81:0;-1:-1:-1;;;;;34004:16:0;;33996:65;;;;-1:-1:-1;;;33996:65:0;;12668:2:1;33996:65:0;;;12650:21:1;12707:2;12687:18;;;12680:30;12746:34;12726:18;;;12719:62;-1:-1:-1;;;12797:18:1;;;12790:34;12841:19;;33996:65:0;12466:400:1;33996:65:0;34178:29;34195:1;34199:7;34178:8;:29::i;:::-;-1:-1:-1;;;;;34220:15:0;;;;;;:9;:15;;;;;:20;;34239:1;;34220:15;:20;;34239:1;;34220:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34251:13:0;;;;;;:9;:13;;;;;:18;;34268:1;;34251:13;:18;;34268:1;;34251:18;:::i;:::-;;;;-1:-1:-1;;34280:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34280:21:0;-1:-1:-1;;;;;34280:21:0;;;;;;;;;34319:27;;34280:16;;34319:27;;;;;;;26857:347;26787:417;;:::o;4841:132::-;4749:6;;-1:-1:-1;;;;;4749:6:0;3301:10;4905:23;4897:68;;;;-1:-1:-1;;;4897:68:0;;13073:2:1;4897:68:0;;;13055:21:1;;;13092:18;;;13085:30;13151:34;13131:18;;;13124:62;13203:18;;4897:68:0;12871:356:1;5943:191:0;6036:6;;;-1:-1:-1;;;;;6053:17:0;;;-1:-1:-1;;;;;;6053:17:0;;;;;;;6086:40;;6036:6;;;6053:17;6036:6;;6086:40;;6017:16;;6086:40;6006:128;5943:191;:::o;31363:110::-;31439:26;31449:2;31453:7;31439:26;;;;;;;;;;;;:9;:26::i;34841:315::-;34996:8;-1:-1:-1;;;;;34987:17:0;:5;-1:-1:-1;;;;;34987:17:0;;;34979:55;;;;-1:-1:-1;;;34979:55:0;;13434:2:1;34979:55:0;;;13416:21:1;13473:2;13453:18;;;13446:30;13512:27;13492:18;;;13485:55;13557:18;;34979:55:0;13232:349:1;34979:55:0;-1:-1:-1;;;;;35045:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35045:46:0;;;;;;;;;;35107:41;;540::1;;;35107::0;;513:18:1;35107:41:0;;;;;;;34841:315;;;:::o;29837:313::-;29993:28;30003:4;30009:2;30013:7;29993:9;:28::i;:::-;30040:47;30063:4;30069:2;30073:7;30082:4;30040:22;:47::i;:::-;30032:110;;;;-1:-1:-1;;;30032:110:0;;;;;;;:::i;39082:114::-;39142:13;39175;39168:20;;;;;:::i;469:723::-;525:13;746:10;742:53;;-1:-1:-1;;773:10:0;;;;;;;;;;;;-1:-1:-1;;;773:10:0;;;;;469:723::o;742:53::-;820:5;805:12;861:78;868:9;;861:78;;894:8;;;;:::i;:::-;;-1:-1:-1;917:10:0;;-1:-1:-1;925:2:0;917:10;;:::i;:::-;;;861:78;;;949:19;981:6;971:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;971:17:0;;949:39;;999:154;1006:10;;999:154;;1033:11;1043:1;1033:11;;:::i;:::-;;-1:-1:-1;1102:10:0;1110:2;1102:5;:10;:::i;:::-;1089:24;;:2;:24;:::i;:::-;1076:39;;1059:6;1066;1059:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1059:56:0;;;;;;;;-1:-1:-1;1130:11:0;1139:2;1130:11;;:::i;:::-;;;999:154;;31700:319;31829:18;31835:2;31839:7;31829:5;:18::i;:::-;31880:53;31911:1;31915:2;31919:7;31928:4;31880:22;:53::i;:::-;31858:153;;;;-1:-1:-1;;;31858:153:0;;;;;;;:::i;35944:853::-;36098:4;-1:-1:-1;;;;;36119:13:0;;7675:19;:23;36115:675;;36155:71;;-1:-1:-1;;;36155:71:0;;-1:-1:-1;;;;;36155:36:0;;;;;:71;;3301:10;;36206:4;;36212:7;;36221:4;;36155:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36155:71:0;;;;;;;;-1:-1:-1;;36155:71:0;;;;;;;;;;;;:::i;:::-;;;36151:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36396:13:0;;36392:328;;36439:60;;-1:-1:-1;;;36439:60:0;;;;;;;:::i;36392:328::-;36670:6;36664:13;36655:6;36651:2;36647:15;36640:38;36151:584;-1:-1:-1;;;;;;36277:51:0;-1:-1:-1;;;36277:51:0;;-1:-1:-1;36270:58:0;;36115:675;-1:-1:-1;36774:4:0;35944:853;;;;;;:::o;32355:439::-;-1:-1:-1;;;;;32435:16:0;;32427:61;;;;-1:-1:-1;;;32427:61:0;;15204:2:1;32427:61:0;;;15186:21:1;;;15223:18;;;15216:30;15282:34;15262:18;;;15255:62;15334:18;;32427:61:0;15002:356:1;32427:61:0;30528:4;30552:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30552:16:0;:30;32499:58;;;;-1:-1:-1;;;32499:58:0;;15565:2:1;32499:58:0;;;15547:21:1;15604:2;15584:18;;;15577:30;15643;15623:18;;;15616:58;15691:18;;32499:58:0;15363:352:1;32499:58:0;-1:-1:-1;;;;;32628:13:0;;;;;;:9;:13;;;;;:18;;32645:1;;32628:13;:18;;32645:1;;32628:18;:::i;:::-;;;;-1:-1:-1;;32657:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32657:21:0;-1:-1:-1;;;;;32657:21:0;;;;;;;;32696:33;;32657:16;;;32696:33;;32657:16;;32696:33;39277:23:::1;39204:108:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;774:258::-;846:1;856:113;870:6;867:1;864:13;856:113;;;946:11;;;940:18;927:11;;;920:39;892:2;885:10;856:113;;;987:6;984:1;981:13;978:48;;;-1:-1:-1;;1022:1:1;1004:16;;997:27;774:258::o;1037:::-;1079:3;1117:5;1111:12;1144:6;1139:3;1132:19;1160:63;1216:6;1209:4;1204:3;1200:14;1193:4;1186:5;1182:16;1160:63;:::i;:::-;1277:2;1256:15;-1:-1:-1;;1252:29:1;1243:39;;;;1284:4;1239:50;;1037:258;-1:-1:-1;;1037:258:1:o;1300:220::-;1449:2;1438:9;1431:21;1412:4;1469:45;1510:2;1499:9;1495:18;1487:6;1469:45;:::i;1525:180::-;1584:6;1637:2;1625:9;1616:7;1612:23;1608:32;1605:52;;;1653:1;1650;1643:12;1605:52;-1:-1:-1;1676:23:1;;1525:180;-1:-1:-1;1525:180:1:o;1918:173::-;1986:20;;-1:-1:-1;;;;;2035:31:1;;2025:42;;2015:70;;2081:1;2078;2071:12;2015:70;1918:173;;;:::o;2096:254::-;2164:6;2172;2225:2;2213:9;2204:7;2200:23;2196:32;2193:52;;;2241:1;2238;2231:12;2193:52;2264:29;2283:9;2264:29;:::i;:::-;2254:39;2340:2;2325:18;;;;2312:32;;-1:-1:-1;;;2096:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:186::-;2747:6;2800:2;2788:9;2779:7;2775:23;2771:32;2768:52;;;2816:1;2813;2806:12;2768:52;2839:29;2858:9;2839:29;:::i;2879:127::-;2940:10;2935:3;2931:20;2928:1;2921:31;2971:4;2968:1;2961:15;2995:4;2992:1;2985:15;3011:632;3076:5;3106:18;3147:2;3139:6;3136:14;3133:40;;;3153:18;;:::i;:::-;3228:2;3222:9;3196:2;3282:15;;-1:-1:-1;;3278:24:1;;;3304:2;3274:33;3270:42;3258:55;;;3328:18;;;3348:22;;;3325:46;3322:72;;;3374:18;;:::i;:::-;3414:10;3410:2;3403:22;3443:6;3434:15;;3473:6;3465;3458:22;3513:3;3504:6;3499:3;3495:16;3492:25;3489:45;;;3530:1;3527;3520:12;3489:45;3580:6;3575:3;3568:4;3560:6;3556:17;3543:44;3635:1;3628:4;3619:6;3611;3607:19;3603:30;3596:41;;;;3011:632;;;;;:::o;3648:451::-;3717:6;3770:2;3758:9;3749:7;3745:23;3741:32;3738:52;;;3786:1;3783;3776:12;3738:52;3826:9;3813:23;3859:18;3851:6;3848:30;3845:50;;;3891:1;3888;3881:12;3845:50;3914:22;;3967:4;3959:13;;3955:27;-1:-1:-1;3945:55:1;;3996:1;3993;3986:12;3945:55;4019:74;4085:7;4080:2;4067:16;4062:2;4058;4054:11;4019:74;:::i;4104:160::-;4169:20;;4225:13;;4218:21;4208:32;;4198:60;;4254:1;4251;4244:12;4269:254;4334:6;4342;4395:2;4383:9;4374:7;4370:23;4366:32;4363:52;;;4411:1;4408;4401:12;4363:52;4434:29;4453:9;4434:29;:::i;:::-;4424:39;;4482:35;4513:2;4502:9;4498:18;4482:35;:::i;:::-;4472:45;;4269:254;;;;;:::o;4528:667::-;4623:6;4631;4639;4647;4700:3;4688:9;4679:7;4675:23;4671:33;4668:53;;;4717:1;4714;4707:12;4668:53;4740:29;4759:9;4740:29;:::i;:::-;4730:39;;4788:38;4822:2;4811:9;4807:18;4788:38;:::i;:::-;4778:48;;4873:2;4862:9;4858:18;4845:32;4835:42;;4928:2;4917:9;4913:18;4900:32;4955:18;4947:6;4944:30;4941:50;;;4987:1;4984;4977:12;4941:50;5010:22;;5063:4;5055:13;;5051:27;-1:-1:-1;5041:55:1;;5092:1;5089;5082:12;5041:55;5115:74;5181:7;5176:2;5163:16;5158:2;5154;5150:11;5115:74;:::i;:::-;5105:84;;;4528:667;;;;;;;:::o;5200:180::-;5256:6;5309:2;5297:9;5288:7;5284:23;5280:32;5277:52;;;5325:1;5322;5315:12;5277:52;5348:26;5364:9;5348:26;:::i;5385:260::-;5453:6;5461;5514:2;5502:9;5493:7;5489:23;5485:32;5482:52;;;5530:1;5527;5520:12;5482:52;5553:29;5572:9;5553:29;:::i;:::-;5543:39;;5601:38;5635:2;5624:9;5620:18;5601:38;:::i;5650:380::-;5729:1;5725:12;;;;5772;;;5793:61;;5847:4;5839:6;5835:17;5825:27;;5793:61;5900:2;5892:6;5889:14;5869:18;5866:38;5863:161;;;5946:10;5941:3;5937:20;5934:1;5927:31;5981:4;5978:1;5971:15;6009:4;6006:1;5999:15;5863:161;;5650:380;;;:::o;6868:410::-;7070:2;7052:21;;;7109:2;7089:18;;;7082:30;7148:34;7143:2;7128:18;;7121:62;-1:-1:-1;;;7214:2:1;7199:18;;7192:44;7268:3;7253:19;;6868:410::o;7283:127::-;7344:10;7339:3;7335:20;7332:1;7325:31;7375:4;7372:1;7365:15;7399:4;7396:1;7389:15;7415:127;7476:10;7471:3;7467:20;7464:1;7457:31;7507:4;7504:1;7497:15;7531:4;7528:1;7521:15;7547:120;7587:1;7613;7603:35;;7618:18;;:::i;:::-;-1:-1:-1;7652:9:1;;7547:120::o;7672:125::-;7712:4;7740:1;7737;7734:8;7731:34;;;7745:18;;:::i;:::-;-1:-1:-1;7782:9:1;;7672:125::o;9312:128::-;9352:3;9383:1;9379:6;9376:1;9373:13;9370:39;;;9389:18;;:::i;:::-;-1:-1:-1;9425:9:1;;9312:128::o;9792:168::-;9832:7;9898:1;9894;9890:6;9886:14;9883:1;9880:21;9875:1;9868:9;9861:17;9857:45;9854:71;;;9905:18;;:::i;:::-;-1:-1:-1;9945:9:1;;9792:168::o;10325:135::-;10364:3;-1:-1:-1;;10385:17:1;;10382:43;;;10405:18;;:::i;:::-;-1:-1:-1;10452:1:1;10441:13;;10325:135::o;10465:470::-;10644:3;10682:6;10676:13;10698:53;10744:6;10739:3;10732:4;10724:6;10720:17;10698:53;:::i;:::-;10814:13;;10773:16;;;;10836:57;10814:13;10773:16;10870:4;10858:17;;10836:57;:::i;:::-;10909:20;;10465:470;-1:-1:-1;;;;10465:470:1:o;13586:414::-;13788:2;13770:21;;;13827:2;13807:18;;;13800:30;13866:34;13861:2;13846:18;;13839:62;-1:-1:-1;;;13932:2:1;13917:18;;13910:48;13990:3;13975:19;;13586:414::o;14005:112::-;14037:1;14063;14053:35;;14068:18;;:::i;:::-;-1:-1:-1;14102:9:1;;14005:112::o;14122:127::-;14183:10;14178:3;14174:20;14171:1;14164:31;14214:4;14211:1;14204:15;14238:4;14235:1;14228:15;14254:489;-1:-1:-1;;;;;14523:15:1;;;14505:34;;14575:15;;14570:2;14555:18;;14548:43;14622:2;14607:18;;14600:34;;;14670:3;14665:2;14650:18;;14643:31;;;14448:4;;14691:46;;14717:19;;14709:6;14691:46;:::i;:::-;14683:54;14254:489;-1:-1:-1;;;;;;14254:489:1:o;14748:249::-;14817:6;14870:2;14858:9;14849:7;14845:23;14841:32;14838:52;;;14886:1;14883;14876:12;14838:52;14918:9;14912:16;14937:30;14961:5;14937:30;:::i
Swarm Source
ipfs://8ae727db0c044aa56f22701fac4cf32bb397817d607d34b4e7497dfa23efa89f
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.