ETH Price: $2,213.27 (-1.79%)

Token

NGMAI (NGMAI)
 

Overview

Max Total Supply

89 NGMAI

Holders

33

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 NGMAI
0xed3f08ceb73746c8e6d9930ccff46877c179c3d7
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:
NGMAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-24
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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) {
        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);
    }
}

pragma solidity ^0.8.0;

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;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(address from, address to, uint256 tokenId) external;

    function approve(address to, uint256 tokenId) external;

    function setApprovalForAll(address operator, bool _approved) external;

    function getApproved(
        uint256 tokenId
    ) external view returns (address operator);

    function isApprovedForAll(
        address owner,
        address operator
    ) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol

// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(
        address owner
    ) public view virtual override returns (uint256) {
        require(
            owner != address(0),
            "ERC721: address zero is not a valid owner"
        );
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(
        uint256 tokenId
    ) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

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

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

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

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(
        uint256 tokenId
    ) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(
        address operator,
        bool approved
    ) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: caller is not token owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: caller is not token owner nor approved"
        );
        _safeTransfer(from, to, tokenId, data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(
        address spender,
        uint256 tokenId
    ) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            isApprovedForAll(owner, spender) ||
            getApproved(tokenId) == spender);
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/NGMAI.sol

pragma solidity >=0.7.0 <0.9.0;

