ETH Price: $2,665.16 (+2.06%)

Token

orcvalley (ORC)
 

Overview

Max Total Supply

3,563 ORC

Holders

2,445

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ORC
0x27403e615f55d7a44286a0bda7e76c6e28023405
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Orcvalley

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-10
*/

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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/token/ERC20/[email protected]


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}


// File @openzeppelin/contracts/interfaces/[email protected]


// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

pragma solidity ^0.8.0;


// File @openzeppelin/contracts/utils/introspection/[email protected]


// 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/interfaces/[email protected]


// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts (last updated v4.6.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 be 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/interfaces/[email protected]


// OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol)

pragma solidity ^0.8.0;


// File erc721a/contracts/[email protected]


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     *
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);

    // ==============================
    //            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);

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @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 be 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);

    // ==============================
    //        IERC721Metadata
    // ==============================

    /**
     * @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 erc721a/contracts/[email protected]


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;
    
    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

    // Mapping from token ID to approved address.
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * @dev Returns the starting token ID. 
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count. 
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.burned = packed & BITMASK_BURNED != 0;
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev Casts the address to uint256 without masking.
     */
    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev Casts the boolean to uint256 without branching.
     */
    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            getApproved(tokenId) == _msgSenderERC721A());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
                isApprovedForAll(from, _msgSenderERC721A()) ||
                getApproved(tokenId) == _msgSenderERC721A());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), 
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length, 
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for { 
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp { 
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }
            
            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}


// File erc721a/contracts/extensions/[email protected]


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721ABurnable compliant contract.
 */
interface IERC721ABurnable is IERC721A {
    /**
     * @dev Burns `tokenId`. See {ERC721A-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) external;
}


// File erc721a/contracts/extensions/[email protected]


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;


/**
 * @title ERC721A Burnable Token
 * @dev ERC721A Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    /**
     * @dev Burns `tokenId`. See {ERC721A-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}


// File erc721a/contracts/extensions/[email protected]


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721AQueryable compliant contract.
 */
interface IERC721AQueryable is IERC721A {
    /**
     * Invalid query range (`start` >= `stop`).
     */
    error InvalidQueryRange();

    /**
     * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
     *
     * If the `tokenId` is out of bounds:
     *   - `addr` = `address(0)`
     *   - `startTimestamp` = `0`
     *   - `burned` = `false`
     *
     * If the `tokenId` is burned:
     *   - `addr` = `<Address of owner before token was burned>`
     *   - `startTimestamp` = `<Timestamp when token was burned>`
     *   - `burned = `true`
     *
     * Otherwise:
     *   - `addr` = `<Address of owner>`
     *   - `startTimestamp` = `<Timestamp of start of ownership>`
     *   - `burned = `false`
     */
    function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);

    /**
     * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order.
     * See {ERC721AQueryable-explicitOwnershipOf}
     */
    function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory);

    /**
     * @dev Returns an array of token IDs owned by `owner`,
     * in the range [`start`, `stop`)
     * (i.e. `start <= tokenId < stop`).
     *
     * This function allows for tokens to be queried if the collection
     * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}.
     *
     * Requirements:
     *
     * - `start` < `stop`
     */
    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view returns (uint256[] memory);

    /**
     * @dev Returns an array of token IDs owned by `owner`.
     *
     * This function scans the ownership mapping and is O(totalSupply) in complexity.
     * It is meant to be called off-chain.
     *
     * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into
     * multiple smaller scans if the collection is large enough to cause
     * an out-of-gas error (10K pfp collections should be fine).
     */
    function tokensOfOwner(address owner) external view returns (uint256[] memory);
}


// File erc721a/contracts/extensions/[email protected]


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;


/**
 * @title ERC721A Queryable
 * @dev ERC721A subclass with convenience query functions.
 */
