Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BTT
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-12-31
*/
//SPDX-License-Identifier: MIT
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/token/ERC721/[email protected]
// OpenZeppelin Contracts (last updated v4.8.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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* 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/token/ERC721/[email protected]
// 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/token/ERC721/extensions/[email protected]
// 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/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.8.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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or 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 {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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/utils/[email protected]
// 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/utils/math/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator
) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1);
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator,
Rounding rounding
) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10**64) {
value /= 10**64;
result += 64;
}
if (value >= 10**32) {
value /= 10**32;
result += 32;
}
if (value >= 10**16) {
value /= 10**16;
result += 16;
}
if (value >= 10**8) {
value /= 10**8;
result += 8;
}
if (value >= 10**4) {
value /= 10**4;
result += 4;
}
if (value >= 10**2) {
value /= 10**2;
result += 2;
}
if (value >= 10**1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
}
}
}
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _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) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @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] = _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/utils/introspection/[email protected]
// 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/token/ERC721/[email protected]
// OpenZeppelin Contracts (last updated v4.8.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 = _ownerOf(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 or 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 or 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 or 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 the owner of the `tokenId`. Does NOT revert if token doesn't exist
*/
function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
return _owners[tokenId];
}
/**
* @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 _ownerOf(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, 1);
// Check that tokenId was not minted by `_beforeTokenTransfer` hook
require(!_exists(tokenId), "ERC721: token already minted");
unchecked {
// Will not overflow unless all 2**256 token ids are minted to the same owner.
// Given that tokens are minted one by one, it is impossible in practice that
// this ever happens. Might change if we allow batch minting.
// The ERC fails to describe this case.
_balances[to] += 1;
}
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId, 1);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
* This is an internal function that does not check if the sender is authorized to operate on the token.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId, 1);
// Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook
owner = ERC721.ownerOf(tokenId);
// Clear approvals
delete _tokenApprovals[tokenId];
unchecked {
// Cannot overflow, as that would require more tokens to be burned/transferred
// out than the owner initially received through minting and transferring in.
_balances[owner] -= 1;
}
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId, 1);
}
/**
* @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, 1);
// Check that tokenId was not transferred by `_beforeTokenTransfer` hook
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
// Clear approvals from the previous owner
delete _tokenApprovals[tokenId];
unchecked {
// `_balances[from]` cannot overflow for the same reason as described in `_burn`:
// `from`'s balance is the number of token held, which is at least one before the current
// transfer.
// `_balances[to]` could overflow in the conditions described in `_mint`. That would require
// all 2**256 token ids to be minted, which in practice is impossible.
_balances[from] -= 1;
_balances[to] += 1;
}
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId, 1);
}
/**
* @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. If {ERC721Consecutive} is
* used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.
* - When `from` is zero, the tokens will be minted for `to`.
* - When `to` is zero, ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
* - `batchSize` is non-zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256, /* firstTokenId */
uint256 batchSize
) internal virtual {
if (batchSize > 1) {
if (from != address(0)) {
_balances[from] -= batchSize;
}
if (to != address(0)) {
_balances[to] += batchSize;
}
}
}
/**
* @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is
* used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.
* - When `from` is zero, the tokens were minted for `to`.
* - When `to` is zero, ``from``'s tokens were burned.
* - `from` and `to` are never both zero.
* - `batchSize` is non-zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 firstTokenId,
uint256 batchSize
) internal virtual {}
}
// File @openzeppelin/contracts/access/[email protected]
// 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 contracts/BTT.sol
pragma solidity ^0.8.14;
contract BTT is
ERC721,
Ownable
{
receive() external payable {}
uint256 public constant TOKEN_ID = 1;
uint256 public releaseTimestamp;
string private _baseUri;
constructor (
string memory tokenName,
string memory tokenSymbol,
string memory baseUri,
uint256 timeToReleaseSeconds,
address recipient
)
ERC721(
tokenName,
tokenSymbol
) {
_baseUri = baseUri;
releaseTimestamp = block.timestamp + timeToReleaseSeconds;
_mint(recipient, TOKEN_ID);
}
function tokenURI(
uint256 /*tokenId*/
)
public
view
override
returns (
string memory
)
{
return _baseUri;
}
function setBaseUri(
string memory baseUri
)
public
onlyOwner
{
_baseUri = baseUri;
}
function getTimeUntilRelease()
public
view
returns (
bool _isReleased,
uint32 _years,
uint32 _days,
uint32 _hours,
uint32 _minutes,
uint32 _seconds
)
{
if(releaseTimestamp <= block.timestamp)
return (true, 0, 0, 0, 0, 0);
uint32 differenceSeconds = (uint32)(releaseTimestamp - block.timestamp);
_isReleased = false;
_seconds = differenceSeconds % 60;
_minutes = differenceSeconds / 1 minutes % 60;
_hours = differenceSeconds / 1 hours % 60;
_days = differenceSeconds / 1 days % 365;
_years = differenceSeconds / 365 days;
}
function claim()
public
{
require(
ownerOf(TOKEN_ID) == msg.sender,
"Not the token owner"
);
require(
releaseTimestamp <= block.timestamp,
"Not released yet"
);
(bool transferSuccess, ) = payable(msg.sender).call{value: address(this).balance}("");
require(transferSuccess, "Failed to transfer funds");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"timeToReleaseSeconds","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"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":"TOKEN_ID","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":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilRelease","outputs":[{"internalType":"bool","name":"_isReleased","type":"bool"},{"internalType":"uint32","name":"_years","type":"uint32"},{"internalType":"uint32","name":"_days","type":"uint32"},{"internalType":"uint32","name":"_hours","type":"uint32"},{"internalType":"uint32","name":"_minutes","type":"uint32"},{"internalType":"uint32","name":"_seconds","type":"uint32"}],"stateMutability":"view","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":[],"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":"releaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"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":"","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620037d3380380620037d3833981810160405281019062000037919062000892565b8484816000908051906020019062000051929190620005a5565b5080600190805190602001906200006a929190620005a5565b5050506200008d62000081620000d860201b60201c565b620000e060201b60201c565b8260089080519060200190620000a5929190620005a5565b508142620000b49190620009a6565b600781905550620000cd816001620001a660201b60201c565b505050505062000b97565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200020f9062000a64565b60405180910390fd5b6200022981620003ec60201b60201c565b156200026c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002639062000ad6565b60405180910390fd5b620002826000838360016200043560201b60201c565b6200029381620003ec60201b60201c565b15620002d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002cd9062000ad6565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620003e86000838360016200056260201b60201c565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff1662000416836200056860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60018111156200055c57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614620004cd5780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004c5919062000af8565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200055b5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005539190620009a6565b925050819055505b5b50505050565b50505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b828054620005b39062000b62565b90600052602060002090601f016020900481019282620005d7576000855562000623565b82601f10620005f257805160ff191683800117855562000623565b8280016001018555821562000623579182015b828111156200062257825182559160200191906001019062000605565b5b50905062000632919062000636565b5090565b5b808211156200065157600081600090555060010162000637565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006be8262000673565b810181811067ffffffffffffffff82111715620006e057620006df62000684565b5b80604052505050565b6000620006f562000655565b9050620007038282620006b3565b919050565b600067ffffffffffffffff82111562000726576200072562000684565b5b620007318262000673565b9050602081019050919050565b60005b838110156200075e57808201518184015260208101905062000741565b838111156200076e576000848401525b50505050565b60006200078b620007858462000708565b620006e9565b905082815260208101848484011115620007aa57620007a96200066e565b5b620007b78482856200073e565b509392505050565b600082601f830112620007d757620007d662000669565b5b8151620007e984826020860162000774565b91505092915050565b6000819050919050565b6200080781620007f2565b81146200081357600080fd5b50565b6000815190506200082781620007fc565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200085a826200082d565b9050919050565b6200086c816200084d565b81146200087857600080fd5b50565b6000815190506200088c8162000861565b92915050565b600080600080600060a08688031215620008b157620008b06200065f565b5b600086015167ffffffffffffffff811115620008d257620008d162000664565b5b620008e088828901620007bf565b955050602086015167ffffffffffffffff81111562000904576200090362000664565b5b6200091288828901620007bf565b945050604086015167ffffffffffffffff81111562000936576200093562000664565b5b6200094488828901620007bf565b9350506060620009578882890162000816565b92505060806200096a888289016200087b565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009b382620007f2565b9150620009c083620007f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620009f857620009f762000977565b5b828201905092915050565b600082825260208201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062000a4c60208362000a03565b915062000a598262000a14565b602082019050919050565b6000602082019050818103600083015262000a7f8162000a3d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062000abe601c8362000a03565b915062000acb8262000a86565b602082019050919050565b6000602082019050818103600083015262000af18162000aaf565b9050919050565b600062000b0582620007f2565b915062000b1283620007f2565b92508282101562000b285762000b2762000977565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7b57607f821691505b60208210810362000b915762000b9062000b33565b5b50919050565b612c2c8062000ba76000396000f3fe60806040526004361061012e5760003560e01c8063715018a6116100ab578063a0bcfc7f1161006f578063a0bcfc7f146103de578063a22cb46514610407578063b88d4fde14610430578063c87b56dd14610459578063e985e9c514610496578063f2fde38b146104d357610135565b8063715018a61461031657806389a890021461032d5780638da5cb5b1461035857806395d89b41146103835780639b5ac93a146103ae57610135565b806323b872dd116100f257806323b872dd1461023357806342842e0e1461025c5780634e71d92d146102855780636352211e1461029c57806370a08231146102d957610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df5780630a3f013f1461020857610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190611b4a565b6104fc565b60405161016e9190611b92565b60405180910390f35b34801561018357600080fd5b5061018c6105de565b6040516101999190611c46565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190611c9e565b610670565b6040516101d69190611d0c565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190611d53565b6106b6565b005b34801561021457600080fd5b5061021d6107cd565b60405161022a9190611da2565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190611dbd565b6107d3565b005b34801561026857600080fd5b50610283600480360381019061027e9190611dbd565b610833565b005b34801561029157600080fd5b5061029a610853565b005b3480156102a857600080fd5b506102c360048036038101906102be9190611c9e565b6109be565b6040516102d09190611d0c565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190611e10565b610a44565b60405161030d9190611da2565b60405180910390f35b34801561032257600080fd5b5061032b610afb565b005b34801561033957600080fd5b50610342610b0f565b60405161034f9190611da2565b60405180910390f35b34801561036457600080fd5b5061036d610b14565b60405161037a9190611d0c565b60405180910390f35b34801561038f57600080fd5b50610398610b3e565b6040516103a59190611c46565b60405180910390f35b3480156103ba57600080fd5b506103c3610bd0565b6040516103d596959493929190611e5c565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190611ff2565b610c92565b005b34801561041357600080fd5b5061042e60048036038101906104299190612067565b610cb4565b005b34801561043c57600080fd5b5061045760048036038101906104529190612148565b610cca565b005b34801561046557600080fd5b50610480600480360381019061047b9190611c9e565b610d2c565b60405161048d9190611c46565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906121cb565b610dc0565b6040516104ca9190611b92565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190611e10565b610e54565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d757506105d682610ed7565b5b9050919050565b6060600080546105ed9061223a565b80601f01602080910402602001604051908101604052809291908181526020018280546106199061223a565b80156106665780601f1061063b57610100808354040283529160200191610666565b820191906000526020600020905b81548152906001019060200180831161064957829003601f168201915b5050505050905090565b600061067b82610f41565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106c1826109be565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610728906122dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610750610f8c565b73ffffffffffffffffffffffffffffffffffffffff16148061077f575061077e81610779610f8c565b610dc0565b5b6107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b59061236f565b60405180910390fd5b6107c88383610f94565b505050565b60075481565b6107e46107de610f8c565b8261104d565b610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90612401565b60405180910390fd5b61082e8383836110e2565b505050565b61084e83838360405180602001604052806000815250610cca565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1661087460016109be565b73ffffffffffffffffffffffffffffffffffffffff16146108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19061246d565b60405180910390fd5b42600754111561090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906124d9565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516109359061252a565b60006040518083038185875af1925050503d8060008114610972576040519150601f19603f3d011682016040523d82523d6000602084013e610977565b606091505b50509050806109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b29061258b565b60405180910390fd5b50565b6000806109ca836113db565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a32906125f7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab90612689565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b03611418565b610b0d6000611496565b565b600181565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b4d9061223a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b799061223a565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b5050505050905090565b6000806000806000804260075411610bfd5760016000806000806000955095509550955095509550610c8a565b600042600754610c0d91906126d8565b905060009650603c81610c20919061273b565b9150603c8082610c30919061276c565b610c3a919061273b565b9250603c610e1082610c4c919061276c565b610c56919061273b565b935061016d6201518082610c6a919061276c565b610c74919061273b565b94506301e1338081610c86919061276c565b9550505b909192939495565b610c9a611418565b8060089080519060200190610cb0929190611a3b565b5050565b610cc6610cbf610f8c565b838361155c565b5050565b610cdb610cd5610f8c565b8361104d565b610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190612401565b60405180910390fd5b610d26848484846116c8565b50505050565b606060088054610d3b9061223a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061223a565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e5c611418565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec29061280f565b60405180910390fd5b610ed481611496565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f4a81611724565b610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906125f7565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611007836109be565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611059836109be565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061109b575061109a8185610dc0565b5b806110d957508373ffffffffffffffffffffffffffffffffffffffff166110c184610670565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611102826109be565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906128a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90612933565b60405180910390fd5b6111d48383836001611765565b8273ffffffffffffffffffffffffffffffffffffffff166111f4826109be565b73ffffffffffffffffffffffffffffffffffffffff161461124a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611241906128a1565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113d6838383600161188b565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611420610f8c565b73ffffffffffffffffffffffffffffffffffffffff1661143e610b14565b73ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9061299f565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190612a0b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116bb9190611b92565b60405180910390a3505050565b6116d38484846110e2565b6116df84848484611891565b61171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590612a9d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611746836113db565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561188557600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146117f95780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f191906126d8565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118845780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187c9190612abd565b925050819055505b5b50505050565b50505050565b60006118b28473ffffffffffffffffffffffffffffffffffffffff16611a18565b15611a0b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026118db610f8c565b8786866040518563ffffffff1660e01b81526004016118fd9493929190612b68565b6020604051808303816000875af192505050801561193957506040513d601f19601f820116820180604052508101906119369190612bc9565b60015b6119bb573d8060008114611969576040519150601f19603f3d011682016040523d82523d6000602084013e61196e565b606091505b5060008151036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90612a9d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a10565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611a479061223a565b90600052602060002090601f016020900481019282611a695760008555611ab0565b82601f10611a8257805160ff1916838001178555611ab0565b82800160010185558215611ab0579182015b82811115611aaf578251825591602001919060010190611a94565b5b509050611abd9190611ac1565b5090565b5b80821115611ada576000816000905550600101611ac2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611b2781611af2565b8114611b3257600080fd5b50565b600081359050611b4481611b1e565b92915050565b600060208284031215611b6057611b5f611ae8565b5b6000611b6e84828501611b35565b91505092915050565b60008115159050919050565b611b8c81611b77565b82525050565b6000602082019050611ba76000830184611b83565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611be7578082015181840152602081019050611bcc565b83811115611bf6576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c1882611bad565b611c228185611bb8565b9350611c32818560208601611bc9565b611c3b81611bfc565b840191505092915050565b60006020820190508181036000830152611c608184611c0d565b905092915050565b6000819050919050565b611c7b81611c68565b8114611c8657600080fd5b50565b600081359050611c9881611c72565b92915050565b600060208284031215611cb457611cb3611ae8565b5b6000611cc284828501611c89565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cf682611ccb565b9050919050565b611d0681611ceb565b82525050565b6000602082019050611d216000830184611cfd565b92915050565b611d3081611ceb565b8114611d3b57600080fd5b50565b600081359050611d4d81611d27565b92915050565b60008060408385031215611d6a57611d69611ae8565b5b6000611d7885828601611d3e565b9250506020611d8985828601611c89565b9150509250929050565b611d9c81611c68565b82525050565b6000602082019050611db76000830184611d93565b92915050565b600080600060608486031215611dd657611dd5611ae8565b5b6000611de486828701611d3e565b9350506020611df586828701611d3e565b9250506040611e0686828701611c89565b9150509250925092565b600060208284031215611e2657611e25611ae8565b5b6000611e3484828501611d3e565b91505092915050565b600063ffffffff82169050919050565b611e5681611e3d565b82525050565b600060c082019050611e716000830189611b83565b611e7e6020830188611e4d565b611e8b6040830187611e4d565b611e986060830186611e4d565b611ea56080830185611e4d565b611eb260a0830184611e4d565b979650505050505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611eff82611bfc565b810181811067ffffffffffffffff82111715611f1e57611f1d611ec7565b5b80604052505050565b6000611f31611ade565b9050611f3d8282611ef6565b919050565b600067ffffffffffffffff821115611f5d57611f5c611ec7565b5b611f6682611bfc565b9050602081019050919050565b82818337600083830152505050565b6000611f95611f9084611f42565b611f27565b905082815260208101848484011115611fb157611fb0611ec2565b5b611fbc848285611f73565b509392505050565b600082601f830112611fd957611fd8611ebd565b5b8135611fe9848260208601611f82565b91505092915050565b60006020828403121561200857612007611ae8565b5b600082013567ffffffffffffffff81111561202657612025611aed565b5b61203284828501611fc4565b91505092915050565b61204481611b77565b811461204f57600080fd5b50565b6000813590506120618161203b565b92915050565b6000806040838503121561207e5761207d611ae8565b5b600061208c85828601611d3e565b925050602061209d85828601612052565b9150509250929050565b600067ffffffffffffffff8211156120c2576120c1611ec7565b5b6120cb82611bfc565b9050602081019050919050565b60006120eb6120e6846120a7565b611f27565b90508281526020810184848401111561210757612106611ec2565b5b612112848285611f73565b509392505050565b600082601f83011261212f5761212e611ebd565b5b813561213f8482602086016120d8565b91505092915050565b6000806000806080858703121561216257612161611ae8565b5b600061217087828801611d3e565b945050602061218187828801611d3e565b935050604061219287828801611c89565b925050606085013567ffffffffffffffff8111156121b3576121b2611aed565b5b6121bf8782880161211a565b91505092959194509250565b600080604083850312156121e2576121e1611ae8565b5b60006121f085828601611d3e565b925050602061220185828601611d3e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061225257607f821691505b6020821081036122655761226461220b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006122c7602183611bb8565b91506122d28261226b565b604082019050919050565b600060208201905081810360008301526122f6816122ba565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612359603d83611bb8565b9150612364826122fd565b604082019050919050565b600060208201905081810360008301526123888161234c565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006123eb602d83611bb8565b91506123f68261238f565b604082019050919050565b6000602082019050818103600083015261241a816123de565b9050919050565b7f4e6f742074686520746f6b656e206f776e657200000000000000000000000000600082015250565b6000612457601383611bb8565b915061246282612421565b602082019050919050565b600060208201905081810360008301526124868161244a565b9050919050565b7f4e6f742072656c65617365642079657400000000000000000000000000000000600082015250565b60006124c3601083611bb8565b91506124ce8261248d565b602082019050919050565b600060208201905081810360008301526124f2816124b6565b9050919050565b600081905092915050565b50565b60006125146000836124f9565b915061251f82612504565b600082019050919050565b600061253582612507565b9150819050919050565b7f4661696c656420746f207472616e736665722066756e64730000000000000000600082015250565b6000612575601883611bb8565b91506125808261253f565b602082019050919050565b600060208201905081810360008301526125a481612568565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006125e1601883611bb8565b91506125ec826125ab565b602082019050919050565b60006020820190508181036000830152612610816125d4565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612673602983611bb8565b915061267e82612617565b604082019050919050565b600060208201905081810360008301526126a281612666565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126e382611c68565b91506126ee83611c68565b925082821015612701576127006126a9565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061274682611e3d565b915061275183611e3d565b9250826127615761276061270c565b5b828206905092915050565b600061277782611e3d565b915061278283611e3d565b9250826127925761279161270c565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127f9602683611bb8565b91506128048261279d565b604082019050919050565b60006020820190508181036000830152612828816127ec565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061288b602583611bb8565b91506128968261282f565b604082019050919050565b600060208201905081810360008301526128ba8161287e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061291d602483611bb8565b9150612928826128c1565b604082019050919050565b6000602082019050818103600083015261294c81612910565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612989602083611bb8565b915061299482612953565b602082019050919050565b600060208201905081810360008301526129b88161297c565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006129f5601983611bb8565b9150612a00826129bf565b602082019050919050565b60006020820190508181036000830152612a24816129e8565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612a87603283611bb8565b9150612a9282612a2b565b604082019050919050565b60006020820190508181036000830152612ab681612a7a565b9050919050565b6000612ac882611c68565b9150612ad383611c68565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b0857612b076126a9565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000612b3a82612b13565b612b448185612b1e565b9350612b54818560208601611bc9565b612b5d81611bfc565b840191505092915050565b6000608082019050612b7d6000830187611cfd565b612b8a6020830186611cfd565b612b976040830185611d93565b8181036060830152612ba98184612b2f565b905095945050505050565b600081519050612bc381611b1e565b92915050565b600060208284031215612bdf57612bde611ae8565b5b6000612bed84828501612bb4565b9150509291505056fea2646970667358221220f9077c93421daf5151847fdad4608bae3b34a54431d58f515d445502ec30234f64736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000096601800000000000000000000000005f288c798af33cc313917c3027de4ad5055615ea000000000000000000000000000000000000000000000000000000000000000f54686520426f7265642054727573740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342545400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d59654e684433365a77357a513962594139357473577a373167375870616564324e66787374396135486b4c390000000000000000000000
Deployed Bytecode
0x60806040526004361061012e5760003560e01c8063715018a6116100ab578063a0bcfc7f1161006f578063a0bcfc7f146103de578063a22cb46514610407578063b88d4fde14610430578063c87b56dd14610459578063e985e9c514610496578063f2fde38b146104d357610135565b8063715018a61461031657806389a890021461032d5780638da5cb5b1461035857806395d89b41146103835780639b5ac93a146103ae57610135565b806323b872dd116100f257806323b872dd1461023357806342842e0e1461025c5780634e71d92d146102855780636352211e1461029c57806370a08231146102d957610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df5780630a3f013f1461020857610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190611b4a565b6104fc565b60405161016e9190611b92565b60405180910390f35b34801561018357600080fd5b5061018c6105de565b6040516101999190611c46565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190611c9e565b610670565b6040516101d69190611d0c565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190611d53565b6106b6565b005b34801561021457600080fd5b5061021d6107cd565b60405161022a9190611da2565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190611dbd565b6107d3565b005b34801561026857600080fd5b50610283600480360381019061027e9190611dbd565b610833565b005b34801561029157600080fd5b5061029a610853565b005b3480156102a857600080fd5b506102c360048036038101906102be9190611c9e565b6109be565b6040516102d09190611d0c565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190611e10565b610a44565b60405161030d9190611da2565b60405180910390f35b34801561032257600080fd5b5061032b610afb565b005b34801561033957600080fd5b50610342610b0f565b60405161034f9190611da2565b60405180910390f35b34801561036457600080fd5b5061036d610b14565b60405161037a9190611d0c565b60405180910390f35b34801561038f57600080fd5b50610398610b3e565b6040516103a59190611c46565b60405180910390f35b3480156103ba57600080fd5b506103c3610bd0565b6040516103d596959493929190611e5c565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190611ff2565b610c92565b005b34801561041357600080fd5b5061042e60048036038101906104299190612067565b610cb4565b005b34801561043c57600080fd5b5061045760048036038101906104529190612148565b610cca565b005b34801561046557600080fd5b50610480600480360381019061047b9190611c9e565b610d2c565b60405161048d9190611c46565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906121cb565b610dc0565b6040516104ca9190611b92565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190611e10565b610e54565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d757506105d682610ed7565b5b9050919050565b6060600080546105ed9061223a565b80601f01602080910402602001604051908101604052809291908181526020018280546106199061223a565b80156106665780601f1061063b57610100808354040283529160200191610666565b820191906000526020600020905b81548152906001019060200180831161064957829003601f168201915b5050505050905090565b600061067b82610f41565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106c1826109be565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610728906122dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610750610f8c565b73ffffffffffffffffffffffffffffffffffffffff16148061077f575061077e81610779610f8c565b610dc0565b5b6107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b59061236f565b60405180910390fd5b6107c88383610f94565b505050565b60075481565b6107e46107de610f8c565b8261104d565b610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90612401565b60405180910390fd5b61082e8383836110e2565b505050565b61084e83838360405180602001604052806000815250610cca565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1661087460016109be565b73ffffffffffffffffffffffffffffffffffffffff16146108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19061246d565b60405180910390fd5b42600754111561090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906124d9565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516109359061252a565b60006040518083038185875af1925050503d8060008114610972576040519150601f19603f3d011682016040523d82523d6000602084013e610977565b606091505b50509050806109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b29061258b565b60405180910390fd5b50565b6000806109ca836113db565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a32906125f7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab90612689565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b03611418565b610b0d6000611496565b565b600181565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b4d9061223a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b799061223a565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b5050505050905090565b6000806000806000804260075411610bfd5760016000806000806000955095509550955095509550610c8a565b600042600754610c0d91906126d8565b905060009650603c81610c20919061273b565b9150603c8082610c30919061276c565b610c3a919061273b565b9250603c610e1082610c4c919061276c565b610c56919061273b565b935061016d6201518082610c6a919061276c565b610c74919061273b565b94506301e1338081610c86919061276c565b9550505b909192939495565b610c9a611418565b8060089080519060200190610cb0929190611a3b565b5050565b610cc6610cbf610f8c565b838361155c565b5050565b610cdb610cd5610f8c565b8361104d565b610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190612401565b60405180910390fd5b610d26848484846116c8565b50505050565b606060088054610d3b9061223a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061223a565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e5c611418565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec29061280f565b60405180910390fd5b610ed481611496565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f4a81611724565b610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906125f7565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611007836109be565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611059836109be565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061109b575061109a8185610dc0565b5b806110d957508373ffffffffffffffffffffffffffffffffffffffff166110c184610670565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611102826109be565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906128a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90612933565b60405180910390fd5b6111d48383836001611765565b8273ffffffffffffffffffffffffffffffffffffffff166111f4826109be565b73ffffffffffffffffffffffffffffffffffffffff161461124a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611241906128a1565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113d6838383600161188b565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611420610f8c565b73ffffffffffffffffffffffffffffffffffffffff1661143e610b14565b73ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9061299f565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190612a0b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116bb9190611b92565b60405180910390a3505050565b6116d38484846110e2565b6116df84848484611891565b61171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590612a9d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611746836113db565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561188557600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146117f95780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f191906126d8565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118845780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187c9190612abd565b925050819055505b5b50505050565b50505050565b60006118b28473ffffffffffffffffffffffffffffffffffffffff16611a18565b15611a0b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026118db610f8c565b8786866040518563ffffffff1660e01b81526004016118fd9493929190612b68565b6020604051808303816000875af192505050801561193957506040513d601f19601f820116820180604052508101906119369190612bc9565b60015b6119bb573d8060008114611969576040519150601f19603f3d011682016040523d82523d6000602084013e61196e565b606091505b5060008151036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90612a9d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a10565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611a479061223a565b90600052602060002090601f016020900481019282611a695760008555611ab0565b82601f10611a8257805160ff1916838001178555611ab0565b82800160010185558215611ab0579182015b82811115611aaf578251825591602001919060010190611a94565b5b509050611abd9190611ac1565b5090565b5b80821115611ada576000816000905550600101611ac2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611b2781611af2565b8114611b3257600080fd5b50565b600081359050611b4481611b1e565b92915050565b600060208284031215611b6057611b5f611ae8565b5b6000611b6e84828501611b35565b91505092915050565b60008115159050919050565b611b8c81611b77565b82525050565b6000602082019050611ba76000830184611b83565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611be7578082015181840152602081019050611bcc565b83811115611bf6576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c1882611bad565b611c228185611bb8565b9350611c32818560208601611bc9565b611c3b81611bfc565b840191505092915050565b60006020820190508181036000830152611c608184611c0d565b905092915050565b6000819050919050565b611c7b81611c68565b8114611c8657600080fd5b50565b600081359050611c9881611c72565b92915050565b600060208284031215611cb457611cb3611ae8565b5b6000611cc284828501611c89565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cf682611ccb565b9050919050565b611d0681611ceb565b82525050565b6000602082019050611d216000830184611cfd565b92915050565b611d3081611ceb565b8114611d3b57600080fd5b50565b600081359050611d4d81611d27565b92915050565b60008060408385031215611d6a57611d69611ae8565b5b6000611d7885828601611d3e565b9250506020611d8985828601611c89565b9150509250929050565b611d9c81611c68565b82525050565b6000602082019050611db76000830184611d93565b92915050565b600080600060608486031215611dd657611dd5611ae8565b5b6000611de486828701611d3e565b9350506020611df586828701611d3e565b9250506040611e0686828701611c89565b9150509250925092565b600060208284031215611e2657611e25611ae8565b5b6000611e3484828501611d3e565b91505092915050565b600063ffffffff82169050919050565b611e5681611e3d565b82525050565b600060c082019050611e716000830189611b83565b611e7e6020830188611e4d565b611e8b6040830187611e4d565b611e986060830186611e4d565b611ea56080830185611e4d565b611eb260a0830184611e4d565b979650505050505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611eff82611bfc565b810181811067ffffffffffffffff82111715611f1e57611f1d611ec7565b5b80604052505050565b6000611f31611ade565b9050611f3d8282611ef6565b919050565b600067ffffffffffffffff821115611f5d57611f5c611ec7565b5b611f6682611bfc565b9050602081019050919050565b82818337600083830152505050565b6000611f95611f9084611f42565b611f27565b905082815260208101848484011115611fb157611fb0611ec2565b5b611fbc848285611f73565b509392505050565b600082601f830112611fd957611fd8611ebd565b5b8135611fe9848260208601611f82565b91505092915050565b60006020828403121561200857612007611ae8565b5b600082013567ffffffffffffffff81111561202657612025611aed565b5b61203284828501611fc4565b91505092915050565b61204481611b77565b811461204f57600080fd5b50565b6000813590506120618161203b565b92915050565b6000806040838503121561207e5761207d611ae8565b5b600061208c85828601611d3e565b925050602061209d85828601612052565b9150509250929050565b600067ffffffffffffffff8211156120c2576120c1611ec7565b5b6120cb82611bfc565b9050602081019050919050565b60006120eb6120e6846120a7565b611f27565b90508281526020810184848401111561210757612106611ec2565b5b612112848285611f73565b509392505050565b600082601f83011261212f5761212e611ebd565b5b813561213f8482602086016120d8565b91505092915050565b6000806000806080858703121561216257612161611ae8565b5b600061217087828801611d3e565b945050602061218187828801611d3e565b935050604061219287828801611c89565b925050606085013567ffffffffffffffff8111156121b3576121b2611aed565b5b6121bf8782880161211a565b91505092959194509250565b600080604083850312156121e2576121e1611ae8565b5b60006121f085828601611d3e565b925050602061220185828601611d3e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061225257607f821691505b6020821081036122655761226461220b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006122c7602183611bb8565b91506122d28261226b565b604082019050919050565b600060208201905081810360008301526122f6816122ba565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612359603d83611bb8565b9150612364826122fd565b604082019050919050565b600060208201905081810360008301526123888161234c565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006123eb602d83611bb8565b91506123f68261238f565b604082019050919050565b6000602082019050818103600083015261241a816123de565b9050919050565b7f4e6f742074686520746f6b656e206f776e657200000000000000000000000000600082015250565b6000612457601383611bb8565b915061246282612421565b602082019050919050565b600060208201905081810360008301526124868161244a565b9050919050565b7f4e6f742072656c65617365642079657400000000000000000000000000000000600082015250565b60006124c3601083611bb8565b91506124ce8261248d565b602082019050919050565b600060208201905081810360008301526124f2816124b6565b9050919050565b600081905092915050565b50565b60006125146000836124f9565b915061251f82612504565b600082019050919050565b600061253582612507565b9150819050919050565b7f4661696c656420746f207472616e736665722066756e64730000000000000000600082015250565b6000612575601883611bb8565b91506125808261253f565b602082019050919050565b600060208201905081810360008301526125a481612568565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006125e1601883611bb8565b91506125ec826125ab565b602082019050919050565b60006020820190508181036000830152612610816125d4565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612673602983611bb8565b915061267e82612617565b604082019050919050565b600060208201905081810360008301526126a281612666565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126e382611c68565b91506126ee83611c68565b925082821015612701576127006126a9565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061274682611e3d565b915061275183611e3d565b9250826127615761276061270c565b5b828206905092915050565b600061277782611e3d565b915061278283611e3d565b9250826127925761279161270c565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127f9602683611bb8565b91506128048261279d565b604082019050919050565b60006020820190508181036000830152612828816127ec565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061288b602583611bb8565b91506128968261282f565b604082019050919050565b600060208201905081810360008301526128ba8161287e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061291d602483611bb8565b9150612928826128c1565b604082019050919050565b6000602082019050818103600083015261294c81612910565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612989602083611bb8565b915061299482612953565b602082019050919050565b600060208201905081810360008301526129b88161297c565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006129f5601983611bb8565b9150612a00826129bf565b602082019050919050565b60006020820190508181036000830152612a24816129e8565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612a87603283611bb8565b9150612a9282612a2b565b604082019050919050565b60006020820190508181036000830152612ab681612a7a565b9050919050565b6000612ac882611c68565b9150612ad383611c68565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b0857612b076126a9565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000612b3a82612b13565b612b448185612b1e565b9350612b54818560208601611bc9565b612b5d81611bfc565b840191505092915050565b6000608082019050612b7d6000830187611cfd565b612b8a6020830186611cfd565b612b976040830185611d93565b8181036060830152612ba98184612b2f565b905095945050505050565b600081519050612bc381611b1e565b92915050565b600060208284031215612bdf57612bde611ae8565b5b6000612bed84828501612bb4565b9150509291505056fea2646970667358221220f9077c93421daf5151847fdad4608bae3b34a54431d58f515d445502ec30234f64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000096601800000000000000000000000005f288c798af33cc313917c3027de4ad5055615ea000000000000000000000000000000000000000000000000000000000000000f54686520426f7265642054727573740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342545400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d59654e684433365a77357a513962594139357473577a373167375870616564324e66787374396135486b4c390000000000000000000000
-----Decoded View---------------
Arg [0] : tokenName (string): The Bored Trust
Arg [1] : tokenSymbol (string): BTT
Arg [2] : baseUri (string): ipfs://QmYeNhD36Zw5zQ9bYA95tsWz71g7Xpaed2Nfxst9a5HkL9
Arg [3] : timeToReleaseSeconds (uint256): 157680000
Arg [4] : recipient (address): 0x5F288C798Af33Cc313917c3027DE4AD5055615ea
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000009660180
Arg [4] : 0000000000000000000000005f288c798af33cc313917c3027de4ad5055615ea
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [6] : 54686520426f7265642054727573740000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4254540000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [10] : 697066733a2f2f516d59654e684433365a77357a513962594139357473577a37
Arg [11] : 3167375870616564324e66787374396135486b4c390000000000000000000000
Deployed Bytecode Sourcemap
54385:2151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35780:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38220:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37738:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54518:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38920:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39326:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56100:433;;;;;;;;;;;;;:::i;:::-;;36418:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36149:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53507:103;;;;;;;;;;;;;:::i;:::-;;54475:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52859:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36877:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55355:737;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;55208:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38463:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39582:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54999:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38689:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53765:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35780:305;35882:4;35934:25;35919:40;;;:11;:40;;;;:105;;;;35991:33;35976:48;;;:11;:48;;;;35919:105;:158;;;;36041:36;36065:11;36041:23;:36::i;:::-;35919:158;35899:178;;35780:305;;;:::o;36708:100::-;36762:13;36795:5;36788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36708:100;:::o;38220:171::-;38296:7;38316:23;38331:7;38316:14;:23::i;:::-;38359:15;:24;38375:7;38359:24;;;;;;;;;;;;;;;;;;;;;38352:31;;38220:171;;;:::o;37738:416::-;37819:13;37835:23;37850:7;37835:14;:23::i;:::-;37819:39;;37883:5;37877:11;;:2;:11;;;37869:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37977:5;37961:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37986:37;38003:5;38010:12;:10;:12::i;:::-;37986:16;:37::i;:::-;37961:62;37939:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;38125:21;38134:2;38138:7;38125:8;:21::i;:::-;37808:346;37738:416;;:::o;54518:31::-;;;;:::o;38920:335::-;39115:41;39134:12;:10;:12::i;:::-;39148:7;39115:18;:41::i;:::-;39107:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39219:28;39229:4;39235:2;39239:7;39219:9;:28::i;:::-;38920:335;;;:::o;39326:185::-;39464:39;39481:4;39487:2;39491:7;39464:39;;;;;;;;;;;;:16;:39::i;:::-;39326:185;;;:::o;56100:433::-;56193:10;56172:31;;:17;54510:1;56172:7;:17::i;:::-;:31;;;56150:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;56305:15;56285:16;;:35;;56263:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;56378:20;56412:10;56404:24;;56436:21;56404:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56377:85;;;56481:15;56473:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;56139:394;56100:433::o;36418:223::-;36490:7;36510:13;36526:17;36535:7;36526:8;:17::i;:::-;36510:33;;36579:1;36562:19;;:5;:19;;;36554:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;36628:5;36621:12;;;36418:223;;;:::o;36149:207::-;36221:7;36266:1;36249:19;;:5;:19;;;36241:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36332:9;:16;36342:5;36332:16;;;;;;;;;;;;;;;;36325:23;;36149:207;;;:::o;53507:103::-;52745:13;:11;:13::i;:::-;53572:30:::1;53599:1;53572:18;:30::i;:::-;53507:103::o:0;54475:36::-;54510:1;54475:36;:::o;52859:87::-;52905:7;52932:6;;;;;;;;;;;52925:13;;52859:87;:::o;36877:104::-;36933:13;36966:7;36959:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36877:104;:::o;55355:737::-;55449:16;55480:13;55508:12;55535:13;55563:15;55593;55659;55639:16;;:35;55636:81;;55697:4;55703:1;55706;55709;55712;55715;55689:28;;;;;;;;;;;;;;55636:81;55730:24;55785:15;55766:16;;:34;;;;:::i;:::-;55730:71;;55828:5;55814:19;;55875:2;55855:17;:22;;;;:::i;:::-;55844:33;;55931:2;55919:9;55899:17;:29;;;;:::i;:::-;:34;;;;:::i;:::-;55888:45;;55983:2;55973:7;55953:17;:27;;;;:::i;:::-;:32;;;;:::i;:::-;55944:41;;56033:3;56024:6;56004:17;:26;;;;:::i;:::-;:32;;;;:::i;:::-;55996:40;;56076:8;56056:17;:28;;;;:::i;:::-;56047:37;;55625:467;55355:737;;;;;;;:::o;55208:139::-;52745:13;:11;:13::i;:::-;55332:7:::1;55321:8;:18;;;;;;;;;;;;:::i;:::-;;55208:139:::0;:::o;38463:155::-;38558:52;38577:12;:10;:12::i;:::-;38591:8;38601;38558:18;:52::i;:::-;38463:155;;:::o;39582:322::-;39756:41;39775:12;:10;:12::i;:::-;39789:7;39756:18;:41::i;:::-;39748:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39858:38;39872:4;39878:2;39882:7;39891:4;39858:13;:38::i;:::-;39582:322;;;;:::o;54999:201::-;55136:13;55184:8;55177:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54999:201;;;:::o;38689:164::-;38786:4;38810:18;:25;38829:5;38810:25;;;;;;;;;;;;;;;:35;38836:8;38810:35;;;;;;;;;;;;;;;;;;;;;;;;;38803:42;;38689:164;;;;:::o;53765:201::-;52745:13;:11;:13::i;:::-;53874:1:::1;53854:22;;:8;:22;;::::0;53846:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;53930:28;53949:8;53930:18;:28::i;:::-;53765:201:::0;:::o;34205:157::-;34290:4;34329:25;34314:40;;;:11;:40;;;;34307:47;;34205:157;;;:::o;48039:135::-;48121:16;48129:7;48121;:16::i;:::-;48113:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48039:135;:::o;17913:98::-;17966:7;17993:10;17986:17;;17913:98;:::o;47318:174::-;47420:2;47393:15;:24;47409:7;47393:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47476:7;47472:2;47438:46;;47447:23;47462:7;47447:14;:23::i;:::-;47438:46;;;;;;;;;;;;47318:174;;:::o;41937:264::-;42030:4;42047:13;42063:23;42078:7;42063:14;:23::i;:::-;42047:39;;42116:5;42105:16;;:7;:16;;;:52;;;;42125:32;42142:5;42149:7;42125:16;:32::i;:::-;42105:52;:87;;;;42185:7;42161:31;;:20;42173:7;42161:11;:20::i;:::-;:31;;;42105:87;42097:96;;;41937:264;;;;:::o;45936:1263::-;46095:4;46068:31;;:23;46083:7;46068:14;:23::i;:::-;:31;;;46060:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46174:1;46160:16;;:2;:16;;;46152:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46230:42;46251:4;46257:2;46261:7;46270:1;46230:20;:42::i;:::-;46402:4;46375:31;;:23;46390:7;46375:14;:23::i;:::-;:31;;;46367:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46520:15;:24;46536:7;46520:24;;;;;;;;;;;;46513:31;;;;;;;;;;;47015:1;46996:9;:15;47006:4;46996:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;47048:1;47031:9;:13;47041:2;47031:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;47090:2;47071:7;:16;47079:7;47071:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;47129:7;47125:2;47110:27;;47119:4;47110:27;;;;;;;;;;;;47150:41;47170:4;47176:2;47180:7;47189:1;47150:19;:41::i;:::-;45936:1263;;;:::o;41212:117::-;41278:7;41305;:16;41313:7;41305:16;;;;;;;;;;;;;;;;;;;;;41298:23;;41212:117;;;:::o;53024:132::-;53099:12;:10;:12::i;:::-;53088:23;;:7;:5;:7::i;:::-;:23;;;53080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53024:132::o;54126:191::-;54200:16;54219:6;;;;;;;;;;;54200:25;;54245:8;54236:6;;:17;;;;;;;;;;;;;;;;;;54300:8;54269:40;;54290:8;54269:40;;;;;;;;;;;;54189:128;54126:191;:::o;47635:315::-;47790:8;47781:17;;:5;:17;;;47773:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47877:8;47839:18;:25;47858:5;47839:25;;;;;;;;;;;;;;;:35;47865:8;47839:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;47923:8;47901:41;;47916:5;47901:41;;;47933:8;47901:41;;;;;;:::i;:::-;;;;;;;;47635:315;;;:::o;40785:313::-;40941:28;40951:4;40957:2;40961:7;40941:9;:28::i;:::-;40988:47;41011:4;41017:2;41021:7;41030:4;40988:22;:47::i;:::-;40980:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;40785:313;;;;:::o;41642:128::-;41707:4;41760:1;41731:31;;:17;41740:7;41731:8;:17::i;:::-;:31;;;;41724:38;;41642:128;;;:::o;50323:410::-;50513:1;50501:9;:13;50497:229;;;50551:1;50535:18;;:4;:18;;;50531:87;;50593:9;50574;:15;50584:4;50574:15;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;50531:87;50650:1;50636:16;;:2;:16;;;50632:83;;50690:9;50673;:13;50683:2;50673:13;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;50632:83;50497:229;50323:410;;;;:::o;51455:158::-;;;;;:::o;48738:853::-;48892:4;48913:15;:2;:13;;;:15::i;:::-;48909:675;;;48965:2;48949:36;;;48986:12;:10;:12::i;:::-;49000:4;49006:7;49015:4;48949:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48945:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49207:1;49190:6;:13;:18;49186:328;;49233:60;;;;;;;;;;:::i;:::-;;;;;;;;49186:328;49464:6;49458:13;49449:6;49445:2;49441:15;49434:38;48945:584;49081:41;;;49071:51;;;:6;:51;;;;49064:58;;;;;48909:675;49568:4;49561:11;;48738:853;;;;;;;:::o;9033:326::-;9093:4;9350:1;9328:7;:19;;;:23;9321:30;;9033:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:93::-;6286:7;6326:10;6319:5;6315:22;6304:33;;6250:93;;;:::o;6349:115::-;6434:23;6451:5;6434:23;:::i;:::-;6429:3;6422:36;6349:115;;:::o;6470:743::-;6687:4;6725:3;6714:9;6710:19;6702:27;;6739:65;6801:1;6790:9;6786:17;6777:6;6739:65;:::i;:::-;6814:70;6880:2;6869:9;6865:18;6856:6;6814:70;:::i;:::-;6894;6960:2;6949:9;6945:18;6936:6;6894:70;:::i;:::-;6974;7040:2;7029:9;7025:18;7016:6;6974:70;:::i;:::-;7054:71;7120:3;7109:9;7105:19;7096:6;7054:71;:::i;:::-;7135;7201:3;7190:9;7186:19;7177:6;7135:71;:::i;:::-;6470:743;;;;;;;;;:::o;7219:117::-;7328:1;7325;7318:12;7342:117;7451:1;7448;7441:12;7465:180;7513:77;7510:1;7503:88;7610:4;7607:1;7600:15;7634:4;7631:1;7624:15;7651:281;7734:27;7756:4;7734:27;:::i;:::-;7726:6;7722:40;7864:6;7852:10;7849:22;7828:18;7816:10;7813:34;7810:62;7807:88;;;7875:18;;:::i;:::-;7807:88;7915:10;7911:2;7904:22;7694:238;7651:281;;:::o;7938:129::-;7972:6;7999:20;;:::i;:::-;7989:30;;8028:33;8056:4;8048:6;8028:33;:::i;:::-;7938:129;;;:::o;8073:308::-;8135:4;8225:18;8217:6;8214:30;8211:56;;;8247:18;;:::i;:::-;8211:56;8285:29;8307:6;8285:29;:::i;:::-;8277:37;;8369:4;8363;8359:15;8351:23;;8073:308;;;:::o;8387:154::-;8471:6;8466:3;8461;8448:30;8533:1;8524:6;8519:3;8515:16;8508:27;8387:154;;;:::o;8547:412::-;8625:5;8650:66;8666:49;8708:6;8666:49;:::i;:::-;8650:66;:::i;:::-;8641:75;;8739:6;8732:5;8725:21;8777:4;8770:5;8766:16;8815:3;8806:6;8801:3;8797:16;8794:25;8791:112;;;8822:79;;:::i;:::-;8791:112;8912:41;8946:6;8941:3;8936;8912:41;:::i;:::-;8631:328;8547:412;;;;;:::o;8979:340::-;9035:5;9084:3;9077:4;9069:6;9065:17;9061:27;9051:122;;9092:79;;:::i;:::-;9051:122;9209:6;9196:20;9234:79;9309:3;9301:6;9294:4;9286:6;9282:17;9234:79;:::i;:::-;9225:88;;9041:278;8979:340;;;;:::o;9325:509::-;9394:6;9443:2;9431:9;9422:7;9418:23;9414:32;9411:119;;;9449:79;;:::i;:::-;9411:119;9597:1;9586:9;9582:17;9569:31;9627:18;9619:6;9616:30;9613:117;;;9649:79;;:::i;:::-;9613:117;9754:63;9809:7;9800:6;9789:9;9785:22;9754:63;:::i;:::-;9744:73;;9540:287;9325:509;;;;:::o;9840:116::-;9910:21;9925:5;9910:21;:::i;:::-;9903:5;9900:32;9890:60;;9946:1;9943;9936:12;9890:60;9840:116;:::o;9962:133::-;10005:5;10043:6;10030:20;10021:29;;10059:30;10083:5;10059:30;:::i;:::-;9962:133;;;;:::o;10101:468::-;10166:6;10174;10223:2;10211:9;10202:7;10198:23;10194:32;10191:119;;;10229:79;;:::i;:::-;10191:119;10349:1;10374:53;10419:7;10410:6;10399:9;10395:22;10374:53;:::i;:::-;10364:63;;10320:117;10476:2;10502:50;10544:7;10535:6;10524:9;10520:22;10502:50;:::i;:::-;10492:60;;10447:115;10101:468;;;;;:::o;10575:307::-;10636:4;10726:18;10718:6;10715:30;10712:56;;;10748:18;;:::i;:::-;10712:56;10786:29;10808:6;10786:29;:::i;:::-;10778:37;;10870:4;10864;10860:15;10852:23;;10575:307;;;:::o;10888:410::-;10965:5;10990:65;11006:48;11047:6;11006:48;:::i;:::-;10990:65;:::i;:::-;10981:74;;11078:6;11071:5;11064:21;11116:4;11109:5;11105:16;11154:3;11145:6;11140:3;11136:16;11133:25;11130:112;;;11161:79;;:::i;:::-;11130:112;11251:41;11285:6;11280:3;11275;11251:41;:::i;:::-;10971:327;10888:410;;;;;:::o;11317:338::-;11372:5;11421:3;11414:4;11406:6;11402:17;11398:27;11388:122;;11429:79;;:::i;:::-;11388:122;11546:6;11533:20;11571:78;11645:3;11637:6;11630:4;11622:6;11618:17;11571:78;:::i;:::-;11562:87;;11378:277;11317:338;;;;:::o;11661:943::-;11756:6;11764;11772;11780;11829:3;11817:9;11808:7;11804:23;11800:33;11797:120;;;11836:79;;:::i;:::-;11797:120;11956:1;11981:53;12026:7;12017:6;12006:9;12002:22;11981:53;:::i;:::-;11971:63;;11927:117;12083:2;12109:53;12154:7;12145:6;12134:9;12130:22;12109:53;:::i;:::-;12099:63;;12054:118;12211:2;12237:53;12282:7;12273:6;12262:9;12258:22;12237:53;:::i;:::-;12227:63;;12182:118;12367:2;12356:9;12352:18;12339:32;12398:18;12390:6;12387:30;12384:117;;;12420:79;;:::i;:::-;12384:117;12525:62;12579:7;12570:6;12559:9;12555:22;12525:62;:::i;:::-;12515:72;;12310:287;11661:943;;;;;;;:::o;12610:474::-;12678:6;12686;12735:2;12723:9;12714:7;12710:23;12706:32;12703:119;;;12741:79;;:::i;:::-;12703:119;12861:1;12886:53;12931:7;12922:6;12911:9;12907:22;12886:53;:::i;:::-;12876:63;;12832:117;12988:2;13014:53;13059:7;13050:6;13039:9;13035:22;13014:53;:::i;:::-;13004:63;;12959:118;12610:474;;;;;:::o;13090:180::-;13138:77;13135:1;13128:88;13235:4;13232:1;13225:15;13259:4;13256:1;13249:15;13276:320;13320:6;13357:1;13351:4;13347:12;13337:22;;13404:1;13398:4;13394:12;13425:18;13415:81;;13481:4;13473:6;13469:17;13459:27;;13415:81;13543:2;13535:6;13532:14;13512:18;13509:38;13506:84;;13562:18;;:::i;:::-;13506:84;13327:269;13276:320;;;:::o;13602:220::-;13742:34;13738:1;13730:6;13726:14;13719:58;13811:3;13806:2;13798:6;13794:15;13787:28;13602:220;:::o;13828:366::-;13970:3;13991:67;14055:2;14050:3;13991:67;:::i;:::-;13984:74;;14067:93;14156:3;14067:93;:::i;:::-;14185:2;14180:3;14176:12;14169:19;;13828:366;;;:::o;14200:419::-;14366:4;14404:2;14393:9;14389:18;14381:26;;14453:9;14447:4;14443:20;14439:1;14428:9;14424:17;14417:47;14481:131;14607:4;14481:131;:::i;:::-;14473:139;;14200:419;;;:::o;14625:248::-;14765:34;14761:1;14753:6;14749:14;14742:58;14834:31;14829:2;14821:6;14817:15;14810:56;14625:248;:::o;14879:366::-;15021:3;15042:67;15106:2;15101:3;15042:67;:::i;:::-;15035:74;;15118:93;15207:3;15118:93;:::i;:::-;15236:2;15231:3;15227:12;15220:19;;14879:366;;;:::o;15251:419::-;15417:4;15455:2;15444:9;15440:18;15432:26;;15504:9;15498:4;15494:20;15490:1;15479:9;15475:17;15468:47;15532:131;15658:4;15532:131;:::i;:::-;15524:139;;15251:419;;;:::o;15676:232::-;15816:34;15812:1;15804:6;15800:14;15793:58;15885:15;15880:2;15872:6;15868:15;15861:40;15676:232;:::o;15914:366::-;16056:3;16077:67;16141:2;16136:3;16077:67;:::i;:::-;16070:74;;16153:93;16242:3;16153:93;:::i;:::-;16271:2;16266:3;16262:12;16255:19;;15914:366;;;:::o;16286:419::-;16452:4;16490:2;16479:9;16475:18;16467:26;;16539:9;16533:4;16529:20;16525:1;16514:9;16510:17;16503:47;16567:131;16693:4;16567:131;:::i;:::-;16559:139;;16286:419;;;:::o;16711:169::-;16851:21;16847:1;16839:6;16835:14;16828:45;16711:169;:::o;16886:366::-;17028:3;17049:67;17113:2;17108:3;17049:67;:::i;:::-;17042:74;;17125:93;17214:3;17125:93;:::i;:::-;17243:2;17238:3;17234:12;17227:19;;16886:366;;;:::o;17258:419::-;17424:4;17462:2;17451:9;17447:18;17439:26;;17511:9;17505:4;17501:20;17497:1;17486:9;17482:17;17475:47;17539:131;17665:4;17539:131;:::i;:::-;17531:139;;17258:419;;;:::o;17683:166::-;17823:18;17819:1;17811:6;17807:14;17800:42;17683:166;:::o;17855:366::-;17997:3;18018:67;18082:2;18077:3;18018:67;:::i;:::-;18011:74;;18094:93;18183:3;18094:93;:::i;:::-;18212:2;18207:3;18203:12;18196:19;;17855:366;;;:::o;18227:419::-;18393:4;18431:2;18420:9;18416:18;18408:26;;18480:9;18474:4;18470:20;18466:1;18455:9;18451:17;18444:47;18508:131;18634:4;18508:131;:::i;:::-;18500:139;;18227:419;;;:::o;18652:147::-;18753:11;18790:3;18775:18;;18652:147;;;;:::o;18805:114::-;;:::o;18925:398::-;19084:3;19105:83;19186:1;19181:3;19105:83;:::i;:::-;19098:90;;19197:93;19286:3;19197:93;:::i;:::-;19315:1;19310:3;19306:11;19299:18;;18925:398;;;:::o;19329:379::-;19513:3;19535:147;19678:3;19535:147;:::i;:::-;19528:154;;19699:3;19692:10;;19329:379;;;:::o;19714:174::-;19854:26;19850:1;19842:6;19838:14;19831:50;19714:174;:::o;19894:366::-;20036:3;20057:67;20121:2;20116:3;20057:67;:::i;:::-;20050:74;;20133:93;20222:3;20133:93;:::i;:::-;20251:2;20246:3;20242:12;20235:19;;19894:366;;;:::o;20266:419::-;20432:4;20470:2;20459:9;20455:18;20447:26;;20519:9;20513:4;20509:20;20505:1;20494:9;20490:17;20483:47;20547:131;20673:4;20547:131;:::i;:::-;20539:139;;20266:419;;;:::o;20691:174::-;20831:26;20827:1;20819:6;20815:14;20808:50;20691:174;:::o;20871:366::-;21013:3;21034:67;21098:2;21093:3;21034:67;:::i;:::-;21027:74;;21110:93;21199:3;21110:93;:::i;:::-;21228:2;21223:3;21219:12;21212:19;;20871:366;;;:::o;21243:419::-;21409:4;21447:2;21436:9;21432:18;21424:26;;21496:9;21490:4;21486:20;21482:1;21471:9;21467:17;21460:47;21524:131;21650:4;21524:131;:::i;:::-;21516:139;;21243:419;;;:::o;21668:228::-;21808:34;21804:1;21796:6;21792:14;21785:58;21877:11;21872:2;21864:6;21860:15;21853:36;21668:228;:::o;21902:366::-;22044:3;22065:67;22129:2;22124:3;22065:67;:::i;:::-;22058:74;;22141:93;22230:3;22141:93;:::i;:::-;22259:2;22254:3;22250:12;22243:19;;21902:366;;;:::o;22274:419::-;22440:4;22478:2;22467:9;22463:18;22455:26;;22527:9;22521:4;22517:20;22513:1;22502:9;22498:17;22491:47;22555:131;22681:4;22555:131;:::i;:::-;22547:139;;22274:419;;;:::o;22699:180::-;22747:77;22744:1;22737:88;22844:4;22841:1;22834:15;22868:4;22865:1;22858:15;22885:191;22925:4;22945:20;22963:1;22945:20;:::i;:::-;22940:25;;22979:20;22997:1;22979:20;:::i;:::-;22974:25;;23018:1;23015;23012:8;23009:34;;;23023:18;;:::i;:::-;23009:34;23068:1;23065;23061:9;23053:17;;22885:191;;;;:::o;23082:180::-;23130:77;23127:1;23120:88;23227:4;23224:1;23217:15;23251:4;23248:1;23241:15;23268:173;23299:1;23316:19;23333:1;23316:19;:::i;:::-;23311:24;;23349:19;23366:1;23349:19;:::i;:::-;23344:24;;23387:1;23377:35;;23392:18;;:::i;:::-;23377:35;23433:1;23430;23426:9;23421:14;;23268:173;;;;:::o;23447:182::-;23486:1;23503:19;23520:1;23503:19;:::i;:::-;23498:24;;23536:19;23553:1;23536:19;:::i;:::-;23531:24;;23574:1;23564:35;;23579:18;;:::i;:::-;23564:35;23621:1;23618;23614:9;23609:14;;23447:182;;;;:::o;23635:225::-;23775:34;23771:1;23763:6;23759:14;23752:58;23844:8;23839:2;23831:6;23827:15;23820:33;23635:225;:::o;23866:366::-;24008:3;24029:67;24093:2;24088:3;24029:67;:::i;:::-;24022:74;;24105:93;24194:3;24105:93;:::i;:::-;24223:2;24218:3;24214:12;24207:19;;23866:366;;;:::o;24238:419::-;24404:4;24442:2;24431:9;24427:18;24419:26;;24491:9;24485:4;24481:20;24477:1;24466:9;24462:17;24455:47;24519:131;24645:4;24519:131;:::i;:::-;24511:139;;24238:419;;;:::o;24663:224::-;24803:34;24799:1;24791:6;24787:14;24780:58;24872:7;24867:2;24859:6;24855:15;24848:32;24663:224;:::o;24893:366::-;25035:3;25056:67;25120:2;25115:3;25056:67;:::i;:::-;25049:74;;25132:93;25221:3;25132:93;:::i;:::-;25250:2;25245:3;25241:12;25234:19;;24893:366;;;:::o;25265:419::-;25431:4;25469:2;25458:9;25454:18;25446:26;;25518:9;25512:4;25508:20;25504:1;25493:9;25489:17;25482:47;25546:131;25672:4;25546:131;:::i;:::-;25538:139;;25265:419;;;:::o;25690:223::-;25830:34;25826:1;25818:6;25814:14;25807:58;25899:6;25894:2;25886:6;25882:15;25875:31;25690:223;:::o;25919:366::-;26061:3;26082:67;26146:2;26141:3;26082:67;:::i;:::-;26075:74;;26158:93;26247:3;26158:93;:::i;:::-;26276:2;26271:3;26267:12;26260:19;;25919:366;;;:::o;26291:419::-;26457:4;26495:2;26484:9;26480:18;26472:26;;26544:9;26538:4;26534:20;26530:1;26519:9;26515:17;26508:47;26572:131;26698:4;26572:131;:::i;:::-;26564:139;;26291:419;;;:::o;26716:182::-;26856:34;26852:1;26844:6;26840:14;26833:58;26716:182;:::o;26904:366::-;27046:3;27067:67;27131:2;27126:3;27067:67;:::i;:::-;27060:74;;27143:93;27232:3;27143:93;:::i;:::-;27261:2;27256:3;27252:12;27245:19;;26904:366;;;:::o;27276:419::-;27442:4;27480:2;27469:9;27465:18;27457:26;;27529:9;27523:4;27519:20;27515:1;27504:9;27500:17;27493:47;27557:131;27683:4;27557:131;:::i;:::-;27549:139;;27276:419;;;:::o;27701:175::-;27841:27;27837:1;27829:6;27825:14;27818:51;27701:175;:::o;27882:366::-;28024:3;28045:67;28109:2;28104:3;28045:67;:::i;:::-;28038:74;;28121:93;28210:3;28121:93;:::i;:::-;28239:2;28234:3;28230:12;28223:19;;27882:366;;;:::o;28254:419::-;28420:4;28458:2;28447:9;28443:18;28435:26;;28507:9;28501:4;28497:20;28493:1;28482:9;28478:17;28471:47;28535:131;28661:4;28535:131;:::i;:::-;28527:139;;28254:419;;;:::o;28679:237::-;28819:34;28815:1;28807:6;28803:14;28796:58;28888:20;28883:2;28875:6;28871:15;28864:45;28679:237;:::o;28922:366::-;29064:3;29085:67;29149:2;29144:3;29085:67;:::i;:::-;29078:74;;29161:93;29250:3;29161:93;:::i;:::-;29279:2;29274:3;29270:12;29263:19;;28922:366;;;:::o;29294:419::-;29460:4;29498:2;29487:9;29483:18;29475:26;;29547:9;29541:4;29537:20;29533:1;29522:9;29518:17;29511:47;29575:131;29701:4;29575:131;:::i;:::-;29567:139;;29294:419;;;:::o;29719:305::-;29759:3;29778:20;29796:1;29778:20;:::i;:::-;29773:25;;29812:20;29830:1;29812:20;:::i;:::-;29807:25;;29966:1;29898:66;29894:74;29891:1;29888:81;29885:107;;;29972:18;;:::i;:::-;29885:107;30016:1;30013;30009:9;30002:16;;29719:305;;;;:::o;30030:98::-;30081:6;30115:5;30109:12;30099:22;;30030:98;;;:::o;30134:168::-;30217:11;30251:6;30246:3;30239:19;30291:4;30286:3;30282:14;30267:29;;30134:168;;;;:::o;30308:360::-;30394:3;30422:38;30454:5;30422:38;:::i;:::-;30476:70;30539:6;30534:3;30476:70;:::i;:::-;30469:77;;30555:52;30600:6;30595:3;30588:4;30581:5;30577:16;30555:52;:::i;:::-;30632:29;30654:6;30632:29;:::i;:::-;30627:3;30623:39;30616:46;;30398:270;30308:360;;;;:::o;30674:640::-;30869:4;30907:3;30896:9;30892:19;30884:27;;30921:71;30989:1;30978:9;30974:17;30965:6;30921:71;:::i;:::-;31002:72;31070:2;31059:9;31055:18;31046:6;31002:72;:::i;:::-;31084;31152:2;31141:9;31137:18;31128:6;31084:72;:::i;:::-;31203:9;31197:4;31193:20;31188:2;31177:9;31173:18;31166:48;31231:76;31302:4;31293:6;31231:76;:::i;:::-;31223:84;;30674:640;;;;;;;:::o;31320:141::-;31376:5;31407:6;31401:13;31392:22;;31423:32;31449:5;31423:32;:::i;:::-;31320:141;;;;:::o;31467:349::-;31536:6;31585:2;31573:9;31564:7;31560:23;31556:32;31553:119;;;31591:79;;:::i;:::-;31553:119;31711:1;31736:63;31791:7;31782:6;31771:9;31767:22;31736:63;:::i;:::-;31726:73;;31682:127;31467:349;;;;:::o
Swarm Source
ipfs://f9077c93421daf5151847fdad4608bae3b34a54431d58f515d445502ec30234f
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,998.57
Net Worth in ETH
1.000444
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,998.57 | 1 | $1,998.57 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.