contract NGMAI is ERC721, Ownable {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private supply;

    string public uriPrefix = "";
    string public uriSuffix = ".json";
    string public hiddenMetadataUri;

    uint256 public maxSupply = 888;
    uint256 mintPrice = 0.008 ether;

    bool public paused = true;

    address AP = 0x549885eb95E8C8266766B730A2e0bb386FcD09F1;

    constructor() ERC721("NGMAI", "NGMAI") Ownable() {
        uriPrefix = "https://arweave.net/FtJZzgIdbyz4ZhrZZ2FWOApS5DU9AN9y_ADgOY4rbmY/";

        // mint first 10 to AP
        _mintLoop(AP, 10);
    }

    modifier onlyAPOrOwner() {
        require(msg.sender == AP || msg.sender == owner(), "only AP or owner");
        _;
    }

    modifier antiduke(uint256 _mintAmount) {
        require(
            supply.current() + _mintAmount <= maxSupply,
            "Max supply exceeded!"
        );
        _;
    }

    function totalSupply() public view returns (uint256) {
        return supply.current();
    }

    function mint(uint256 _mintAmount) public payable antiduke(_mintAmount) {
        require(!paused, "The contract is paused!");
        require(
            msg.value == _mintAmount * mintPrice,
            "not enough fucking money"
        );
        _mintLoop(msg.sender, _mintAmount);
    }

    function walletOfOwner(
        address _owner
    ) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (
            ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply
        ) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;

                ownedTokenIndex++;
            }

            currentTokenId++;
        }

        return ownedTokenIds;
    }

    function tokenURI(
        uint256 _tokenId
    ) public view virtual override returns (string memory) {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        currentBaseURI,
                        _tokenId.toString(),
                        uriSuffix
                    )
                )
                : "";
    }

    function setHiddenMetadataUri(
        string memory _hiddenMetadataUri
    ) public onlyOwner {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
        uriPrefix = _uriPrefix;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;
    }

    function setPaused(bool _state) public onlyAPOrOwner {
        paused = _state;
    }

    function withdraw() public onlyAPOrOwner {
        (bool os, ) = payable(AP).call{value: address(this).balance}("");
        require(os);
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        for (uint256 i = 0; i < _mintAmount; i++) {
            supply.increment();
            _safeMint(_receiver, supply.current());
        }
    }

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a0604052600060809081526008906200001a9082620005fa565b50604080518082019091526005815264173539b7b760d91b6020820152600990620000469082620005fa565b50610378600b55661c6bf526340000600c55600d80546001600160a81b03191674549885eb95e8c8266766b730a2e0bb386fcd09f1011790553480156200008c57600080fd5b506040805180820182526005808252644e474d414960d81b6020808401829052845180860190955291845290830152906000620000ca8382620005fa565b506001620000d98282620005fa565b505050620000f6620000f06200014460201b60201c565b62000148565b60405180606001604052806040815260200162002655604091396008906200011f9082620005fa565b50600d546200013e9061010090046001600160a01b0316600a6200019a565b620007ba565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015620001f457620001bd6007620001f960201b62000ebc1760201c565b620001df83620001d960076200020260201b62000ec51760201c565b62000206565b80620001eb81620006dc565b9150506200019d565b505050565b80546001019055565b5490565b620002288282604051806020016040528060008152506200022c60201b60201c565b5050565b620002388383620002a3565b620002476000848484620003eb565b620001f45760405162461bcd60e51b815260206004820152603260248201526000805160206200263583398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084015b60405180910390fd5b6001600160a01b038216620002fb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016200029a565b6000818152600260205260409020546001600160a01b031615620003625760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200029a565b6001600160a01b03821660009081526003602052604081208054600192906200038d908490620006f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200040c846001600160a01b03166200054760201b62000ec91760201c565b156200053b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906200044690339089908890889060040162000714565b6020604051808303816000875af192505050801562000484575060408051601f3d908101601f19168201909252620004819181019062000787565b60015b62000520573d808015620004b5576040519150601f19603f3d011682016040523d82523d6000602084013e620004ba565b606091505b508051600003620005185760405162461bcd60e51b815260206004820152603260248201526000805160206200263583398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016200029a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506200053f565b5060015b949350505050565b6001600160a01b03163b151590565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200058157607f821691505b602082108103620005a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f457600081815260208120601f850160051c81016020861015620005d15750805b601f850160051c820191505b81811015620005f257828155600101620005dd565b505050505050565b81516001600160401b0381111562000616576200061662000556565b6200062e816200062784546200056c565b84620005a8565b602080601f8311600181146200066657600084156200064d5750858301515b600019600386901b1c1916600185901b178555620005f2565b600085815260208120601f198616915b82811015620006975788860151825594840194600190910190840162000676565b5085821015620006b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201620006f157620006f1620006c6565b5060010190565b808201808211156200070e576200070e620006c6565b92915050565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b82811015620007635785810182015185820160a00152810162000745565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b6000602082840312156200079a57600080fd5b81516001600160e01b031981168114620007b357600080fd5b9392505050565b611e6b80620007ca6000396000f3fe6080604052600436106101c25760003560e01c806362b99ad4116100f7578063a0712d6811610095578063c87b56dd11610064578063c87b56dd146104d1578063d5abeb01146104f1578063e985e9c514610507578063f2fde38b1461052757600080fd5b8063a0712d6814610469578063a22cb4651461047c578063a45ba8e71461049c578063b88d4fde146104b157600080fd5b8063715018a6116100d1578063715018a6146104015780637ec4a659146104165780638da5cb5b1461043657806395d89b411461045457600080fd5b806362b99ad4146103ac5780636352211e146103c157806370a08231146103e157600080fd5b806323b872dd11610164578063438b63001161013e578063438b6300146103305780634fdd43cb1461035d5780635503a0e81461037d5780635c975abb1461039257600080fd5b806323b872dd146102db5780633ccfd60b146102fb57806342842e0e1461031057600080fd5b8063095ea7b3116101a0578063095ea7b31461025657806316ba10e01461027857806316c38b3c1461029857806318160ddd146102b857600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611740565b610547565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b50610211610599565b6040516101f391906117ad565b34801561022a57600080fd5b5061023e6102393660046117c0565b61062b565b6040516001600160a01b0390911681526020016101f3565b34801561026257600080fd5b506102766102713660046117f5565b610652565b005b34801561028457600080fd5b506102766102933660046118ab565b61076c565b3480156102a457600080fd5b506102766102b3366004611904565b610784565b3480156102c457600080fd5b506102cd6107fe565b6040519081526020016101f3565b3480156102e757600080fd5b506102766102f636600461191f565b61080e565b34801561030757600080fd5b5061027661083f565b34801561031c57600080fd5b5061027661032b36600461191f565b61090e565b34801561033c57600080fd5b5061035061034b36600461195b565b610929565b6040516101f39190611976565b34801561036957600080fd5b506102766103783660046118ab565b610a09565b34801561038957600080fd5b50610211610a1d565b34801561039e57600080fd5b50600d546101e79060ff1681565b3480156103b857600080fd5b50610211610aab565b3480156103cd57600080fd5b5061023e6103dc3660046117c0565b610ab8565b3480156103ed57600080fd5b506102cd6103fc36600461195b565b610b18565b34801561040d57600080fd5b50610276610b9e565b34801561042257600080fd5b506102766104313660046118ab565b610bb2565b34801561044257600080fd5b506006546001600160a01b031661023e565b34801561046057600080fd5b50610211610bc6565b6102766104773660046117c0565b610bd5565b34801561048857600080fd5b506102766104973660046119ba565b610cea565b3480156104a857600080fd5b50610211610cf5565b3480156104bd57600080fd5b506102766104cc3660046119ed565b610d02565b3480156104dd57600080fd5b506102116104ec3660046117c0565b610d3a565b3480156104fd57600080fd5b506102cd600b5481565b34801561051357600080fd5b506101e7610522366004611a69565b610e18565b34801561053357600080fd5b5061027661054236600461195b565b610e46565b60006001600160e01b031982166380ac58cd60e01b148061057857506001600160e01b03198216635b5e139f60e01b145b8061059357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546105a890611a93565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490611a93565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905090565b600061063682610ed8565b506000908152600460205260409020546001600160a01b031690565b600061065d82610ab8565b9050806001600160a01b0316836001600160a01b0316036106cf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106eb57506106eb8133610e18565b61075d5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106c6565b6107678383610f37565b505050565b610774610fa5565b60096107808282611b1b565b5050565b600d5461010090046001600160a01b03163314806107ac57506006546001600160a01b031633145b6107eb5760405162461bcd60e51b815260206004820152601060248201526f37b7363c9020a81037b91037bbb732b960811b60448201526064016106c6565b600d805460ff1916911515919091179055565b600061080960075490565b905090565b6108183382610fff565b6108345760405162461bcd60e51b81526004016106c690611bdb565b61076783838361105e565b600d5461010090046001600160a01b031633148061086757506006546001600160a01b031633145b6108a65760405162461bcd60e51b815260206004820152601060248201526f37b7363c9020a81037b91037bbb732b960811b60448201526064016106c6565b600d5460405160009161010090046001600160a01b03169047908381818185875af1925050503d80600081146108f8576040519150601f19603f3d011682016040523d82523d6000602084013e6108fd565b606091505b505090508061090b57600080fd5b50565b61076783838360405180602001604052806000815250610d02565b6060600061093683610b18565b905060008167ffffffffffffffff8111156109535761095361181f565b60405190808252806020026020018201604052801561097c578160200160208202803683370190505b509050600160005b83811080156109955750600b548211155b156109ff5760006109a583610ab8565b9050866001600160a01b0316816001600160a01b0316036109ec57828483815181106109d3576109d3611c29565b6020908102919091010152816109e881611c55565b9250505b826109f681611c55565b93505050610984565b5090949350505050565b610a11610fa5565b600a6107808282611b1b565b60098054610a2a90611a93565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690611a93565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b505050505081565b60088054610a2a90611a93565b6000818152600260205260408120546001600160a01b0316806105935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106c6565b60006001600160a01b038216610b825760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106c6565b506001600160a01b031660009081526003602052604090205490565b610ba6610fa5565b610bb060006111fa565b565b610bba610fa5565b60086107808282611b1b565b6060600180546105a890611a93565b80600b5481610be360075490565b610bed9190611c6e565b1115610c325760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b60448201526064016106c6565b600d5460ff1615610c855760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e7472616374206973207061757365642100000000000000000060448201526064016106c6565b600c54610c929083611c81565b3414610ce05760405162461bcd60e51b815260206004820152601860248201527f6e6f7420656e6f756768206675636b696e67206d6f6e6579000000000000000060448201526064016106c6565b610780338361124c565b610780338383611289565b600a8054610a2a90611a93565b610d0c3383610fff565b610d285760405162461bcd60e51b81526004016106c690611bdb565b610d3484848484611357565b50505050565b6000818152600260205260409020546060906001600160a01b0316610db95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106c6565b6000610dc361138a565b90506000815111610de35760405180602001604052806000815250610e11565b80610ded84611399565b6009604051602001610e0193929190611c98565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610e4e610fa5565b6001600160a01b038116610eb35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c6565b61090b816111fa565b80546001019055565b5490565b6001600160a01b03163b151590565b6000818152600260205260409020546001600160a01b031661090b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106c6565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f6c82610ab8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610bb05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106c6565b60008061100b83610ab8565b9050806001600160a01b0316846001600160a01b0316148061103257506110328185610e18565b806110565750836001600160a01b031661104b8461062b565b6001600160a01b0316145b949350505050565b826001600160a01b031661107182610ab8565b6001600160a01b0316146110d55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106c6565b6001600160a01b0382166111375760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c6565b611142600082610f37565b6001600160a01b038316600090815260036020526040812080546001929061116b908490611d38565b90915550506001600160a01b0382166000908152600360205260408120805460019290611199908490611c6e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b8181101561076757611265600780546001019055565b6112778361127260075490565b61149a565b8061128181611c55565b91505061124f565b816001600160a01b0316836001600160a01b0316036112ea5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61136284848461105e565b61136e848484846114b4565b610d345760405162461bcd60e51b81526004016106c690611d4b565b6060600880546105a890611a93565b6060816000036113c05750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113ea57806113d481611c55565b91506113e39050600a83611db3565b91506113c4565b60008167ffffffffffffffff8111156114055761140561181f565b6040519080825280601f01601f19166020018201604052801561142f576020820181803683370190505b5090505b841561105657611444600183611d38565b9150611451600a86611dc7565b61145c906030611c6e565b60f81b81838151811061147157611471611c29565b60200101906001600160f81b031916908160001a905350611493600a86611db3565b9450611433565b6107808282604051806020016040528060008152506115b5565b60006001600160a01b0384163b156115aa57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906114f8903390899088908890600401611ddb565b6020604051808303816000875af1925050508015611533575060408051601f3d908101601f1916820190925261153091810190611e18565b60015b611590573d808015611561576040519150601f19603f3d011682016040523d82523d6000602084013e611566565b606091505b5080516000036115885760405162461bcd60e51b81526004016106c690611d4b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611056565b506001949350505050565b6115bf83836115e8565b6115cc60008484846114b4565b6107675760405162461bcd60e51b81526004016106c690611d4b565b6001600160a01b03821661163e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c6565b6000818152600260205260409020546001600160a01b0316156116a35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c6565b6001600160a01b03821660009081526003602052604081208054600192906116cc908490611c6e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461090b57600080fd5b60006020828403121561175257600080fd5b8135610e118161172a565b60005b83811015611778578181015183820152602001611760565b50506000910152565b6000815180845261179981602086016020860161175d565b601f01601f19169290920160200192915050565b602081526000610e116020830184611781565b6000602082840312156117d257600080fd5b5035919050565b80356001600160a01b03811681146117f057600080fd5b919050565b6000806040838503121561180857600080fd5b611811836117d9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156118505761185061181f565b604051601f8501601f19908116603f011681019082821181831017156118785761187861181f565b8160405280935085815286868601111561189157600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156118bd57600080fd5b813567ffffffffffffffff8111156118d457600080fd5b8201601f810184136118e557600080fd5b61105684823560208401611835565b803580151581146117f057600080fd5b60006020828403121561191657600080fd5b610e11826118f4565b60008060006060848603121561193457600080fd5b61193d846117d9565b925061194b602085016117d9565b9150604084013590509250925092565b60006020828403121561196d57600080fd5b610e11826117d9565b6020808252825182820181905260009190848201906040850190845b818110156119ae57835183529284019291840191600101611992565b50909695505050505050565b600080604083850312156119cd57600080fd5b6119d6836117d9565b91506119e4602084016118f4565b90509250929050565b60008060008060808587031215611a0357600080fd5b611a0c856117d9565b9350611a1a602086016117d9565b925060408501359150606085013567ffffffffffffffff811115611a3d57600080fd5b8501601f81018713611a4e57600080fd5b611a5d87823560208401611835565b91505092959194509250565b60008060408385031215611a7c57600080fd5b611a85836117d9565b91506119e4602084016117d9565b600181811c90821680611aa757607f821691505b602082108103611ac757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561076757600081815260208120601f850160051c81016020861015611af45750805b601f850160051c820191505b81811015611b1357828155600101611b00565b505050505050565b815167ffffffffffffffff811115611b3557611b3561181f565b611b4981611b438454611a93565b84611acd565b602080601f831160018114611b7e5760008415611b665750858301515b600019600386901b1c1916600185901b178555611b13565b600085815260208120601f198616915b82811015611bad57888601518255948401946001909101908401611b8e565b5085821015611bcb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611c6757611c67611c3f565b5060010190565b8082018082111561059357610593611c3f565b808202811582820484141761059357610593611c3f565b600084516020611cab8285838a0161175d565b855191840191611cbe8184848a0161175d565b8554920191600090611ccf81611a93565b60018281168015611ce75760018114611cfc57611d28565b60ff1984168752821515830287019450611d28565b896000528560002060005b84811015611d2057815489820152908301908701611d07565b505082870194505b50929a9950505050505050505050565b8181038181111561059357610593611c3f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082611dc257611dc2611d9d565b500490565b600082611dd657611dd6611d9d565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e0e90830184611781565b9695505050505050565b600060208284031215611e2a57600080fd5b8151610e118161172a56fea264697066735822122024f6f2d67078134dad5ae203d3f283cf3a2f22c86b760d6c950879bc63be62ed64736f6c634300081200334552433732313a207472616e7366657220746f206e6f6e20455243373231526568747470733a2f2f617277656176652e6e65742f46744a5a7a67496462797a345a68725a5a3246574f41705335445539414e39795f4144674f593472626d592f