abstract contract ERC721AQueryable is ERC721A, IERC721AQueryable {
    /**
     * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
     *
     * If the `tokenId` is out of bounds:
     *   - `addr` = `address(0)`
     *   - `startTimestamp` = `0`
     *   - `burned` = `false`
     *
     * If the `tokenId` is burned:
     *   - `addr` = `<Address of owner before token was burned>`
     *   - `startTimestamp` = `<Timestamp when token was burned>`
     *   - `burned = `true`
     *
     * Otherwise:
     *   - `addr` = `<Address of owner>`
     *   - `startTimestamp` = `<Timestamp of start of ownership>`
     *   - `burned = `false`
     */
    function explicitOwnershipOf(uint256 tokenId) public view override returns (TokenOwnership memory) {
        TokenOwnership memory ownership;
        if (tokenId < _startTokenId() || tokenId >= _nextTokenId()) {
            return ownership;
        }
        ownership = _ownershipAt(tokenId);
        if (ownership.burned) {
            return ownership;
        }
        return _ownershipOf(tokenId);
    }

    /**
     * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order.
     * See {ERC721AQueryable-explicitOwnershipOf}
     */
    function explicitOwnershipsOf(uint256[] memory tokenIds) external view override returns (TokenOwnership[] memory) {
        unchecked {
            uint256 tokenIdsLength = tokenIds.length;
            TokenOwnership[] memory ownerships = new TokenOwnership[](tokenIdsLength);
            for (uint256 i; i != tokenIdsLength; ++i) {
                ownerships[i] = explicitOwnershipOf(tokenIds[i]);
            }
            return ownerships;
        }
    }

    /**
     * @dev Returns an array of token IDs owned by `owner`,
     * in the range [`start`, `stop`)
     * (i.e. `start <= tokenId < stop`).
     *
     * This function allows for tokens to be queried if the collection
     * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}.
     *
     * Requirements:
     *
     * - `start` < `stop`
     */
    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view override returns (uint256[] memory) {
        unchecked {
            if (start >= stop) revert InvalidQueryRange();
            uint256 tokenIdsIdx;
            uint256 stopLimit = _nextTokenId();
            // Set `start = max(start, _startTokenId())`.
            if (start < _startTokenId()) {
                start = _startTokenId();
            }
            // Set `stop = min(stop, stopLimit)`.
            if (stop > stopLimit) {
                stop = stopLimit;
            }
            uint256 tokenIdsMaxLength = balanceOf(owner);
            // Set `tokenIdsMaxLength = min(balanceOf(owner), stop - start)`,
            // to cater for cases where `balanceOf(owner)` is too big.
            if (start < stop) {
                uint256 rangeLength = stop - start;
                if (rangeLength < tokenIdsMaxLength) {
                    tokenIdsMaxLength = rangeLength;
                }
            } else {
                tokenIdsMaxLength = 0;
            }
            uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength);
            if (tokenIdsMaxLength == 0) {
                return tokenIds;
            }
            // We need to call `explicitOwnershipOf(start)`,
            // because the slot at `start` may not be initialized.
            TokenOwnership memory ownership = explicitOwnershipOf(start);
            address currOwnershipAddr;
            // If the starting slot exists (i.e. not burned), initialize `currOwnershipAddr`.
            // `ownership.address` will not be zero, as `start` is clamped to the valid token ID range.
            if (!ownership.burned) {
                currOwnershipAddr = ownership.addr;
            }
            for (uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            // Downsize the array to fit.
            assembly {
                mstore(tokenIds, tokenIdsIdx)
            }
            return tokenIds;
        }
    }

    /**
     * @dev Returns an array of token IDs owned by `owner`.
     *
     * This function scans the ownership mapping and is O(totalSupply) in complexity.
     * It is meant to be called off-chain.
     *
     * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into
     * multiple smaller scans if the collection is large enough to cause
     * an out-of-gas error (10K pfp collections should be fine).
     */
    function tokensOfOwner(address owner) external view override returns (uint256[] memory) {
        unchecked {
            uint256 tokenIdsIdx;
            address currOwnershipAddr;
            uint256 tokenIdsLength = balanceOf(owner);
            uint256[] memory tokenIds = new uint256[](tokenIdsLength);
            TokenOwnership memory ownership;
            for (uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            return tokenIds;
        }
    }
}


// File contracts/Orcvalley.sol

pragma solidity ^0.8.4;







contract Orcvalley is ERC721A, ERC721ABurnable, ERC721AQueryable, IERC2981, Ownable {
    uint256 immutable oorc;
    string public orccvaalleey;
    IERC721 immutable goobbbliin;

    bool public staartin;

    uint256 public matte;
    uint256 public mattelimita;

    uint256 public deev = 1;
    uint256 immutable deevlimita;

    mapping(address => bool) public mainted;
    mapping(uint256 => bool) public mettaamorphooseed;

    modifier ooonlyPerrrsooonnn() {
        require(msg.sender == tx.origin);
        require(msg.sender.code.length == 0);
        _;
    }

    constructor(
        uint256 oorc_,
        string memory orccvaalleey_,
        IERC721 goobbbliin_,
        uint256 mattelimita_,
        uint256 deevlimita_
    ) ERC721A("orcvalley", "ORC") {
        oorc = oorc_;
        orccvaalleey = orccvaalleey_;
        goobbbliin = goobbbliin_;
        mattelimita = mattelimita_;
        deevlimita = deevlimita_;

        _mint(msg.sender, 1);
    }

    function getayourseelf() external ooonlyPerrrsooonnn {
        require(staartin, "nootstaartin");
        require(totalSupply() + 1 <= oorc, "aimfullyy");
        require(!mainted[msg.sender], "urorrrc");
        require(matte + 1 <= mattelimita, "fully");

        mainted[msg.sender] = true;
        matte += 1;

        _mint(msg.sender, 1);
    }

    function boornagaaaiin(uint256[] memory gobbs) external ooonlyPerrrsooonnn {
        require(staartin, "nootstaartin");
        require(totalSupply() + gobbs.length <= oorc, "aimfullyy");
        require(gobbs.length > 0, "empta");

        for (uint256 eye = 0; eye < gobbs.length; eye++) {
            require(goobbbliin.ownerOf(gobbs[eye]) == msg.sender, "hac");
            require(!mettaamorphooseed[gobbs[eye]], "dable");
            mettaamorphooseed[gobbs[eye]] = true;
        }
        _mint(msg.sender, gobbs.length);
    }

    function weewaantiit(address tu, uint256 quuanty) external onlyOwner {
        require(totalSupply() + quuanty <= oorc, "aimfullyy");
        require(deev + quuanty <= deevlimita, "byee");

        deev += quuanty;
        _mint(tu, quuanty);
    }

    function waatchmee(bool staartin_) external onlyOwner {
        staartin = staartin_;
    }

    function mettaamorphoose(string memory orccvaalleey_) external onlyOwner {
        orccvaalleey = orccvaalleey_;
    }

    function brreeedingg(uint256 mattelimita_) external onlyOwner {
        mattelimita = mattelimita_;
    }

    function graabby() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function taakken(IERC20 takken) external onlyOwner {
        require(takken.transfer(msg.sender, takken.balanceOf(address(this))));
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721A, IERC721A, IERC165)
        returns (bool)
    {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }

    function royaltyInfo(
        uint256, /* takeNid */
        uint256 priicee
    ) external view override returns (address, uint256) {
        return (owner(), (priicee * 10) / 100);
    }

    function _baseURI() internal view override returns (string memory) {
        return orccvaalleey;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"oorc_","type":"uint256"},{"internalType":"string","name":"orccvaalleey_","type":"string"},{"internalType":"contract IERC721","name":"goobbbliin_","type":"address"},{"internalType":"uint256","name":"mattelimita_","type":"uint256"},{"internalType":"uint256","name":"deevlimita_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gobbs","type":"uint256[]"}],"name":"boornagaaaiin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mattelimita_","type":"uint256"}],"name":"brreeedingg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getayourseelf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"graabby","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mainted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"matte","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mattelimita","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"orccvaalleey_","type":"string"}],"name":"mettaamorphoose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mettaamorphooseed","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":"orccvaalleey","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":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"priicee","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staartin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"contract IERC20","name":"takken","type":"address"}],"name":"taakken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"bool","name":"staartin_","type":"bool"}],"name":"waatchmee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tu","type":"address"},{"internalType":"uint256","name":"quuanty","type":"uint256"}],"name":"weewaantiit","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040526001600d553480156200001657600080fd5b506040516200297938038062002979833981016040819052620000399162000306565b60408051808201825260098152686f726376616c6c657960b81b6020808301918252835180850190945260038452624f524360e81b90840152815191929162000085916002916200022d565b5080516200009b9060039060208401906200022d565b50506000805550620000ad33620000f7565b60808590528351620000c79060099060208701906200022d565b506001600160a01b03831660a052600c82905560c0819052620000ec33600162000149565b505050505062000451565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000546001600160a01b0383166200017357604051622e076360e81b815260040160405180910390fd5b81600003620001955760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660009081526005602090815260408083208054680100000000000000018702019055838352600490915290204260a01b84176001841460e11b179055808083015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210620001e05750600055505050565b8280546200023b9062000415565b90600052602060002090601f0160209004810192826200025f5760008555620002aa565b82601f106200027a57805160ff1916838001178555620002aa565b82800160010185558215620002aa579182015b82811115620002aa5782518255916020019190600101906200028d565b50620002b8929150620002bc565b5090565b5b80821115620002b85760008155600101620002bd565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200030157600080fd5b919050565b600080600080600060a086880312156200031f57600080fd5b8551602080880151919650906001600160401b03808211156200034157600080fd5b818901915089601f8301126200035657600080fd5b8151818111156200036b576200036b620002d3565b604051601f8201601f19908116603f01168101908382118183101715620003965762000396620002d3565b816040528281528c86848701011115620003af57600080fd5b600093505b82841015620003d35784840186015181850187015292850192620003b4565b82841115620003e55760008684830101525b809950505050505050620003fc60408701620002e9565b6060870151608090970151959894975095949392505050565b600181811c908216806200042a57607f821691505b6020821081036200044b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516124ea6200048f60003960006114d501526000611275015260008181610eb5015281816111ce015261147e01526124ea6000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80638462151c11610130578063c23dc68f116100b8578063e985e9c51161007c578063e985e9c5146104fb578063ee1420ad1461050e578063f2eb13d614610521578063f2fde38b1461052a578063fd34d2c11461053d57600080fd5b8063c23dc68f1461049a578063c410449b146104ba578063c87b56dd146104c2578063d4f2bc1a146104d5578063d50f23cf146104e857600080fd5b806399a2557a116100ff57806399a2557a1461044157806399fef89114610454578063a22cb46514610461578063b88d4fde14610474578063bc80531a1461048757600080fd5b80638462151c146103f55780638da5cb5b1461041557806395d89b4114610426578063970606ba1461042e57600080fd5b80632a55205a116101be5780636352211e116101825780636352211e146103b657806370a08231146103c9578063715018a6146103dc5780637ef5e794146103e457806380ae8405146103ec57600080fd5b80632a55205a1461031b57806342842e0e1461034d57806342966c681461036057806348b9852e146103735780635bbb21771461039657600080fd5b8063151951d511610205578063151951d5146102b457806318160ddd146102c75780631b2e6a7e146102dd5780631e375eae146102e557806323b872dd1461030857600080fd5b806301ffc9a71461023757806306fdde031461025f578063081812fc14610274578063095ea7b31461029f575b600080fd5b61024a610245366004611d98565b610546565b60405190151581526020015b60405180910390f35b610267610571565b6040516102569190611e0d565b610287610282366004611e20565b610603565b6040516001600160a01b039091168152602001610256565b6102b26102ad366004611e4e565b610647565b005b6102b26102c2366004611e88565b610719565b600154600054035b604051908152602001610256565b61026761075f565b61024a6102f3366004611e20565b600f6020526000908152604090205460ff1681565b6102b2610316366004611ea5565b6107ed565b61032e610329366004611ee6565b6107fd565b604080516001600160a01b039093168352602083019190915201610256565b6102b261035b366004611ea5565b610834565b6102b261036e366004611e20565b61084f565b61024a610381366004611f08565b600e6020526000908152604090205460ff1681565b6103a96103a4366004611f6c565b61085d565b6040516102569190612012565b6102876103c4366004611e20565b610924565b6102cf6103d7366004611f08565b61092f565b6102b261097e565b6102b26109b4565b6102cf600d5481565b610408610403366004611f08565b610a17565b604051610256919061207d565b6008546001600160a01b0316610287565b610267610b19565b6102b261043c36600461210d565b610b28565b61040861044f366004612156565b610b69565b600a5461024a9060ff1681565b6102b261046f36600461218b565b610ce3565b6102b26104823660046121c4565b610d78565b6102b2610495366004611e20565b610dc2565b6104ad6104a8366004611e20565b610df1565b6040516102569190612244565b6102b2610e5a565b6102676104d0366004611e20565b610fdc565b6102b26104e3366004611f08565b61105f565b6102b26104f6366004611f6c565b611173565b61024a61050936600461227a565b611424565b6102b261051c366004611e4e565b611452565b6102cf600c5481565b6102b2610538366004611f08565b61155b565b6102cf600b5481565b60006001600160e01b0319821663152a902d60e11b148061056b575061056b826115f3565b92915050565b606060028054610580906122a8565b80601f01602080910402602001604051908101604052809291908181526020018280546105ac906122a8565b80156105f95780601f106105ce576101008083540402835291602001916105f9565b820191906000526020600020905b8154815290600101906020018083116105dc57829003601f168201915b5050505050905090565b600061060e82611641565b61062b576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061065282611668565b9050806001600160a01b0316836001600160a01b0316036106865760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146106bd576106a08133611424565b6106bd576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b0316331461074c5760405162461bcd60e51b8152600401610743906122e2565b60405180910390fd5b600a805460ff1916911515919091179055565b6009805461076c906122a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610798906122a8565b80156107e55780601f106107ba576101008083540402835291602001916107e5565b820191906000526020600020905b8154815290600101906020018083116107c857829003601f168201915b505050505081565b6107f88383836116cf565b505050565b6000806108126008546001600160a01b031690565b606461081f85600a61232d565b610829919061234c565b915091509250929050565b6107f883838360405180602001604052806000815250610d78565b61085a816001611876565b50565b805160609060008167ffffffffffffffff81111561087d5761087d611f25565b6040519080825280602002602001820160405280156108c857816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161089b5790505b50905060005b82811461091c576108f78582815181106108ea576108ea61236e565b6020026020010151610df1565b8282815181106109095761090961236e565b60209081029190910101526001016108ce565b509392505050565b600061056b82611668565b60006001600160a01b038216610958576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146109a85760405162461bcd60e51b8152600401610743906122e2565b6109b260006119ce565b565b6008546001600160a01b031633146109de5760405162461bcd60e51b8152600401610743906122e2565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561085a573d6000803e3d6000fd5b60606000806000610a278561092f565b905060008167ffffffffffffffff811115610a4457610a44611f25565b604051908082528060200260200182016040528015610a6d578160200160208202803683370190505b509050610a93604080516060810182526000808252602082018190529181019190915290565b60005b838614610b0d57610aa681611a20565b91508160400151610b055781516001600160a01b031615610ac657815194505b876001600160a01b0316856001600160a01b031603610b055780838780600101985081518110610af857610af861236e565b6020026020010181815250505b600101610a96565b50909695505050505050565b606060038054610580906122a8565b6008546001600160a01b03163314610b525760405162461bcd60e51b8152600401610743906122e2565b8051610b65906009906020840190611ce9565b5050565b6060818310610b8b57604051631960ccad60e11b815260040160405180910390fd5b600080610b9760005490565b905080841115610ba5578093505b6000610bb08761092f565b905084861015610bcf5785850381811015610bc9578091505b50610bd3565b5060005b60008167ffffffffffffffff811115610bee57610bee611f25565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b50905081600003610c2d579350610cdc92505050565b6000610c3888610df1565b905060008160400151610c49575080515b885b888114158015610c5b5750848714155b15610cd057610c6981611a20565b92508260400151610cc85782516001600160a01b031615610c8957825191505b8a6001600160a01b0316826001600160a01b031603610cc85780848880600101995081518110610cbb57610cbb61236e565b6020026020010181815250505b600101610c4b565b50505092835250909150505b9392505050565b336001600160a01b03831603610d0c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d838484846116cf565b6001600160a01b0383163b15610dbc57610d9f84848484611a55565b610dbc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b03163314610dec5760405162461bcd60e51b8152600401610743906122e2565b600c55565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281018390529091506000548310610e365792915050565b610e3f83611a20565b9050806040015115610e515792915050565b610cdc83611b41565b333214610e6657600080fd5b333b15610e7257600080fd5b600a5460ff16610eb35760405162461bcd60e51b815260206004820152600c60248201526b3737b7ba39ba30b0b93a34b760a11b6044820152606401610743565b7f0000000000000000000000000000000000000000000000000000000000000000610ee16001546000540390565b610eec906001612384565b1115610f0a5760405162461bcd60e51b81526004016107439061239c565b336000908152600e602052604090205460ff1615610f545760405162461bcd60e51b815260206004820152600760248201526675726f7272726360c81b6044820152606401610743565b600c54600b54610f65906001612384565b1115610f9b5760405162461bcd60e51b815260206004820152600560248201526466756c6c7960d81b6044820152606401610743565b336000908152600e60205260408120805460ff19166001908117909155600b805491929091610fcb908490612384565b909155506109b29050336001611b6f565b6060610fe782611641565b61100457604051630a14c4b560e41b815260040160405180910390fd5b600061100e611c50565b9050805160000361102e5760405180602001604052806000815250610cdc565b8061103884611c5f565b6040516020016110499291906123bf565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146110895760405162461bcd60e51b8152600401610743906122e2565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb91906123ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612407565b61085a57600080fd5b33321461117f57600080fd5b333b1561118b57600080fd5b600a5460ff166111cc5760405162461bcd60e51b815260206004820152600c60248201526b3737b7ba39ba30b0b93a34b760a11b6044820152606401610743565b7f000000000000000000000000000000000000000000000000000000000000000081516111fc6001546000540390565b6112069190612384565b11156112245760405162461bcd60e51b81526004016107439061239c565b600081511161125d5760405162461bcd60e51b8152602060048201526005602482015264656d70746160d81b6044820152606401610743565b60005b815181101561141857336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8484815181106112b4576112b461236e565b60200260200101516040518263ffffffff1660e01b81526004016112da91815260200190565b602060405180830381865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b9190612424565b6001600160a01b0316146113575760405162461bcd60e51b815260206004820152600360248201526268616360e81b6044820152606401610743565b600f600083838151811061136d5761136d61236e565b60209081029190910181015182528101919091526040016000205460ff16156113c05760405162461bcd60e51b81526020600482015260056024820152646461626c6560d81b6044820152606401610743565b6001600f60008484815181106113d8576113d861236e565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061141090612441565b915050611260565b5061085a338251611b6f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610743906122e2565b7f0000000000000000000000000000000000000000000000000000000000000000816114ab6001546000540390565b6114b59190612384565b11156114d35760405162461bcd60e51b81526004016107439061239c565b7f000000000000000000000000000000000000000000000000000000000000000081600d546115029190612384565b11156115395760405162461bcd60e51b8152600401610743906020808252600490820152636279656560e01b604082015260600190565b80600d600082825461154b9190612384565b90915550610b6590508282611b6f565b6008546001600160a01b031633146115855760405162461bcd60e51b8152600401610743906122e2565b6001600160a01b0381166115ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610743565b61085a816119ce565b60006301ffc9a760e01b6001600160e01b03198316148061162457506380ac58cd60e01b6001600160e01b03198316145b8061056b5750506001600160e01b031916635b5e139f60e01b1490565b600080548210801561056b575050600090815260046020526040902054600160e01b161590565b6000816000548110156116b65760008181526004602052604081205490600160e01b821690036116b4575b80600003610cdc575060001901600081815260046020526040902054611693565b505b604051636f96cda160e11b815260040160405180910390fd5b60006116da82611668565b9050836001600160a01b0316816001600160a01b03161461170d5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061172b575061172b8533611424565b8061174657503361173b84610603565b6001600160a01b0316145b90508061176657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661178d57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091528120600160e11b4260a01b871781179091558316900361182e5760018301600081815260046020526040812054900361182c57600054811461182c5760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600061188183611668565b90508082156118e5576000336001600160a01b03831614806118a857506118a88233611424565b806118c35750336118b886610603565b6001600160a01b0316145b9050806118e357604051632ce44b5f60e11b815260040160405180910390fd5b505b600084815260066020908152604080832080546001600160a01b03191690556001600160a01b03841683526005825280832080546fffffffffffffffffffffffffffffffff01905586835260049091528120600360e01b4260a01b8417179055600160e11b83169003611988576001840160008181526004602052604081205490036119865760005481146119865760008181526004602052604090208390555b505b60405184906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060018054810190555050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516060810182526000808252602082018190529181019190915260008281526004602052604090205461056b90611cae565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a8a90339089908890889060040161245a565b6020604051808303816000875af1925050508015611ac5575060408051601f3d908101601f19168201909252611ac291810190612497565b60015b611b23573d808015611af3576040519150601f19603f3d011682016040523d82523d6000602084013e611af8565b606091505b508051600003611b1b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b604080516060810182526000808252602082018190529181019190915261056b611b6a83611668565b611cae565b6000546001600160a01b038316611b9857604051622e076360e81b815260040160405180910390fd5b81600003611bb95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660009081526005602090815260408083208054680100000000000000018702019055838352600490915290204260a01b84176001841460e11b179055808083015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611c045750600055505050565b606060098054610580906122a8565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611c9c57600183039250600a81066030018353600a9004611c7e565b50819003601f19909101908152919050565b604080516060810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b90921615159082015290565b828054611cf5906122a8565b90600052602060002090601f016020900481019282611d175760008555611d5d565b82601f10611d3057805160ff1916838001178555611d5d565b82800160010185558215611d5d579182015b82811115611d5d578251825591602001919060010190611d42565b50611d69929150611d6d565b5090565b5b80821115611d695760008155600101611d6e565b6001600160e01b03198116811461085a57600080fd5b600060208284031215611daa57600080fd5b8135610cdc81611d82565b60005b83811015611dd0578181015183820152602001611db8565b83811115610dbc5750506000910152565b60008151808452611df9816020860160208601611db5565b601f01601f19169290920160200192915050565b602081526000610cdc6020830184611de1565b600060208284031215611e3257600080fd5b5035919050565b6001600160a01b038116811461085a57600080fd5b60008060408385031215611e6157600080fd5b8235611e6c81611e39565b946020939093013593505050565b801515811461085a57600080fd5b600060208284031215611e9a57600080fd5b8135610cdc81611e7a565b600080600060608486031215611eba57600080fd5b8335611ec581611e39565b92506020840135611ed581611e39565b929592945050506040919091013590565b60008060408385031215611ef957600080fd5b50508035926020909101359150565b600060208284031215611f1a57600080fd5b8135610cdc81611e39565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f6457611f64611f25565b604052919050565b60006020808385031215611f7f57600080fd5b823567ffffffffffffffff80821115611f9757600080fd5b818501915085601f830112611fab57600080fd5b813581811115611fbd57611fbd611f25565b8060051b9150611fce848301611f3b565b8181529183018401918481019088841115611fe857600080fd5b938501935b8385101561200657843582529385019390850190611fed565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610b0d5761206a83855180516001600160a01b0316825260208082015167ffffffffffffffff16908301526040908101511515910152565b928401926060929092019160010161202e565b6020808252825182820181905260009190848201906040850190845b81811015610b0d57835183529284019291840191600101612099565b600067ffffffffffffffff8311156120cf576120cf611f25565b6120e2601f8401601f1916602001611f3b565b90508281528383830111156120f657600080fd5b828260208301376000602084830101529392505050565b60006020828403121561211f57600080fd5b813567ffffffffffffffff81111561213657600080fd5b8201601f8101841361214757600080fd5b611b39848235602084016120b5565b60008060006060848603121561216b57600080fd5b833561217681611e39565b95602085013595506040909401359392505050565b6000806040838503121561219e57600080fd5b82356121a981611e39565b915060208301356121b981611e7a565b809150509250929050565b600080600080608085870312156121da57600080fd5b84356121e581611e39565b935060208501356121f581611e39565b925060408501359150606085013567ffffffffffffffff81111561221857600080fd5b8501601f8101871361222957600080fd5b612238878235602084016120b5565b91505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff16908201526040808301511515908201526060810161056b565b6000806040838503121561228d57600080fd5b823561229881611e39565b915060208301356121b981611e39565b600181811c908216806122bc57607f821691505b6020821081036122dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561234757612347612317565b500290565b60008261236957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000821982111561239757612397612317565b500190565b60208082526009908201526861696d66756c6c797960b81b604082015260600190565b600083516123d1818460208801611db5565b8351908301906123e5818360208801611db5565b01949350505050565b60006020828403121561240057600080fd5b5051919050565b60006020828403121561241957600080fd5b8151610cdc81611e7a565b60006020828403121561243657600080fd5b8151610cdc81611e39565b60006001820161245357612453612317565b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061248d90830184611de1565b9695505050505050565b6000602082840312156124a957600080fd5b8151610cdc81611d8256fea264697066735822122058479b149f295b12e0758ee808986ac238901828d2a391b05da7f8279380a83b64736f6c634300080e00330000000000000000000000000000000000000000000000000000000000003a9800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000bce3781ae7ca1a5e050bd9c4c77369867ebc307e0000000000000000000000000000000000000000000000000000000000000dac00000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f706565656562677575617264646961616e2e6f726376616c6c65792e7774662f000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c80638462151c11610130578063c23dc68f116100b8578063e985e9c51161007c578063e985e9c5146104fb578063ee1420ad1461050e578063f2eb13d614610521578063f2fde38b1461052a578063fd34d2c11461053d57600080fd5b8063c23dc68f1461049a578063c410449b146104ba578063c87b56dd146104c2578063d4f2bc1a146104d5578063d50f23cf146104e857600080fd5b806399a2557a116100ff57806399a2557a1461044157806399fef89114610454578063a22cb46514610461578063b88d4fde14610474578063bc80531a1461048757600080fd5b80638462151c146103f55780638da5cb5b1461041557806395d89b4114610426578063970606ba1461042e57600080fd5b80632a55205a116101be5780636352211e116101825780636352211e146103b657806370a08231146103c9578063715018a6146103dc5780637ef5e794146103e457806380ae8405146103ec57600080fd5b80632a55205a1461031b57806342842e0e1461034d57806342966c681461036057806348b9852e146103735780635bbb21771461039657600080fd5b8063151951d511610205578063151951d5146102b457806318160ddd146102c75780631b2e6a7e146102dd5780631e375eae146102e557806323b872dd1461030857600080fd5b806301ffc9a71461023757806306fdde031461025f578063081812fc14610274578063095ea7b31461029f575b600080fd5b61024a610245366004611d98565b610546565b60405190151581526020015b60405180910390f35b610267610571565b6040516102569190611e0d565b610287610282366004611e20565b610603565b6040516001600160a01b039091168152602001610256565b6102b26102ad366004611e4e565b610647565b005b6102b26102c2366004611e88565b610719565b600154600054035b604051908152602001610256565b61026761075f565b61024a6102f3366004611e20565b600f6020526000908152604090205460ff1681565b6102b2610316366004611ea5565b6107ed565b61032e610329366004611ee6565b6107fd565b604080516001600160a01b039093168352602083019190915201610256565b6102b261035b366004611ea5565b610834565b6102b261036e366004611e20565b61084f565b61024a610381366004611f08565b600e6020526000908152604090205460ff1681565b6103a96103a4366004611f6c565b61085d565b6040516102569190612012565b6102876103c4366004611e20565b610924565b6102cf6103d7366004611f08565b61092f565b6102b261097e565b6102b26109b4565b6102cf600d5481565b610408610403366004611f08565b610a17565b604051610256919061207d565b6008546001600160a01b0316610287565b610267610b19565b6102b261043c36600461210d565b610b28565b61040861044f366004612156565b610b69565b600a5461024a9060ff1681565b6102b261046f36600461218b565b610ce3565b6102b26104823660046121c4565b610d78565b6102b2610495366004611e20565b610dc2565b6104ad6104a8366004611e20565b610df1565b6040516102569190612244565b6102b2610e5a565b6102676104d0366004611e20565b610fdc565b6102b26104e3366004611f08565b61105f565b6102b26104f6366004611f6c565b611173565b61024a61050936600461227a565b611424565b6102b261051c366004611e4e565b611452565b6102cf600c5481565b6102b2610538366004611f08565b61155b565b6102cf600b5481565b60006001600160e01b0319821663152a902d60e11b148061056b575061056b826115f3565b92915050565b606060028054610580906122a8565b80601f01602080910402602001604051908101604052809291908181526020018280546105ac906122a8565b80156105f95780601f106105ce576101008083540402835291602001916105f9565b820191906000526020600020905b8154815290600101906020018083116105dc57829003601f168201915b5050505050905090565b600061060e82611641565b61062b576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061065282611668565b9050806001600160a01b0316836001600160a01b0316036106865760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146106bd576106a08133611424565b6106bd576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b0316331461074c5760405162461bcd60e51b8152600401610743906122e2565b60405180910390fd5b600a805460ff1916911515919091179055565b6009805461076c906122a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610798906122a8565b80156107e55780601f106107ba576101008083540402835291602001916107e5565b820191906000526020600020905b8154815290600101906020018083116107c857829003601f168201915b505050505081565b6107f88383836116cf565b505050565b6000806108126008546001600160a01b031690565b606461081f85600a61232d565b610829919061234c565b915091509250929050565b6107f883838360405180602001604052806000815250610d78565b61085a816001611876565b50565b805160609060008167ffffffffffffffff81111561087d5761087d611f25565b6040519080825280602002602001820160405280156108c857816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161089b5790505b50905060005b82811461091c576108f78582815181106108ea576108ea61236e565b6020026020010151610df1565b8282815181106109095761090961236e565b60209081029190910101526001016108ce565b509392505050565b600061056b82611668565b60006001600160a01b038216610958576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146109a85760405162461bcd60e51b8152600401610743906122e2565b6109b260006119ce565b565b6008546001600160a01b031633146109de5760405162461bcd60e51b8152600401610743906122e2565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561085a573d6000803e3d6000fd5b60606000806000610a278561092f565b905060008167ffffffffffffffff811115610a4457610a44611f25565b604051908082528060200260200182016040528015610a6d578160200160208202803683370190505b509050610a93604080516060810182526000808252602082018190529181019190915290565b60005b838614610b0d57610aa681611a20565b91508160400151610b055781516001600160a01b031615610ac657815194505b876001600160a01b0316856001600160a01b031603610b055780838780600101985081518110610af857610af861236e565b6020026020010181815250505b600101610a96565b50909695505050505050565b606060038054610580906122a8565b6008546001600160a01b03163314610b525760405162461bcd60e51b8152600401610743906122e2565b8051610b65906009906020840190611ce9565b5050565b6060818310610b8b57604051631960ccad60e11b815260040160405180910390fd5b600080610b9760005490565b905080841115610ba5578093505b6000610bb08761092f565b905084861015610bcf5785850381811015610bc9578091505b50610bd3565b5060005b60008167ffffffffffffffff811115610bee57610bee611f25565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b50905081600003610c2d579350610cdc92505050565b6000610c3888610df1565b905060008160400151610c49575080515b885b888114158015610c5b5750848714155b15610cd057610c6981611a20565b92508260400151610cc85782516001600160a01b031615610c8957825191505b8a6001600160a01b0316826001600160a01b031603610cc85780848880600101995081518110610cbb57610cbb61236e565b6020026020010181815250505b600101610c4b565b50505092835250909150505b9392505050565b336001600160a01b03831603610d0c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d838484846116cf565b6001600160a01b0383163b15610dbc57610d9f84848484611a55565b610dbc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b03163314610dec5760405162461bcd60e51b8152600401610743906122e2565b600c55565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281018390529091506000548310610e365792915050565b610e3f83611a20565b9050806040015115610e515792915050565b610cdc83611b41565b333214610e6657600080fd5b333b15610e7257600080fd5b600a5460ff16610eb35760405162461bcd60e51b815260206004820152600c60248201526b3737b7ba39ba30b0b93a34b760a11b6044820152606401610743565b7f0000000000000000000000000000000000000000000000000000000000003a98610ee16001546000540390565b610eec906001612384565b1115610f0a5760405162461bcd60e51b81526004016107439061239c565b336000908152600e602052604090205460ff1615610f545760405162461bcd60e51b815260206004820152600760248201526675726f7272726360c81b6044820152606401610743565b600c54600b54610f65906001612384565b1115610f9b5760405162461bcd60e51b815260206004820152600560248201526466756c6c7960d81b6044820152606401610743565b336000908152600e60205260408120805460ff19166001908117909155600b805491929091610fcb908490612384565b909155506109b29050336001611b6f565b6060610fe782611641565b61100457604051630a14c4b560e41b815260040160405180910390fd5b600061100e611c50565b9050805160000361102e5760405180602001604052806000815250610cdc565b8061103884611c5f565b6040516020016110499291906123bf565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146110895760405162461bcd60e51b8152600401610743906122e2565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb91906123ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612407565b61085a57600080fd5b33321461117f57600080fd5b333b1561118b57600080fd5b600a5460ff166111cc5760405162461bcd60e51b815260206004820152600c60248201526b3737b7ba39ba30b0b93a34b760a11b6044820152606401610743565b7f0000000000000000000000000000000000000000000000000000000000003a9881516111fc6001546000540390565b6112069190612384565b11156112245760405162461bcd60e51b81526004016107439061239c565b600081511161125d5760405162461bcd60e51b8152602060048201526005602482015264656d70746160d81b6044820152606401610743565b60005b815181101561141857336001600160a01b03167f000000000000000000000000bce3781ae7ca1a5e050bd9c4c77369867ebc307e6001600160a01b0316636352211e8484815181106112b4576112b461236e565b60200260200101516040518263ffffffff1660e01b81526004016112da91815260200190565b602060405180830381865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b9190612424565b6001600160a01b0316146113575760405162461bcd60e51b815260206004820152600360248201526268616360e81b6044820152606401610743565b600f600083838151811061136d5761136d61236e565b60209081029190910181015182528101919091526040016000205460ff16156113c05760405162461bcd60e51b81526020600482015260056024820152646461626c6560d81b6044820152606401610743565b6001600f60008484815181106113d8576113d861236e565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061141090612441565b915050611260565b5061085a338251611b6f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610743906122e2565b7f0000000000000000000000000000000000000000000000000000000000003a98816114ab6001546000540390565b6114b59190612384565b11156114d35760405162461bcd60e51b81526004016107439061239c565b7f00000000000000000000000000000000000000000000000000000000000005dc81600d546115029190612384565b11156115395760405162461bcd60e51b8152600401610743906020808252600490820152636279656560e01b604082015260600190565b80600d600082825461154b9190612384565b90915550610b6590508282611b6f565b6008546001600160a01b031633146115855760405162461bcd60e51b8152600401610743906122e2565b6001600160a01b0381166115ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610743565b61085a816119ce565b60006301ffc9a760e01b6001600160e01b03198316148061162457506380ac58cd60e01b6001600160e01b03198316145b8061056b5750506001600160e01b031916635b5e139f60e01b1490565b600080548210801561056b575050600090815260046020526040902054600160e01b161590565b6000816000548110156116b65760008181526004602052604081205490600160e01b821690036116b4575b80600003610cdc575060001901600081815260046020526040902054611693565b505b604051636f96cda160e11b815260040160405180910390fd5b60006116da82611668565b9050836001600160a01b0316816001600160a01b03161461170d5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061172b575061172b8533611424565b8061174657503361173b84610603565b6001600160a01b0316145b90508061176657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661178d57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091528120600160e11b4260a01b871781179091558316900361182e5760018301600081815260046020526040812054900361182c57600054811461182c5760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600061188183611668565b90508082156118e5576000336001600160a01b03831614806118a857506118a88233611424565b806118c35750336118b886610603565b6001600160a01b0316145b9050806118e357604051632ce44b5f60e11b815260040160405180910390fd5b505b600084815260066020908152604080832080546001600160a01b03191690556001600160a01b03841683526005825280832080546fffffffffffffffffffffffffffffffff01905586835260049091528120600360e01b4260a01b8417179055600160e11b83169003611988576001840160008181526004602052604081205490036119865760005481146119865760008181526004602052604090208390555b505b60405184906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060018054810190555050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516060810182526000808252602082018190529181019190915260008281526004602052604090205461056b90611cae565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a8a90339089908890889060040161245a565b6020604051808303816000875af1925050508015611ac5575060408051601f3d908101601f19168201909252611ac291810190612497565b60015b611b23573d808015611af3576040519150601f19603f3d011682016040523d82523d6000602084013e611af8565b606091505b508051600003611b1b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b604080516060810182526000808252602082018190529181019190915261056b611b6a83611668565b611cae565b6000546001600160a01b038316611b9857604051622e076360e81b815260040160405180910390fd5b81600003611bb95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660009081526005602090815260408083208054680100000000000000018702019055838352600490915290204260a01b84176001841460e11b179055808083015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611c045750600055505050565b606060098054610580906122a8565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611c9c57600183039250600a81066030018353600a9004611c7e565b50819003601f19909101908152919050565b604080516060810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b90921615159082015290565b828054611cf5906122a8565b90600052602060002090601f016020900481019282611d175760008555611d5d565b82601f10611d3057805160ff1916838001178555611d5d565b82800160010185558215611d5d579182015b82811115611d5d578251825591602001919060010190611d42565b50611d69929150611d6d565b5090565b5b80821115611d695760008155600101611d6e565b6001600160e01b03198116811461085a57600080fd5b600060208284031215611daa57600080fd5b8135610cdc81611d82565b60005b83811015611dd0578181015183820152602001611db8565b83811115610dbc5750506000910152565b60008151808452611df9816020860160208601611db5565b601f01601f19169290920160200192915050565b602081526000610cdc6020830184611de1565b600060208284031215611e3257600080fd5b5035919050565b6001600160a01b038116811461085a57600080fd5b60008060408385031215611e6157600080fd5b8235611e6c81611e39565b946020939093013593505050565b801515811461085a57600080fd5b600060208284031215611e9a57600080fd5b8135610cdc81611e7a565b600080600060608486031215611eba57600080fd5b8335611ec581611e39565b92506020840135611ed581611e39565b929592945050506040919091013590565b60008060408385031215611ef957600080fd5b50508035926020909101359150565b600060208284031215611f1a57600080fd5b8135610cdc81611e39565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f6457611f64611f25565b604052919050565b60006020808385031215611f7f57600080fd5b823567ffffffffffffffff80821115611f9757600080fd5b818501915085601f830112611fab57600080fd5b813581811115611fbd57611fbd611f25565b8060051b9150611fce848301611f3b565b8181529183018401918481019088841115611fe857600080fd5b938501935b8385101561200657843582529385019390850190611fed565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610b0d5761206a83855180516001600160a01b0316825260208082015167ffffffffffffffff16908301526040908101511515910152565b928401926060929092019160010161202e565b6020808252825182820181905260009190848201906040850190845b81811015610b0d57835183529284019291840191600101612099565b600067ffffffffffffffff8311156120cf576120cf611f25565b6120e2601f8401601f1916602001611f3b565b90508281528383830111156120f657600080fd5b828260208301376000602084830101529392505050565b60006020828403121561211f57600080fd5b813567ffffffffffffffff81111561213657600080fd5b8201601f8101841361214757600080fd5b611b39848235602084016120b5565b60008060006060848603121561216b57600080fd5b833561217681611e39565b95602085013595506040909401359392505050565b6000806040838503121561219e57600080fd5b82356121a981611e39565b915060208301356121b981611e7a565b809150509250929050565b600080600080608085870312156121da57600080fd5b84356121e581611e39565b935060208501356121f581611e39565b925060408501359150606085013567ffffffffffffffff81111561221857600080fd5b8501601f8101871361222957600080fd5b612238878235602084016120b5565b91505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff16908201526040808301511515908201526060810161056b565b6000806040838503121561228d57600080fd5b823561229881611e39565b915060208301356121b981611e39565b600181811c908216806122bc57607f821691505b6020821081036122dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561234757612347612317565b500290565b60008261236957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000821982111561239757612397612317565b500190565b60208082526009908201526861696d66756c6c797960b81b604082015260600190565b600083516123d1818460208801611db5565b8351908301906123e5818360208801611db5565b01949350505050565b60006020828403121561240057600080fd5b5051919050565b60006020828403121561241957600080fd5b8151610cdc81611e7a565b60006020828403121561243657600080fd5b8151610cdc81611e39565b60006001820161245357612453612317565b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061248d90830184611de1565b9695505050505050565b6000602082840312156124a957600080fd5b8151610cdc81611d8256fea264697066735822122058479b149f295b12e0758ee808986ac238901828d2a391b05da7f8279380a83b64736f6c634300080e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000003a9800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000bce3781ae7ca1a5e050bd9c4c77369867ebc307e0000000000000000000000000000000000000000000000000000000000000dac00000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f706565656562677575617264646961616e2e6f726376616c6c65792e7774662f000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : oorc_ (uint256): 15000
