ETH Price: $3,230.81 (+1.88%)
Gas: 6 Gwei

Token

GBN (GBN)
 

Overview

Max Total Supply

5,555 GBN

Holders

559

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
6 GBN
0x9e4c7b957a8072357f847fa01333e2862eac3e35
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:
GBN

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-26
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v4.1.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();

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

    /**
     * The `quantity` minted with ERC2309 exceeds the safety limit.
     */
    error MintERC2309QuantityExceedsLimit();

    /**
     * The `extraData` cannot be set on an unintialized ownership slot.
     */
    error OwnershipNotInitializedForExtraData();

    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;
        // Arbitrary data similar to `startTimestamp` that can be set through `_extraData`.
        uint24 extraData;
    }

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

    // ==============================
    //            IERC2309
    // ==============================

    /**
     * @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`,
     * as defined in the ERC2309 standard. See `_mintERC2309` for more details.
     */
    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

// File: erc721a/contracts/ERC721A.sol


// ERC721A Contracts v4.1.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 bit position of `extraData` in packed ownership.
    uint256 private constant BITPOS_EXTRA_DATA = 232;

    // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`.
    uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    // The mask of the lower 160 bits for addresses.
    uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1;

    // The maximum `quantity` that can be minted with `_mintERC2309`.
    // This limit is to prevent overflows on the address data entries.
    // For a limit of 5000, a total of 3.689e15 calls to `_mintERC2309`
    // is required to cause an overflow, which is unrealistic.
    uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    // 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`
    // - [232..255] `extraData`
    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 1;
    }

    /**
     * @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 auxiliary 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 auxiliary 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;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            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;
        ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA);
    }

    /**
     * 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 Packs ownership data into a single uint256.
     */
    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, BITMASK_ADDRESS)
            // `owner | (block.timestamp << BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    /**
     * @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, it can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev Returns the `nextInitialized` flag set if `quantity` equals 1.
     */
    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << BITPOS_NEXT_INITIALIZED`.
            result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

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

        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-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 {
        transferFrom(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.
     *
     * See {_mint}.
     *
     * Emits a {Transfer} event for each mint.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    /**
     * @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 for each mint.
     */
    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` and `numberMinted` have a maximum limit of 2**64.
        // `tokenId` has a maximum limit of 2**256.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _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] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 tokenId = startTokenId;
            uint256 end = startTokenId + quantity;
            do {
                emit Transfer(address(0), to, tokenId++);
            } while (tokenId < end);

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

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * This function is intended for efficient minting only during contract creation.
     *
     * It emits only one {ConsecutiveTransfer} as defined in
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309),
     * instead of a sequence of {Transfer} event(s).
     *
     * Calling this function outside of contract creation WILL make your contract
     * non-compliant with the ERC721 standard.
     * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309
     * {ConsecutiveTransfer} event is only permissible during contract creation.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {ConsecutiveTransfer} event.
     */
    function _mintERC2309(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

        // Overflows are unrealistic due to the above check for `quantity` to be below the limit.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _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] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

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

    /**
     * @dev Returns the storage slot and value for the approved address of `tokenId`.
     */
    function _getApprovedAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`.
        assembly {
            // Compute the slot.
            mstore(0x00, tokenId)
            mstore(0x20, tokenApprovalsPtr.slot)
            approvedAddressSlot := keccak256(0x00, 0x40)
            // Load the slot's value from storage.
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    /**
     * @dev Returns whether the `approvedAddress` is equals to `from` or `msgSender`.
     */
    function _isOwnerOrApproved(
        address approvedAddress,
        address from,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean.
            from := and(from, BITMASK_ADDRESS)
            // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
            msgSender := and(msgSender, BITMASK_ADDRESS)
            // `msgSender == from || msgSender == approvedAddress`.
            result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
        }
    }

    /**
     * @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 transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

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

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        // The nested ifs save around 20+ gas over a compound boolean condition.
        if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // 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] = _packOwnershipData(
                to,
                BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

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

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        if (approvalCheck) {
            // The nested ifs save around 20+ gas over a compound boolean condition.
            if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

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

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // 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] = _packOwnershipData(
                from,
                (BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            // 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 Directly sets the extra data for the ownership data `index`.
     */
    function _setExtraDataAt(uint256 index, uint24 extraData) internal {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        // Cast `extraData` with assembly to avoid redundant masking.
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    /**
     * @dev Returns the next extra data for the packed ownership data.
     * The returned result is shifted into position.
     */
    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA;
    }

    /**
     * @dev Called during each token transfer to set the 24bit `extraData` field.
     * Intended to be overridden by the cosumer contract.
     *
     * `previousExtraData` - the value of `extraData` before transfer.
     *
     * 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 _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    /**
     * @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: GBN.sol


pragma solidity ^0.8.6;





contract GBN is ERC721A,Ownable,ReentrancyGuard {
    using Strings for uint256;

    //Global Settings 
    bool public paused = true;


    //PUBLIC Sale Settings
    uint256 public maxSupply = 5555 ;
    uint256 public maxMint = 10;


    //Metadata Settings
    string public _baseTokenURI;
    string public _baseTokenEXT;

    mapping(address => uint256) public _totalMinted;

    constructor(string memory _nURL,string memory _nBaseExt) ERC721A("GBN","GBN") {
        _baseTokenURI = _nURL;
        _baseTokenEXT = _nBaseExt;
    }

    function mint(uint256 _mintAmount) public nonReentrant {
        require(!paused,"Contract Minting Paused");
        require(_mintAmount+_totalMinted[msg.sender] <= maxMint,"You can't mint more,Decrease MintAmount or Wait For Opensea" );
        uint256 supply = totalSupply();
        require(supply + _mintAmount <= maxSupply ,": No more NFTs to mint,decrease the quantity or check out OpenSea.");
        _safeMint(msg.sender,_mintAmount);
        _totalMinted[msg.sender]+=_mintAmount;
    }

    function airDrop(uint256 amount,address _address) public onlyOwner {
        uint256 supply = totalSupply();
        require(supply+amount <= maxSupply,"Max Supply Exceeds");
        _safeMint(_address, amount);
    }

    function setPublicMintMax(uint256 newMax) public onlyOwner {
        maxMint = newMax;
    }
    
    function tooglePause() public onlyOwner{
        paused = !paused;
    }

    function changeURLParams(string memory _nURL,string memory _nBaseExt) public onlyOwner {
        _baseTokenURI = _nURL;
        _baseTokenEXT = _nBaseExt;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
        string memory currentBaseURI = _baseTokenURI;
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI,tokenId.toString(),_baseTokenEXT)) : "";
    }

     function withdrawMoney() external onlyOwner nonReentrant {
        (bool success,) = msg.sender.call{value: address(this).balance}("");
        require(success,"Transfer failed.");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_nURL","type":"string"},{"internalType":"string","name":"_nBaseExt","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenEXT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_nURL","type":"string"},{"internalType":"string","name":"_nBaseExt","type":"string"}],"name":"changeURLParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setPublicMintMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tooglePause","outputs":[],"stateMutability":"nonpayable","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":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600a60006101000a81548160ff0219169083151502179055506115b3600b55600a600c553480156200003757600080fd5b50604051620035cf380380620035cf83398181016040528101906200005d91906200037a565b6040518060400160405280600381526020017f47424e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f47424e00000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000e19291906200024c565b508060039080519060200190620000fa9291906200024c565b506200010b6200017560201b60201c565b600081905550505062000133620001276200017e60201b60201c565b6200018660201b60201c565b600160098190555081600d9080519060200190620001539291906200024c565b5080600e90805190602001906200016c9291906200024c565b50505062000583565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025a9062000494565b90600052602060002090601f0160209004810192826200027e5760008555620002ca565b82601f106200029957805160ff1916838001178555620002ca565b82800160010185558215620002ca579182015b82811115620002c9578251825591602001919060010190620002ac565b5b509050620002d99190620002dd565b5090565b5b80821115620002f8576000816000905550600101620002de565b5090565b6000620003136200030d8462000428565b620003ff565b90508281526020810184848401111562000332576200033162000563565b5b6200033f8482856200045e565b509392505050565b600082601f8301126200035f576200035e6200055e565b5b815162000371848260208601620002fc565b91505092915050565b600080604083850312156200039457620003936200056d565b5b600083015167ffffffffffffffff811115620003b557620003b462000568565b5b620003c38582860162000347565b925050602083015167ffffffffffffffff811115620003e757620003e662000568565b5b620003f58582860162000347565b9150509250929050565b60006200040b6200041e565b9050620004198282620004ca565b919050565b6000604051905090565b600067ffffffffffffffff8211156200044657620004456200052f565b5b620004518262000572565b9050602081019050919050565b60005b838110156200047e57808201518184015260208101905062000461565b838111156200048e576000848401525b50505050565b60006002820490506001821680620004ad57607f821691505b60208210811415620004c457620004c362000500565b5b50919050565b620004d58262000572565b810181811067ffffffffffffffff82111715620004f757620004f66200052f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61303c80620005936000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063b88d4fde116100a2578063d5abeb0111610071578063d5abeb01146104f4578063d621a77614610512578063e985e9c51461051c578063f2fde38b1461054c576101cf565b8063b88d4fde1461045a578063bbc2756414610476578063c87b56dd146104a6578063cfc86f7b146104d6576101cf565b8063a22cb465116100de578063a22cb465146103fc578063ac44600214610418578063aed3801514610422578063b740fff61461043e576101cf565b80638da5cb5b146103a457806395d89b41146103c2578063a0712d68146103e0576101cf565b80635c975abb11610171578063715018a61161014b578063715018a6146103425780637501f7411461034c578063783fd9221461036a57806385fee16814610386576101cf565b80635c975abb146102c45780636352211e146102e257806370a0823114610312576101cf565b8063095ea7b3116101ad578063095ea7b31461025257806318160ddd1461026e57806323b872dd1461028c57806342842e0e146102a8576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e9919061231f565b610568565b6040516101fb91906127b8565b60405180910390f35b61020c6105fa565b60405161021991906127d3565b60405180910390f35b61023c600480360381019061023791906123f1565b61068c565b6040516102499190612751565b60405180910390f35b61026c600480360381019061026791906122df565b610708565b005b610276610849565b6040516102839190612915565b60405180910390f35b6102a660048036038101906102a191906121c9565b610860565b005b6102c260048036038101906102bd91906121c9565b610b85565b005b6102cc610ba5565b6040516102d991906127b8565b60405180910390f35b6102fc60048036038101906102f791906123f1565b610bb8565b6040516103099190612751565b60405180910390f35b61032c6004803603810190610327919061215c565b610bca565b6040516103399190612915565b60405180910390f35b61034a610c83565b005b610354610c97565b6040516103619190612915565b60405180910390f35b610384600480360381019061037f9190612379565b610c9d565b005b61038e610cd7565b60405161039b91906127d3565b60405180910390f35b6103ac610d65565b6040516103b99190612751565b60405180910390f35b6103ca610d8f565b6040516103d791906127d3565b60405180910390f35b6103fa60048036038101906103f591906123f1565b610e21565b005b6104166004803603810190610411919061229f565b611016565b005b61042061118e565b005b61043c6004803603810190610437919061241e565b61129b565b005b610458600480360381019061045391906123f1565b61130e565b005b610474600480360381019061046f919061221c565b611320565b005b610490600480360381019061048b919061215c565b611393565b60405161049d9190612915565b60405180910390f35b6104c060048036038101906104bb91906123f1565b6113ab565b6040516104cd91906127d3565b60405180910390f35b6104de6114d8565b6040516104eb91906127d3565b60405180910390f35b6104fc611566565b6040516105099190612915565b60405180910390f35b61051a61156c565b005b61053660048036038101906105319190612189565b6115a0565b60405161054391906127b8565b60405180910390f35b6105666004803603810190610561919061215c565b611634565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105f35750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461060990612b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461063590612b8b565b80156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b5050505050905090565b6000610697826116b8565b6106cd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061071382610bb8565b90508073ffffffffffffffffffffffffffffffffffffffff16610734611717565b73ffffffffffffffffffffffffffffffffffffffff1614610797576107608161075b611717565b6115a0565b610796576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061085361171f565b6001546000540303905090565b600061086b82611728565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806108de846117f6565b915091506108f481876108ef611717565b611818565b6109405761090986610904611717565b6115a0565b61093f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156109a7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b4868686600161185c565b80156109bf57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610a8d85610a69888887611862565b7c02000000000000000000000000000000000000000000000000000000001761188a565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610b15576000600185019050600060046000838152602001908152602001600020541415610b13576000548114610b12578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b7d86868660016118b5565b505050505050565b610ba083838360405180602001604052806000815250611320565b505050565b600a60009054906101000a900460ff1681565b6000610bc382611728565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c32576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610c8b6118bb565b610c956000611939565b565b600c5481565b610ca56118bb565b81600d9080519060200190610cbb929190611f70565b5080600e9080519060200190610cd2929190611f70565b505050565b600e8054610ce490612b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1090612b8b565b8015610d5d5780601f10610d3257610100808354040283529160200191610d5d565b820191906000526020600020905b815481529060010190602001808311610d4057829003601f168201915b505050505081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d9e90612b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610dca90612b8b565b8015610e175780601f10610dec57610100808354040283529160200191610e17565b820191906000526020600020905b815481529060010190602001808311610dfa57829003601f168201915b5050505050905090565b60026009541415610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e906128f5565b60405180910390fd5b6002600981905550600a60009054906101000a900460ff1615610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690612895565b60405180910390fd5b600c54600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610f0d9190612a1a565b1115610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590612815565b60405180910390fd5b6000610f58610849565b9050600b548282610f699190612a1a565b1115610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906128d5565b60405180910390fd5b610fb433836119ff565b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110039190612a1a565b9250508190555050600160098190555050565b61101e611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611083576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611090611717565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661113d611717565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161118291906127b8565b60405180910390a35050565b6111966118bb565b600260095414156111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d3906128f5565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161120a9061273c565b60006040518083038185875af1925050503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b5050905080611290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611287906128b5565b60405180910390fd5b506001600981905550565b6112a36118bb565b60006112ad610849565b9050600b5483826112be9190612a1a565b11156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f6906127f5565b60405180910390fd5b61130982846119ff565b505050565b6113166118bb565b80600c8190555050565b61132b848484610860565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461138d5761135684848484611a1d565b61138c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600f6020528060005260406000206000915090505481565b60606113b6826116b8565b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90612875565b60405180910390fd5b6000600d805461140490612b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461143090612b8b565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905060008151116114a257604051806020016040528060008152506114d0565b806114ac84611b7d565b600e6040516020016114c09392919061270b565b6040516020818303038152906040525b915050919050565b600d80546114e590612b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461151190612b8b565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b505050505081565b600b5481565b6115746118bb565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61163c6118bb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390612835565b60405180910390fd5b6116b581611939565b50565b6000816116c361171f565b111580156116d2575060005482105b8015611710575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b6000808290508061173761171f565b116117bf576000548110156117be5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156117bc575b60008114156117b2576004600083600190039350838152602001908152602001600020549050611787565b80925050506117f1565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611879868684611cde565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6118c3611ce7565b73ffffffffffffffffffffffffffffffffffffffff166118e1610d65565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90612855565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a19828260405180602001604052806000815250611cef565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a43611717565b8786866040518563ffffffff1660e01b8152600401611a65949392919061276c565b602060405180830381600087803b158015611a7f57600080fd5b505af1925050508015611ab057506040513d601f19601f82011682018060405250810190611aad919061234c565b60015b611b2a573d8060008114611ae0576040519150601f19603f3d011682016040523d82523d6000602084013e611ae5565b606091505b50600081511415611b22576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415611bc5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611cd9565b600082905060005b60008214611bf7578080611be090612bee565b915050600a82611bf09190612a70565b9150611bcd565b60008167ffffffffffffffff811115611c1357611c12612d24565b5b6040519080825280601f01601f191660200182016040528015611c455781602001600182028036833780820191505090505b5090505b60008514611cd257600182611c5e9190612aa1565b9150600a85611c6d9190612c37565b6030611c799190612a1a565b60f81b818381518110611c8f57611c8e612cf5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ccb9190612a70565b9450611c49565b8093505050505b919050565b60009392505050565b600033905090565b611cf98383611d8c565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611d8757600080549050600083820390505b611d396000868380600101945086611a1d565b611d6f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110611d26578160005414611d8457600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611df9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415611e34576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e41600084838561185c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611eb883611ea96000866000611862565b611eb285611f60565b1761188a565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611edc57806000819055505050611f5b60008483856118b5565b505050565b60006001821460e11b9050919050565b828054611f7c90612b8b565b90600052602060002090601f016020900481019282611f9e5760008555611fe5565b82601f10611fb757805160ff1916838001178555611fe5565b82800160010185558215611fe5579182015b82811115611fe4578251825591602001919060010190611fc9565b5b509050611ff29190611ff6565b5090565b5b8082111561200f576000816000905550600101611ff7565b5090565b600061202661202184612955565b612930565b90508281526020810184848401111561204257612041612d58565b5b61204d848285612b49565b509392505050565b600061206861206384612986565b612930565b90508281526020810184848401111561208457612083612d58565b5b61208f848285612b49565b509392505050565b6000813590506120a681612faa565b92915050565b6000813590506120bb81612fc1565b92915050565b6000813590506120d081612fd8565b92915050565b6000815190506120e581612fd8565b92915050565b600082601f830112612100576120ff612d53565b5b8135612110848260208601612013565b91505092915050565b600082601f83011261212e5761212d612d53565b5b813561213e848260208601612055565b91505092915050565b60008135905061215681612fef565b92915050565b60006020828403121561217257612171612d62565b5b600061218084828501612097565b91505092915050565b600080604083850312156121a05761219f612d62565b5b60006121ae85828601612097565b92505060206121bf85828601612097565b9150509250929050565b6000806000606084860312156121e2576121e1612d62565b5b60006121f086828701612097565b935050602061220186828701612097565b925050604061221286828701612147565b9150509250925092565b6000806000806080858703121561223657612235612d62565b5b600061224487828801612097565b945050602061225587828801612097565b935050604061226687828801612147565b925050606085013567ffffffffffffffff81111561228757612286612d5d565b5b612293878288016120eb565b91505092959194509250565b600080604083850312156122b6576122b5612d62565b5b60006122c485828601612097565b92505060206122d5858286016120ac565b9150509250929050565b600080604083850312156122f6576122f5612d62565b5b600061230485828601612097565b925050602061231585828601612147565b9150509250929050565b60006020828403121561233557612334612d62565b5b6000612343848285016120c1565b91505092915050565b60006020828403121561236257612361612d62565b5b6000612370848285016120d6565b91505092915050565b600080604083850312156123905761238f612d62565b5b600083013567ffffffffffffffff8111156123ae576123ad612d5d565b5b6123ba85828601612119565b925050602083013567ffffffffffffffff8111156123db576123da612d5d565b5b6123e785828601612119565b9150509250929050565b60006020828403121561240757612406612d62565b5b600061241584828501612147565b91505092915050565b6000806040838503121561243557612434612d62565b5b600061244385828601612147565b925050602061245485828601612097565b9150509250929050565b61246781612ad5565b82525050565b61247681612ae7565b82525050565b6000612487826129cc565b61249181856129e2565b93506124a1818560208601612b58565b6124aa81612d67565b840191505092915050565b60006124c0826129d7565b6124ca81856129fe565b93506124da818560208601612b58565b6124e381612d67565b840191505092915050565b60006124f9826129d7565b6125038185612a0f565b9350612513818560208601612b58565b80840191505092915050565b6000815461252c81612b8b565b6125368186612a0f565b94506001821660008114612551576001811461256257612595565b60ff19831686528186019350612595565b61256b856129b7565b60005b8381101561258d5781548189015260018201915060208101905061256e565b838801955050505b50505092915050565b60006125ab6012836129fe565b91506125b682612d78565b602082019050919050565b60006125ce603b836129fe565b91506125d982612da1565b604082019050919050565b60006125f16026836129fe565b91506125fc82612df0565b604082019050919050565b60006126146020836129fe565b915061261f82612e3f565b602082019050919050565b6000612637602f836129fe565b915061264282612e68565b604082019050919050565b600061265a6017836129fe565b915061266582612eb7565b602082019050919050565b600061267d6000836129f3565b915061268882612ee0565b600082019050919050565b60006126a06010836129fe565b91506126ab82612ee3565b602082019050919050565b60006126c36042836129fe565b91506126ce82612f0c565b606082019050919050565b60006126e6601f836129fe565b91506126f182612f81565b602082019050919050565b61270581612b3f565b82525050565b600061271782866124ee565b915061272382856124ee565b915061272f828461251f565b9150819050949350505050565b600061274782612670565b9150819050919050565b6000602082019050612766600083018461245e565b92915050565b6000608082019050612781600083018761245e565b61278e602083018661245e565b61279b60408301856126fc565b81810360608301526127ad818461247c565b905095945050505050565b60006020820190506127cd600083018461246d565b92915050565b600060208201905081810360008301526127ed81846124b5565b905092915050565b6000602082019050818103600083015261280e8161259e565b9050919050565b6000602082019050818103600083015261282e816125c1565b9050919050565b6000602082019050818103600083015261284e816125e4565b9050919050565b6000602082019050818103600083015261286e81612607565b9050919050565b6000602082019050818103600083015261288e8161262a565b9050919050565b600060208201905081810360008301526128ae8161264d565b9050919050565b600060208201905081810360008301526128ce81612693565b9050919050565b600060208201905081810360008301526128ee816126b6565b9050919050565b6000602082019050818103600083015261290e816126d9565b9050919050565b600060208201905061292a60008301846126fc565b92915050565b600061293a61294b565b90506129468282612bbd565b919050565b6000604051905090565b600067ffffffffffffffff8211156129705761296f612d24565b5b61297982612d67565b9050602081019050919050565b600067ffffffffffffffff8211156129a1576129a0612d24565b5b6129aa82612d67565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a2582612b3f565b9150612a3083612b3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a6557612a64612c68565b5b828201905092915050565b6000612a7b82612b3f565b9150612a8683612b3f565b925082612a9657612a95612c97565b5b828204905092915050565b6000612aac82612b3f565b9150612ab783612b3f565b925082821015612aca57612ac9612c68565b5b828203905092915050565b6000612ae082612b1f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612b76578082015181840152602081019050612b5b565b83811115612b85576000848401525b50505050565b60006002820490506001821680612ba357607f821691505b60208210811415612bb757612bb6612cc6565b5b50919050565b612bc682612d67565b810181811067ffffffffffffffff82111715612be557612be4612d24565b5b80604052505050565b6000612bf982612b3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c2c57612c2b612c68565b5b600182019050919050565b6000612c4282612b3f565b9150612c4d83612b3f565b925082612c5d57612c5c612c97565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d617820537570706c7920457863656564730000000000000000000000000000600082015250565b7f596f752063616e2774206d696e74206d6f72652c4465637265617365204d696e60008201527f74416d6f756e74206f72205761697420466f72204f70656e7365610000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f436f6e7472616374204d696e74696e6720506175736564000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f3a204e6f206d6f7265204e46547320746f206d696e742c64656372656173652060008201527f746865207175616e74697479206f7220636865636b206f7574204f70656e536560208201527f612e000000000000000000000000000000000000000000000000000000000000604082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b612fb381612ad5565b8114612fbe57600080fd5b50565b612fca81612ae7565b8114612fd557600080fd5b50565b612fe181612af3565b8114612fec57600080fd5b50565b612ff881612b3f565b811461300357600080fd5b5056fea2646970667358221220dd3aa143b47b6998d959d79a648f62482dcfddac6c7280610bfd8b346049c74e64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5656746345625167466a6d705168733647503154584136646145674a6a38455a587546764e4169624d5a416f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000062e6a736f6e200000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063b88d4fde116100a2578063d5abeb0111610071578063d5abeb01146104f4578063d621a77614610512578063e985e9c51461051c578063f2fde38b1461054c576101cf565b8063b88d4fde1461045a578063bbc2756414610476578063c87b56dd146104a6578063cfc86f7b146104d6576101cf565b8063a22cb465116100de578063a22cb465146103fc578063ac44600214610418578063aed3801514610422578063b740fff61461043e576101cf565b80638da5cb5b146103a457806395d89b41146103c2578063a0712d68146103e0576101cf565b80635c975abb11610171578063715018a61161014b578063715018a6146103425780637501f7411461034c578063783fd9221461036a57806385fee16814610386576101cf565b80635c975abb146102c45780636352211e146102e257806370a0823114610312576101cf565b8063095ea7b3116101ad578063095ea7b31461025257806318160ddd1461026e57806323b872dd1461028c57806342842e0e146102a8576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e9919061231f565b610568565b6040516101fb91906127b8565b60405180910390f35b61020c6105fa565b60405161021991906127d3565b60405180910390f35b61023c600480360381019061023791906123f1565b61068c565b6040516102499190612751565b60405180910390f35b61026c600480360381019061026791906122df565b610708565b005b610276610849565b6040516102839190612915565b60405180910390f35b6102a660048036038101906102a191906121c9565b610860565b005b6102c260048036038101906102bd91906121c9565b610b85565b005b6102cc610ba5565b6040516102d991906127b8565b60405180910390f35b6102fc60048036038101906102f791906123f1565b610bb8565b6040516103099190612751565b60405180910390f35b61032c6004803603810190610327919061215c565b610bca565b6040516103399190612915565b60405180910390f35b61034a610c83565b005b610354610c97565b6040516103619190612915565b60405180910390f35b610384600480360381019061037f9190612379565b610c9d565b005b61038e610cd7565b60405161039b91906127d3565b60405180910390f35b6103ac610d65565b6040516103b99190612751565b60405180910390f35b6103ca610d8f565b6040516103d791906127d3565b60405180910390f35b6103fa60048036038101906103f591906123f1565b610e21565b005b6104166004803603810190610411919061229f565b611016565b005b61042061118e565b005b61043c6004803603810190610437919061241e565b61129b565b005b610458600480360381019061045391906123f1565b61130e565b005b610474600480360381019061046f919061221c565b611320565b005b610490600480360381019061048b919061215c565b611393565b60405161049d9190612915565b60405180910390f35b6104c060048036038101906104bb91906123f1565b6113ab565b6040516104cd91906127d3565b60405180910390f35b6104de6114d8565b6040516104eb91906127d3565b60405180910390f35b6104fc611566565b6040516105099190612915565b60405180910390f35b61051a61156c565b005b61053660048036038101906105319190612189565b6115a0565b60405161054391906127b8565b60405180910390f35b6105666004803603810190610561919061215c565b611634565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105f35750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461060990612b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461063590612b8b565b80156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b5050505050905090565b6000610697826116b8565b6106cd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061071382610bb8565b90508073ffffffffffffffffffffffffffffffffffffffff16610734611717565b73ffffffffffffffffffffffffffffffffffffffff1614610797576107608161075b611717565b6115a0565b610796576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061085361171f565b6001546000540303905090565b600061086b82611728565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806108de846117f6565b915091506108f481876108ef611717565b611818565b6109405761090986610904611717565b6115a0565b61093f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156109a7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b4868686600161185c565b80156109bf57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610a8d85610a69888887611862565b7c02000000000000000000000000000000000000000000000000000000001761188a565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610b15576000600185019050600060046000838152602001908152602001600020541415610b13576000548114610b12578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b7d86868660016118b5565b505050505050565b610ba083838360405180602001604052806000815250611320565b505050565b600a60009054906101000a900460ff1681565b6000610bc382611728565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c32576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610c8b6118bb565b610c956000611939565b565b600c5481565b610ca56118bb565b81600d9080519060200190610cbb929190611f70565b5080600e9080519060200190610cd2929190611f70565b505050565b600e8054610ce490612b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1090612b8b565b8015610d5d5780601f10610d3257610100808354040283529160200191610d5d565b820191906000526020600020905b815481529060010190602001808311610d4057829003601f168201915b505050505081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d9e90612b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610dca90612b8b565b8015610e175780601f10610dec57610100808354040283529160200191610e17565b820191906000526020600020905b815481529060010190602001808311610dfa57829003601f168201915b5050505050905090565b60026009541415610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e906128f5565b60405180910390fd5b6002600981905550600a60009054906101000a900460ff1615610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690612895565b60405180910390fd5b600c54600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610f0d9190612a1a565b1115610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590612815565b60405180910390fd5b6000610f58610849565b9050600b548282610f699190612a1a565b1115610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906128d5565b60405180910390fd5b610fb433836119ff565b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110039190612a1a565b9250508190555050600160098190555050565b61101e611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611083576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611090611717565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661113d611717565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161118291906127b8565b60405180910390a35050565b6111966118bb565b600260095414156111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d3906128f5565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161120a9061273c565b60006040518083038185875af1925050503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b5050905080611290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611287906128b5565b60405180910390fd5b506001600981905550565b6112a36118bb565b60006112ad610849565b9050600b5483826112be9190612a1a565b11156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f6906127f5565b60405180910390fd5b61130982846119ff565b505050565b6113166118bb565b80600c8190555050565b61132b848484610860565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461138d5761135684848484611a1d565b61138c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600f6020528060005260406000206000915090505481565b60606113b6826116b8565b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90612875565b60405180910390fd5b6000600d805461140490612b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461143090612b8b565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905060008151116114a257604051806020016040528060008152506114d0565b806114ac84611b7d565b600e6040516020016114c09392919061270b565b6040516020818303038152906040525b915050919050565b600d80546114e590612b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461151190612b8b565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b505050505081565b600b5481565b6115746118bb565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61163c6118bb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390612835565b60405180910390fd5b6116b581611939565b50565b6000816116c361171f565b111580156116d2575060005482105b8015611710575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b6000808290508061173761171f565b116117bf576000548110156117be5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156117bc575b60008114156117b2576004600083600190039350838152602001908152602001600020549050611787565b80925050506117f1565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611879868684611cde565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6118c3611ce7565b73ffffffffffffffffffffffffffffffffffffffff166118e1610d65565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90612855565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a19828260405180602001604052806000815250611cef565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a43611717565b8786866040518563ffffffff1660e01b8152600401611a65949392919061276c565b602060405180830381600087803b158015611a7f57600080fd5b505af1925050508015611ab057506040513d601f19601f82011682018060405250810190611aad919061234c565b60015b611b2a573d8060008114611ae0576040519150601f19603f3d011682016040523d82523d6000602084013e611ae5565b606091505b50600081511415611b22576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415611bc5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611cd9565b600082905060005b60008214611bf7578080611be090612bee565b915050600a82611bf09190612a70565b9150611bcd565b60008167ffffffffffffffff811115611c1357611c12612d24565b5b6040519080825280601f01601f191660200182016040528015611c455781602001600182028036833780820191505090505b5090505b60008514611cd257600182611c5e9190612aa1565b9150600a85611c6d9190612c37565b6030611c799190612a1a565b60f81b818381518110611c8f57611c8e612cf5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ccb9190612a70565b9450611c49565b8093505050505b919050565b60009392505050565b600033905090565b611cf98383611d8c565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611d8757600080549050600083820390505b611d396000868380600101945086611a1d565b611d6f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110611d26578160005414611d8457600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611df9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415611e34576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e41600084838561185c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611eb883611ea96000866000611862565b611eb285611f60565b1761188a565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611edc57806000819055505050611f5b60008483856118b5565b505050565b60006001821460e11b9050919050565b828054611f7c90612b8b565b90600052602060002090601f016020900481019282611f9e5760008555611fe5565b82601f10611fb757805160ff1916838001178555611fe5565b82800160010185558215611fe5579182015b82811115611fe4578251825591602001919060010190611fc9565b5b509050611ff29190611ff6565b5090565b5b8082111561200f576000816000905550600101611ff7565b5090565b600061202661202184612955565b612930565b90508281526020810184848401111561204257612041612d58565b5b61204d848285612b49565b509392505050565b600061206861206384612986565b612930565b90508281526020810184848401111561208457612083612d58565b5b61208f848285612b49565b509392505050565b6000813590506120a681612faa565b92915050565b6000813590506120bb81612fc1565b92915050565b6000813590506120d081612fd8565b92915050565b6000815190506120e581612fd8565b92915050565b600082601f830112612100576120ff612d53565b5b8135612110848260208601612013565b91505092915050565b600082601f83011261212e5761212d612d53565b5b813561213e848260208601612055565b91505092915050565b60008135905061215681612fef565b92915050565b60006020828403121561217257612171612d62565b5b600061218084828501612097565b91505092915050565b600080604083850312156121a05761219f612d62565b5b60006121ae85828601612097565b92505060206121bf85828601612097565b9150509250929050565b6000806000606084860312156121e2576121e1612d62565b5b60006121f086828701612097565b935050602061220186828701612097565b925050604061221286828701612147565b9150509250925092565b6000806000806080858703121561223657612235612d62565b5b600061224487828801612097565b945050602061225587828801612097565b935050604061226687828801612147565b925050606085013567ffffffffffffffff81111561228757612286612d5d565b5b612293878288016120eb565b91505092959194509250565b600080604083850312156122b6576122b5612d62565b5b60006122c485828601612097565b92505060206122d5858286016120ac565b9150509250929050565b600080604083850312156122f6576122f5612d62565b5b600061230485828601612097565b925050602061231585828601612147565b9150509250929050565b60006020828403121561233557612334612d62565b5b6000612343848285016120c1565b91505092915050565b60006020828403121561236257612361612d62565b5b6000612370848285016120d6565b91505092915050565b600080604083850312156123905761238f612d62565b5b600083013567ffffffffffffffff8111156123ae576123ad612d5d565b5b6123ba85828601612119565b925050602083013567ffffffffffffffff8111156123db576123da612d5d565b5b6123e785828601612119565b9150509250929050565b60006020828403121561240757612406612d62565b5b600061241584828501612147565b91505092915050565b6000806040838503121561243557612434612d62565b5b600061244385828601612147565b925050602061245485828601612097565b9150509250929050565b61246781612ad5565b82525050565b61247681612ae7565b82525050565b6000612487826129cc565b61249181856129e2565b93506124a1818560208601612b58565b6124aa81612d67565b840191505092915050565b60006124c0826129d7565b6124ca81856129fe565b93506124da818560208601612b58565b6124e381612d67565b840191505092915050565b60006124f9826129d7565b6125038185612a0f565b9350612513818560208601612b58565b80840191505092915050565b6000815461252c81612b8b565b6125368186612a0f565b94506001821660008114612551576001811461256257612595565b60ff19831686528186019350612595565b61256b856129b7565b60005b8381101561258d5781548189015260018201915060208101905061256e565b838801955050505b50505092915050565b60006125ab6012836129fe565b91506125b682612d78565b602082019050919050565b60006125ce603b836129fe565b91506125d982612da1565b604082019050919050565b60006125f16026836129fe565b91506125fc82612df0565b604082019050919050565b60006126146020836129fe565b915061261f82612e3f565b602082019050919050565b6000612637602f836129fe565b915061264282612e68565b604082019050919050565b600061265a6017836129fe565b915061266582612eb7565b602082019050919050565b600061267d6000836129f3565b915061268882612ee0565b600082019050919050565b60006126a06010836129fe565b91506126ab82612ee3565b602082019050919050565b60006126c36042836129fe565b91506126ce82612f0c565b606082019050919050565b60006126e6601f836129fe565b91506126f182612f81565b602082019050919050565b61270581612b3f565b82525050565b600061271782866124ee565b915061272382856124ee565b915061272f828461251f565b9150819050949350505050565b600061274782612670565b9150819050919050565b6000602082019050612766600083018461245e565b92915050565b6000608082019050612781600083018761245e565b61278e602083018661245e565b61279b60408301856126fc565b81810360608301526127ad818461247c565b905095945050505050565b60006020820190506127cd600083018461246d565b92915050565b600060208201905081810360008301526127ed81846124b5565b905092915050565b6000602082019050818103600083015261280e8161259e565b9050919050565b6000602082019050818103600083015261282e816125c1565b9050919050565b6000602082019050818103600083015261284e816125e4565b9050919050565b6000602082019050818103600083015261286e81612607565b9050919050565b6000602082019050818103600083015261288e8161262a565b9050919050565b600060208201905081810360008301526128ae8161264d565b9050919050565b600060208201905081810360008301526128ce81612693565b9050919050565b600060208201905081810360008301526128ee816126b6565b9050919050565b6000602082019050818103600083015261290e816126d9565b9050919050565b600060208201905061292a60008301846126fc565b92915050565b600061293a61294b565b90506129468282612bbd565b919050565b6000604051905090565b600067ffffffffffffffff8211156129705761296f612d24565b5b61297982612d67565b9050602081019050919050565b600067ffffffffffffffff8211156129a1576129a0612d24565b5b6129aa82612d67565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a2582612b3f565b9150612a3083612b3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a6557612a64612c68565b5b828201905092915050565b6000612a7b82612b3f565b9150612a8683612b3f565b925082612a9657612a95612c97565b5b828204905092915050565b6000612aac82612b3f565b9150612ab783612b3f565b925082821015612aca57612ac9612c68565b5b828203905092915050565b6000612ae082612b1f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612b76578082015181840152602081019050612b5b565b83811115612b85576000848401525b50505050565b60006002820490506001821680612ba357607f821691505b60208210811415612bb757612bb6612cc6565b5b50919050565b612bc682612d67565b810181811067ffffffffffffffff82111715612be557612be4612d24565b5b80604052505050565b6000612bf982612b3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c2c57612c2b612c68565b5b600182019050919050565b6000612c4282612b3f565b9150612c4d83612b3f565b925082612c5d57612c5c612c97565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d617820537570706c7920457863656564730000000000000000000000000000600082015250565b7f596f752063616e2774206d696e74206d6f72652c4465637265617365204d696e60008201527f74416d6f756e74206f72205761697420466f72204f70656e7365610000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f436f6e7472616374204d696e74696e6720506175736564000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f3a204e6f206d6f7265204e46547320746f206d696e742c64656372656173652060008201527f746865207175616e74697479206f7220636865636b206f7574204f70656e536560208201527f612e000000000000000000000000000000000000000000000000000000000000604082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b612fb381612ad5565b8114612fbe57600080fd5b50565b612fca81612ae7565b8114612fd557600080fd5b50565b612fe181612af3565b8114612fec57600080fd5b50565b612ff881612b3f565b811461300357600080fd5b5056fea2646970667358221220dd3aa143b47b6998d959d79a648f62482dcfddac6c7280610bfd8b346049c74e64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5656746345625167466a6d705168733647503154584136646145674a6a38455a587546764e4169624d5a416f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000062e6a736f6e200000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _nURL (string): ipfs://QmVVtcEbQgFjmpQhs6GP1TXA6daEgJj8EZXuFvNAibMZAo/
Arg [1] : _nBaseExt (string): .json

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5656746345625167466a6d705168733647503154584136
Arg [4] : 646145674a6a38455a587546764e4169624d5a416f2f00000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 2e6a736f6e200000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

53663:2236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23474:615;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29121:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31067:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30615:386;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22528:315;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40332:2800;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31957:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53776:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28910:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24153:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8065:103;;;:::i;:::-;;53879:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55157:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53976:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7417:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29290:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54230:502;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31343:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55705:189;;;:::i;:::-;;54740:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54969:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32213:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54012:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55328:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53942:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53840:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55075:74;;;:::i;:::-;;31722:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8323:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23474:615;23559:4;23874:10;23859:25;;:11;:25;;;;:102;;;;23951:10;23936:25;;:11;:25;;;;23859:102;:179;;;;24028:10;24013:25;;:11;:25;;;;23859:179;23839:199;;23474:615;;;:::o;29121:100::-;29175:13;29208:5;29201:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29121:100;:::o;31067:204::-;31135:7;31160:16;31168:7;31160;:16::i;:::-;31155:64;;31185:34;;;;;;;;;;;;;;31155:64;31239:15;:24;31255:7;31239:24;;;;;;;;;;;;;;;;;;;;;31232:31;;31067:204;;;:::o;30615:386::-;30688:13;30704:16;30712:7;30704;:16::i;:::-;30688:32;;30760:5;30737:28;;:19;:17;:19::i;:::-;:28;;;30733:175;;30785:44;30802:5;30809:19;:17;:19::i;:::-;30785:16;:44::i;:::-;30780:128;;30857:35;;;;;;;;;;;;;;30780:128;30733:175;30947:2;30920:15;:24;30936:7;30920:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30985:7;30981:2;30965:28;;30974:5;30965:28;;;;;;;;;;;;30677:324;30615:386;;:::o;22528:315::-;22581:7;22809:15;:13;:15::i;:::-;22794:12;;22778:13;;:28;:46;22771:53;;22528:315;:::o;40332:2800::-;40466:27;40496;40515:7;40496:18;:27::i;:::-;40466:57;;40581:4;40540:45;;40556:19;40540:45;;;40536:86;;40594:28;;;;;;;;;;;;;;40536:86;40636:27;40665:23;40692:28;40712:7;40692:19;:28::i;:::-;40635:85;;;;40820:62;40839:15;40856:4;40862:19;:17;:19::i;:::-;40820:18;:62::i;:::-;40815:174;;40902:43;40919:4;40925:19;:17;:19::i;:::-;40902:16;:43::i;:::-;40897:92;;40954:35;;;;;;;;;;;;;;40897:92;40815:174;41020:1;41006:16;;:2;:16;;;41002:52;;;41031:23;;;;;;;;;;;;;;41002:52;41067:43;41089:4;41095:2;41099:7;41108:1;41067:21;:43::i;:::-;41203:15;41200:160;;;41343:1;41322:19;41315:30;41200:160;41738:18;:24;41757:4;41738:24;;;;;;;;;;;;;;;;41736:26;;;;;;;;;;;;41807:18;:22;41826:2;41807:22;;;;;;;;;;;;;;;;41805:24;;;;;;;;;;;42129:145;42166:2;42214:45;42229:4;42235:2;42239:19;42214:14;:45::i;:::-;19756:8;42187:72;42129:18;:145::i;:::-;42100:17;:26;42118:7;42100:26;;;;;;;;;;;:174;;;;42444:1;19756:8;42394:19;:46;:51;42390:626;;;42466:19;42498:1;42488:7;:11;42466:33;;42655:1;42621:17;:30;42639:11;42621:30;;;;;;;;;;;;:35;42617:384;;;42759:13;;42744:11;:28;42740:242;;42939:19;42906:17;:30;42924:11;42906:30;;;;;;;;;;;:52;;;;42740:242;42617:384;42447:569;42390:626;43063:7;43059:2;43044:27;;43053:4;43044:27;;;;;;;;;;;;43082:42;43103:4;43109:2;43113:7;43122:1;43082:20;:42::i;:::-;40455:2677;;;40332:2800;;;:::o;31957:185::-;32095:39;32112:4;32118:2;32122:7;32095:39;;;;;;;;;;;;:16;:39::i;:::-;31957:185;;;:::o;53776:25::-;;;;;;;;;;;;;:::o;28910:144::-;28974:7;29017:27;29036:7;29017:18;:27::i;:::-;28994:52;;28910:144;;;:::o;24153:224::-;24217:7;24258:1;24241:19;;:5;:19;;;24237:60;;;24269:28;;;;;;;;;;;;;;24237:60;18708:13;24315:18;:25;24334:5;24315:25;;;;;;;;;;;;;;;;:54;24308:61;;24153:224;;;:::o;8065:103::-;7303:13;:11;:13::i;:::-;8130:30:::1;8157:1;8130:18;:30::i;:::-;8065:103::o:0;53879:27::-;;;;:::o;55157:163::-;7303:13;:11;:13::i;:::-;55271:5:::1;55255:13;:21;;;;;;;;;;;;:::i;:::-;;55303:9;55287:13;:25;;;;;;;;;;;;:::i;:::-;;55157:163:::0;;:::o;53976:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7417:87::-;7463:7;7490:6;;;;;;;;;;;7483:13;;7417:87;:::o;29290:104::-;29346:13;29379:7;29372:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29290:104;:::o;54230:502::-;1845:1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;54305:6:::1;;;;;;;;;;;54304:7;54296:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;54397:7;;54369:12;:24;54382:10;54369:24;;;;;;;;;;;;;;;;54357:11;:36;;;;:::i;:::-;:47;;54349:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;54479:14;54496:13;:11;:13::i;:::-;54479:30;;54552:9;;54537:11;54528:6;:20;;;;:::i;:::-;:33;;54520:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;54643:33;54653:10;54664:11;54643:9;:33::i;:::-;54713:11;54687:12;:24;54700:10;54687:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;54285:447;1801:1:::0;2755:7;:22;;;;54230:502;:::o;31343:308::-;31454:19;:17;:19::i;:::-;31442:31;;:8;:31;;;31438:61;;;31482:17;;;;;;;;;;;;;;31438:61;31564:8;31512:18;:39;31531:19;:17;:19::i;:::-;31512:39;;;;;;;;;;;;;;;:49;31552:8;31512:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;31624:8;31588:55;;31603:19;:17;:19::i;:::-;31588:55;;;31634:8;31588:55;;;;;;:::i;:::-;;;;;;;;31343:308;;:::o;55705:189::-;7303:13;:11;:13::i;:::-;1845:1:::1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;55774:12:::2;55791:10;:15;;55814:21;55791:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55773:67;;;55859:7;55851:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;55762:132;1801:1:::1;2755:7;:22;;;;55705:189::o:0;54740:221::-;7303:13;:11;:13::i;:::-;54818:14:::1;54835:13;:11;:13::i;:::-;54818:30;;54884:9;;54874:6;54867;:13;;;;:::i;:::-;:26;;54859:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;54926:27;54936:8;54946:6;54926:9;:27::i;:::-;54807:154;54740:221:::0;;:::o;54969:94::-;7303:13;:11;:13::i;:::-;55049:6:::1;55039:7;:16;;;;54969:94:::0;:::o;32213:399::-;32380:31;32393:4;32399:2;32403:7;32380:12;:31::i;:::-;32444:1;32426:2;:14;;;:19;32422:183;;32465:56;32496:4;32502:2;32506:7;32515:5;32465:30;:56::i;:::-;32460:145;;32549:40;;;;;;;;;;;;;;32460:145;32422:183;32213:399;;;;:::o;54012:47::-;;;;;;;;;;;;;;;;;:::o;55328:368::-;55401:13;55435:16;55443:7;55435;:16::i;:::-;55427:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;55513:28;55544:13;55513:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55606:1;55581:14;55575:28;:32;:113;;;;;;;;;;;;;;;;;55634:14;55649:18;:7;:16;:18::i;:::-;55668:13;55617:65;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55575:113;55568:120;;;55328:368;;;:::o;53942:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53840:31::-;;;;:::o;55075:74::-;7303:13;:11;:13::i;:::-;55135:6:::1;;;;;;;;;;;55134:7;55125:6;;:16;;;;;;;;;;;;;;;;;;55075:74::o:0;31722:164::-;31819:4;31843:18;:25;31862:5;31843:25;;;;;;;;;;;;;;;:35;31869:8;31843:35;;;;;;;;;;;;;;;;;;;;;;;;;31836:42;;31722:164;;;;:::o;8323:201::-;7303:13;:11;:13::i;:::-;8432:1:::1;8412:22;;:8;:22;;;;8404:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8488:28;8507:8;8488:18;:28::i;:::-;8323:201:::0;:::o;32867:273::-;32924:4;32980:7;32961:15;:13;:15::i;:::-;:26;;:66;;;;;33014:13;;33004:7;:23;32961:66;:152;;;;;33112:1;19478:8;33065:17;:26;33083:7;33065:26;;;;;;;;;;;;:43;:48;32961:152;32941:172;;32867:273;;;:::o;51428:105::-;51488:7;51515:10;51508:17;;51428:105;:::o;22052:92::-;22108:7;22135:1;22128:8;;22052:92;:::o;25827:1129::-;25894:7;25914:12;25929:7;25914:22;;25997:4;25978:15;:13;:15::i;:::-;:23;25974:915;;26031:13;;26024:4;:20;26020:869;;;26069:14;26086:17;:23;26104:4;26086:23;;;;;;;;;;;;26069:40;;26202:1;19478:8;26175:6;:23;:28;26171:699;;;26694:113;26711:1;26701:6;:11;26694:113;;;26754:17;:25;26772:6;;;;;;;26754:25;;;;;;;;;;;;26745:34;;26694:113;;;26840:6;26833:13;;;;;;26171:699;26046:843;26020:869;25974:915;26917:31;;;;;;;;;;;;;;25827:1129;;;;:::o;38668:652::-;38763:27;38792:23;38833:53;38889:15;38833:71;;39075:7;39069:4;39062:21;39110:22;39104:4;39097:36;39186:4;39180;39170:21;39147:44;;39282:19;39276:26;39257:45;;39013:300;38668:652;;;:::o;39433:645::-;39575:11;39737:15;39731:4;39727:26;39719:34;;39896:15;39885:9;39881:31;39868:44;;40043:15;40032:9;40029:30;40022:4;40011:9;40008:19;40005:55;39995:65;;39433:645;;;;;:::o;50261:159::-;;;;;:::o;48573:309::-;48708:7;48728:16;19879:3;48754:19;:40;;48728:67;;19879:3;48821:31;48832:4;48838:2;48842:9;48821:10;:31::i;:::-;48813:40;;:61;;48806:68;;;48573:309;;;;;:::o;28401:447::-;28481:14;28649:15;28642:5;28638:27;28629:36;;28823:5;28809:11;28785:22;28781:40;28778:51;28771:5;28768:62;28758:72;;28401:447;;;;:::o;51079:158::-;;;;;:::o;7582:132::-;7657:12;:10;:12::i;:::-;7646:23;;:7;:5;:7::i;:::-;:23;;;7638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7582:132::o;8684:191::-;8758:16;8777:6;;;;;;;;;;;8758:25;;8803:8;8794:6;;:17;;;;;;;;;;;;;;;;;;8858:8;8827:40;;8848:8;8827:40;;;;;;;;;;;;8747:128;8684:191;:::o;33224:104::-;33293:27;33303:2;33307:8;33293:27;;;;;;;;;;;;:9;:27::i;:::-;33224:104;;:::o;47083:716::-;47246:4;47292:2;47267:45;;;47313:19;:17;:19::i;:::-;47334:4;47340:7;47349:5;47267:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47263:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47567:1;47550:6;:13;:18;47546:235;;;47596:40;;;;;;;;;;;;;;47546:235;47739:6;47733:13;47724:6;47720:2;47716:15;47709:38;47263:529;47436:54;;;47426:64;;;:6;:64;;;;47419:71;;;47083:716;;;;;;:::o;3222:723::-;3278:13;3508:1;3499:5;:10;3495:53;;;3526:10;;;;;;;;;;;;;;;;;;;;;3495:53;3558:12;3573:5;3558:20;;3589:14;3614:78;3629:1;3621:4;:9;3614:78;;3647:8;;;;;:::i;:::-;;;;3678:2;3670:10;;;;;:::i;:::-;;;3614:78;;;3702:19;3734:6;3724:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3702:39;;3752:154;3768:1;3759:5;:10;3752:154;;3796:1;3786:11;;;;;:::i;:::-;;;3863:2;3855:5;:10;;;;:::i;:::-;3842:2;:24;;;;:::i;:::-;3829:39;;3812:6;3819;3812:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3892:2;3883:11;;;;;:::i;:::-;;;3752:154;;;3930:6;3916:21;;;;;3222:723;;;;:::o;49458:147::-;49595:6;49458:147;;;;;:::o;5968:98::-;6021:7;6048:10;6041:17;;5968:98;:::o;33744:681::-;33867:19;33873:2;33877:8;33867:5;:19::i;:::-;33946:1;33928:2;:14;;;:19;33924:483;;33968:11;33982:13;;33968:27;;34014:13;34036:8;34030:3;:14;34014:30;;34063:233;34094:62;34133:1;34137:2;34141:7;;;;;;34150:5;34094:30;:62::i;:::-;34089:167;;34192:40;;;;;;;;;;;;;;34089:167;34291:3;34283:5;:11;34063:233;;34378:3;34361:13;;:20;34357:34;;34383:8;;;34357:34;33949:458;;33924:483;33744:681;;;:::o;34698:1529::-;34763:20;34786:13;;34763:36;;34828:1;34814:16;;:2;:16;;;34810:48;;;34839:19;;;;;;;;;;;;;;34810:48;34885:1;34873:8;:13;34869:44;;;34895:18;;;;;;;;;;;;;;34869:44;34926:61;34956:1;34960:2;34964:12;34978:8;34926:21;:61::i;:::-;35469:1;18845:2;35440:1;:25;;35439:31;35427:8;:44;35401:18;:22;35420:2;35401:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;35748:139;35785:2;35839:33;35862:1;35866:2;35870:1;35839:14;:33::i;:::-;35806:30;35827:8;35806:20;:30::i;:::-;:66;35748:18;:139::i;:::-;35714:17;:31;35732:12;35714:31;;;;;;;;;;;:173;;;;35904:15;35922:12;35904:30;;35949:11;35978:8;35963:12;:23;35949:37;;36001:101;36053:9;;;;;;36049:2;36028:35;;36045:1;36028:35;;;;;;;;;;;;36097:3;36087:7;:13;36001:101;;36134:3;36118:13;:19;;;;35175:974;;36159:60;36188:1;36192:2;36196:12;36210:8;36159:20;:60::i;:::-;34752:1475;34698:1529;;:::o;30231:322::-;30301:14;30532:1;30522:8;30519:15;30494:23;30490:45;30480:55;;30231:322;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:834::-;6396:6;6404;6453:2;6441:9;6432:7;6428:23;6424:32;6421:119;;;6459:79;;:::i;:::-;6421:119;6607:1;6596:9;6592:17;6579:31;6637:18;6629:6;6626:30;6623:117;;;6659:79;;:::i;:::-;6623:117;6764:63;6819:7;6810:6;6799:9;6795:22;6764:63;:::i;:::-;6754:73;;6550:287;6904:2;6893:9;6889:18;6876:32;6935:18;6927:6;6924:30;6921:117;;;6957:79;;:::i;:::-;6921:117;7062:63;7117:7;7108:6;7097:9;7093:22;7062:63;:::i;:::-;7052:73;;6847:288;6308:834;;;;;:::o;7148:329::-;7207:6;7256:2;7244:9;7235:7;7231:23;7227:32;7224:119;;;7262:79;;:::i;:::-;7224:119;7382:1;7407:53;7452:7;7443:6;7432:9;7428:22;7407:53;:::i;:::-;7397:63;;7353:117;7148:329;;;;:::o;7483:474::-;7551:6;7559;7608:2;7596:9;7587:7;7583:23;7579:32;7576:119;;;7614:79;;:::i;:::-;7576:119;7734:1;7759:53;7804:7;7795:6;7784:9;7780:22;7759:53;:::i;:::-;7749:63;;7705:117;7861:2;7887:53;7932:7;7923:6;7912:9;7908:22;7887:53;:::i;:::-;7877:63;;7832:118;7483:474;;;;;:::o;7963:118::-;8050:24;8068:5;8050:24;:::i;:::-;8045:3;8038:37;7963:118;;:::o;8087:109::-;8168:21;8183:5;8168:21;:::i;:::-;8163:3;8156:34;8087:109;;:::o;8202:360::-;8288:3;8316:38;8348:5;8316:38;:::i;:::-;8370:70;8433:6;8428:3;8370:70;:::i;:::-;8363:77;;8449:52;8494:6;8489:3;8482:4;8475:5;8471:16;8449:52;:::i;:::-;8526:29;8548:6;8526:29;:::i;:::-;8521:3;8517:39;8510:46;;8292:270;8202:360;;;;:::o;8568:364::-;8656:3;8684:39;8717:5;8684:39;:::i;:::-;8739:71;8803:6;8798:3;8739:71;:::i;:::-;8732:78;;8819:52;8864:6;8859:3;8852:4;8845:5;8841:16;8819:52;:::i;:::-;8896:29;8918:6;8896:29;:::i;:::-;8891:3;8887:39;8880:46;;8660:272;8568:364;;;;:::o;8938:377::-;9044:3;9072:39;9105:5;9072:39;:::i;:::-;9127:89;9209:6;9204:3;9127:89;:::i;:::-;9120:96;;9225:52;9270:6;9265:3;9258:4;9251:5;9247:16;9225:52;:::i;:::-;9302:6;9297:3;9293:16;9286:23;;9048:267;8938:377;;;;:::o;9345:845::-;9448:3;9485:5;9479:12;9514:36;9540:9;9514:36;:::i;:::-;9566:89;9648:6;9643:3;9566:89;:::i;:::-;9559:96;;9686:1;9675:9;9671:17;9702:1;9697:137;;;;9848:1;9843:341;;;;9664:520;;9697:137;9781:4;9777:9;9766;9762:25;9757:3;9750:38;9817:6;9812:3;9808:16;9801:23;;9697:137;;9843:341;9910:38;9942:5;9910:38;:::i;:::-;9970:1;9984:154;9998:6;9995:1;9992:13;9984:154;;;10072:7;10066:14;10062:1;10057:3;10053:11;10046:35;10122:1;10113:7;10109:15;10098:26;;10020:4;10017:1;10013:12;10008:17;;9984:154;;;10167:6;10162:3;10158:16;10151:23;;9850:334;;9664:520;;9452:738;;9345:845;;;;:::o;10196:366::-;10338:3;10359:67;10423:2;10418:3;10359:67;:::i;:::-;10352:74;;10435:93;10524:3;10435:93;:::i;:::-;10553:2;10548:3;10544:12;10537:19;;10196:366;;;:::o;10568:::-;10710:3;10731:67;10795:2;10790:3;10731:67;:::i;:::-;10724:74;;10807:93;10896:3;10807:93;:::i;:::-;10925:2;10920:3;10916:12;10909:19;;10568:366;;;:::o;10940:::-;11082:3;11103:67;11167:2;11162:3;11103:67;:::i;:::-;11096:74;;11179:93;11268:3;11179:93;:::i;:::-;11297:2;11292:3;11288:12;11281:19;;10940:366;;;:::o;11312:::-;11454:3;11475:67;11539:2;11534:3;11475:67;:::i;:::-;11468:74;;11551:93;11640:3;11551:93;:::i;:::-;11669:2;11664:3;11660:12;11653:19;;11312:366;;;:::o;11684:::-;11826:3;11847:67;11911:2;11906:3;11847:67;:::i;:::-;11840:74;;11923:93;12012:3;11923:93;:::i;:::-;12041:2;12036:3;12032:12;12025:19;;11684:366;;;:::o;12056:::-;12198:3;12219:67;12283:2;12278:3;12219:67;:::i;:::-;12212:74;;12295:93;12384:3;12295:93;:::i;:::-;12413:2;12408:3;12404:12;12397:19;;12056:366;;;:::o;12428:398::-;12587:3;12608:83;12689:1;12684:3;12608:83;:::i;:::-;12601:90;;12700:93;12789:3;12700:93;:::i;:::-;12818:1;12813:3;12809:11;12802:18;;12428:398;;;:::o;12832:366::-;12974:3;12995:67;13059:2;13054:3;12995:67;:::i;:::-;12988:74;;13071:93;13160:3;13071:93;:::i;:::-;13189:2;13184:3;13180:12;13173:19;;12832:366;;;:::o;13204:::-;13346:3;13367:67;13431:2;13426:3;13367:67;:::i;:::-;13360:74;;13443:93;13532:3;13443:93;:::i;:::-;13561:2;13556:3;13552:12;13545:19;;13204:366;;;:::o;13576:::-;13718:3;13739:67;13803:2;13798:3;13739:67;:::i;:::-;13732:74;;13815:93;13904:3;13815:93;:::i;:::-;13933:2;13928:3;13924:12;13917:19;;13576:366;;;:::o;13948:118::-;14035:24;14053:5;14035:24;:::i;:::-;14030:3;14023:37;13948:118;;:::o;14072:589::-;14297:3;14319:95;14410:3;14401:6;14319:95;:::i;:::-;14312:102;;14431:95;14522:3;14513:6;14431:95;:::i;:::-;14424:102;;14543:92;14631:3;14622:6;14543:92;:::i;:::-;14536:99;;14652:3;14645:10;;14072:589;;;;;;:::o;14667:379::-;14851:3;14873:147;15016:3;14873:147;:::i;:::-;14866:154;;15037:3;15030:10;;14667:379;;;:::o;15052:222::-;15145:4;15183:2;15172:9;15168:18;15160:26;;15196:71;15264:1;15253:9;15249:17;15240:6;15196:71;:::i;:::-;15052:222;;;;:::o;15280:640::-;15475:4;15513:3;15502:9;15498:19;15490:27;;15527:71;15595:1;15584:9;15580:17;15571:6;15527:71;:::i;:::-;15608:72;15676:2;15665:9;15661:18;15652:6;15608:72;:::i;:::-;15690;15758:2;15747:9;15743:18;15734:6;15690:72;:::i;:::-;15809:9;15803:4;15799:20;15794:2;15783:9;15779:18;15772:48;15837:76;15908:4;15899:6;15837:76;:::i;:::-;15829:84;;15280:640;;;;;;;:::o;15926:210::-;16013:4;16051:2;16040:9;16036:18;16028:26;;16064:65;16126:1;16115:9;16111:17;16102:6;16064:65;:::i;:::-;15926:210;;;;:::o;16142:313::-;16255:4;16293:2;16282:9;16278:18;16270:26;;16342:9;16336:4;16332:20;16328:1;16317:9;16313:17;16306:47;16370:78;16443:4;16434:6;16370:78;:::i;:::-;16362:86;;16142:313;;;;:::o;16461:419::-;16627:4;16665:2;16654:9;16650:18;16642:26;;16714:9;16708:4;16704:20;16700:1;16689:9;16685:17;16678:47;16742:131;16868:4;16742:131;:::i;:::-;16734:139;;16461:419;;;:::o;16886:::-;17052:4;17090:2;17079:9;17075:18;17067:26;;17139:9;17133:4;17129:20;17125:1;17114:9;17110:17;17103:47;17167:131;17293:4;17167:131;:::i;:::-;17159:139;;16886:419;;;:::o;17311:::-;17477:4;17515:2;17504:9;17500:18;17492:26;;17564:9;17558:4;17554:20;17550:1;17539:9;17535:17;17528:47;17592:131;17718:4;17592:131;:::i;:::-;17584:139;;17311:419;;;:::o;17736:::-;17902:4;17940:2;17929:9;17925:18;17917:26;;17989:9;17983:4;17979:20;17975:1;17964:9;17960:17;17953:47;18017:131;18143:4;18017:131;:::i;:::-;18009:139;;17736:419;;;:::o;18161:::-;18327:4;18365:2;18354:9;18350:18;18342:26;;18414:9;18408:4;18404:20;18400:1;18389:9;18385:17;18378:47;18442:131;18568:4;18442:131;:::i;:::-;18434:139;;18161:419;;;:::o;18586:::-;18752:4;18790:2;18779:9;18775:18;18767:26;;18839:9;18833:4;18829:20;18825:1;18814:9;18810:17;18803:47;18867:131;18993:4;18867:131;:::i;:::-;18859:139;;18586:419;;;:::o;19011:::-;19177:4;19215:2;19204:9;19200:18;19192:26;;19264:9;19258:4;19254:20;19250:1;19239:9;19235:17;19228:47;19292:131;19418:4;19292:131;:::i;:::-;19284:139;;19011:419;;;:::o;19436:::-;19602:4;19640:2;19629:9;19625:18;19617:26;;19689:9;19683:4;19679:20;19675:1;19664:9;19660:17;19653:47;19717:131;19843:4;19717:131;:::i;:::-;19709:139;;19436:419;;;:::o;19861:::-;20027:4;20065:2;20054:9;20050:18;20042:26;;20114:9;20108:4;20104:20;20100:1;20089:9;20085:17;20078:47;20142:131;20268:4;20142:131;:::i;:::-;20134:139;;19861:419;;;:::o;20286:222::-;20379:4;20417:2;20406:9;20402:18;20394:26;;20430:71;20498:1;20487:9;20483:17;20474:6;20430:71;:::i;:::-;20286:222;;;;:::o;20514:129::-;20548:6;20575:20;;:::i;:::-;20565:30;;20604:33;20632:4;20624:6;20604:33;:::i;:::-;20514:129;;;:::o;20649:75::-;20682:6;20715:2;20709:9;20699:19;;20649:75;:::o;20730:307::-;20791:4;20881:18;20873:6;20870:30;20867:56;;;20903:18;;:::i;:::-;20867:56;20941:29;20963:6;20941:29;:::i;:::-;20933:37;;21025:4;21019;21015:15;21007:23;;20730:307;;;:::o;21043:308::-;21105:4;21195:18;21187:6;21184:30;21181:56;;;21217:18;;:::i;:::-;21181:56;21255:29;21277:6;21255:29;:::i;:::-;21247:37;;21339:4;21333;21329:15;21321:23;;21043:308;;;:::o;21357:141::-;21406:4;21429:3;21421:11;;21452:3;21449:1;21442:14;21486:4;21483:1;21473:18;21465:26;;21357:141;;;:::o;21504:98::-;21555:6;21589:5;21583:12;21573:22;;21504:98;;;:::o;21608:99::-;21660:6;21694:5;21688:12;21678:22;;21608:99;;;:::o;21713:168::-;21796:11;21830:6;21825:3;21818:19;21870:4;21865:3;21861:14;21846:29;;21713:168;;;;:::o;21887:147::-;21988:11;22025:3;22010:18;;21887:147;;;;:::o;22040:169::-;22124:11;22158:6;22153:3;22146:19;22198:4;22193:3;22189:14;22174:29;;22040:169;;;;:::o;22215:148::-;22317:11;22354:3;22339:18;;22215:148;;;;:::o;22369:305::-;22409:3;22428:20;22446:1;22428:20;:::i;:::-;22423:25;;22462:20;22480:1;22462:20;:::i;:::-;22457:25;;22616:1;22548:66;22544:74;22541:1;22538:81;22535:107;;;22622:18;;:::i;:::-;22535:107;22666:1;22663;22659:9;22652:16;;22369:305;;;;:::o;22680:185::-;22720:1;22737:20;22755:1;22737:20;:::i;:::-;22732:25;;22771:20;22789:1;22771:20;:::i;:::-;22766:25;;22810:1;22800:35;;22815:18;;:::i;:::-;22800:35;22857:1;22854;22850:9;22845:14;;22680:185;;;;:::o;22871:191::-;22911:4;22931:20;22949:1;22931:20;:::i;:::-;22926:25;;22965:20;22983:1;22965:20;:::i;:::-;22960:25;;23004:1;23001;22998:8;22995:34;;;23009:18;;:::i;:::-;22995:34;23054:1;23051;23047:9;23039:17;;22871:191;;;;:::o;23068:96::-;23105:7;23134:24;23152:5;23134:24;:::i;:::-;23123:35;;23068:96;;;:::o;23170:90::-;23204:7;23247:5;23240:13;23233:21;23222:32;;23170:90;;;:::o;23266:149::-;23302:7;23342:66;23335:5;23331:78;23320:89;;23266:149;;;:::o;23421:126::-;23458:7;23498:42;23491:5;23487:54;23476:65;;23421:126;;;:::o;23553:77::-;23590:7;23619:5;23608:16;;23553:77;;;:::o;23636:154::-;23720:6;23715:3;23710;23697:30;23782:1;23773:6;23768:3;23764:16;23757:27;23636:154;;;:::o;23796:307::-;23864:1;23874:113;23888:6;23885:1;23882:13;23874:113;;;23973:1;23968:3;23964:11;23958:18;23954:1;23949:3;23945:11;23938:39;23910:2;23907:1;23903:10;23898:15;;23874:113;;;24005:6;24002:1;23999:13;23996:101;;;24085:1;24076:6;24071:3;24067:16;24060:27;23996:101;23845:258;23796:307;;;:::o;24109:320::-;24153:6;24190:1;24184:4;24180:12;24170:22;;24237:1;24231:4;24227:12;24258:18;24248:81;;24314:4;24306:6;24302:17;24292:27;;24248:81;24376:2;24368:6;24365:14;24345:18;24342:38;24339:84;;;24395:18;;:::i;:::-;24339:84;24160:269;24109:320;;;:::o;24435:281::-;24518:27;24540:4;24518:27;:::i;:::-;24510:6;24506:40;24648:6;24636:10;24633:22;24612:18;24600:10;24597:34;24594:62;24591:88;;;24659:18;;:::i;:::-;24591:88;24699:10;24695:2;24688:22;24478:238;24435:281;;:::o;24722:233::-;24761:3;24784:24;24802:5;24784:24;:::i;:::-;24775:33;;24830:66;24823:5;24820:77;24817:103;;;24900:18;;:::i;:::-;24817:103;24947:1;24940:5;24936:13;24929:20;;24722:233;;;:::o;24961:176::-;24993:1;25010:20;25028:1;25010:20;:::i;:::-;25005:25;;25044:20;25062:1;25044:20;:::i;:::-;25039:25;;25083:1;25073:35;;25088:18;;:::i;:::-;25073:35;25129:1;25126;25122:9;25117:14;;24961:176;;;;:::o;25143:180::-;25191:77;25188:1;25181:88;25288:4;25285:1;25278:15;25312:4;25309:1;25302:15;25329:180;25377:77;25374:1;25367:88;25474:4;25471:1;25464:15;25498:4;25495:1;25488:15;25515:180;25563:77;25560:1;25553:88;25660:4;25657:1;25650:15;25684:4;25681:1;25674:15;25701:180;25749:77;25746:1;25739:88;25846:4;25843:1;25836:15;25870:4;25867:1;25860:15;25887:180;25935:77;25932:1;25925:88;26032:4;26029:1;26022:15;26056:4;26053:1;26046:15;26073:117;26182:1;26179;26172:12;26196:117;26305:1;26302;26295:12;26319:117;26428:1;26425;26418:12;26442:117;26551:1;26548;26541:12;26565:102;26606:6;26657:2;26653:7;26648:2;26641:5;26637:14;26633:28;26623:38;;26565:102;;;:::o;26673:168::-;26813:20;26809:1;26801:6;26797:14;26790:44;26673:168;:::o;26847:246::-;26987:34;26983:1;26975:6;26971:14;26964:58;27056:29;27051:2;27043:6;27039:15;27032:54;26847:246;:::o;27099:225::-;27239:34;27235:1;27227:6;27223:14;27216:58;27308:8;27303:2;27295:6;27291:15;27284:33;27099:225;:::o;27330:182::-;27470:34;27466:1;27458:6;27454:14;27447:58;27330:182;:::o;27518:234::-;27658:34;27654:1;27646:6;27642:14;27635:58;27727:17;27722:2;27714:6;27710:15;27703:42;27518:234;:::o;27758:173::-;27898:25;27894:1;27886:6;27882:14;27875:49;27758:173;:::o;27937:114::-;;:::o;28057:166::-;28197:18;28193:1;28185:6;28181:14;28174:42;28057:166;:::o;28229:290::-;28369:34;28365:1;28357:6;28353:14;28346:58;28438:34;28433:2;28425:6;28421:15;28414:59;28507:4;28502:2;28494:6;28490:15;28483:29;28229:290;:::o;28525:181::-;28665:33;28661:1;28653:6;28649:14;28642:57;28525:181;:::o;28712:122::-;28785:24;28803:5;28785:24;:::i;:::-;28778:5;28775:35;28765:63;;28824:1;28821;28814:12;28765:63;28712:122;:::o;28840:116::-;28910:21;28925:5;28910:21;:::i;:::-;28903:5;28900:32;28890:60;;28946:1;28943;28936:12;28890:60;28840:116;:::o;28962:120::-;29034:23;29051:5;29034:23;:::i;:::-;29027:5;29024:34;29014:62;;29072:1;29069;29062:12;29014:62;28962:120;:::o;29088:122::-;29161:24;29179:5;29161:24;:::i;:::-;29154:5;29151:35;29141:63;;29200:1;29197;29190:12;29141:63;29088:122;:::o

Swarm Source

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