Deployed Bytecode

0x6080604052600436106101c25760003560e01c806362b99ad4116100f7578063a0712d6811610095578063c87b56dd11610064578063c87b56dd146104d1578063d5abeb01146104f1578063e985e9c514610507578063f2fde38b1461052757600080fd5b8063a0712d6814610469578063a22cb4651461047c578063a45ba8e71461049c578063b88d4fde146104b157600080fd5b8063715018a6116100d1578063715018a6146104015780637ec4a659146104165780638da5cb5b1461043657806395d89b411461045457600080fd5b806362b99ad4146103ac5780636352211e146103c157806370a08231146103e157600080fd5b806323b872dd11610164578063438b63001161013e578063438b6300146103305780634fdd43cb1461035d5780635503a0e81461037d5780635c975abb1461039257600080fd5b806323b872dd146102db5780633ccfd60b146102fb57806342842e0e1461031057600080fd5b8063095ea7b3116101a0578063095ea7b31461025657806316ba10e01461027857806316c38b3c1461029857806318160ddd146102b857600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611740565b610547565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b50610211610599565b6040516101f391906117ad565b34801561022a57600080fd5b5061023e6102393660046117c0565b61062b565b6040516001600160a01b0390911681526020016101f3565b34801561026257600080fd5b506102766102713660046117f5565b610652565b005b34801561028457600080fd5b506102766102933660046118ab565b61076c565b3480156102a457600080fd5b506102766102b3366004611904565b610784565b3480156102c457600080fd5b506102cd6107fe565b6040519081526020016101f3565b3480156102e757600080fd5b506102766102f636600461191f565b61080e565b34801561030757600080fd5b5061027661083f565b34801561031c57600080fd5b5061027661032b36600461191f565b61090e565b34801561033c57600080fd5b5061035061034b36600461195b565b610929565b6040516101f39190611976565b34801561036957600080fd5b506102766103783660046118ab565b610a09565b34801561038957600080fd5b50610211610a1d565b34801561039e57600080fd5b50600d546101e79060ff1681565b3480156103b857600080fd5b50610211610aab565b3480156103cd57600080fd5b5061023e6103dc3660046117c0565b610ab8565b3480156103ed57600080fd5b506102cd6103fc36600461195b565b610b18565b34801561040d57600080fd5b50610276610b9e565b34801561042257600080fd5b506102766104313660046118ab565b610bb2565b34801561044257600080fd5b506006546001600160a01b031661023e565b34801561046057600080fd5b50610211610bc6565b6102766104773660046117c0565b610bd5565b34801561048857600080fd5b506102766104973660046119ba565b610cea565b3480156104a857600080fd5b50610211610cf5565b3480156104bd57600080fd5b506102766104cc3660046119ed565b610d02565b3480156104dd57600080fd5b506102116104ec3660046117c0565b610d3a565b3480156104fd57600080fd5b506102cd600b5481565b34801561051357600080fd5b506101e7610522366004611a69565b610e18565b34801561053357600080fd5b5061027661054236600461195b565b610e46565b60006001600160e01b031982166380ac58cd60e01b148061057857506001600160e01b03198216635b5e139f60e01b145b8061059357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546105a890611a93565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490611a93565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905090565b600061063682610ed8565b506000908152600460205260409020546001600160a01b031690565b600061065d82610ab8565b9050806001600160a01b0316836001600160a01b0316036106cf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106eb57506106eb8133610e18565b61075d5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106c6565b6107678383610f37565b505050565b610774610fa5565b60096107808282611b1b565b5050565b600d5461010090046001600160a01b03163314806107ac57506006546001600160a01b031633145b6107eb5760405162461bcd60e51b815260206004820152601060248201526f37b7363c9020a81037b91037bbb732b960811b60448201526064016106c6565b600d805460ff1916911515919091179055565b600061080960075490565b905090565b6108183382610fff565b6108345760405162461bcd60e51b81526004016106c690611bdb565b61076783838361105e565b600d5461010090046001600160a01b031633148061086757506006546001600160a01b031633145b6108a65760405162461bcd60e51b815260206004820152601060248201526f37b7363c9020a81037b91037bbb732b960811b60448201526064016106c6565b600d5460405160009161010090046001600160a01b03169047908381818185875af1925050503d80600081146108f8576040519150601f19603f3d011682016040523d82523d6000602084013e6108fd565b606091505b505090508061090b57600080fd5b50565b61076783838360405180602001604052806000815250610d02565b6060600061093683610b18565b905060008167ffffffffffffffff8111156109535761095361181f565b60405190808252806020026020018201604052801561097c578160200160208202803683370190505b509050600160005b83811080156109955750600b548211155b156109ff5760006109a583610ab8565b9050866001600160a01b0316816001600160a01b0316036109ec57828483815181106109d3576109d3611c29565b6020908102919091010152816109e881611c55565b9250505b826109f681611c55565b93505050610984565b5090949350505050565b610a11610fa5565b600a6107808282611b1b565b60098054610a2a90611a93565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690611a93565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b505050505081565b60088054610a2a90611a93565b6000818152600260205260408120546001600160a01b0316806105935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106c6565b60006001600160a01b038216610b825760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106c6565b506001600160a01b031660009081526003602052604090205490565b610ba6610fa5565b610bb060006111fa565b565b610bba610fa5565b60086107808282611b1b565b6060600180546105a890611a93565b80600b5481610be360075490565b610bed9190611c6e565b1115610c325760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b60448201526064016106c6565b600d5460ff1615610c855760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e7472616374206973207061757365642100000000000000000060448201526064016106c6565b600c54610c929083611c81565b3414610ce05760405162461bcd60e51b815260206004820152601860248201527f6e6f7420656e6f756768206675636b696e67206d6f6e6579000000000000000060448201526064016106c6565b610780338361124c565b610780338383611289565b600a8054610a2a90611a93565b610d0c3383610fff565b610d285760405162461bcd60e51b81526004016106c690611bdb565b610d3484848484611357565b50505050565b6000818152600260205260409020546060906001600160a01b0316610db95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106c6565b6000610dc361138a565b90506000815111610de35760405180602001604052806000815250610e11565b80610ded84611399565b6009604051602001610e0193929190611c98565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610e4e610fa5565b6001600160a01b038116610eb35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c6565b61090b816111fa565b80546001019055565b5490565b6001600160a01b03163b151590565b6000818152600260205260409020546001600160a01b031661090b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106c6565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f6c82610ab8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610bb05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106c6565b60008061100b83610ab8565b9050806001600160a01b0316846001600160a01b0316148061103257506110328185610e18565b806110565750836001600160a01b031661104b8461062b565b6001600160a01b0316145b949350505050565b826001600160a01b031661107182610ab8565b6001600160a01b0316146110d55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106c6565b6001600160a01b0382166111375760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c6565b611142600082610f37565b6001600160a01b038316600090815260036020526040812080546001929061116b908490611d38565b90915550506001600160a01b0382166000908152600360205260408120805460019290611199908490611c6e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b8181101561076757611265600780546001019055565b6112778361127260075490565b61149a565b8061128181611c55565b91505061124f565b816001600160a01b0316836001600160a01b0316036112ea5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61136284848461105e565b61136e848484846114b4565b610d345760405162461bcd60e51b81526004016106c690611d4b565b6060600880546105a890611a93565b6060816000036113c05750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113ea57806113d481611c55565b91506113e39050600a83611db3565b91506113c4565b60008167ffffffffffffffff8111156114055761140561181f565b6040519080825280601f01601f19166020018201604052801561142f576020820181803683370190505b5090505b841561105657611444600183611d38565b9150611451600a86611dc7565b61145c906030611c6e565b60f81b81838151811061147157611471611c29565b60200101906001600160f81b031916908160001a905350611493600a86611db3565b9450611433565b6107808282604051806020016040528060008152506115b5565b60006001600160a01b0384163b156115aa57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906114f8903390899088908890600401611ddb565b6020604051808303816000875af1925050508015611533575060408051601f3d908101601f1916820190925261153091810190611e18565b60015b611590573d808015611561576040519150601f19603f3d011682016040523d82523d6000602084013e611566565b606091505b5080516000036115885760405162461bcd60e51b81526004016106c690611d4b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611056565b506001949350505050565b6115bf83836115e8565b6115cc60008484846114b4565b6107675760405162461bcd60e51b81526004016106c690611d4b565b6001600160a01b03821661163e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c6565b6000818152600260205260409020546001600160a01b0316156116a35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c6565b6001600160a01b03821660009081526003602052604081208054600192906116cc908490611c6e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461090b57600080fd5b60006020828403121561175257600080fd5b8135610e118161172a565b60005b83811015611778578181015183820152602001611760565b50506000910152565b6000815180845261179981602086016020860161175d565b601f01601f19169290920160200192915050565b602081526000610e116020830184611781565b6000602082840312156117d257600080fd5b5035919050565b80356001600160a01b03811681146117f057600080fd5b919050565b6000806040838503121561180857600080fd5b611811836117d9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156118505761185061181f565b604051601f8501601f19908116603f011681019082821181831017156118785761187861181f565b8160405280935085815286868601111561189157600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156118bd57600080fd5b813567ffffffffffffffff8111156118d457600080fd5b8201601f810184136118e557600080fd5b61105684823560208401611835565b803580151581146117f057600080fd5b60006020828403121561191657600080fd5b610e11826118f4565b60008060006060848603121561193457600080fd5b61193d846117d9565b925061194b602085016117d9565b9150604084013590509250925092565b60006020828403121561196d57600080fd5b610e11826117d9565b6020808252825182820181905260009190848201906040850190845b818110156119ae57835183529284019291840191600101611992565b50909695505050505050565b600080604083850312156119cd57600080fd5b6119d6836117d9565b91506119e4602084016118f4565b90509250929050565b60008060008060808587031215611a0357600080fd5b611a0c856117d9565b9350611a1a602086016117d9565b925060408501359150606085013567ffffffffffffffff811115611a3d57600080fd5b8501601f81018713611a4e57600080fd5b611a5d87823560208401611835565b91505092959194509250565b60008060408385031215611a7c57600080fd5b611a85836117d9565b91506119e4602084016117d9565b600181811c90821680611aa757607f821691505b602082108103611ac757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561076757600081815260208120601f850160051c81016020861015611af45750805b601f850160051c820191505b81811015611b1357828155600101611b00565b505050505050565b815167ffffffffffffffff811115611b3557611b3561181f565b611b4981611b438454611a93565b84611acd565b602080601f831160018114611b7e5760008415611b665750858301515b600019600386901b1c1916600185901b178555611b13565b600085815260208120601f198616915b82811015611bad57888601518255948401946001909101908401611b8e565b5085821015611bcb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611c6757611c67611c3f565b5060010190565b8082018082111561059357610593611c3f565b808202811582820484141761059357610593611c3f565b600084516020611cab8285838a0161175d565b855191840191611cbe8184848a0161175d565b8554920191600090611ccf81611a93565b60018281168015611ce75760018114611cfc57611d28565b60ff1984168752821515830287019450611d28565b896000528560002060005b84811015611d2057815489820152908301908701611d07565b505082870194505b50929a9950505050505050505050565b8181038181111561059357610593611c3f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082611dc257611dc2611d9d565b500490565b600082611dd657611dd6611d9d565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e0e90830184611781565b9695505050505050565b600060208284031215611e2a57600080fd5b8151610e118161172a56fea264697066735822122024f6f2d67078134dad5ae203d3f283cf3a2f22c86b760d6c950879bc63be62ed64736f6c63430008120033