Arg [1] : orccvaalleey_ (string): https://peeeebguuarddiaan.orcvalley.wtf/
Arg [2] : goobbbliin_ (address): 0xbCe3781ae7Ca1a5e050Bd9C4c77369867eBc307e
Arg [3] : mattelimita_ (uint256): 3500
Arg [4] : deevlimita_ (uint256): 1500

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000bce3781ae7ca1a5e050bd9c4c77369867ebc307e
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000dac
Arg [4] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [6] : 68747470733a2f2f706565656562677575617264646961616e2e6f726376616c
Arg [7] : 6c65792e7774662f000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

61583:3398:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64388:276;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;64388:276:0;;;;;;;;31479:100;;;:::i;:::-;;;;;;;:::i;33547:204::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;33547:204:0;1528:203:1;33007:474:0;;;;;;:::i;:::-;;:::i;:::-;;63784:93;;;;;;:::i;:::-;;:::i;25520:315::-;25786:12;;25573:7;25770:13;:28;25520:315;;;2707:25:1;;;2695:2;2680:18;25520:315:0;2561:177:1;61703:26:0;;;:::i;61977:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34433:170;;;;;;:::i;:::-;;:::i;64672:193::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3649:32:1;;;3631:51;;3713:2;3698:18;;3691:34;;;;3604:18;64672:193:0;3457:274:1;34674:185:0;;;;;;:::i;:::-;;:::i;52745:94::-;;;;;;:::i;:::-;;:::i;61931:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;56796:468;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31268:144::-;;;;;;:::i;:::-;;:::i;27145:224::-;;;;;;:::i;:::-;;:::i;2651:103::-;;;:::i;64128:105::-;;;:::i;61864:23::-;;;;;;60608:892;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2000:87::-;2073:6;;-1:-1:-1;;;;;2073:6:0;2000:87;;31648:104;;;:::i;63885:120::-;;;;;;:::i;:::-;;:::i;57654:2505::-;;;;;;:::i;:::-;;:::i;61773:20::-;;;;;;;;;33823:308;;;;;;:::i;:::-;;:::i;34930:396::-;;;;;;:::i;:::-;;:::i;64013:107::-;;;;;;:::i;:::-;;:::i;56217:420::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;62601:360::-;;;:::i;31823:318::-;;;;;;:::i;:::-;;:::i;64241:139::-;;;;;;:::i;:::-;;:::i;62969:545::-;;;;;;:::i;:::-;;:::i;34202:164::-;;;;;;:::i;:::-;;:::i;63522:254::-;;;;;;:::i;:::-;;:::i;61829:26::-;;;;;;2909:201;;;;;;:::i;:::-;;:::i;61802:20::-;;;;;;64388:276;64546:4;-1:-1:-1;;;;;;64575:41:0;;-1:-1:-1;;;64575:41:0;;:81;;;64620:36;64644:11;64620:23;:36::i;:::-;64568:88;64388:276;-1:-1:-1;;64388:276:0:o;31479:100::-;31533:13;31566:5;31559:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31479:100;:::o;33547:204::-;33615:7;33640:16;33648:7;33640;:16::i;:::-;33635:64;;33665:34;;-1:-1:-1;;;33665:34:0;;;;;;;;;;;33635:64;-1:-1:-1;33719:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;33719:24:0;;33547:204::o;33007:474::-;33080:13;33112:27;33131:7;33112:18;:27::i;:::-;33080:61;;33162:5;-1:-1:-1;;;;;33156:11:0;:2;-1:-1:-1;;;;;33156:11:0;;33152:48;;33176:24;;-1:-1:-1;;;33176:24:0;;;;;;;;;;;33152:48;49650:10;-1:-1:-1;;;;;33217:28:0;;;33213:175;;33265:44;33282:5;49650:10;34202:164;:::i;33265:44::-;33260:128;;33337:35;;-1:-1:-1;;;33337:35:0;;;;;;;;;;;33260:128;33400:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;33400:29:0;-1:-1:-1;;;;;33400:29:0;;;;;;;;;33445:28;;33400:24;;33445:28;;;;;;;33069:412;33007:474;;:::o;63784:93::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;;;;;;;;;63849:8:::1;:20:::0;;-1:-1:-1;;63849:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63784:93::o;61703:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34433:170::-;34567:28;34577:4;34583:2;34587:7;34567:9;:28::i;:::-;34433:170;;;:::o;64672:193::-;64790:7;64799;64827;2073:6;;-1:-1:-1;;;;;2073:6:0;;2000:87;64827:7;64853:3;64837:12;:7;64847:2;64837:12;:::i;:::-;64836:20;;;;:::i;:::-;64819:38;;;;64672:193;;;;;:::o;34674:185::-;34812:39;34829:4;34835:2;34839:7;34812:39;;;;;;;;;;;;:16;:39::i;52745:94::-;52811:20;52817:7;52826:4;52811:5;:20::i;:::-;52745:94;:::o;56796:468::-;56971:15;;56885:23;;56946:22;56971:15;57038:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;57038:36:0;;-1:-1:-1;;57038:36:0;;;;;;;;;;;;57001:73;;57094:9;57089:125;57110:14;57105:1;:19;57089:125;;57166:32;57186:8;57195:1;57186:11;;;;;;;;:::i;:::-;;;;;;;57166:19;:32::i;:::-;57150:10;57161:1;57150:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;57126:3;;57089:125;;;-1:-1:-1;57235:10:0;56796:468;-1:-1:-1;;;56796:468:0:o;31268:144::-;31332:7;31375:27;31394:7;31375:18;:27::i;27145:224::-;27209:7;-1:-1:-1;;;;;27233:19:0;;27229:60;;27261:28;;-1:-1:-1;;;27261:28:0;;;;;;;;;;;27229:60;-1:-1:-1;;;;;;27307:25:0;;;;;:18;:25;;;;;;22484:13;27307:54;;27145:224::o;2651:103::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;2716:30:::1;2743:1;2716:18;:30::i;:::-;2651:103::o:0;64128:105::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;2073:6;;64177:48:::1;::::0;-1:-1:-1;;;;;2073:6:0;;;;64203:21:::1;64177:48:::0;::::1;;;::::0;::::1;::::0;;;64203:21;2073:6;64177:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;60608:892:::0;60678:16;60732:19;60766:25;60806:22;60831:16;60841:5;60831:9;:16::i;:::-;60806:41;;60862:25;60904:14;60890:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60890:29:0;;60862:57;;60934:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;60934:31:0;60985:9;60980:472;61029:14;61014:11;:29;60980:472;;61081:15;61094:1;61081:12;:15::i;:::-;61069:27;;61119:9;:16;;;61160:8;61115:73;61210:14;;-1:-1:-1;;;;;61210:28:0;;61206:111;;61283:14;;;-1:-1:-1;61206:111:0;61360:5;-1:-1:-1;;;;;61339:26:0;:17;-1:-1:-1;;;;;61339:26:0;;61335:102;;61416:1;61390:8;61399:13;;;;;;61390:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;61335:102;61045:3;;60980:472;;;-1:-1:-1;61473:8:0;;60608:892;-1:-1:-1;;;;;;60608:892:0:o;31648:104::-;31704:13;31737:7;31730:14;;;;;:::i;63885:120::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;63969:28;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;;63885:120:::0;:::o;57654:2505::-;57789:16;57856:4;57847:5;:13;57843:45;;57869:19;;-1:-1:-1;;;57869:19:0;;;;;;;;;;;57843:45;57903:19;57937:17;57957:14;25261:7;25288:13;;25214:95;57957:14;57937:34;-1:-1:-1;58208:9:0;58201:4;:16;58197:73;;;58245:9;58238:16;;58197:73;58284:25;58312:16;58322:5;58312:9;:16::i;:::-;58284:44;;58506:4;58498:5;:12;58494:278;;;58553:12;;;58588:31;;;58584:111;;;58664:11;58644:31;;58584:111;58512:198;58494:278;;;-1:-1:-1;58755:1:0;58494:278;58786:25;58828:17;58814:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58814:32:0;;58786:60;;58865:17;58886:1;58865:22;58861:78;;58915:8;-1:-1:-1;58908:15:0;;-1:-1:-1;;;58908:15:0;58861:78;59083:31;59117:26;59137:5;59117:19;:26::i;:::-;59083:60;;59158:25;59403:9;:16;;;59398:92;;-1:-1:-1;59460:14:0;;59398:92;59521:5;59504:478;59533:4;59528:1;:9;;:45;;;;;59556:17;59541:11;:32;;59528:45;59504:478;;;59611:15;59624:1;59611:12;:15::i;:::-;59599:27;;59649:9;:16;;;59690:8;59645:73;59740:14;;-1:-1:-1;;;;;59740:28:0;;59736:111;;59813:14;;;-1:-1:-1;59736:111:0;59890:5;-1:-1:-1;;;;;59869:26:0;:17;-1:-1:-1;;;;;59869:26:0;;59865:102;;59946:1;59920:8;59929:13;;;;;;59920:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;59865:102;59575:3;;59504:478;;;-1:-1:-1;;;60067:29:0;;;-1:-1:-1;60074:8:0;;-1:-1:-1;;57654:2505:0;;;;;;:::o;33823:308::-;49650:10;-1:-1:-1;;;;;33922:31:0;;;33918:61;;33962:17;;-1:-1:-1;;;33962:17:0;;;;;;;;;;;33918:61;49650:10;33992:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;33992:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;33992:60:0;;;;;;;;;;34068:55;;540:41:1;;;33992:49:0;;49650:10;34068:55;;513:18:1;34068:55:0;;;;;;;33823:308;;:::o;34930:396::-;35097:28;35107:4;35113:2;35117:7;35097:9;:28::i;:::-;-1:-1:-1;;;;;35140:14:0;;;:19;35136:183;;35179:56;35210:4;35216:2;35220:7;35229:5;35179:30;:56::i;:::-;35174:145;;35263:40;;-1:-1:-1;;;35263:40:0;;;;;;;;;;;35174:145;34930:396;;;;:::o;64013:107::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;64086:11:::1;:26:::0;64013:107::o;56217:420::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25261:7:0;25288:13;56402:7;:25;56369:103;;56451:9;56217:420;-1:-1:-1;;56217:420:0:o;56369:103::-;56494:21;56507:7;56494:12;:21::i;:::-;56482:33;;56530:9;:16;;;56526:65;;;56570:9;56217:420;-1:-1:-1;;56217:420:0:o;56526:65::-;56608:21;56621:7;56608:12;:21::i;62601:360::-;62084:10;62098:9;62084:23;62076:32;;;;;;62127:10;:22;:27;62119:36;;;;;;62673:8:::1;::::0;::::1;;62665:33;;;::::0;-1:-1:-1;;;62665:33:0;;11977:2:1;62665:33:0::1;::::0;::::1;11959:21:1::0;12016:2;11996:18;;;11989:30;-1:-1:-1;;;12035:18:1;;;12028:42;12087:18;;62665:33:0::1;11775:336:1::0;62665:33:0::1;62738:4;62717:13;25786:12:::0;;25573:7;25770:13;:28;;25520:315;62717:13:::1;:17;::::0;62733:1:::1;62717:17;:::i;:::-;:25;;62709:47;;;;-1:-1:-1::0;;;62709:47:0::1;;;;;;;:::i;:::-;62784:10;62776:19;::::0;;;:7:::1;:19;::::0;;;;;::::1;;62775:20;62767:40;;;::::0;-1:-1:-1;;;62767:40:0;;12788:2:1;62767:40:0::1;::::0;::::1;12770:21:1::0;12827:1;12807:18;;;12800:29;-1:-1:-1;;;12845:18:1;;;12838:37;12892:18;;62767:40:0::1;12586:330:1::0;62767:40:0::1;62839:11;::::0;62826:5:::1;::::0;:9:::1;::::0;62834:1:::1;62826:9;:::i;:::-;:24;;62818:42;;;::::0;-1:-1:-1;;;62818:42:0;;13123:2:1;62818:42:0::1;::::0;::::1;13105:21:1::0;13162:1;13142:18;;;13135:29;-1:-1:-1;;;13180:18:1;;;13173:35;13225:18;;62818:42:0::1;12921:328:1::0;62818:42:0::1;62881:10;62873:19;::::0;;;:7:::1;:19;::::0;;;;:26;;-1:-1:-1;;62873:26:0::1;62895:4;62873:26:::0;;::::1;::::0;;;62910:5:::1;:10:::0;;62895:4;;62910:5;;:10:::1;::::0;62895:4;;62910:10:::1;:::i;:::-;::::0;;;-1:-1:-1;62933:20:0::1;::::0;-1:-1:-1;62939:10:0::1;62951:1;62933:5;:20::i;31823:318::-:0;31896:13;31927:16;31935:7;31927;:16::i;:::-;31922:59;;31952:29;;-1:-1:-1;;;31952:29:0;;;;;;;;;;;31922:59;31994:21;32018:10;:8;:10::i;:::-;31994:34;;32052:7;32046:21;32071:1;32046:26;:87;;;;;;;;;;;;;;;;;32099:7;32108:18;32118:7;32108:9;:18::i;:::-;32082:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32039:94;31823:318;-1:-1:-1;;;31823:318:0:o;64241:139::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;64339:31:::1;::::0;-1:-1:-1;;;64339:31:0;;64364:4:::1;64339:31;::::0;::::1;1674:51:1::0;-1:-1:-1;;;;;64311:15:0;::::1;::::0;::::1;::::0;64327:10:::1;::::0;64311:15;;64339:16:::1;::::0;1647:18:1;;64339:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64311:60;::::0;-1:-1:-1;;;;;;64311:60:0::1;::::0;;;;;;-1:-1:-1;;;;;3649:32:1;;;64311:60:0::1;::::0;::::1;3631:51:1::0;3698:18;;;3691:34;3604:18;;64311:60:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64303:69;;;::::0;::::1;62969:545:::0;62084:10;62098:9;62084:23;62076:32;;;;;;62127:10;:22;:27;62119:36;;;;;;63063:8:::1;::::0;::::1;;63055:33;;;::::0;-1:-1:-1;;;63055:33:0;;11977:2:1;63055:33:0::1;::::0;::::1;11959:21:1::0;12016:2;11996:18;;;11989:30;-1:-1:-1;;;12035:18:1;;;12028:42;12087:18;;63055:33:0::1;11775:336:1::0;63055:33:0::1;63139:4;63123:5;:12;63107:13;25786:12:::0;;25573:7;25770:13;:28;;25520:315;63107:13:::1;:28;;;;:::i;:::-;:36;;63099:58;;;;-1:-1:-1::0;;;63099:58:0::1;;;;;;;:::i;:::-;63191:1;63176:5;:12;:16;63168:34;;;::::0;-1:-1:-1;;;63168:34:0;;14370:2:1;63168:34:0::1;::::0;::::1;14352:21:1::0;14409:1;14389:18;;;14382:29;-1:-1:-1;;;14427:18:1;;;14420:35;14472:18;;63168:34:0::1;14168:328:1::0;63168:34:0::1;63220:11;63215:250;63243:5;:12;63237:3;:18;63215:250;;;63321:10;-1:-1:-1::0;;;;;63287:44:0::1;:10;-1:-1:-1::0;;;;;63287:18:0::1;;63306:5;63312:3;63306:10;;;;;;;;:::i;:::-;;;;;;;63287:30;;;;;;;;;;;;;2707:25:1::0;;2695:2;2680:18;;2561:177;63287:30:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;63287:44:0::1;;63279:60;;;::::0;-1:-1:-1;;;63279:60:0;;14959:2:1;63279:60:0::1;::::0;::::1;14941:21:1::0;14998:1;14978:18;;;14971:29;-1:-1:-1;;;15016:18:1;;;15009:33;15059:18;;63279:60:0::1;14757:326:1::0;63279:60:0::1;63363:17;:29;63381:5;63387:3;63381:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;63363:29;;;::::1;::::0;;;;;;-1:-1:-1;63363:29:0;;::::1;;63362:30;63354:48;;;::::0;-1:-1:-1;;;63354:48:0;;15290:2:1;63354:48:0::1;::::0;::::1;15272:21:1::0;15329:1;15309:18;;;15302:29;-1:-1:-1;;;15347:18:1;;;15340:35;15392:18;;63354:48:0::1;15088:328:1::0;63354:48:0::1;63449:4;63417:17;:29;63435:5;63441:3;63435:10;;;;;;;;:::i;:::-;;;;;;;63417:29;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;63257:5;;;;;:::i;:::-;;;;63215:250;;;;63475:31;63481:10;63493:5;:12;63475:5;:31::i;34202:164::-:0;-1:-1:-1;;;;;34323:25:0;;;34299:4;34323:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34202:164::o;63522:254::-;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;63637:4:::1;63626:7;63610:13;25786:12:::0;;25573:7;25770:13;:28;;25520:315;63610:13:::1;:23;;;;:::i;:::-;:31;;63602:53;;;;-1:-1:-1::0;;;63602:53:0::1;;;;;;;:::i;:::-;63692:10;63681:7;63674:4;;:14;;;;:::i;:::-;:28;;63666:45;;;;-1:-1:-1::0;;;63666:45:0::1;;;;;;15763:2:1::0;15745:21;;;15802:1;15782:18;;;15775:29;-1:-1:-1;;;15835:2:1;15820:18;;15813:34;15879:2;15864:18;;15561:327;63666:45:0::1;63732:7;63724:4;;:15;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;63750:18:0::1;::::0;-1:-1:-1;63756:2:0;63760:7;63750:5:::1;:18::i;2909:201::-:0;2073:6;;-1:-1:-1;;;;;2073:6:0;49650:10;2220:23;2212:68;;;;-1:-1:-1;;;2212:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2998:22:0;::::1;2990:73;;;::::0;-1:-1:-1;;;2990:73:0;;16095:2:1;2990:73:0::1;::::0;::::1;16077:21:1::0;16134:2;16114:18;;;16107:30;16173:34;16153:18;;;16146:62;-1:-1:-1;;;16224:18:1;;;16217:36;16270:19;;2990:73:0::1;15893:402:1::0;2990:73:0::1;3074:28;3093:8;3074:18;:28::i;26466:615::-:0;26551:4;-1:-1:-1;;;;;;;;;26851:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;26928:25:0;;;26851:102;:179;;;-1:-1:-1;;;;;;;;27005:25:0;-1:-1:-1;;;27005:25:0;;26466:615::o;35581:273::-;35638:4;35728:13;;35718:7;:23;35675:152;;;;-1:-1:-1;;35779:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;35779:43:0;:48;;35581:273::o;28783:1129::-;28850:7;28885;28987:13;;28980:4;:20;28976:869;;;29025:14;29042:23;;;:17;:23;;;;;;;-1:-1:-1;;;29131:23:0;;:28;;29127:699;;29650:113;29657:6;29667:1;29657:11;29650:113;;-1:-1:-1;;;29728:6:0;29710:25;;;;:17;:25;;;;;;29650:113;;29127:699;29002:843;28976:869;29873:31;;-1:-1:-1;;;29873:31:0;;;;;;;;;;;40820:2515;40935:27;40965;40984:7;40965:18;:27::i;:::-;40935:57;;41050:4;-1:-1:-1;;;;;41009:45:0;41025:19;-1:-1:-1;;;;;41009:45:0;;41005:86;;41063:28;;-1:-1:-1;;;41063:28:0;;;;;;;;;;;41005:86;41104:22;49650:10;-1:-1:-1;;;;;41130:27:0;;;;:87;;-1:-1:-1;41174:43:0;41191:4;49650:10;34202:164;:::i;41174:43::-;41130:147;;;-1:-1:-1;49650:10:0;41234:20;41246:7;41234:11;:20::i;:::-;-1:-1:-1;;;;;41234:43:0;;41130:147;41104:174;;41296:17;41291:66;;41322:35;;-1:-1:-1;;;41322:35:0;;;;;;;;;;;41291:66;-1:-1:-1;;;;;41372:16:0;;41368:52;;41397:23;;-1:-1:-1;;;41397:23:0;;;;;;;;;;;41368:52;41549:24;;;;:15;:24;;;;;;;;41542:31;;-1:-1:-1;;;;;;41542:31:0;;;-1:-1:-1;;;;;41941:24:0;;;;;:18;:24;;;;;41939:26;;-1:-1:-1;;41939:26:0;;;42010:22;;;;;;;42008:24;;-1:-1:-1;42008:24:0;;;42303:26;;;:17;:26;;;;;-1:-1:-1;;;42391:15:0;23138:3;42391:41;42349:84;;:128;;42303:174;;;42597:46;;:51;;42593:626;;42701:1;42691:11;;42669:19;42824:30;;;:17;:30;;;;;;:35;;42820:384;;42962:13;;42947:11;:28;42943:242;;43109:30;;;;:17;:30;;;;;:52;;;42943:242;42650:569;42593:626;43266:7;43262:2;-1:-1:-1;;;;;43247:27:0;43256:4;-1:-1:-1;;;;;43247:27:0;;;;;;;;;;;40924:2411;;40820:2515;;;:::o;43731:2809::-;43811:27;43841;43860:7;43841:18;:27::i;:::-;43811:57;-1:-1:-1;43811:57:0;43946:311;;;;43980:22;49650:10;-1:-1:-1;;;;;44006:27:0;;;;:91;;-1:-1:-1;44054:43:0;44071:4;49650:10;34202:164;:::i;44054:43::-;44006:155;;;-1:-1:-1;49650:10:0;44118:20;44130:7;44118:11;:20::i;:::-;-1:-1:-1;;;;;44118:43:0;;44006:155;43980:182;;44184:17;44179:66;;44210:35;;-1:-1:-1;;;44210:35:0;;;;;;;;;;;44179:66;43965:292;43946:311;44393:24;;;;:15;:24;;;;;;;;44386:31;;-1:-1:-1;;;;;;44386:31:0;;;-1:-1:-1;;;;;45006:24:0;;;;:18;:24;;;;;:59;;45034:31;45006:59;;;45303:26;;;:17;:26;;;;;-1:-1:-1;;;45393:15:0;23138:3;45393:41;45349:86;;:165;45303:211;;-1:-1:-1;;;45634:46:0;;:51;;45630:626;;45738:1;45728:11;;45706:19;45861:30;;;:17;:30;;;;;;:35;;45857:384;;45999:13;;45984:11;:28;45980:242;;46146:30;;;;:17;:30;;;;;:52;;;45980:242;45687:569;45630:626;46284:35;;46311:7;;46307:1;;-1:-1:-1;;;;;46284:35:0;;;;;46307:1;;46284:35;-1:-1:-1;;46507:12:0;:14;;;;;;-1:-1:-1;;43731:2809:0:o;3270:191::-;3363:6;;;-1:-1:-1;;;;;3380:17:0;;;-1:-1:-1;;;;;;3380:17:0;;;;;;;3413:40;;3363:6;;;3380:17;3363:6;;3413:40;;3344:16;;3413:40;3333:128;3270:191;:::o;30392:153::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;30512:24:0;;;;:17;:24;;;;;;30493:44;;:18;:44::i;47032:716::-;47216:88;;-1:-1:-1;;;47216:88:0;;47195:4;;-1:-1:-1;;;;;47216:45:0;;;;;:88;;49650:10;;47283:4;;47289:7;;47298:5;;47216:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47216:88:0;;;;;;;;-1:-1:-1;;47216:88:0;;;;;;;;;;;;:::i;:::-;;;47212:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47499:6;:13;47516:1;47499:18;47495:235;;47545:40;;-1:-1:-1;;;47545:40:0;;;;;;;;;;;47495:235;47688:6;47682:13;47673:6;47669:2;47665:15;47658:38;47212:529;-1:-1:-1;;;;;;47375:64:0;-1:-1:-1;;;47375:64:0;;-1:-1:-1;47212:529:0;47032:716;;;;;;:::o;31048:158::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;31151:47:0;31170:27;31189:7;31170:18;:27::i;:::-;31151:18;:47::i;38910:1656::-;38975:20;38998:13;-1:-1:-1;;;;;39026:16:0;;39022:48;;39051:19;;-1:-1:-1;;;39051:19:0;;;;;;;;;;;39022:48;39085:8;39097:1;39085:13;39081:44;;39107:18;;-1:-1:-1;;;39107:18:0;;;;;;;;;;;39081:44;-1:-1:-1;;;;;39674:22:0;;;;;;:18;:22;;;;22621:2;39674:22;;;:70;;39712:31;39700:44;;39674:70;;;39987:31;;;:17;:31;;;;;40080:15;23138:3;40080:41;40038:84;;-1:-1:-1;40158:13:0;;23401:3;40143:56;40038:162;39987:213;;:31;40281:23;;;40321:111;40348:40;;40373:14;;;;;-1:-1:-1;;;;;40348:40:0;;;40365:1;;40348:40;;40365:1;;40348:40;40427:3;40412:12;:18;40321:111;;-1:-1:-1;40448:13:0;:28;34433:170;;;:::o;64873:105::-;64925:13;64958:12;64951:19;;;;;:::i;49774:1959::-;50245:4;50239:11;;50252:3;50235:21;;50330:17;;;;51027:11;;;50906:5;51159:2;51173;51163:13;;51155:22;51027:11;51142:36;51214:2;51204:13;;50797:682;51233:4;50797:682;;;51408:1;51403:3;51399:11;51392:18;;51459:2;51453:4;51449:13;51445:2;51441:22;51436:3;51428:36;51329:2;51319:13;;50797:682;;;-1:-1:-1;51521:13:0;;;-1:-1:-1;;51636:12:0;;;51696:19;;;51636:12;49774:1959;-1:-1:-1;49774:1959:0:o;30006:295::-;-1:-1:-1;;;;;;;;;;;;;30116:41:0;;;;23138:3;30202:32;;;30168:67;;-1:-1:-1;;;30168:67:0;-1:-1:-1;;;30265:23:0;;;:28;;-1:-1:-1;;;30246:47:0;-1:-1:-1;30006:295:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:131::-;-1:-1:-1;;;;;1811:31:1;;1801:42;;1791:70;;1857:1;1854;1847:12;1872:315;1940:6;1948;2001:2;1989:9;1980:7;1976:23;1972:32;1969:52;;;2017:1;2014;2007:12;1969:52;2056:9;2043:23;2075:31;2100:5;2075:31;:::i;:::-;2125:5;2177:2;2162:18;;;;2149:32;;-1:-1:-1;;;1872:315:1:o;2192:118::-;2278:5;2271:13;2264:21;2257:5;2254:32;2244:60;;2300:1;2297;2290:12;2315:241;2371:6;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;2479:9;2466:23;2498:28;2520:5;2498:28;:::i;2743:456::-;2820:6;2828;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3070:2:1;3055:18;;3042:32;3083:33;3042:32;3083:33;:::i;:::-;2743:456;;3135:7;;-1:-1:-1;;;3189:2:1;3174:18;;;;3161:32;;2743:456::o;3204:248::-;3272:6;3280;3333:2;3321:9;3312:7;3308:23;3304:32;3301:52;;;3349:1;3346;3339:12;3301:52;-1:-1:-1;;3372:23:1;;;3442:2;3427:18;;;3414:32;;-1:-1:-1;3204:248:1:o;3736:247::-;3795:6;3848:2;3836:9;3827:7;3823:23;3819:32;3816:52;;;3864:1;3861;3854:12;3816:52;3903:9;3890:23;3922:31;3947:5;3922:31;:::i;3988:127::-;4049:10;4044:3;4040:20;4037:1;4030:31;4080:4;4077:1;4070:15;4104:4;4101:1;4094:15;4120:275;4191:2;4185:9;4256:2;4237:13;;-1:-1:-1;;4233:27:1;4221:40;;4291:18;4276:34;;4312:22;;;4273:62;4270:88;;;4338:18;;:::i;:::-;4374:2;4367:22;4120:275;;-1:-1:-1;4120:275:1:o;4400:946::-;4484:6;4515:2;4558;4546:9;4537:7;4533:23;4529:32;4526:52;;;4574:1;4571;4564:12;4526:52;4614:9;4601:23;4643:18;4684:2;4676:6;4673:14;4670:34;;;4700:1;4697;4690:12;4670:34;4738:6;4727:9;4723:22;4713:32;;4783:7;4776:4;4772:2;4768:13;4764:27;4754:55;;4805:1;4802;4795:12;4754:55;4841:2;4828:16;4863:2;4859;4856:10;4853:36;;;4869:18;;:::i;:::-;4915:2;4912:1;4908:10;4898:20;;4938:28;4962:2;4958;4954:11;4938:28;:::i;:::-;5000:15;;;5070:11;;;5066:20;;;5031:12;;;;5098:19;;;5095:39;;;5130:1;5127;5120:12;5095:39;5154:11;;;;5174:142;5190:6;5185:3;5182:15;5174:142;;;5256:17;;5244:30;;5207:12;;;;5294;;;;5174:142;;;5335:5;4400:946;-1:-1:-1;;;;;;;;4400:946:1:o;5634:722::-;5867:2;5919:21;;;5989:13;;5892:18;;;6011:22;;;5838:4;;5867:2;6090:15;;;;6064:2;6049:18;;;5838:4;6133:197;6147:6;6144:1;6141:13;6133:197;;;6196:52;6244:3;6235:6;6229:13;5435:12;;-1:-1:-1;;;;;5431:38:1;5419:51;;5523:4;5512:16;;;5506:23;5531:18;5502:48;5486:14;;;5479:72;5614:4;5603:16;;;5597:23;5590:31;5583:39;5567:14;;5560:63;5351:278;6196:52;6305:15;;;;6277:4;6268:14;;;;;6169:1;6162:9;6133:197;;6361:632;6532:2;6584:21;;;6654:13;;6557:18;;;6676:22;;;6503:4;;6532:2;6755:15;;;;6729:2;6714:18;;;6503:4;6798:169;6812:6;6809:1;6806:13;6798:169;;;6873:13;;6861:26;;6942:15;;;;6907:12;;;;6834:1;6827:9;6798:169;;6998:407;7063:5;7097:18;7089:6;7086:30;7083:56;;;7119:18;;:::i;:::-;7157:57;7202:2;7181:15;;-1:-1:-1;;7177:29:1;7208:4;7173:40;7157:57;:::i;:::-;7148:66;;7237:6;7230:5;7223:21;7277:3;7268:6;7263:3;7259:16;7256:25;7253:45;;;7294:1;7291;7284:12;7253:45;7343:6;7338:3;7331:4;7324:5;7320:16;7307:43;7397:1;7390:4;7381:6;7374:5;7370:18;7366:29;7359:40;6998:407;;;;;:::o;7410:451::-;7479:6;7532:2;7520:9;7511:7;7507:23;7503:32;7500:52;;;7548:1;7545;7538:12;7500:52;7588:9;7575:23;7621:18;7613:6;7610:30;7607:50;;;7653:1;7650;7643:12;7607:50;7676:22;;7729:4;7721:13;;7717:27;-1:-1:-1;7707:55:1;;7758:1;7755;7748:12;7707:55;7781:74;7847:7;7842:2;7829:16;7824:2;7820;7816:11;7781:74;:::i;7866:383::-;7943:6;7951;7959;8012:2;8000:9;7991:7;7987:23;7983:32;7980:52;;;8028:1;8025;8018:12;7980:52;8067:9;8054:23;8086:31;8111:5;8086:31;:::i;:::-;8136:5;8188:2;8173:18;;8160:32;;-1:-1:-1;8239:2:1;8224:18;;;8211:32;;7866:383;-1:-1:-1;;;7866:383:1:o;8254:382::-;8319:6;8327;8380:2;8368:9;8359:7;8355:23;8351:32;8348:52;;;8396:1;8393;8386:12;8348:52;8435:9;8422:23;8454:31;8479:5;8454:31;:::i;:::-;8504:5;-1:-1:-1;8561:2:1;8546:18;;8533:32;8574:30;8533:32;8574:30;:::i;:::-;8623:7;8613:17;;;8254:382;;;;;:::o;8641:795::-;8736:6;8744;8752;8760;8813:3;8801:9;8792:7;8788:23;8784:33;8781:53;;;8830:1;8827;8820:12;8781:53;8869:9;8856:23;8888:31;8913:5;8888:31;:::i;:::-;8938:5;-1:-1:-1;8995:2:1;8980:18;;8967:32;9008:33;8967:32;9008:33;:::i;:::-;9060:7;-1:-1:-1;9114:2:1;9099:18;;9086:32;;-1:-1:-1;9169:2:1;9154:18;;9141:32;9196:18;9185:30;;9182:50;;;9228:1;9225;9218:12;9182:50;9251:22;;9304:4;9296:13;;9292:27;-1:-1:-1;9282:55:1;;9333:1;9330;9323:12;9282:55;9356:74;9422:7;9417:2;9404:16;9399:2;9395;9391:11;9356:74;:::i;:::-;9346:84;;;8641:795;;;;;;;:::o;9441:265::-;5435:12;;-1:-1:-1;;;;;5431:38:1;5419:51;;5523:4;5512:16;;;5506:23;5531:18;5502:48;5486:14;;;5479:72;5614:4;5603:16;;;5597:23;5590:31;5583:39;5567:14;;;5560:63;9637:2;9622:18;;9649:51;5351:278;9977:388;10045:6;10053;10106:2;10094:9;10085:7;10081:23;10077:32;10074:52;;;10122:1;10119;10112:12;10074:52;10161:9;10148:23;10180:31;10205:5;10180:31;:::i;:::-;10230:5;-1:-1:-1;10287:2:1;10272:18;;10259:32;10300:33;10259:32;10300:33;:::i;10370:380::-;10449:1;10445:12;;;;10492;;;10513:61;;10567:4;10559:6;10555:17;10545:27;;10513:61;10620:2;10612:6;10609:14;10589:18;10586:38;10583:161;;10666:10;10661:3;10657:20;10654:1;10647:31;10701:4;10698:1;10691:15;10729:4;10726:1;10719:15;10583:161;;10370:380;;;:::o;10755:356::-;10957:2;10939:21;;;10976:18;;;10969:30;11035:34;11030:2;11015:18;;11008:62;11102:2;11087:18;;10755:356::o;11116:127::-;11177:10;11172:3;11168:20;11165:1;11158:31;11208:4;11205:1;11198:15;11232:4;11229:1;11222:15;11248:168;11288:7;11354:1;11350;11346:6;11342:14;11339:1;11336:21;11331:1;11324:9;11317:17;11313:45;11310:71;;;11361:18;;:::i;:::-;-1:-1:-1;11401:9:1;;11248:168::o;11421:217::-;11461:1;11487;11477:132;;11531:10;11526:3;11522:20;11519:1;11512:31;11566:4;11563:1;11556:15;11594:4;11591:1;11584:15;11477:132;-1:-1:-1;11623:9:1;;11421:217::o;11643:127::-;11704:10;11699:3;11695:20;11692:1;11685:31;11735:4;11732:1;11725:15;11759:4;11756:1;11749:15;12116:128;12156:3;12187:1;12183:6;12180:1;12177:13;12174:39;;;12193:18;;:::i;:::-;-1:-1:-1;12229:9:1;;12116:128::o;12249:332::-;12451:2;12433:21;;;12490:1;12470:18;;;12463:29;-1:-1:-1;;;12523:2:1;12508:18;;12501:39;12572:2;12557:18;;12249:332::o;13254:470::-;13433:3;13471:6;13465:13;13487:53;13533:6;13528:3;13521:4;13513:6;13509:17;13487:53;:::i;:::-;13603:13;;13562:16;;;;13625:57;13603:13;13562:16;13659:4;13647:17;;13625:57;:::i;:::-;13698:20;;13254:470;-1:-1:-1;;;;13254:470:1:o;13729:184::-;13799:6;13852:2;13840:9;13831:7;13827:23;13823:32;13820:52;;;13868:1;13865;13858:12;13820:52;-1:-1:-1;13891:16:1;;13729:184;-1:-1:-1;13729:184:1:o;13918:245::-;13985:6;14038:2;14026:9;14017:7;14013:23;14009:32;14006:52;;;14054:1;14051;14044:12;14006:52;14086:9;14080:16;14105:28;14127:5;14105:28;:::i;14501:251::-;14571:6;14624:2;14612:9;14603:7;14599:23;14595:32;14592:52;;;14640:1;14637;14630:12;14592:52;14672:9;14666:16;14691:31;14716:5;14691:31;:::i;15421:135::-;15460:3;15481:17;;;15478:43;;15501:18;;:::i;:::-;-1:-1:-1;15548:1:1;15537:13;;15421:135::o;16300:489::-;-1:-1:-1;;;;;16569:15:1;;;16551:34;;16621:15;;16616:2;16601:18;;16594:43;16668:2;16653:18;;16646:34;;;16716:3;16711:2;16696:18;;16689:31;;;16494:4;;16737:46;;16763:19;;16755:6;16737:46;:::i;:::-;16729:54;16300:489;-1:-1:-1;;;;;;16300:489:1:o;16794:249::-;16863:6;16916:2;16904:9;16895:7;16891:23;16887:32;16884:52;;;16932:1;16929;16922:12;16884:52;16964:9;16958:16;16983:30;17007:5;16983:30;:::i

Swarm Source

ipfs://58479b149f295b12e0758ee808986ac238901828d2a391b05da7f8279380a83b
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.