ERC-721
Overview
Max Total Supply
2,605 MIRA
Holders
1,394
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MIRALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
mirascapes
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-15 */ // File: IERC2981Royalties.sol pragma solidity ^0.8.0; /// @title IERC2981Royalties /// @dev Interface for the ERC2981 - Token Royalty standard interface IERC2981Royalties { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _value - the sale price of the NFT asset specified by _tokenId /// @return _receiver - address of who should be sent the royalty payment /// @return _royaltyAmount - the royalty payment amount for value sale price function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); } // File: IOperatorFilterRegistry.sol pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File: OperatorFilterer.sol pragma solidity ^0.8.13; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from == msg.sender) { _; return; } if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } _; } } // File: RevokableOperatorFilterer.sol pragma solidity ^0.8.13; /** * @title RevokableOperatorFilterer * @notice This contract is meant to allow contracts to permanently opt out of the OperatorFilterRegistry. The Registry * itself has an "unregister" function, but if the contract is ownable, the owner can re-register at any point. * As implemented, this abstract contract allows the contract owner to toggle the * isOperatorFilterRegistryRevoked flag in order to permanently bypass the OperatorFilterRegistry checks. */ abstract contract RevokableOperatorFilterer is OperatorFilterer { error OnlyOwner(); error AlreadyRevoked(); bool private _isOperatorFilterRegistryRevoked; modifier onlyAllowedOperator(address from) override { // Check registry code length to facilitate testing in environments without a deployed registry. if (!_isOperatorFilterRegistryRevoked && address(OPERATOR_FILTER_REGISTRY).code.length > 0) { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from == msg.sender) { _; return; } if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } modifier onlyAllowedOperatorApproval(address operator) override { // Check registry code length to facilitate testing in environments without a deployed registry. if (!_isOperatorFilterRegistryRevoked && address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } _; } /** * @notice Disable the isOperatorFilterRegistryRevoked flag. OnlyOwner. */ function revokeOperatorFilterRegistry() external { if (msg.sender != owner()) { revert OnlyOwner(); } if (_isOperatorFilterRegistryRevoked) { revert AlreadyRevoked(); } _isOperatorFilterRegistryRevoked = true; } function isOperatorFilterRegistryRevoked() public view returns (bool) { return _isOperatorFilterRegistryRevoked; } /** * @dev assume the contract has an owner, but leave specific Ownable implementation up to inheriting contract */ function owner() public view virtual returns (address); } // File: RevokableDefaultOperatorFilterer.sol pragma solidity ^0.8.13; /** * @title RevokableDefaultOperatorFilterer * @notice Inherits from RevokableOperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract RevokableDefaultOperatorFilterer is RevokableOperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: ERC2981Base.sol pragma solidity ^0.8.0; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981Base is ERC165, IERC2981Royalties { struct RoyaltyInfo { address recipient; uint24 amount; } /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceId); } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: TinyERC721.sol pragma solidity ^0.8.0; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error TokenDataQueryForNonexistentToken(); error OwnerQueryForNonexistentToken(); error OperatorQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); contract TinyERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; struct TokenData { address owner; bytes12 aux; } uint256 private immutable _maxBatchSize; mapping(uint256 => TokenData) private _tokens; uint256 private _mintCounter; string private _name; string private _symbol; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { _name = name_; _symbol = symbol_; _maxBatchSize = maxBatchSize_; } function totalSupply() public view virtual returns (uint256) { return _mintCounter; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); uint256 total = totalSupply(); uint256 count; address lastOwner; for (uint256 i; i < total; ++i) { address tokenOwner = _tokens[i].owner; if (tokenOwner != address(0)) lastOwner = tokenOwner; if (lastOwner == owner) ++count; } return count; } function _tokenData(uint256 tokenId) internal view returns (TokenData storage) { if (!_exists(tokenId)) revert TokenDataQueryForNonexistentToken(); TokenData storage token = _tokens[tokenId]; uint256 currentIndex = tokenId; while (token.owner == address(0)) { unchecked { --currentIndex; } token = _tokens[currentIndex]; } return token; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); return _tokenData(tokenId).owner; } function approve(address to, uint256 tokenId) public virtual override { TokenData memory token = _tokenData(tokenId); address owner = token.owner; if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, token); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { TokenData memory token = _tokenData(tokenId); if (!_isApprovedOrOwner(_msgSender(), tokenId, token)) revert TransferCallerNotOwnerNorApproved(); _transfer(from, to, tokenId, token); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { TokenData memory token = _tokenData(tokenId); if (!_isApprovedOrOwner(_msgSender(), tokenId, token)) revert TransferCallerNotOwnerNorApproved(); _safeTransfer(from, to, tokenId, token, _data); } function _safeTransfer( address from, address to, uint256 tokenId, TokenData memory token, bytes memory _data ) internal virtual { _transfer(from, to, tokenId, token); if (to.isContract() && !_checkOnERC721Received(from, to, tokenId, _data)) revert TransferToNonERC721ReceiverImplementer(); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _mintCounter; } function _isApprovedOrOwner( address spender, uint256 tokenId, TokenData memory token ) internal view virtual returns (bool) { address owner = token.owner; return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { uint256 startTokenId = _mintCounter; _mint(to, quantity); if (to.isContract()) { unchecked { for (uint256 i; i < quantity; ++i) { if (!_checkOnERC721Received(address(0), to, startTokenId + i, _data)) revert TransferToNonERC721ReceiverImplementer(); } } } } function _mint(address to, uint256 quantity) internal virtual { if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); uint256 startTokenId = _mintCounter; _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { for (uint256 i; i < quantity; ++i) { if (_maxBatchSize == 0 ? i == 0 : i % _maxBatchSize == 0) { TokenData storage token = _tokens[startTokenId + i]; token.owner = to; token.aux = _calculateAux(address(0), to, startTokenId + i, 0); } emit Transfer(address(0), to, startTokenId + i); } _mintCounter += quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _transfer( address from, address to, uint256 tokenId, TokenData memory token ) internal virtual { if (token.owner != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); _approve(address(0), tokenId, token); unchecked { uint256 nextTokenId = tokenId + 1; if (_exists(nextTokenId)) { TokenData storage nextToken = _tokens[nextTokenId]; if (nextToken.owner == address(0)) { nextToken.owner = token.owner; nextToken.aux = token.aux; } } } TokenData storage newToken = _tokens[tokenId]; newToken.owner = to; newToken.aux = _calculateAux(from, to, tokenId, token.aux); emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function _calculateAux( address from, address to, uint256 tokenId, bytes12 current ) internal view virtual returns (bytes12) {} function _approve( address to, uint256 tokenId, TokenData memory token ) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(token.owner, to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: mirascapes.sol /* ,:. ':. 'OWd. ;0Wo ':' :XMWd. ,0MMO. .dOd:. ,xXWK; .dWMMWd. ,0MMMX; ,kWWXx; .oXMMWk' .OMMMMWd. ,0MMMMWo .oXMMNk; ,kWMMXo. ;XMMMMMWd. ,0MMMMMMk. ;ONMMNk, .oXMMW0; ,l' oWWNNMMMWd. ,0MXKNMMMK, .;OWMMXd' :0WMMNx. 'OWd. .OMXloNMMMWd. ,0WXc;0MMMNl .oXMMWKl. 'xNMMMXl. .xWMk. ;KM0'.lNMMMNd. 'OWXc .kMMMMx. ..'''''..... ;dd, 'dXMMWk, .lKWMMW0; .xWMMO. lWMx. .lNMMMWd. 'OMXc oWMMM0;c00000KKKXXK0Okxd:. .c:. .:c. :XMMXo. 'dXMMXl. ;OWMMWXd. .dWMMM0' .kMWo .oNMMMNd. 'OWXc ..cXMMMX:.'......';coOXWMMO. .lKk' .x0c. .xWMMMW0; ,xNMNx. .dNMMWKo' .oNMMMM0' ,KMX: .oNMMMNd. 'OWXc .:Odc0MMMWo .c0Wk. ,O0;..;Ok, '0MMMMMMK; :OWWk' ,OWMMXo. .:OWMMMMM0' lNM0' .oNMMMNd:OWXc.'kNM0cxMMMMO. .kd. .dK000d. ;KMMMMNK0: .oXWO' cKMMNk, :0WMMNXWMM0' .xMMx. .oNMMMWWWXc.,0WMMXcoWMMMK; ', cKWWK: ;XMMMXc.. lNW0; lXMMKc. ;KMMMK:'kWMO. ,0MWl .lXMMMMXc .OMMMM0,;XMMMNl .l0d::x0l. ,KMMWx. :d;. .lXWXl.cXMWk' ;0WMMNo. lWMO. lNMX: cXMMXc lNMMMMx..OMMMMO. 'k0: .lKx. '0MMNc oWNO; ,OWNKXWKc. .lXMMMNd. oWMO. .'c0WWNd,'. :KKc .xMMMMMx.'OWWWWNkc,'. 'xx' ;kx' '0MMX; ;KMMNd. 'xK0Ox, 'xNMMW0: .xMM0' .,,,,,,,,'. .. .kMMMMMx..',;;;;::;;. .,;clllllll:,. .. .. '0MMX; lNMMWx. .. :0WMMXo. '0MM0' .xMMMMM0' ..:KMMMMWx'. .OMMX; .lNMMNd. .dNMMMK: ;XMMK, cNMMMMNo .xMMMMN: .OMMK; cXMMW0: ;OWMMW0, ;XMMK, .kWMMMMX: .xMMMMX: .kMM0' :KMMMNd. .dNMMMWO' 'OMM0' 'kWMMMMXl. .xMMMMX: .xMWd. ,OWMMWk. ;0WMMWXo. .kMM0' .oXMMMMWk;. .xMMMMX: oWX; 'OWMMWk. cXMMMXo' .OMMO. 'o0WMMMNOl,. .xMMMMX: ;Kk. .dNMMWOlxXMMMK: '0MMk. .;oOXWMMNKkdlc:;;;cdXMMWNO, '. .cKMMMMMMMNk, .kMWd. .,:ldxkO00000OOkxdl:,. ,x0kooOk:. cXXc ... . .. */ // Contract authored by August Rosedale (@augustfr) // https://miragegallery.ai // TinyERC721 used (https://github.com/tajigen/tiny-erc721) pragma solidity ^0.8.17; contract mirascapes is TinyERC721, RevokableDefaultOperatorFilterer, Ownable, ERC2981Base { using Strings for uint256; uint256 public maxSupply = 2605; string private baseURI = "ipfs://bafybeibfdxxdkgntmzzwr72u6p5ugcdqnogbmblw6l3mj4isgwjdqbs7ee/"; bool public metadataFrozen; RoyaltyInfo private _royalties; constructor(string memory name, string memory symbol, address royaltyReceiver) TinyERC721(name, symbol, 0) { _royalties = RoyaltyInfo(royaltyReceiver, uint24(750)); } function updateRoyalties(address recipient, uint256 value) public onlyOwner { require(value <= 10000, "ERC2981Royalties: Too high"); _royalties = RoyaltyInfo(recipient, uint24(value)); } function airdrop(address[] memory addresses, uint256 numberOfTokens) public onlyOwner { uint256 totalToMint = addresses.length * numberOfTokens; require(totalSupply() + totalToMint <= maxSupply, "Would exceed max supply"); for(uint256 i = 0; i < addresses.length; i++) { _safeMint(addresses[i], numberOfTokens, ''); } } function freezeMetadata() public onlyOwner { require(!metadataFrozen, "Already frozen"); metadataFrozen = true; } function tokenURI(uint256 tokenID) public override view returns (string memory) { if (!_exists(tokenID)) revert URIQueryForNonexistentToken(); return string.concat(baseURI,Strings.toString(tokenID)); } function updateURI(string memory _baseTokenURI) external onlyOwner { require(!metadataFrozen, "Metadata is frozen"); baseURI = _baseTokenURI; } function royaltyInfo(uint256, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { RoyaltyInfo memory royalties = _royalties; receiver = royalties.recipient; royaltyAmount = (value * royalties.amount) / 10000; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC2981Base, TinyERC721) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId) || interfaceId == type(IERC2981Royalties).interfaceId; } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } function owner() public view virtual override (Ownable, RevokableOperatorFilterer) returns (address) { return Ownable.owner(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"royaltyReceiver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyRevoked","type":"error"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenDataQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","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":"freezeMetadata","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":[{"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":"isOperatorFilterRegistryRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataFrozen","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeOperatorFilterRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"updateURI","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610a2d600755610120604052604360a0818152906200243760c03960089062000029908262000332565b503480156200003757600080fd5b506040516200247a3803806200247a8339810160408190526200005a91620004ad565b733cc6cdda760b79bafa08df41ecfa224f810dceb6600184846000600262000083848262000332565b50600362000092838262000332565b5060805250506daaeb6d7670e522a718067333cd4e3b15620001dd5780156200012b57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200010c57600080fd5b505af115801562000121573d6000803e3d6000fd5b50505050620001dd565b6001600160a01b038216156200017c5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000f1565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001c357600080fd5b505af1158015620001d8573d6000803e3d6000fd5b505050505b50620001eb90503362000233565b604080518082019091526001600160a01b03919091168082526102ee602090920191909152600a80546001600160b81b03191690911761017760a11b179055506200053a9050565b600680546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002b857607f821691505b602082108103620002d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032d57600081815260208120601f850160051c81016020861015620003085750805b601f850160051c820191505b81811015620003295782815560010162000314565b5050505b505050565b81516001600160401b038111156200034e576200034e6200028d565b62000366816200035f8454620002a3565b84620002df565b602080601f8311600181146200039e5760008415620003855750858301515b600019600386901b1c1916600185901b17855562000329565b600085815260208120601f198616915b82811015620003cf57888601518255948401946001909101908401620003ae565b5085821015620003ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126200041057600080fd5b81516001600160401b03808211156200042d576200042d6200028d565b604051601f8301601f19908116603f011681019082821181831017156200045857620004586200028d565b816040528381526020925086838588010111156200047557600080fd5b600091505b838210156200049957858201830151818301840152908201906200047a565b600093810190920192909252949350505050565b600080600060608486031215620004c357600080fd5b83516001600160401b0380821115620004db57600080fd5b620004e987838801620003fe565b945060208601519150808211156200050057600080fd5b506200050f86828701620003fe565b604086015190935090506001600160a01b03811681146200052f57600080fd5b809150509250925092565b608051611eda6200055d600039600081816115df01526116050152611eda6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80638da5cb5b116100de578063c87b56dd11610097578063e985e9c511610071578063e985e9c514610351578063ecba222a14610364578063f2fde38b1461036f578063fb3cc6c21461038257600080fd5b8063c87b56dd1461032d578063d111515d14610340578063d5abeb011461034857600080fd5b80638da5cb5b146102c357806395d89b41146102d9578063a22cb465146102e1578063b88d4fde146102f4578063c204642c14610307578063c30f4a5a1461031a57600080fd5b80632a55205a1161014b5780636352211e116101255780636352211e146102825780636c2f5acd1461029557806370a08231146102a8578063715018a6146102bb57600080fd5b80632a55205a1461023557806342842e0e146102675780635ef9432a1461027a57600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb57806318160ddd1461021057806323b872dd14610222575b600080fd5b6101a66101a13660046117b0565b61038f565b60405190151581526020015b60405180910390f35b6101c36103f0565b6040516101b29190611824565b6101e36101de366004611837565b610482565b6040516001600160a01b0390911681526020016101b2565b61020e61020936600461186c565b6104c8565b005b6001545b6040519081526020016101b2565b61020e610230366004611896565b6105a8565b6102486102433660046118d2565b610693565b604080516001600160a01b0390931683526020830191909152016101b2565b61020e610275366004611896565b6106e8565b61020e6107c8565b6101e3610290366004611837565b61083d565b61020e6102a336600461186c565b610880565b6102146102b63660046118f4565b610924565b61020e6109ca565b60065461010090046001600160a01b03166101e3565b6101c36109de565b61020e6102ef36600461191d565b6109ed565b61020e6103023660046119f3565b610ac3565b61020e610315366004611a6f565b610bb1565b61020e610328366004611b22565b610c80565b6101c361033b366004611837565b610ce0565b61020e610d3c565b61021460075481565b6101a661035f366004611b6b565b610d97565b60065460ff166101a6565b61020e61037d3660046118f4565b610dc5565b6009546101a69060ff1681565b60006001600160e01b031982166380ac58cd60e01b14806103c057506001600160e01b03198216635b5e139f60e01b145b806103cf57506103cf82610e3e565b806103ea57506001600160e01b0319821663152a902d60e11b145b92915050565b6060600280546103ff90611b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461042b90611b9e565b80156104785780601f1061044d57610100808354040283529160200191610478565b820191906000526020600020905b81548152906001019060200180831161045b57829003601f168201915b5050505050905090565b600061048f826001541190565b6104ac576040516333d1c03960e21b815260040160405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600654829060ff161580156104eb57506daaeb6d7670e522a718067333cd4e3b15155b1561059957604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c9190611bd8565b61059957604051633b79c77360e21b81526001600160a01b03821660048201526024015b60405180910390fd5b6105a38383610e63565b505050565b600654839060ff161580156105cb57506daaeb6d7670e522a718067333cd4e3b15155b1561068257336001600160a01b038216036105f0576105eb848484610f11565b61068d565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561063f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106639190611bd8565b61068257604051633b79c77360e21b8152336004820152602401610590565b61068d848484610f11565b50505050565b60408051808201909152600a546001600160a01b038116808352600160a01b90910462ffffff16602083018190529091600091612710906106d49086611c0b565b6106de9190611c38565b9150509250929050565b600654839060ff1615801561070b57506daaeb6d7670e522a718067333cd4e3b15155b156107bd57336001600160a01b0382160361072b576105eb848484610f83565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e9190611bd8565b6107bd57604051633b79c77360e21b8152336004820152602401610590565b61068d848484610f83565b60065461010090046001600160a01b03166001600160a01b0316336001600160a01b03161461080a57604051635fc483c560e01b815260040160405180910390fd5b60065460ff161561082e5760405163905e710760e01b815260040160405180910390fd5b6006805460ff19166001179055565b600061084a826001541190565b61086757604051636f96cda160e11b815260040160405180910390fd5b61087082610f9e565b546001600160a01b031692915050565b610888611007565b6127108111156108da5760405162461bcd60e51b815260206004820152601a60248201527f45524332393831526f79616c746965733a20546f6f20686967680000000000006044820152606401610590565b604080518082019091526001600160a01b0390921680835262ffffff9091166020909201829052600a8054600160a01b9093026001600160b81b0319909316909117919091179055565b60006001600160a01b03821661094d576040516323d3ad8160e21b815260040160405180910390fd5b600061095860015490565b905060008060005b838110156109c0576000818152602081905260409020546001600160a01b0316801561098a578092505b866001600160a01b0316836001600160a01b0316036109af576109ac84611c4c565b93505b506109b981611c4c565b9050610960565b5090949350505050565b6109d2611007565b6109dc6000611067565b565b6060600380546103ff90611b9e565b600654829060ff16158015610a1057506daaeb6d7670e522a718067333cd4e3b15155b15610ab957604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611bd8565b610ab957604051633b79c77360e21b81526001600160a01b0382166004820152602401610590565b6105a383836110c1565b600654849060ff16158015610ae657506daaeb6d7670e522a718067333cd4e3b15155b15610b9e57336001600160a01b03821603610b0c57610b0785858585611156565b610baa565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f9190611bd8565b610b9e57604051633b79c77360e21b8152336004820152602401610590565b610baa85858585611156565b5050505050565b610bb9611007565b6000818351610bc89190611c0b565b905060075481610bd760015490565b610be19190611c65565b1115610c2f5760405162461bcd60e51b815260206004820152601760248201527f576f756c6420657863656564206d617820737570706c790000000000000000006044820152606401610590565b60005b835181101561068d57610c6e848281518110610c5057610c50611c78565b602002602001015184604051806020016040528060008152506111c9565b80610c7881611c4c565b915050610c32565b610c88611007565b60095460ff1615610cd05760405162461bcd60e51b815260206004820152601260248201527126b2ba30b230ba309034b990333937bd32b760711b6044820152606401610590565b6008610cdc8282611cdc565b5050565b6060610ced826001541190565b610d0a57604051630a14c4b560e41b815260040160405180910390fd5b6008610d1583611225565b604051602001610d26929190611d9c565b6040516020818303038152906040529050919050565b610d44611007565b60095460ff1615610d885760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c90333937bd32b760911b6044820152606401610590565b6009805460ff19166001179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610dcd611007565b6001600160a01b038116610e325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610590565b610e3b81611067565b50565b60006001600160e01b0319821663152a902d60e11b14806103ea57506103ea8261132e565b6000610e6e82610f9e565b6040805180820190915290546001600160a01b03808216808452600160a01b90920460a01b6001600160a01b0319166020840152919250908416819003610ec85760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610ee85750610ee68133610d97565b155b15610f06576040516367d9dca160e11b815260040160405180910390fd5b61068d84848461137e565b6000610f1c82610f9e565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b03191660208201529050610f5a3383836113df565b610f7757604051632ce44b5f60e11b815260040160405180910390fd5b61068d84848484611430565b6105a383838360405180602001604052806000815250610ac3565b6000610fab826001541190565b610fc8576040516319086e6360e11b815260040160405180910390fd5b6000828152602081905260409020825b81546001600160a01b0316611000576000190160008181526020819052604090209150610fd8565b5092915050565b6006546001600160a01b036101009091041633146109dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610590565b600680546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b336001600160a01b038316036110ea5760405163b06307db60e01b815260040160405180910390fd5b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600061116183610f9e565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b0319166020820152905061119f3384836113df565b6111bc57604051632ce44b5f60e11b815260040160405180910390fd5b610baa858585848661153c565b6001546111d68484611588565b6001600160a01b0384163b1561068d5760005b83811015610baa57611200600086838501866116af565b61121d576040516368d2bf6b60e11b815260040160405180910390fd5b6001016111e9565b60608160000361124c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611276578061126081611c4c565b915061126f9050600a83611c38565b9150611250565b60008167ffffffffffffffff81111561129157611291611954565b6040519080825280601f01601f1916602001820160405280156112bb576020820181803683370190505b5090505b8415611326576112d0600183611e23565b91506112dd600a86611e36565b6112e8906030611c65565b60f81b8183815181106112fd576112fd611c78565b60200101906001600160f81b031916908160001a90535061131f600a86611c38565b94506112bf565b949350505050565b60006001600160e01b031982166380ac58cd60e01b148061135f57506001600160e01b03198216635b5e139f60e01b145b806103ea57506301ffc9a760e01b6001600160e01b03198316146103ea565b60008281526004602052604080822080546001600160a01b0319166001600160a01b038781169182179092558451925186949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b80516000906001600160a01b03858116908216148061140357506114038186610d97565b806114275750846001600160a01b031661141c85610482565b6001600160a01b0316145b95945050505050565b836001600160a01b031681600001516001600160a01b0316146114655760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03831661148c57604051633a954ecd60e21b815260040160405180910390fd5b6114986000838361137e565b600182016114a7816001541190565b156114ea57600081815260208190526040902080546001600160a01b03166114e8578251602084015160a01c600160a01b026001600160a01b039091161781555b505b506000828152602081905260408082206001600160a01b0386811680835592519193869392918916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4610baa565b61154885858585611430565b6001600160a01b0384163b1515801561156a5750611568858585846116af565b155b15610baa576040516368d2bf6b60e11b815260040160405180910390fd5b6001600160a01b0382166115ae57604051622e076360e81b815260040160405180910390fd5b806000036115cf5760405163b562e8dd60e01b815260040160405180910390fd5b60015460005b828110156116a1577f000000000000000000000000000000000000000000000000000000000000000015611639577f0000000000000000000000000000000000000000000000000000000000000000818161163257611632611c22565b061561163c565b80155b1561165f5781810160009081526020819052604090206001600160a01b03851690555b604051828201906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46001016115d5565b506001805483019055505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906116e4903390899088908890600401611e4a565b6020604051808303816000875af192505050801561171f575060408051601f3d908101601f1916820190925261171c91810190611e87565b60015b61177d573d80801561174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b508051600003611775576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001600160e01b031981168114610e3b57600080fd5b6000602082840312156117c257600080fd5b81356117cd8161179a565b9392505050565b60005b838110156117ef5781810151838201526020016117d7565b50506000910152565b600081518084526118108160208601602086016117d4565b601f01601f19169290920160200192915050565b6020815260006117cd60208301846117f8565b60006020828403121561184957600080fd5b5035919050565b80356001600160a01b038116811461186757600080fd5b919050565b6000806040838503121561187f57600080fd5b61188883611850565b946020939093013593505050565b6000806000606084860312156118ab57600080fd5b6118b484611850565b92506118c260208501611850565b9150604084013590509250925092565b600080604083850312156118e557600080fd5b50508035926020909101359150565b60006020828403121561190657600080fd5b6117cd82611850565b8015158114610e3b57600080fd5b6000806040838503121561193057600080fd5b61193983611850565b915060208301356119498161190f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561199357611993611954565b604052919050565b600067ffffffffffffffff8311156119b5576119b5611954565b6119c8601f8401601f191660200161196a565b90508281528383830111156119dc57600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215611a0957600080fd5b611a1285611850565b9350611a2060208601611850565b925060408501359150606085013567ffffffffffffffff811115611a4357600080fd5b8501601f81018713611a5457600080fd5b611a638782356020840161199b565b91505092959194509250565b60008060408385031215611a8257600080fd5b823567ffffffffffffffff80821115611a9a57600080fd5b818501915085601f830112611aae57600080fd5b8135602082821115611ac257611ac2611954565b8160051b9250611ad381840161196a565b8281529284018101928181019089851115611aed57600080fd5b948201945b84861015611b1257611b0386611850565b82529482019490820190611af2565b9997909101359750505050505050565b600060208284031215611b3457600080fd5b813567ffffffffffffffff811115611b4b57600080fd5b8201601f81018413611b5c57600080fd5b6113268482356020840161199b565b60008060408385031215611b7e57600080fd5b611b8783611850565b9150611b9560208401611850565b90509250929050565b600181811c90821680611bb257607f821691505b602082108103611bd257634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611bea57600080fd5b81516117cd8161190f565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ea576103ea611bf5565b634e487b7160e01b600052601260045260246000fd5b600082611c4757611c47611c22565b500490565b600060018201611c5e57611c5e611bf5565b5060010190565b808201808211156103ea576103ea611bf5565b634e487b7160e01b600052603260045260246000fd5b601f8211156105a357600081815260208120601f850160051c81016020861015611cb55750805b601f850160051c820191505b81811015611cd457828155600101611cc1565b505050505050565b815167ffffffffffffffff811115611cf657611cf6611954565b611d0a81611d048454611b9e565b84611c8e565b602080601f831160018114611d3f5760008415611d275750858301515b600019600386901b1c1916600185901b178555611cd4565b600085815260208120601f198616915b82811015611d6e57888601518255948401946001909101908401611d4f565b5085821015611d8c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611daa81611b9e565b60018281168015611dc25760018114611dd757611e06565b60ff1984168752821515830287019450611e06565b8860005260208060002060005b85811015611dfd5781548a820152908401908201611de4565b50505082870194505b505050508351611e1a8183602088016117d4565b01949350505050565b818103818111156103ea576103ea611bf5565b600082611e4557611e45611c22565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e7d908301846117f8565b9695505050505050565b600060208284031215611e9957600080fd5b81516117cd8161179a56fea264697066735822122088fc4a80a369d01a95e8fd883ca19fd17a434887056ab1fe17e19dee5352a4b864736f6c63430008110033697066733a2f2f626166796265696266647878646b676e746d7a7a777237327536703575676364716e6f67626d626c77366c336d6a34697367776a647162733765652f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000396d1d45847befd45e07bb489ac47f63687cbf33000000000000000000000000000000000000000000000000000000000000000a4d6972617363617065730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d49524100000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80638da5cb5b116100de578063c87b56dd11610097578063e985e9c511610071578063e985e9c514610351578063ecba222a14610364578063f2fde38b1461036f578063fb3cc6c21461038257600080fd5b8063c87b56dd1461032d578063d111515d14610340578063d5abeb011461034857600080fd5b80638da5cb5b146102c357806395d89b41146102d9578063a22cb465146102e1578063b88d4fde146102f4578063c204642c14610307578063c30f4a5a1461031a57600080fd5b80632a55205a1161014b5780636352211e116101255780636352211e146102825780636c2f5acd1461029557806370a08231146102a8578063715018a6146102bb57600080fd5b80632a55205a1461023557806342842e0e146102675780635ef9432a1461027a57600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb57806318160ddd1461021057806323b872dd14610222575b600080fd5b6101a66101a13660046117b0565b61038f565b60405190151581526020015b60405180910390f35b6101c36103f0565b6040516101b29190611824565b6101e36101de366004611837565b610482565b6040516001600160a01b0390911681526020016101b2565b61020e61020936600461186c565b6104c8565b005b6001545b6040519081526020016101b2565b61020e610230366004611896565b6105a8565b6102486102433660046118d2565b610693565b604080516001600160a01b0390931683526020830191909152016101b2565b61020e610275366004611896565b6106e8565b61020e6107c8565b6101e3610290366004611837565b61083d565b61020e6102a336600461186c565b610880565b6102146102b63660046118f4565b610924565b61020e6109ca565b60065461010090046001600160a01b03166101e3565b6101c36109de565b61020e6102ef36600461191d565b6109ed565b61020e6103023660046119f3565b610ac3565b61020e610315366004611a6f565b610bb1565b61020e610328366004611b22565b610c80565b6101c361033b366004611837565b610ce0565b61020e610d3c565b61021460075481565b6101a661035f366004611b6b565b610d97565b60065460ff166101a6565b61020e61037d3660046118f4565b610dc5565b6009546101a69060ff1681565b60006001600160e01b031982166380ac58cd60e01b14806103c057506001600160e01b03198216635b5e139f60e01b145b806103cf57506103cf82610e3e565b806103ea57506001600160e01b0319821663152a902d60e11b145b92915050565b6060600280546103ff90611b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461042b90611b9e565b80156104785780601f1061044d57610100808354040283529160200191610478565b820191906000526020600020905b81548152906001019060200180831161045b57829003601f168201915b5050505050905090565b600061048f826001541190565b6104ac576040516333d1c03960e21b815260040160405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600654829060ff161580156104eb57506daaeb6d7670e522a718067333cd4e3b15155b1561059957604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c9190611bd8565b61059957604051633b79c77360e21b81526001600160a01b03821660048201526024015b60405180910390fd5b6105a38383610e63565b505050565b600654839060ff161580156105cb57506daaeb6d7670e522a718067333cd4e3b15155b1561068257336001600160a01b038216036105f0576105eb848484610f11565b61068d565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561063f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106639190611bd8565b61068257604051633b79c77360e21b8152336004820152602401610590565b61068d848484610f11565b50505050565b60408051808201909152600a546001600160a01b038116808352600160a01b90910462ffffff16602083018190529091600091612710906106d49086611c0b565b6106de9190611c38565b9150509250929050565b600654839060ff1615801561070b57506daaeb6d7670e522a718067333cd4e3b15155b156107bd57336001600160a01b0382160361072b576105eb848484610f83565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e9190611bd8565b6107bd57604051633b79c77360e21b8152336004820152602401610590565b61068d848484610f83565b60065461010090046001600160a01b03166001600160a01b0316336001600160a01b03161461080a57604051635fc483c560e01b815260040160405180910390fd5b60065460ff161561082e5760405163905e710760e01b815260040160405180910390fd5b6006805460ff19166001179055565b600061084a826001541190565b61086757604051636f96cda160e11b815260040160405180910390fd5b61087082610f9e565b546001600160a01b031692915050565b610888611007565b6127108111156108da5760405162461bcd60e51b815260206004820152601a60248201527f45524332393831526f79616c746965733a20546f6f20686967680000000000006044820152606401610590565b604080518082019091526001600160a01b0390921680835262ffffff9091166020909201829052600a8054600160a01b9093026001600160b81b0319909316909117919091179055565b60006001600160a01b03821661094d576040516323d3ad8160e21b815260040160405180910390fd5b600061095860015490565b905060008060005b838110156109c0576000818152602081905260409020546001600160a01b0316801561098a578092505b866001600160a01b0316836001600160a01b0316036109af576109ac84611c4c565b93505b506109b981611c4c565b9050610960565b5090949350505050565b6109d2611007565b6109dc6000611067565b565b6060600380546103ff90611b9e565b600654829060ff16158015610a1057506daaeb6d7670e522a718067333cd4e3b15155b15610ab957604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611bd8565b610ab957604051633b79c77360e21b81526001600160a01b0382166004820152602401610590565b6105a383836110c1565b600654849060ff16158015610ae657506daaeb6d7670e522a718067333cd4e3b15155b15610b9e57336001600160a01b03821603610b0c57610b0785858585611156565b610baa565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f9190611bd8565b610b9e57604051633b79c77360e21b8152336004820152602401610590565b610baa85858585611156565b5050505050565b610bb9611007565b6000818351610bc89190611c0b565b905060075481610bd760015490565b610be19190611c65565b1115610c2f5760405162461bcd60e51b815260206004820152601760248201527f576f756c6420657863656564206d617820737570706c790000000000000000006044820152606401610590565b60005b835181101561068d57610c6e848281518110610c5057610c50611c78565b602002602001015184604051806020016040528060008152506111c9565b80610c7881611c4c565b915050610c32565b610c88611007565b60095460ff1615610cd05760405162461bcd60e51b815260206004820152601260248201527126b2ba30b230ba309034b990333937bd32b760711b6044820152606401610590565b6008610cdc8282611cdc565b5050565b6060610ced826001541190565b610d0a57604051630a14c4b560e41b815260040160405180910390fd5b6008610d1583611225565b604051602001610d26929190611d9c565b6040516020818303038152906040529050919050565b610d44611007565b60095460ff1615610d885760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c90333937bd32b760911b6044820152606401610590565b6009805460ff19166001179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610dcd611007565b6001600160a01b038116610e325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610590565b610e3b81611067565b50565b60006001600160e01b0319821663152a902d60e11b14806103ea57506103ea8261132e565b6000610e6e82610f9e565b6040805180820190915290546001600160a01b03808216808452600160a01b90920460a01b6001600160a01b0319166020840152919250908416819003610ec85760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610ee85750610ee68133610d97565b155b15610f06576040516367d9dca160e11b815260040160405180910390fd5b61068d84848461137e565b6000610f1c82610f9e565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b03191660208201529050610f5a3383836113df565b610f7757604051632ce44b5f60e11b815260040160405180910390fd5b61068d84848484611430565b6105a383838360405180602001604052806000815250610ac3565b6000610fab826001541190565b610fc8576040516319086e6360e11b815260040160405180910390fd5b6000828152602081905260409020825b81546001600160a01b0316611000576000190160008181526020819052604090209150610fd8565b5092915050565b6006546001600160a01b036101009091041633146109dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610590565b600680546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b336001600160a01b038316036110ea5760405163b06307db60e01b815260040160405180910390fd5b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600061116183610f9e565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b0319166020820152905061119f3384836113df565b6111bc57604051632ce44b5f60e11b815260040160405180910390fd5b610baa858585848661153c565b6001546111d68484611588565b6001600160a01b0384163b1561068d5760005b83811015610baa57611200600086838501866116af565b61121d576040516368d2bf6b60e11b815260040160405180910390fd5b6001016111e9565b60608160000361124c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611276578061126081611c4c565b915061126f9050600a83611c38565b9150611250565b60008167ffffffffffffffff81111561129157611291611954565b6040519080825280601f01601f1916602001820160405280156112bb576020820181803683370190505b5090505b8415611326576112d0600183611e23565b91506112dd600a86611e36565b6112e8906030611c65565b60f81b8183815181106112fd576112fd611c78565b60200101906001600160f81b031916908160001a90535061131f600a86611c38565b94506112bf565b949350505050565b60006001600160e01b031982166380ac58cd60e01b148061135f57506001600160e01b03198216635b5e139f60e01b145b806103ea57506301ffc9a760e01b6001600160e01b03198316146103ea565b60008281526004602052604080822080546001600160a01b0319166001600160a01b038781169182179092558451925186949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b80516000906001600160a01b03858116908216148061140357506114038186610d97565b806114275750846001600160a01b031661141c85610482565b6001600160a01b0316145b95945050505050565b836001600160a01b031681600001516001600160a01b0316146114655760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03831661148c57604051633a954ecd60e21b815260040160405180910390fd5b6114986000838361137e565b600182016114a7816001541190565b156114ea57600081815260208190526040902080546001600160a01b03166114e8578251602084015160a01c600160a01b026001600160a01b039091161781555b505b506000828152602081905260408082206001600160a01b0386811680835592519193869392918916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4610baa565b61154885858585611430565b6001600160a01b0384163b1515801561156a5750611568858585846116af565b155b15610baa576040516368d2bf6b60e11b815260040160405180910390fd5b6001600160a01b0382166115ae57604051622e076360e81b815260040160405180910390fd5b806000036115cf5760405163b562e8dd60e01b815260040160405180910390fd5b60015460005b828110156116a1577f000000000000000000000000000000000000000000000000000000000000000015611639577f0000000000000000000000000000000000000000000000000000000000000000818161163257611632611c22565b061561163c565b80155b1561165f5781810160009081526020819052604090206001600160a01b03851690555b604051828201906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46001016115d5565b506001805483019055505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906116e4903390899088908890600401611e4a565b6020604051808303816000875af192505050801561171f575060408051601f3d908101601f1916820190925261171c91810190611e87565b60015b61177d573d80801561174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b508051600003611775576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001600160e01b031981168114610e3b57600080fd5b6000602082840312156117c257600080fd5b81356117cd8161179a565b9392505050565b60005b838110156117ef5781810151838201526020016117d7565b50506000910152565b600081518084526118108160208601602086016117d4565b601f01601f19169290920160200192915050565b6020815260006117cd60208301846117f8565b60006020828403121561184957600080fd5b5035919050565b80356001600160a01b038116811461186757600080fd5b919050565b6000806040838503121561187f57600080fd5b61188883611850565b946020939093013593505050565b6000806000606084860312156118ab57600080fd5b6118b484611850565b92506118c260208501611850565b9150604084013590509250925092565b600080604083850312156118e557600080fd5b50508035926020909101359150565b60006020828403121561190657600080fd5b6117cd82611850565b8015158114610e3b57600080fd5b6000806040838503121561193057600080fd5b61193983611850565b915060208301356119498161190f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561199357611993611954565b604052919050565b600067ffffffffffffffff8311156119b5576119b5611954565b6119c8601f8401601f191660200161196a565b90508281528383830111156119dc57600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215611a0957600080fd5b611a1285611850565b9350611a2060208601611850565b925060408501359150606085013567ffffffffffffffff811115611a4357600080fd5b8501601f81018713611a5457600080fd5b611a638782356020840161199b565b91505092959194509250565b60008060408385031215611a8257600080fd5b823567ffffffffffffffff80821115611a9a57600080fd5b818501915085601f830112611aae57600080fd5b8135602082821115611ac257611ac2611954565b8160051b9250611ad381840161196a565b8281529284018101928181019089851115611aed57600080fd5b948201945b84861015611b1257611b0386611850565b82529482019490820190611af2565b9997909101359750505050505050565b600060208284031215611b3457600080fd5b813567ffffffffffffffff811115611b4b57600080fd5b8201601f81018413611b5c57600080fd5b6113268482356020840161199b565b60008060408385031215611b7e57600080fd5b611b8783611850565b9150611b9560208401611850565b90509250929050565b600181811c90821680611bb257607f821691505b602082108103611bd257634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611bea57600080fd5b81516117cd8161190f565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ea576103ea611bf5565b634e487b7160e01b600052601260045260246000fd5b600082611c4757611c47611c22565b500490565b600060018201611c5e57611c5e611bf5565b5060010190565b808201808211156103ea576103ea611bf5565b634e487b7160e01b600052603260045260246000fd5b601f8211156105a357600081815260208120601f850160051c81016020861015611cb55750805b601f850160051c820191505b81811015611cd457828155600101611cc1565b505050505050565b815167ffffffffffffffff811115611cf657611cf6611954565b611d0a81611d048454611b9e565b84611c8e565b602080601f831160018114611d3f5760008415611d275750858301515b600019600386901b1c1916600185901b178555611cd4565b600085815260208120601f198616915b82811015611d6e57888601518255948401946001909101908401611d4f565b5085821015611d8c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611daa81611b9e565b60018281168015611dc25760018114611dd757611e06565b60ff1984168752821515830287019450611e06565b8860005260208060002060005b85811015611dfd5781548a820152908401908201611de4565b50505082870194505b505050508351611e1a8183602088016117d4565b01949350505050565b818103818111156103ea576103ea611bf5565b600082611e4557611e45611c22565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e7d908301846117f8565b9695505050505050565b600060208284031215611e9957600080fd5b81516117cd8161179a56fea264697066735822122088fc4a80a369d01a95e8fd883ca19fd17a434887056ab1fe17e19dee5352a4b864736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000396d1d45847befd45e07bb489ac47f63687cbf33000000000000000000000000000000000000000000000000000000000000000a4d6972617363617065730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d49524100000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Mirascapes
Arg [1] : symbol (string): MIRA
Arg [2] : royaltyReceiver (address): 0x396D1d45847bEfd45E07bb489ac47f63687cbF33
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000396d1d45847befd45e07bb489ac47f63687cbf33
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 4d69726173636170657300000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4d49524100000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46589:3374:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48569:338;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;48569:338:0;;;;;;;;34451:94;;;:::i;:::-;;;;;;;:::i;36520:202::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;36520:202:0;1533:203:1;49099:157:0;;;;;;:::i;:::-;;:::i;:::-;;34065:93;34140:12;;34065:93;;;2324:25:1;;;2312:2;2297:18;34065:93:0;2178:177:1;49264:163:0;;;;;;:::i;:::-;;:::i;48281:280::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3138:32:1;;;3120:51;;3202:2;3187:18;;3180:34;;;;3093:18;48281:280:0;2946:274:1;49435:171:0;;;;;;:::i;:::-;;:::i;7650:287::-;;;:::i;35925:194::-;;;;;;:::i;:::-;;:::i;47129:209::-;;;;;;:::i;:::-;;:::i;35058:450::-;;;;;;:::i;:::-;;:::i;14056:103::-;;;:::i;49818:142::-;13481:6;;;;;-1:-1:-1;;;;;13481:6:0;49818:142;;34551:98;;;:::i;48915:176::-;;;;;;:::i;:::-;;:::i;49614:196::-;;;;;;:::i;:::-;;:::i;47346:373::-;;;;;;:::i;:::-;;:::i;48107:166::-;;;;;;:::i;:::-;;:::i;47871:228::-;;;;;;:::i;:::-;;:::i;47727:136::-;;;:::i;46720:31::-;;;;;;37007:158;;;;;;:::i;:::-;;:::i;7945:128::-;8033:32;;;;7945:128;;14314:201;;;;;;:::i;:::-;;:::i;46863:26::-;;;;;;;;;48569:338;48679:4;-1:-1:-1;;;;;;48704:40:0;;-1:-1:-1;;;48704:40:0;;:92;;-1:-1:-1;;;;;;;48748:48:0;;-1:-1:-1;;;48748:48:0;48704:92;:141;;;;48809:36;48833:11;48809:23;:36::i;:::-;48704:195;;;-1:-1:-1;;;;;;;48849:50:0;;-1:-1:-1;;;48849:50:0;48704:195;48697:202;48569:338;-1:-1:-1;;48569:338:0:o;34451:94::-;34505:13;34534:5;34527:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34451:94;:::o;36520:202::-;36596:7;36617:16;36625:7;38465:12;;-1:-1:-1;38455:22:0;38370:113;36617:16;36612:64;;36642:34;;-1:-1:-1;;;36642:34:0;;;;;;;;;;;36612:64;-1:-1:-1;36692:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;36692:24:0;;36520:202::o;49099:157::-;7271:32;;49195:8;;7271:32;;7270:33;:86;;;;-1:-1:-1;3424:42:0;7307:45;:49;;7270:86;7266:262;;;7378:67;;-1:-1:-1;;;7378:67:0;;7429:4;7378:67;;;7697:34:1;-1:-1:-1;;;;;7767:15:1;;7747:18;;;7740:43;3424:42:0;;7378;;7632:18:1;;7378:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7373:144;;7473:28;;-1:-1:-1;;;7473:28:0;;-1:-1:-1;;;;;1697:32:1;;7473:28:0;;;1679:51:1;1652:18;;7473:28:0;;;;;;;;7373:144;49216:32:::1;49230:8;49240:7;49216:13;:32::i;:::-;49099:157:::0;;;:::o;49264:163::-;6487:32;;49365:4;;6487:32;;6486:33;:86;;;;-1:-1:-1;3424:42:0;6523:45;:49;;6486:86;6482:576;;;6812:10;-1:-1:-1;;;;;6804:18:0;;;6800:85;;49382:37:::1;49401:4;49407:2;49411:7;49382:18;:37::i;:::-;6863:7:::0;;6800:85;6904:69;;-1:-1:-1;;;6904:69:0;;6955:4;6904:69;;;7697:34:1;6962:10:0;7747:18:1;;;7740:43;3424:42:0;;6904;;7632:18:1;;6904:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6899:148;;7001:30;;-1:-1:-1;;;7001:30:0;;7020:10;7001:30;;;1679:51:1;1652:18;;7001:30:0;1533:203:1;6899:148:0;49382:37:::1;49401:4;49407:2;49411:7;49382:18;:37::i;:::-;49264:163:::0;;;;:::o;48281:280::-;48410:41;;;;;;;;;48441:10;48410:41;-1:-1:-1;;;;;48410:41:0;;;;;-1:-1:-1;;;48410:41:0;;;;;;;;;;;;;-1:-1:-1;;48548:5:0;;48520:24;;:5;:24;:::i;:::-;48519:34;;;;:::i;:::-;48503:50;;48399:162;48281:280;;;;;:::o;49435:171::-;6487:32;;49540:4;;6487:32;;6486:33;:86;;;;-1:-1:-1;3424:42:0;6523:45;:49;;6486:86;6482:576;;;6812:10;-1:-1:-1;;;;;6804:18:0;;;6800:85;;49557:41:::1;49580:4;49586:2;49590:7;49557:22;:41::i;6800:85::-:0;6904:69;;-1:-1:-1;;;6904:69:0;;6955:4;6904:69;;;7697:34:1;6962:10:0;7747:18:1;;;7740:43;3424:42:0;;6904;;7632:18:1;;6904:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6899:148;;7001:30;;-1:-1:-1;;;7001:30:0;;7020:10;7001:30;;;1679:51:1;1652:18;;7001:30:0;1533:203:1;6899:148:0;49557:41:::1;49580:4;49586:2;49590:7;49557:22;:41::i;7650:287::-:0;13481:6;;;;;-1:-1:-1;;;;;13481:6:0;-1:-1:-1;;;;;7714:21:0;:10;-1:-1:-1;;;;;7714:21:0;;7710:72;;7759:11;;-1:-1:-1;;;7759:11:0;;;;;;;;;;;7710:72;7796:32;;;;7792:88;;;7852:16;;-1:-1:-1;;;7852:16:0;;;;;;;;;;;7792:88;7890:32;:39;;-1:-1:-1;;7890:39:0;7925:4;7890:39;;;7650:287::o;35925:194::-;35997:7;36018:16;36026:7;38465:12;;-1:-1:-1;38455:22:0;38370:113;36018:16;36013:61;;36043:31;;-1:-1:-1;;;36043:31:0;;;;;;;;;;;36013:61;36088:19;36099:7;36088:10;:19::i;:::-;:25;-1:-1:-1;;;;;36088:25:0;;35925:194;-1:-1:-1;;35925:194:0:o;47129:209::-;13294:13;:11;:13::i;:::-;47233:5:::1;47224;:14;;47216:53;;;::::0;-1:-1:-1;;;47216:53:0;;8808:2:1;47216:53:0::1;::::0;::::1;8790:21:1::0;8847:2;8827:18;;;8820:30;8886:28;8866:18;;;8859:56;8932:18;;47216:53:0::1;8606:350:1::0;47216:53:0::1;47293:37;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;47293:37:0;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;47280:10:::1;:50:::0;;-1:-1:-1;;;47280:50:0;;::::1;-1:-1:-1::0;;;;;;47280:50:0;;;;;;;;;::::1;::::0;;47129:209::o;35058:450::-;35130:7;-1:-1:-1;;;;;35150:19:0;;35146:60;;35178:28;;-1:-1:-1;;;35178:28:0;;;;;;;;;;;35146:60;35215:13;35231;34140:12;;;34065:93;35231:13;35215:29;;35251:13;35271:17;35300:9;35295:187;35315:5;35311:1;:9;35295:187;;;35336:18;35357:10;;;;;;;;;;:16;-1:-1:-1;;;;;35357:16:0;35386:24;;35382:52;;35424:10;35412:22;;35382:52;35460:5;-1:-1:-1;;;;;35447:18:0;:9;-1:-1:-1;;;;;35447:18:0;;35443:31;;35467:7;;;:::i;:::-;;;35443:31;-1:-1:-1;35322:3:0;;;:::i;:::-;;;35295:187;;;-1:-1:-1;35497:5:0;;35058:450;-1:-1:-1;;;;35058:450:0:o;14056:103::-;13294:13;:11;:13::i;:::-;14121:30:::1;14148:1;14121:18;:30::i;:::-;14056:103::o:0;34551:98::-;34607:13;34636:7;34629:14;;;;;:::i;48915:176::-;7271:32;;49019:8;;7271:32;;7270:33;:86;;;;-1:-1:-1;3424:42:0;7307:45;:49;;7270:86;7266:262;;;7378:67;;-1:-1:-1;;;7378:67:0;;7429:4;7378:67;;;7697:34:1;-1:-1:-1;;;;;7767:15:1;;7747:18;;;7740:43;3424:42:0;;7378;;7632:18:1;;7378:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7373:144;;7473:28;;-1:-1:-1;;;7473:28:0;;-1:-1:-1;;;;;1697:32:1;;7473:28:0;;;1679:51:1;1652:18;;7473:28:0;1533:203:1;7373:144:0;49040:43:::1;49064:8;49074;49040:23;:43::i;49614:196::-:0;6487:32;;49738:4;;6487:32;;6486:33;:86;;;;-1:-1:-1;3424:42:0;6523:45;:49;;6486:86;6482:576;;;6812:10;-1:-1:-1;;;;;6804:18:0;;;6800:85;;49755:47:::1;49778:4;49784:2;49788:7;49797:4;49755:22;:47::i;:::-;6863:7:::0;;6800:85;6904:69;;-1:-1:-1;;;6904:69:0;;6955:4;6904:69;;;7697:34:1;6962:10:0;7747:18:1;;;7740:43;3424:42:0;;6904;;7632:18:1;;6904:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6899:148;;7001:30;;-1:-1:-1;;;7001:30:0;;7020:10;7001:30;;;1679:51:1;1652:18;;7001:30:0;1533:203:1;6899:148:0;49755:47:::1;49778:4;49784:2;49788:7;49797:4;49755:22;:47::i;:::-;49614:196:::0;;;;;:::o;47346:373::-;13294:13;:11;:13::i;:::-;47443:19:::1;47484:14;47465:9;:16;:33;;;;:::i;:::-;47443:55;;47548:9;;47533:11;47517:13;34140:12:::0;;;34065:93;47517:13:::1;:27;;;;:::i;:::-;:40;;47509:76;;;::::0;-1:-1:-1;;;47509:76:0;;9433:2:1;47509:76:0::1;::::0;::::1;9415:21:1::0;9472:2;9452:18;;;9445:30;9511:25;9491:18;;;9484:53;9554:18;;47509:76:0::1;9231:347:1::0;47509:76:0::1;47600:9;47596:116;47619:9;:16;47615:1;:20;47596:116;;;47657:43;47667:9;47677:1;47667:12;;;;;;;;:::i;:::-;;;;;;;47681:14;47657:43;;;;;;;;;;;::::0;:9:::1;:43::i;:::-;47637:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47596:116;;48107:166:::0;13294:13;:11;:13::i;:::-;48194:14:::1;::::0;::::1;;48193:15;48185:46;;;::::0;-1:-1:-1;;;48185:46:0;;9917:2:1;48185:46:0::1;::::0;::::1;9899:21:1::0;9956:2;9936:18;;;9929:30;-1:-1:-1;;;9975:18:1;;;9968:48;10033:18;;48185:46:0::1;9715:342:1::0;48185:46:0::1;48242:7;:23;48252:13:::0;48242:7;:23:::1;:::i;:::-;;48107:166:::0;:::o;47871:228::-;47936:13;47967:16;47975:7;38465:12;;-1:-1:-1;38455:22:0;38370:113;47967:16;47962:59;;47992:29;;-1:-1:-1;;;47992:29:0;;;;;;;;;;;47962:59;48057:7;48065:25;48082:7;48065:16;:25::i;:::-;48043:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48036:55;;47871:228;;;:::o;47727:136::-;13294:13;:11;:13::i;:::-;47790:14:::1;::::0;::::1;;47789:15;47781:42;;;::::0;-1:-1:-1;;;47781:42:0;;13493:2:1;47781:42:0::1;::::0;::::1;13475:21:1::0;13532:2;13512:18;;;13505:30;-1:-1:-1;;;13551:18:1;;;13544:44;13605:18;;47781:42:0::1;13291:338:1::0;47781:42:0::1;47834:14;:21:::0;;-1:-1:-1;;47834:21:0::1;47851:4;47834:21;::::0;;47727:136::o;37007:158::-;-1:-1:-1;;;;;37124:25:0;;;37104:4;37124:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;37007:158::o;14314:201::-;13294:13;:11;:13::i;:::-;-1:-1:-1;;;;;14403:22:0;::::1;14395:73;;;::::0;-1:-1:-1;;;14395:73:0;;13836:2:1;14395:73:0::1;::::0;::::1;13818:21:1::0;13875:2;13855:18;;;13848:30;13914:34;13894:18;;;13887:62;-1:-1:-1;;;13965:18:1;;;13958:36;14011:19;;14395:73:0::1;13634:402:1::0;14395:73:0::1;14479:28;14498:8;14479:18;:28::i;:::-;14314:201:::0;:::o;26744:283::-;26874:4;-1:-1:-1;;;;;;26916:50:0;;-1:-1:-1;;;26916:50:0;;:103;;;26983:36;27007:11;26983:23;:36::i;36125:389::-;36202:22;36227:19;36238:7;36227:10;:19::i;:::-;36202:44;;;;;;;;;;;-1:-1:-1;;;;;36202:44:0;;;;;;-1:-1:-1;;;36202:44:0;;;;;-1:-1:-1;;;;;;36202:44:0;;;;;;;-1:-1:-1;36202:44:0;36291:11;;;;;36287:48;;36311:24;;-1:-1:-1;;;36311:24:0;;;;;;;;;;;36287:48;12039:10;-1:-1:-1;;;;;36348:21:0;;;;;;:63;;-1:-1:-1;36374:37:0;36391:5;12039:10;37007:158;:::i;36374:37::-;36373:38;36348:63;36344:128;;;36429:35;;-1:-1:-1;;;36429:35:0;;;;;;;;;;;36344:128;36480:28;36489:2;36493:7;36502:5;36480:8;:28::i;37171:314::-;37287:22;37312:19;37323:7;37312:10;:19::i;:::-;37287:44;;;;;;;;;;;-1:-1:-1;;;;;37287:44:0;;;;-1:-1:-1;;;37287:44:0;;;;-1:-1:-1;;;;;;37287:44:0;;;;;;-1:-1:-1;37343:48:0;12039:10;37376:7;37385:5;37343:18;:48::i;:::-;37338:97;;37400:35;;-1:-1:-1;;;37400:35:0;;;;;;;;;;;37338:97;37444:35;37454:4;37460:2;37464:7;37473:5;37444:9;:35::i;37491:165::-;37611:39;37628:4;37634:2;37638:7;37611:39;;;;;;;;;;;;:16;:39::i;35514:405::-;35574:17;35605:16;35613:7;38465:12;;-1:-1:-1;38455:22:0;38370:113;35605:16;35600:65;;35630:35;;-1:-1:-1;;;35630:35:0;;;;;;;;;;;35600:65;35674:23;35700:16;;;;;;;;;;35708:7;35760:133;35767:11;;-1:-1:-1;;;;;35767:11:0;35760:133;;-1:-1:-1;;35824:14:0;35864:7;:21;;;;;;;;;;;-1:-1:-1;35760:133:0;;;-1:-1:-1;35908:5:0;35514:405;-1:-1:-1;;35514:405:0:o;13573:132::-;13481:6;;-1:-1:-1;;;;;13481:6:0;;;;;12039:10;13637:23;13629:68;;;;-1:-1:-1;;;13629:68:0;;14243:2:1;13629:68:0;;;14225:21:1;;;14262:18;;;14255:30;14321:34;14301:18;;;14294:62;14373:18;;13629:68:0;14041:356:1;14675:191:0;14768:6;;;-1:-1:-1;;;;;14785:17:0;;;14768:6;14785:17;;;-1:-1:-1;;;;;;14785:17:0;;;;;;14818:40;;14768:6;;;;;;;;14818:40;;14749:16;;14818:40;14738:128;14675:191;:::o;36728:273::-;12039:10;-1:-1:-1;;;;;36823:24:0;;;36819:54;;36856:17;;-1:-1:-1;;;36856:17:0;;;;;;;;;;;36819:54;12039:10;36882:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;36882:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;36882:53:0;;;;;;;;;;36947:48;;540:41:1;;;36882:42:0;;12039:10;36947:48;;513:18:1;36947:48:0;;;;;;;36728:273;;:::o;37662:354::-;37807:22;37832:19;37843:7;37832:10;:19::i;:::-;37807:44;;;;;;;;;;;-1:-1:-1;;;;;37807:44:0;;;;-1:-1:-1;;;37807:44:0;;;;-1:-1:-1;;;;;;37807:44:0;;;;;;-1:-1:-1;37863:48:0;12039:10;37896:7;37905:5;37863:18;:48::i;:::-;37858:97;;37920:35;;-1:-1:-1;;;37920:35:0;;;;;;;;;;;37858:97;37964:46;37978:4;37984:2;37988:7;37997:5;38004;37964:13;:46::i;38893:445::-;39029:12;;39048:19;39054:2;39058:8;39048:5;:19::i;:::-;-1:-1:-1;;;;;39080:13:0;;16401:19;:23;39076:257;;39132:9;39127:190;39147:8;39143:1;:12;39127:190;;;39180:63;39211:1;39215:2;39234:1;39219:12;:16;39237:5;39180:22;:63::i;:::-;39175:130;;39265:40;;-1:-1:-1;;;39265:40:0;;;;;;;;;;;39175:130;39157:3;;39127:190;;9213:723;9269:13;9490:5;9499:1;9490:10;9486:53;;-1:-1:-1;;9517:10:0;;;;;;;;;;;;-1:-1:-1;;;9517:10:0;;;;;9213:723::o;9486:53::-;9564:5;9549:12;9605:78;9612:9;;9605:78;;9638:8;;;;:::i;:::-;;-1:-1:-1;9661:10:0;;-1:-1:-1;9669:2:0;9661:10;;:::i;:::-;;;9605:78;;;9693:19;9725:6;9715:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9715:17:0;;9693:39;;9743:154;9750:10;;9743:154;;9777:11;9787:1;9777:11;;:::i;:::-;;-1:-1:-1;9846:10:0;9854:2;9846:5;:10;:::i;:::-;9833:24;;:2;:24;:::i;:::-;9820:39;;9803:6;9810;9803:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;9803:56:0;;;;;;;;-1:-1:-1;9874:11:0;9883:2;9874:11;;:::i;:::-;;;9743:154;;;9921:6;9213:723;-1:-1:-1;;;;9213:723:0:o;34164:281::-;34266:4;-1:-1:-1;;;;;;34293:40:0;;-1:-1:-1;;;34293:40:0;;:99;;-1:-1:-1;;;;;;;34344:48:0;;-1:-1:-1;;;34344:48:0;34293:99;:146;;;-1:-1:-1;;;;;;;;;;26371:40:0;;;34403:36;26262:157;41191:196;41306:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;41306:29:0;-1:-1:-1;;;;;41306:29:0;;;;;;;;;41356:11;;41347:34;;41306:24;;:29;;41347:34;;;;;;41306:24;41347:34;41191:196;;;:::o;38489:286::-;38655:11;;38626:4;;-1:-1:-1;;;;;38681:16:0;;;;;;;;:52;;;38701:32;38718:5;38725:7;38701:16;:32::i;:::-;38681:87;;;;38761:7;-1:-1:-1;;;;;38737:31:0;:20;38749:7;38737:11;:20::i;:::-;-1:-1:-1;;;;;38737:31:0;;38681:87;38673:96;38489:286;-1:-1:-1;;;;;38489:286:0:o;40125:904::-;40279:4;-1:-1:-1;;;;;40264:19:0;:5;:11;;;-1:-1:-1;;;;;40264:19:0;;40260:60;;40292:28;;-1:-1:-1;;;40292:28:0;;;;;;;;;;;40260:60;-1:-1:-1;;;;;40331:16:0;;40327:52;;40356:23;;-1:-1:-1;;;40356:23:0;;;;;;;;;;;40327:52;40440:36;40457:1;40461:7;40470:5;40440:8;:36::i;:::-;40536:1;40526:11;;40550:20;40526:11;38465:12;;-1:-1:-1;38455:22:0;38370:113;40550:20;40546:234;;;40583:27;40613:20;;;;;;;;;;40648:15;;-1:-1:-1;;;;;40648:15:0;40644:127;;40710:11;;40750:9;;;;40734:25;;-1:-1:-1;;;40734:25:0;-1:-1:-1;;;;;40692:29:0;;;40734:25;;;40644:127;40572:208;40546:234;-1:-1:-1;40795:26:0;40824:16;;;;;;;;;;;-1:-1:-1;;;;;40847:19:0;;;40873:58;;;40945:27;;40824:16;;;;40847:19;40945:27;;;;;;40795:26;40945:27;40981:42;49264:163;38022:342;38186:35;38196:4;38202:2;38206:7;38215:5;38186:9;:35::i;:::-;-1:-1:-1;;;;;38234:13:0;;16401:19;:23;;38234:68;;;;;38254:48;38277:4;38283:2;38287:7;38296:5;38254:22;:48::i;:::-;38253:49;38234:68;38230:128;;;38318:40;;-1:-1:-1;;;38318:40:0;;;;;;;;;;;39344:775;-1:-1:-1;;;;;39417:16:0;;39413:48;;39442:19;;-1:-1:-1;;;39442:19:0;;;;;;;;;;;39413:48;39472:8;39484:1;39472:13;39468:44;;39494:18;;-1:-1:-1;;;39494:18:0;;;;;;;;;;;39468:44;39544:12;;39657:9;39652:353;39672:8;39668:1;:12;39652:353;;;39702:13;:18;:52;;39736:13;39732:1;:17;;;;;:::i;:::-;;:22;39702:52;;;39723:6;;39702:52;39698:238;;;39803:16;;;39769:23;39795:25;;;;;;;;;;-1:-1:-1;;;;;39833:16:0;;39862:62;;39698:238;39953:42;;39978:16;;;;-1:-1:-1;;;;;39953:42:0;;;39970:1;;39953:42;;39970:1;;39953:42;39682:3;;39652:353;;;-1:-1:-1;40013:12:0;:24;;;;;;49099:157;;;:::o;41393:565::-;41547:72;;-1:-1:-1;;;41547:72:0;;41530:4;;-1:-1:-1;;;;;41547:36:0;;;;;:72;;12039:10;;41598:4;;41604:7;;41613:5;;41547:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41547:72:0;;;;;;;;-1:-1:-1;;41547:72:0;;;;;;;;;;;;:::i;:::-;;;41543:410;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41761:6;:13;41778:1;41761:18;41757:189;;41799:40;;-1:-1:-1;;;41799:40:0;;;;;;;;;;;41757:189;41918:6;41912:13;41903:6;41899:2;41895:15;41888:38;41543:410;-1:-1:-1;;;;;;41660:51:0;-1:-1:-1;;;41660:51:0;;-1:-1:-1;41393:565:0;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:248::-;2761:6;2769;2822:2;2810:9;2801:7;2797:23;2793:32;2790:52;;;2838:1;2835;2828:12;2790:52;-1:-1:-1;;2861:23:1;;;2931:2;2916:18;;;2903:32;;-1:-1:-1;2693:248:1:o;3225:186::-;3284:6;3337:2;3325:9;3316:7;3312:23;3308:32;3305:52;;;3353:1;3350;3343:12;3305:52;3376:29;3395:9;3376:29;:::i;3416:118::-;3502:5;3495:13;3488:21;3481:5;3478:32;3468:60;;3524:1;3521;3514:12;3539:315;3604:6;3612;3665:2;3653:9;3644:7;3640:23;3636:32;3633:52;;;3681:1;3678;3671:12;3633:52;3704:29;3723:9;3704:29;:::i;:::-;3694:39;;3783:2;3772:9;3768:18;3755:32;3796:28;3818:5;3796:28;:::i;:::-;3843:5;3833:15;;;3539:315;;;;;:::o;3859:127::-;3920:10;3915:3;3911:20;3908:1;3901:31;3951:4;3948:1;3941:15;3975:4;3972:1;3965:15;3991:275;4062:2;4056:9;4127:2;4108:13;;-1:-1:-1;;4104:27:1;4092:40;;4162:18;4147:34;;4183:22;;;4144:62;4141:88;;;4209:18;;:::i;:::-;4245:2;4238:22;3991:275;;-1:-1:-1;3991:275:1:o;4271:406::-;4335:5;4369:18;4361:6;4358:30;4355:56;;;4391:18;;:::i;:::-;4429:57;4474:2;4453:15;;-1:-1:-1;;4449:29:1;4480:4;4445:40;4429:57;:::i;:::-;4420:66;;4509:6;4502:5;4495:21;4549:3;4540:6;4535:3;4531:16;4528:25;4525:45;;;4566:1;4563;4556:12;4525:45;4615:6;4610:3;4603:4;4596:5;4592:16;4579:43;4669:1;4662:4;4653:6;4646:5;4642:18;4638:29;4631:40;4271:406;;;;;:::o;4682:666::-;4777:6;4785;4793;4801;4854:3;4842:9;4833:7;4829:23;4825:33;4822:53;;;4871:1;4868;4861:12;4822:53;4894:29;4913:9;4894:29;:::i;:::-;4884:39;;4942:38;4976:2;4965:9;4961:18;4942:38;:::i;:::-;4932:48;;5027:2;5016:9;5012:18;4999:32;4989:42;;5082:2;5071:9;5067:18;5054:32;5109:18;5101:6;5098:30;5095:50;;;5141:1;5138;5131:12;5095:50;5164:22;;5217:4;5209:13;;5205:27;-1:-1:-1;5195:55:1;;5246:1;5243;5236:12;5195:55;5269:73;5334:7;5329:2;5316:16;5311:2;5307;5303:11;5269:73;:::i;:::-;5259:83;;;4682:666;;;;;;;:::o;5353:1022::-;5446:6;5454;5507:2;5495:9;5486:7;5482:23;5478:32;5475:52;;;5523:1;5520;5513:12;5475:52;5563:9;5550:23;5592:18;5633:2;5625:6;5622:14;5619:34;;;5649:1;5646;5639:12;5619:34;5687:6;5676:9;5672:22;5662:32;;5732:7;5725:4;5721:2;5717:13;5713:27;5703:55;;5754:1;5751;5744:12;5703:55;5790:2;5777:16;5812:4;5835:2;5831;5828:10;5825:36;;;5841:18;;:::i;:::-;5887:2;5884:1;5880:10;5870:20;;5910:28;5934:2;5930;5926:11;5910:28;:::i;:::-;5972:15;;;6042:11;;;6038:20;;;6003:12;;;;6070:19;;;6067:39;;;6102:1;6099;6092:12;6067:39;6126:11;;;;6146:148;6162:6;6157:3;6154:15;6146:148;;;6228:23;6247:3;6228:23;:::i;:::-;6216:36;;6179:12;;;;6272;;;;6146:148;;;6313:5;6350:18;;;;6337:32;;-1:-1:-1;;;;;;;5353:1022:1:o;6380:450::-;6449:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:52;;;6518:1;6515;6508:12;6470:52;6558:9;6545:23;6591:18;6583:6;6580:30;6577:50;;;6623:1;6620;6613:12;6577:50;6646:22;;6699:4;6691:13;;6687:27;-1:-1:-1;6677:55:1;;6728:1;6725;6718:12;6677:55;6751:73;6816:7;6811:2;6798:16;6793:2;6789;6785:11;6751:73;:::i;6835:260::-;6903:6;6911;6964:2;6952:9;6943:7;6939:23;6935:32;6932:52;;;6980:1;6977;6970:12;6932:52;7003:29;7022:9;7003:29;:::i;:::-;6993:39;;7051:38;7085:2;7074:9;7070:18;7051:38;:::i;:::-;7041:48;;6835:260;;;;;:::o;7100:380::-;7179:1;7175:12;;;;7222;;;7243:61;;7297:4;7289:6;7285:17;7275:27;;7243:61;7350:2;7342:6;7339:14;7319:18;7316:38;7313:161;;7396:10;7391:3;7387:20;7384:1;7377:31;7431:4;7428:1;7421:15;7459:4;7456:1;7449:15;7313:161;;7100:380;;;:::o;7794:245::-;7861:6;7914:2;7902:9;7893:7;7889:23;7885:32;7882:52;;;7930:1;7927;7920:12;7882:52;7962:9;7956:16;7981:28;8003:5;7981:28;:::i;8044:127::-;8105:10;8100:3;8096:20;8093:1;8086:31;8136:4;8133:1;8126:15;8160:4;8157:1;8150:15;8176:168;8249:9;;;8280;;8297:15;;;8291:22;;8277:37;8267:71;;8318:18;;:::i;8349:127::-;8410:10;8405:3;8401:20;8398:1;8391:31;8441:4;8438:1;8431:15;8465:4;8462:1;8455:15;8481:120;8521:1;8547;8537:35;;8552:18;;:::i;:::-;-1:-1:-1;8586:9:1;;8481:120::o;8961:135::-;9000:3;9021:17;;;9018:43;;9041:18;;:::i;:::-;-1:-1:-1;9088:1:1;9077:13;;8961:135::o;9101:125::-;9166:9;;;9187:10;;;9184:36;;;9200:18;;:::i;9583:127::-;9644:10;9639:3;9635:20;9632:1;9625:31;9675:4;9672:1;9665:15;9699:4;9696:1;9689:15;10188:545;10290:2;10285:3;10282:11;10279:448;;;10326:1;10351:5;10347:2;10340:17;10396:4;10392:2;10382:19;10466:2;10454:10;10450:19;10447:1;10443:27;10437:4;10433:38;10502:4;10490:10;10487:20;10484:47;;;-1:-1:-1;10525:4:1;10484:47;10580:2;10575:3;10571:12;10568:1;10564:20;10558:4;10554:31;10544:41;;10635:82;10653:2;10646:5;10643:13;10635:82;;;10698:17;;;10679:1;10668:13;10635:82;;;10639:3;;;10188:545;;;:::o;10909:1352::-;11035:3;11029:10;11062:18;11054:6;11051:30;11048:56;;;11084:18;;:::i;:::-;11113:97;11203:6;11163:38;11195:4;11189:11;11163:38;:::i;:::-;11157:4;11113:97;:::i;:::-;11265:4;;11329:2;11318:14;;11346:1;11341:663;;;;12048:1;12065:6;12062:89;;;-1:-1:-1;12117:19:1;;;12111:26;12062:89;-1:-1:-1;;10866:1:1;10862:11;;;10858:24;10854:29;10844:40;10890:1;10886:11;;;10841:57;12164:81;;11311:944;;11341:663;10135:1;10128:14;;;10172:4;10159:18;;-1:-1:-1;;11377:20:1;;;11495:236;11509:7;11506:1;11503:14;11495:236;;;11598:19;;;11592:26;11577:42;;11690:27;;;;11658:1;11646:14;;;;11525:19;;11495:236;;;11499:3;11759:6;11750:7;11747:19;11744:201;;;11820:19;;;11814:26;-1:-1:-1;;11903:1:1;11899:14;;;11915:3;11895:24;11891:37;11887:42;11872:58;11857:74;;11744:201;-1:-1:-1;;;;;11991:1:1;11975:14;;;11971:22;11958:36;;-1:-1:-1;10909:1352:1:o;12266:1020::-;12442:3;12471:1;12504:6;12498:13;12534:36;12560:9;12534:36;:::i;:::-;12589:1;12606:18;;;12633:133;;;;12780:1;12775:356;;;;12599:532;;12633:133;-1:-1:-1;;12666:24:1;;12654:37;;12739:14;;12732:22;12720:35;;12711:45;;;-1:-1:-1;12633:133:1;;12775:356;12806:6;12803:1;12796:17;12836:4;12881:2;12878:1;12868:16;12906:1;12920:165;12934:6;12931:1;12928:13;12920:165;;;13012:14;;12999:11;;;12992:35;13055:16;;;;12949:10;;12920:165;;;12924:3;;;13114:6;13109:3;13105:16;13098:23;;12599:532;;;;;13162:6;13156:13;13178:68;13237:8;13232:3;13225:4;13217:6;13213:17;13178:68;:::i;:::-;13262:18;;12266:1020;-1:-1:-1;;;;12266:1020:1:o;14402:128::-;14469:9;;;14490:11;;;14487:37;;;14504:18;;:::i;14535:112::-;14567:1;14593;14583:35;;14598:18;;:::i;:::-;-1:-1:-1;14632:9:1;;14535:112::o;14652:489::-;-1:-1:-1;;;;;14921:15:1;;;14903:34;;14973:15;;14968:2;14953:18;;14946:43;15020:2;15005:18;;14998:34;;;15068:3;15063:2;15048:18;;15041:31;;;14846:4;;15089:46;;15115:19;;15107:6;15089:46;:::i;:::-;15081:54;14652:489;-1:-1:-1;;;;;;14652:489:1:o;15146:249::-;15215:6;15268:2;15256:9;15247:7;15243:23;15239:32;15236:52;;;15284:1;15281;15274:12;15236:52;15316:9;15310:16;15335:30;15359:5;15335:30;:::i
Swarm Source
ipfs://88fc4a80a369d01a95e8fd883ca19fd17a434887056ab1fe17e19dee5352a4b8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.