Deployed Bytecode Sourcemap

24794:3735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15568:321;;;;;;;;;;-1:-1:-1;15568:321:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;15568:321:0;;;;;;;;16580:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17915:187::-;;;;;;;;;;-1:-1:-1;17915:187:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;17915:187:0;1533:203:1;17432:417:0;;;;;;;;;;-1:-1:-1;17432:417:0;;;;;:::i;:::-;;:::i;:::-;;27819:106;;;;;;;;;;-1:-1:-1;27819:106:0;;;;;:::i;:::-;;:::i;27933:87::-;;;;;;;;;;-1:-1:-1;27933:87:0;;;;;:::i;:::-;;:::i;25782:95::-;;;;;;;;;;;;;:::i;:::-;;;3899:25:1;;;3887:2;3872:18;25782:95:0;3753:177:1;18681:373:0;;;;;;;;;;-1:-1:-1;18681:373:0;;;;;:::i;:::-;;:::i;28028:146::-;;;;;;;;;;;;;:::i;19125:185::-;;;;;;;;;;-1:-1:-1;19125:185:0;;;;;:::i;:::-;;:::i;26193:727::-;;;;;;;;;;-1:-1:-1;26193:727:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27543:154::-;;;;;;;;;;-1:-1:-1;27543:154:0;;;;;:::i;:::-;;:::i;24986:33::-;;;;;;;;;;;;;:::i;25143:25::-;;;;;;;;;;-1:-1:-1;25143:25:0;;;;;;;;24951:28;;;;;;;;;;;;;:::i;16275:238::-;;;;;;;;;;-1:-1:-1;16275:238:0;;;;;:::i;:::-;;:::i;15953:260::-;;;;;;;;;;-1:-1:-1;15953:260:0;;;;;:::i;:::-;;:::i;4624:103::-;;;;;;;;;;;;;:::i;27705:106::-;;;;;;;;;;-1:-1:-1;27705:106:0;;;;;:::i;:::-;;:::i;3976:87::-;;;;;;;;;;-1:-1:-1;4049:6:0;;-1:-1:-1;;;;;4049:6:0;3976:87;;16749:104;;;;;;;;;;;;;:::i;25885:300::-;;;;;;:::i;:::-;;:::i;18174:180::-;;;;;;;;;;-1:-1:-1;18174:180:0;;;;;:::i;:::-;;:::i;25026:31::-;;;;;;;;;;;;;:::i;19381:360::-;;;;;;;;;;-1:-1:-1;19381:360:0;;;;;:::i;:::-;;:::i;26928:607::-;;;;;;;;;;-1:-1:-1;26928:607:0;;;;;:::i;:::-;;:::i;25066:30::-;;;;;;;;;;;;;;;;18425:189;;;;;;;;;;-1:-1:-1;18425:189:0;;;;;:::i;:::-;;:::i;4882:238::-;;;;;;;;;;-1:-1:-1;4882:238:0;;;;;:::i;:::-;;:::i;15568:321::-;15686:4;-1:-1:-1;;;;;;15723:40:0;;-1:-1:-1;;;15723:40:0;;:105;;-1:-1:-1;;;;;;;15780:48:0;;-1:-1:-1;;;15780:48:0;15723:105;:158;;;-1:-1:-1;;;;;;;;;;11110:40:0;;;15845:36;15703:178;15568:321;-1:-1:-1;;15568:321:0:o;16580:100::-;16634:13;16667:5;16660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:100;:::o;17915:187::-;18007:7;18027:23;18042:7;18027:14;:23::i;:::-;-1:-1:-1;18070:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18070:24:0;;17915:187::o;17432:417::-;17513:13;17529:23;17544:7;17529:14;:23::i;:::-;17513:39;;17577:5;-1:-1:-1;;;;;17571:11:0;:2;-1:-1:-1;;;;;17571:11:0;;17563:57;;;;-1:-1:-1;;;17563:57:0;;6879:2:1;17563:57:0;;;6861:21:1;6918:2;6898:18;;;6891:30;6957:34;6937:18;;;6930:62;-1:-1:-1;;;7008:18:1;;;7001:31;7049:19;;17563:57:0;;;;;;;;;3093:10;-1:-1:-1;;;;;17655:21:0;;;;:62;;-1:-1:-1;17680:37:0;17697:5;3093:10;18425:189;:::i;17680:37::-;17633:174;;;;-1:-1:-1;;;17633:174:0;;7281:2:1;17633:174:0;;;7263:21:1;7320:2;7300:18;;;7293:30;7359:34;7339:18;;;7332:62;7430:32;7410:18;;;7403:60;7480:19;;17633:174:0;7079:426:1;17633:174:0;17820:21;17829:2;17833:7;17820:8;:21::i;:::-;17502:347;17432:417;;:::o;27819:106::-;3862:13;:11;:13::i;:::-;27895:9:::1;:22;27907:10:::0;27895:9;:22:::1;:::i;:::-;;27819:106:::0;:::o;27933:87::-;25515:2;;;;;-1:-1:-1;;;;;25515:2:0;25501:10;:16;;:41;;-1:-1:-1;4049:6:0;;-1:-1:-1;;;;;4049:6:0;25521:10;:21;25501:41;25493:70;;;;-1:-1:-1;;;25493:70:0;;9916:2:1;25493:70:0;;;9898:21:1;9955:2;9935:18;;;9928:30;-1:-1:-1;;;9974:18:1;;;9967:46;10030:18;;25493:70:0;9714:340:1;25493:70:0;27997:6:::1;:15:::0;;-1:-1:-1;;27997:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27933:87::o;25782:95::-;25826:7;25853:16;:6;248:14;;156:114;25853:16;25846:23;;25782:95;:::o;18681:373::-;18890:41;3093:10;18923:7;18890:18;:41::i;:::-;18868:137;;;;-1:-1:-1;;;18868:137:0;;;;;;;:::i;:::-;19018:28;19028:4;19034:2;19038:7;19018:9;:28::i;28028:146::-;25515:2;;;;;-1:-1:-1;;;;;25515:2:0;25501:10;:16;;:41;;-1:-1:-1;4049:6:0;;-1:-1:-1;;;;;4049:6:0;25521:10;:21;25501:41;25493:70;;;;-1:-1:-1;;;25493:70:0;;9916:2:1;25493:70:0;;;9898:21:1;9955:2;9935:18;;;9928:30;-1:-1:-1;;;9974:18:1;;;9967:46;10030:18;;25493:70:0;9714:340:1;25493:70:0;28102:2:::1;::::0;28094:50:::1;::::0;28081:7:::1;::::0;28102:2:::1;::::0;::::1;-1:-1:-1::0;;;;;28102:2:0::1;::::0;28118:21:::1;::::0;28081:7;28094:50;28081:7;28094:50;28118:21;28102:2;28094:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28080:64;;;28163:2;28155:11;;;::::0;::::1;;28069:105;28028:146::o:0;19125:185::-;19263:39;19280:4;19286:2;19290:7;19263:39;;;;;;;;;;;;:16;:39::i;26193:727::-;26269:16;26298:23;26324:17;26334:6;26324:9;:17::i;:::-;26298:43;;26352:30;26399:15;26385:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26385:30:0;-1:-1:-1;26352:63:0;-1:-1:-1;26451:1:0;26426:22;26503:377;26542:15;26524;:33;:64;;;;;26579:9;;26561:14;:27;;26524:64;26503:377;;;26615:25;26643:23;26651:14;26643:7;:23::i;:::-;26615:51;;26708:6;-1:-1:-1;;;;;26687:27:0;:17;-1:-1:-1;;;;;26687:27:0;;26683:153;;26768:14;26735:13;26749:15;26735:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;26803:17;;;;:::i;:::-;;;;26683:153;26852:16;;;;:::i;:::-;;;;26600:280;26503:377;;;-1:-1:-1;26899:13:0;;26193:727;-1:-1:-1;;;;26193:727:0:o;27543:154::-;3862:13;:11;:13::i;:::-;27651:17:::1;:38;27671:18:::0;27651:17;:38:::1;:::i;24986:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24951:28::-;;;;;;;:::i;16275:238::-;16363:7;16399:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16399:16:0;;16426:56;;;;-1:-1:-1;;;16426:56:0;;11290:2:1;16426:56:0;;;11272:21:1;11329:2;11309:18;;;11302:30;-1:-1:-1;;;11348:18:1;;;11341:54;11412:18;;16426:56:0;11088:348:1;15953:260:0;16041:7;-1:-1:-1;;;;;16083:19:0;;16061:110;;;;-1:-1:-1;;;16061:110:0;;11643:2:1;16061:110:0;;;11625:21:1;11682:2;11662:18;;;11655:30;11721:34;11701:18;;;11694:62;-1:-1:-1;;;11772:18:1;;;11765:39;11821:19;;16061:110:0;11441:405:1;16061:110:0;-1:-1:-1;;;;;;16189:16:0;;;;;:9;:16;;;;;;;15953:260::o;4624:103::-;3862:13;:11;:13::i;:::-;4689:30:::1;4716:1;4689:18;:30::i;:::-;4624:103::o:0;27705:106::-;3862:13;:11;:13::i;:::-;27781:9:::1;:22;27793:10:::0;27781:9;:22:::1;:::i;16749:104::-:0;16805:13;16838:7;16831:14;;;;;:::i;25885:300::-;25944:11;25697:9;;25682:11;25663:16;:6;248:14;;156:114;25663:16;:30;;;;:::i;:::-;:43;;25641:113;;;;-1:-1:-1;;;25641:113:0;;12183:2:1;25641:113:0;;;12165:21:1;12222:2;12202:18;;;12195:30;-1:-1:-1;;;12241:18:1;;;12234:50;12301:18;;25641:113:0;11981:344:1;25641:113:0;25977:6:::1;::::0;::::1;;25976:7;25968:43;;;::::0;-1:-1:-1;;;25968:43:0;;12532:2:1;25968:43:0::1;::::0;::::1;12514:21:1::0;12571:2;12551:18;;;12544:30;12610:25;12590:18;;;12583:53;12653:18;;25968:43:0::1;12330:347:1::0;25968:43:0::1;26071:9;::::0;26057:23:::1;::::0;:11;:23:::1;:::i;:::-;26044:9;:36;26022:110;;;::::0;-1:-1:-1;;;26022:110:0;;13057:2:1;26022:110:0::1;::::0;::::1;13039:21:1::0;13096:2;13076:18;;;13069:30;13135:26;13115:18;;;13108:54;13179:18;;26022:110:0::1;12855:348:1::0;26022:110:0::1;26143:34;26153:10;26165:11;26143:9;:34::i;18174:180::-:0;18294:52;3093:10;18327:8;18337;18294:18;:52::i;25026:31::-;;;;;;;:::i;19381:360::-;19569:41;3093:10;19602:7;19569:18;:41::i;:::-;19547:137;;;;-1:-1:-1;;;19547:137:0;;;;;;;:::i;:::-;19695:38;19709:4;19715:2;19719:7;19728:4;19695:13;:38::i;:::-;19381:360;;;;:::o;26928:607::-;20172:4;20196:16;;;:7;:16;;;;;;27018:13;;-1:-1:-1;;;;;20196:16:0;27044:114;;;;-1:-1:-1;;;27044:114:0;;13410:2:1;27044:114:0;;;13392:21:1;13449:2;13429:18;;;13422:30;13488:34;13468:18;;;13461:62;-1:-1:-1;;;13539:18:1;;;13532:45;13594:19;;27044:114:0;13208:411:1;27044:114:0;27171:28;27202:10;:8;:10::i;:::-;27171:41;;27274:1;27249:14;27243:28;:32;:284;;;;;;;;;;;;;;;;;27367:14;27408:19;:8;:17;:19::i;:::-;27454:9;27324:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27243:284;27223:304;26928:607;-1:-1:-1;;;26928:607:0:o;18425:189::-;-1:-1:-1;;;;;18571:25:0;;;18547:4;18571:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18425:189::o;4882:238::-;3862:13;:11;:13::i;:::-;-1:-1:-1;;;;;4985:22:0;::::1;4963:110;;;::::0;-1:-1:-1;;;4963:110:0;;15087:2:1;4963:110:0::1;::::0;::::1;15069:21:1::0;15126:2;15106:18;;;15099:30;15165:34;15145:18;;;15138:62;-1:-1:-1;;;15216:18:1;;;15209:36;15262:19;;4963:110:0::1;14885:402:1::0;4963:110:0::1;5084:28;5103:8;5084:18;:28::i;278:127::-:0;367:19;;385:1;367:19;;;278:127::o;156:114::-;248:14;;156:114::o;5724:115::-;-1:-1:-1;;;;;5808:19:0;;:23;;;5724:115::o;23276:135::-;20172:4;20196:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20196:16:0;23350:53;;;;-1:-1:-1;;;23350:53:0;;11290:2:1;23350:53:0;;;11272:21:1;11329:2;11309:18;;;11302:30;-1:-1:-1;;;11348:18:1;;;11341:54;11412:18;;23350:53:0;11088:348:1;22555:174:0;22630:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;22630:29:0;-1:-1:-1;;;;;22630:29:0;;;;;;;;:24;;22684:23;22630:24;22684:14;:23::i;:::-;-1:-1:-1;;;;;22675:46:0;;;;;;;;;;;22555:174;;:::o;4141:132::-;4049:6;;-1:-1:-1;;;;;4049:6:0;3093:10;4205:23;4197:68;;;;-1:-1:-1;;;4197:68:0;;15494:2:1;4197:68:0;;;15476:21:1;;;15513:18;;;15506:30;15572:34;15552:18;;;15545:62;15624:18;;4197:68:0;15292:356:1;20242:315:0;20360:4;20377:13;20393:23;20408:7;20393:14;:23::i;:::-;20377:39;;20446:5;-1:-1:-1;;;;;20435:16:0;:7;-1:-1:-1;;;;;20435:16:0;;:65;;;;20468:32;20485:5;20492:7;20468:16;:32::i;:::-;20435:113;;;;20541:7;-1:-1:-1;;;;;20517:31:0;:20;20529:7;20517:11;:20::i;:::-;-1:-1:-1;;;;;20517:31:0;;20435:113;20427:122;20242:315;-1:-1:-1;;;;20242:315:0:o;21885:662::-;22058:4;-1:-1:-1;;;;;22031:31:0;:23;22046:7;22031:14;:23::i;:::-;-1:-1:-1;;;;;22031:31:0;;22009:118;;;;-1:-1:-1;;;22009:118:0;;15855:2:1;22009:118:0;;;15837:21:1;15894:2;15874:18;;;15867:30;15933:34;15913:18;;;15906:62;-1:-1:-1;;;15984:18:1;;;15977:35;16029:19;;22009:118:0;15653:401:1;22009:118:0;-1:-1:-1;;;;;22146:16:0;;22138:65;;;;-1:-1:-1;;;22138:65:0;;16261:2:1;22138:65:0;;;16243:21:1;16300:2;16280:18;;;16273:30;16339:34;16319:18;;;16312:62;-1:-1:-1;;;16390:18:1;;;16383:34;16434:19;;22138:65:0;16059:400:1;22138:65:0;22320:29;22337:1;22341:7;22320:8;:29::i;:::-;-1:-1:-1;;;;;22362:15:0;;;;;;:9;:15;;;;;:20;;22381:1;;22362:15;:20;;22381:1;;22362:20;:::i;:::-;;;;-1:-1:-1;;;;;;;22393:13:0;;;;;;:9;:13;;;;;:18;;22410:1;;22393:13;:18;;22410:1;;22393:18;:::i;:::-;;;;-1:-1:-1;;22422:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22422:21:0;-1:-1:-1;;;;;22422:21:0;;;;;;;;;22461:27;;22422:16;;22461:27;;;;;;;17502:347;17432:417;;:::o;5280:191::-;5373:6;;;-1:-1:-1;;;;;5390:17:0;;;-1:-1:-1;;;;;;5390:17:0;;;;;;;5423:40;;5373:6;;;5390:17;5373:6;;5423:40;;5354:16;;5423:40;5343:128;5280:191;:::o;28182:226::-;28266:9;28261:140;28285:11;28281:1;:15;28261:140;;;28318:18;:6;367:19;;385:1;367:19;;;278:127;28318:18;28351:38;28361:9;28372:16;:6;248:14;;156:114;28372:16;28351:9;:38::i;:::-;28298:3;;;;:::i;:::-;;;;28261:140;;22872:315;23027:8;-1:-1:-1;;;;;23018:17:0;:5;-1:-1:-1;;;;;23018:17:0;;23010:55;;;;-1:-1:-1;;;23010:55:0;;16799:2:1;23010:55:0;;;16781:21:1;16838:2;16818:18;;;16811:30;16877:27;16857:18;;;16850:55;16922:18;;23010:55:0;16597:349:1;23010:55:0;-1:-1:-1;;;;;23076:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;23076:46:0;;;;;;;;;;23138:41;;540::1;;;23138::0;;513:18:1;23138:41:0;;;;;;;22872:315;;;:::o;19749:350::-;19905:28;19915:4;19921:2;19925:7;19905:9;:28::i;:::-;19966:47;19989:4;19995:2;19999:7;20008:4;19966:22;:47::i;:::-;19944:147;;;;-1:-1:-1;;;19944:147:0;;;;;;;:::i;28416:110::-;28476:13;28509:9;28502:16;;;;;:::i;1052:532::-;1108:13;1138:5;1147:1;1138:10;1134:53;;-1:-1:-1;;1165:10:0;;;;;;;;;;;;-1:-1:-1;;;1165:10:0;;;;;1052:532::o;1134:53::-;1212:5;1197:12;1253:78;1260:9;;1253:78;;1286:8;;;;:::i;:::-;;-1:-1:-1;1309:10:0;;-1:-1:-1;1317:2:0;1309:10;;:::i;:::-;;;1253:78;;;1341:19;1373:6;1363:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1363:17:0;;1341:39;;1391:154;1398:10;;1391:154;;1425:11;1435:1;1425:11;;:::i;:::-;;-1:-1:-1;1494:10:0;1502:2;1494:5;:10;:::i;:::-;1481:24;;:2;:24;:::i;:::-;1468:39;;1451:6;1458;1451:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1451:56:0;;;;;;;;-1:-1:-1;1522:11:0;1531:2;1522:11;;:::i;:::-;;;1391:154;;20565:110;20641:26;20651:2;20655:7;20641:26;;;;;;;;;;;;:9;:26::i;23419:1034::-;23573:4;-1:-1:-1;;;;;23594:13:0;;5808:19;:23;23590:856;;23647:174;;-1:-1:-1;;;23647:174:0;;-1:-1:-1;;;;;23647:36:0;;;;;:174;;3093:10;;23741:4;;23768:7;;23798:4;;23647:174;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23647:174:0;;;;;;;;-1:-1:-1;;23647:174:0;;;;;;;;;;;;:::i;:::-;;;23626:765;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24004:6;:13;24021:1;24004:18;24000:376;;24047:108;;-1:-1:-1;;;24047:108:0;;;;;;;:::i;24000:376::-;24326:6;24320:13;24311:6;24307:2;24303:15;24296:38;23626:765;-1:-1:-1;;;;;;23885:51:0;-1:-1:-1;;;23885:51:0;;-1:-1:-1;23878:58:0;;23590:856;-1:-1:-1;24430:4:0;23419:1034;;;;;;:::o;20683:319::-;20812:18;20818:2;20822:7;20812:5;:18::i;:::-;20863:53;20894:1;20898:2;20902:7;20911:4;20863:22;:53::i;:::-;20841:153;;;;-1:-1:-1;;;20841:153:0;;;;;;;:::i;21010:439::-;-1:-1:-1;;;;;21090:16:0;;21082:61;;;;-1:-1:-1;;;21082:61:0;;18694:2:1;21082:61:0;;;18676:21:1;;;18713:18;;;18706:30;18772:34;18752:18;;;18745:62;18824:18;;21082:61:0;18492:356:1;21082:61:0;20172:4;20196:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20196:16:0;:30;21154:58;;;;-1:-1:-1;;;21154:58:0;;19055:2:1;21154:58:0;;;19037:21:1;19094:2;19074:18;;;19067:30;19133;19113:18;;;19106:58;19181:18;;21154:58:0;18853:352:1;21154:58:0;-1:-1:-1;;;;;21283:13:0;;;;;;:9;:13;;;;;:18;;21300:1;;21283:13;:18;;21300:1;;21283:18;:::i;:::-;;;;-1:-1:-1;;21312:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;21312:21:0;-1:-1:-1;;;;;21312:21:0;;;;;;;;21351:33;;21312:16;;;21351:33;;21312:16;;21351:33;27895:22:::1;27819:106:::0;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2178:127::-;2239:10;2234:3;2230:20;2227:1;2220:31;2270:4;2267:1;2260:15;2294:4;2291:1;2284:15;2310:632;2375:5;2405:18;2446:2;2438:6;2435:14;2432:40;;;2452:18;;:::i;:::-;2527:2;2521:9;2495:2;2581:15;;-1:-1:-1;;2577:24:1;;;2603:2;2573:33;2569:42;2557:55;;;2627:18;;;2647:22;;;2624:46;2621:72;;;2673:18;;:::i;:::-;2713:10;2709:2;2702:22;2742:6;2733:15;;2772:6;2764;2757:22;2812:3;2803:6;2798:3;2794:16;2791:25;2788:45;;;2829:1;2826;2819:12;2788:45;2879:6;2874:3;2867:4;2859:6;2855:17;2842:44;2934:1;2927:4;2918:6;2910;2906:19;2902:30;2895:41;;;;2310:632;;;;;:::o;2947:451::-;3016:6;3069:2;3057:9;3048:7;3044:23;3040:32;3037:52;;;3085:1;3082;3075:12;3037:52;3125:9;3112:23;3158:18;3150:6;3147:30;3144:50;;;3190:1;3187;3180:12;3144:50;3213:22;;3266:4;3258:13;;3254:27;-1:-1:-1;3244:55:1;;3295:1;3292;3285:12;3244:55;3318:74;3384:7;3379:2;3366:16;3361:2;3357;3353:11;3318:74;:::i;3403:160::-;3468:20;;3524:13;;3517:21;3507:32;;3497:60;;3553:1;3550;3543:12;3568:180;3624:6;3677:2;3665:9;3656:7;3652:23;3648:32;3645:52;;;3693:1;3690;3683:12;3645:52;3716:26;3732:9;3716:26;:::i;3935:328::-;4012:6;4020;4028;4081:2;4069:9;4060:7;4056:23;4052:32;4049:52;;;4097:1;4094;4087:12;4049:52;4120:29;4139:9;4120:29;:::i;:::-;4110:39;;4168:38;4202:2;4191:9;4187:18;4168:38;:::i;:::-;4158:48;;4253:2;4242:9;4238:18;4225:32;4215:42;;3935:328;;;;;:::o;4268:186::-;4327:6;4380:2;4368:9;4359:7;4355:23;4351:32;4348:52;;;4396:1;4393;4386:12;4348:52;4419:29;4438:9;4419:29;:::i;4459:632::-;4630:2;4682:21;;;4752:13;;4655:18;;;4774:22;;;4601:4;;4630:2;4853:15;;;;4827:2;4812:18;;;4601:4;4896:169;4910:6;4907:1;4904:13;4896:169;;;4971:13;;4959:26;;5040:15;;;;5005:12;;;;4932:1;4925:9;4896:169;;;-1:-1:-1;5082:3:1;;4459:632;-1:-1:-1;;;;;;4459:632:1:o;5096:254::-;5161:6;5169;5222:2;5210:9;5201:7;5197:23;5193:32;5190:52;;;5238:1;5235;5228:12;5190:52;5261:29;5280:9;5261:29;:::i;:::-;5251:39;;5309:35;5340:2;5329:9;5325:18;5309:35;:::i;:::-;5299:45;;5096:254;;;;;:::o;5355:667::-;5450:6;5458;5466;5474;5527:3;5515:9;5506:7;5502:23;5498:33;5495:53;;;5544:1;5541;5534:12;5495:53;5567:29;5586:9;5567:29;:::i;:::-;5557:39;;5615:38;5649:2;5638:9;5634:18;5615:38;:::i;:::-;5605:48;;5700:2;5689:9;5685:18;5672:32;5662:42;;5755:2;5744:9;5740:18;5727:32;5782:18;5774:6;5771:30;5768:50;;;5814:1;5811;5804:12;5768:50;5837:22;;5890:4;5882:13;;5878:27;-1:-1:-1;5868:55:1;;5919:1;5916;5909:12;5868:55;5942:74;6008:7;6003:2;5990:16;5985:2;5981;5977:11;5942:74;:::i;:::-;5932:84;;;5355:667;;;;;;;:::o;6027:260::-;6095:6;6103;6156:2;6144:9;6135:7;6131:23;6127:32;6124:52;;;6172:1;6169;6162:12;6124:52;6195:29;6214:9;6195:29;:::i;:::-;6185:39;;6243:38;6277:2;6266:9;6262:18;6243:38;:::i;6292:380::-;6371:1;6367:12;;;;6414;;;6435:61;;6489:4;6481:6;6477:17;6467:27;;6435:61;6542:2;6534:6;6531:14;6511:18;6508:38;6505:161;;6588:10;6583:3;6579:20;6576:1;6569:31;6623:4;6620:1;6613:15;6651:4;6648:1;6641:15;6505:161;;6292:380;;;:::o;7636:545::-;7738:2;7733:3;7730:11;7727:448;;;7774:1;7799:5;7795:2;7788:17;7844:4;7840:2;7830:19;7914:2;7902:10;7898:19;7895:1;7891:27;7885:4;7881:38;7950:4;7938:10;7935:20;7932:47;;;-1:-1:-1;7973:4:1;7932:47;8028:2;8023:3;8019:12;8016:1;8012:20;8006:4;8002:31;7992:41;;8083:82;8101:2;8094:5;8091:13;8083:82;;;8146:17;;;8127:1;8116:13;8083:82;;;8087:3;;;7636:545;;;:::o;8357:1352::-;8483:3;8477:10;8510:18;8502:6;8499:30;8496:56;;;8532:18;;:::i;:::-;8561:97;8651:6;8611:38;8643:4;8637:11;8611:38;:::i;:::-;8605:4;8561:97;:::i;:::-;8713:4;;8777:2;8766:14;;8794:1;8789:663;;;;9496:1;9513:6;9510:89;;;-1:-1:-1;9565:19:1;;;9559:26;9510:89;-1:-1:-1;;8314:1:1;8310:11;;;8306:24;8302:29;8292:40;8338:1;8334:11;;;8289:57;9612:81;;8759:944;;8789:663;7583:1;7576:14;;;7620:4;7607:18;;-1:-1:-1;;8825:20:1;;;8943:236;8957:7;8954:1;8951:14;8943:236;;;9046:19;;;9040:26;9025:42;;9138:27;;;;9106:1;9094:14;;;;8973:19;;8943:236;;;8947:3;9207:6;9198:7;9195:19;9192:201;;;9268:19;;;9262:26;-1:-1:-1;;9351:1:1;9347:14;;;9363:3;9343:24;9339:37;9335:42;9320:58;9305:74;;9192:201;-1:-1:-1;;;;;9439:1:1;9423:14;;;9419:22;9406:36;;-1:-1:-1;8357:1352:1:o;10059:410::-;10261:2;10243:21;;;10300:2;10280:18;;;10273:30;10339:34;10334:2;10319:18;;10312:62;-1:-1:-1;;;10405:2:1;10390:18;;10383:44;10459:3;10444:19;;10059:410::o;10684:127::-;10745:10;10740:3;10736:20;10733:1;10726:31;10776:4;10773:1;10766:15;10800:4;10797:1;10790:15;10816:127;10877:10;10872:3;10868:20;10865:1;10858:31;10908:4;10905:1;10898:15;10932:4;10929:1;10922:15;10948:135;10987:3;11008:17;;;11005:43;;11028:18;;:::i;:::-;-1:-1:-1;11075:1:1;11064:13;;10948:135::o;11851:125::-;11916:9;;;11937:10;;;11934:36;;;11950:18;;:::i;12682:168::-;12755:9;;;12786;;12803:15;;;12797:22;;12783:37;12773:71;;12824:18;;:::i;13624:1256::-;13848:3;13886:6;13880:13;13912:4;13925:64;13982:6;13977:3;13972:2;13964:6;13960:15;13925:64;:::i;:::-;14052:13;;14011:16;;;;14074:68;14052:13;14011:16;14109:15;;;14074:68;:::i;:::-;14231:13;;14164:20;;;14204:1;;14269:36;14231:13;14269:36;:::i;:::-;14324:1;14341:18;;;14368:141;;;;14523:1;14518:337;;;;14334:521;;14368:141;-1:-1:-1;;14403:24:1;;14389:39;;14480:16;;14473:24;14459:39;;14448:51;;;-1:-1:-1;14368:141:1;;14518:337;14549:6;14546:1;14539:17;14597:2;14594:1;14584:16;14622:1;14636:169;14650:8;14647:1;14644:15;14636:169;;;14732:14;;14717:13;;;14710:37;14775:16;;;;14667:10;;14636:169;;;14640:3;;14836:8;14829:5;14825:20;14818:27;;14334:521;-1:-1:-1;14871:3:1;;13624:1256;-1:-1:-1;;;;;;;;;;13624:1256:1:o;16464:128::-;16531:9;;;16552:11;;;16549:37;;;16566:18;;:::i;16951:414::-;17153:2;17135:21;;;17192:2;17172:18;;;17165:30;17231:34;17226:2;17211:18;;17204:62;-1:-1:-1;;;17297:2:1;17282:18;;17275:48;17355:3;17340:19;;16951:414::o;17370:127::-;17431:10;17426:3;17422:20;17419:1;17412:31;17462:4;17459:1;17452:15;17486:4;17483:1;17476:15;17502:120;17542:1;17568;17558:35;;17573:18;;:::i;:::-;-1:-1:-1;17607:9:1;;17502:120::o;17627:112::-;17659:1;17685;17675:35;;17690:18;;:::i;:::-;-1:-1:-1;17724:9:1;;17627:112::o;17744:489::-;-1:-1:-1;;;;;18013:15:1;;;17995:34;;18065:15;;18060:2;18045:18;;18038:43;18112:2;18097:18;;18090:34;;;18160:3;18155:2;18140:18;;18133:31;;;17938:4;;18181:46;;18207:19;;18199:6;18181:46;:::i;:::-;18173:54;17744:489;-1:-1:-1;;;;;;17744:489:1:o;18238:249::-;18307:6;18360:2;18348:9;18339:7;18335:23;18331:32;18328:52;;;18376:1;18373;18366:12;18328:52;18408:9;18402:16;18427:30;18451:5;18427:30;:::i

Swarm Source

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