ETH Price: $3,493.56 (+3.63%)
Gas: 4 Gwei

Token

DogeCola Ecosystem (DCE)
 

Overview

Max Total Supply

500 DCE

Holders

151

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 DCE
0x4ab06e403ba9e1fa33fab92dbb5b7312e37e25cf
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DogeCola NFTs is part of a big ecosystem that includes: Token -DAPPS — Farming — and a Real drink on the market coming soon

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DogeColaEcosystem

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 3 of 13: DogeColaEcosystem.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
import "./ERC721.sol";
import "./Ownable.sol";
import "./Strings.sol";
import "./Address.sol";

contract DogeColaEcosystem is ERC721, Ownable {
    using Strings for uint256;

    string public baseURI;
    string public baseExtension = ".json";
    string public notRevealedUri;
    uint256 public cost = 0.06 ether;
    uint256 public costWL = 0.05 ether;
    uint256 public costOG = 0.04 ether;
    uint256 public maxSupply = 2000;
    uint256 public maxMintAmountOG = 6;
    uint256 public maxMintAmountWL = 3;
    uint256 public maxMintAmount = 2000;
    uint256 public nftPerAddressLimitOG = 6;
    uint256 public nftPerAddressLimitWL = 3;
    uint256 public nftPerAddressLimit = 2000;
    uint256 allTokens = 0;
    bool public revealed = false;
    mapping(address => uint256) public addressMintedBalance;

    uint256 public currentState = 0;
    address[] public whitelistedAddresses;
    address[] public ogAddresses;

    constructor() ERC721("DogeCola Ecosystem", "DCE") {
        setNotRevealedURI(
            "ipfs://QmZPYLRhtw66XC9TbmnFZayCAndZso9qTUNeiuggkAju6x"
        );
    }

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

    function mint(uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(_mintAmount > 0, "need to mint at least 1 NFT");
        require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");
        if (msg.sender != owner()) {
            require(currentState > 0, "the contract is paused");
            uint256 ownerMintedCount = addressMintedBalance[msg.sender];

            if (currentState == 1) {
                require(isOGed(msg.sender), "user is not whitelisted");
                require(
                    msg.value >= costOG * _mintAmount,
                    "insufficient funds"
                );
                require(
                    _mintAmount <= maxMintAmountOG,
                    "max mint amount per session exceeded"
                );
                require(
                    ownerMintedCount + _mintAmount <= nftPerAddressLimitOG,
                    "max NFT per address exceeded"
                );
            } else if (currentState == 2) {
                require(isWhitelisted(msg.sender), "user is not whitelisted");
                require(
                    msg.value >= costWL * _mintAmount,
                    "insufficient funds"
                );
                require(
                    _mintAmount <= maxMintAmountWL,
                    "max mint amount per session exceeded"
                );
                require(
                    ownerMintedCount + _mintAmount <= nftPerAddressLimitWL,
                    "max NFT per address exceeded"
                );
            } else {
                require(msg.value >= cost * _mintAmount, "insufficient funds");
            }
        }

        for (uint256 i = 1; i <= _mintAmount; i++) {
            addressMintedBalance[msg.sender]++;
            _safeMint(msg.sender, supply + i);
            allTokens++;
        }
    }

    function totalSupply() public view returns (uint256) {
        return allTokens;
    }

    function isWhitelisted(address _user) public view returns (bool) {
        for (uint256 i = 0; i < whitelistedAddresses.length; i++) {
            if (whitelistedAddresses[i] == _user) {
                return true;
            }
        }
        return false;
    }

    function isOGed(address _user) public view returns (bool) {
        for (uint256 i = 0; i < ogAddresses.length; i++) {
            if (ogAddresses[i] == _user) {
                return true;
            }
        }
        return false;
    }

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

        if (revealed == false) {
            return notRevealedUri;
        }

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

    //only owner
    function reveal() public onlyOwner {
        revealed = true;
    }

    function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
        nftPerAddressLimit = _limit;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function pause() public onlyOwner {
        currentState = 0;
    }

    function setOnlyOG() public onlyOwner {
        currentState = 1;
    }

    function setOnlyWhitelisted() public onlyOwner {
        currentState = 2;
    }

    function setPublic() public onlyOwner {
        currentState = 3;
    }

    function ogUsers(address[] calldata _users) public onlyOwner {
        delete ogAddresses;
        ogAddresses = _users;
    }

    function whitelistUsers(address[] calldata _users) public onlyOwner {
        delete whitelistedAddresses;
        whitelistedAddresses = _users;
    }

    function setPublicCost(uint256 _price) public onlyOwner {
        cost = _price;
    }

    function setOGCost(uint256 _price) public onlyOwner {
        costOG = _price;
    }

    function setWLCost(uint256 _price) public onlyOwner {
        costWL = _price;
    }

    function withdraw() public payable onlyOwner {
        // This will payout the owner the contract balance.
        // Do not remove this otherwise you will not be able to withdraw the funds.
        // =============================================================================
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
        // =============================================================================
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 13: Context.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.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 4 of 13: ERC165.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import './IERC165.sol';

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 5 of 13: ERC721.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
import './Address.sol';
import './Strings.sol';
import './Context.sol';
import './ERC165.sol';
import './IERC721.sol';
import './IERC721Metadata.sol';
import './IERC721Receiver.sol';

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        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: owner query for nonexistent token"
        );
        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)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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: transfer caller is not 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: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    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);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        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);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import './ERC721.sol';
import './IERC721Enumerable.sol';
/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(IERC165, ERC721)
        returns (bool)
    {
        return
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721.balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721Enumerable.totalSupply(),
            "ERC721Enumerable: global index out of bounds"
        );
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 13: IERC721.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import './IERC165.sol';

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
/**
 * @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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

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

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

File 9 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
import './IERC721.sol';
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 10 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import './IERC721.sol';


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

File 11 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import './Context.sol';
/**
 * @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() {
        _setOwner(_msgSender());
    }

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 13 of 13: Strings.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

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

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

Contract Security Audit

Contract ABI

[{"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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costOG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentState","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isOGed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountOG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountWL","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":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimitOG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimitWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ogAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"ogUsers","outputs":[],"stateMutability":"nonpayable","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setOGCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setOnlyOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPublicCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a090815262000028916008919062000212565b5066d529ae9e860000600a5566b1a2bc2ec50000600b55668e1bc9bf040000600c556107d0600d8190556006600e8190556003600f8190556010839055601191909155601255601355600060148190556015805460ff191690556017553480156200009257600080fd5b506040805180820182526012815271446f6765436f6c612045636f73797374656d60701b60208083019182528351808501909452600384526244434560e81b908401528151919291620000e89160009162000212565b508051620000fe90600190602084019062000212565b5050506200011b620001156200014560201b60201c565b62000149565b6200013f60405180606001604052806035815260200162002e52603591396200019b565b6200032a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001a562000145565b6001600160a01b0316620001b862000203565b6001600160a01b031614620001ea5760405162461bcd60e51b8152600401620001e190620002b8565b60405180910390fd5b8051620001ff90600990602084019062000212565b5050565b6006546001600160a01b031690565b8280546200022090620002ed565b90600052602060002090601f0160209004810192826200024457600085556200028f565b82601f106200025f57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028f57825182559160200191906001019062000272565b506200029d929150620002a1565b5090565b5b808211156200029d5760008155600101620002a2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6002810460018216806200030257607f821691505b602082108114156200032457634e487b7160e01b600052602260045260246000fd5b50919050565b612b18806200033a6000396000f3fe6080604052600436106103505760003560e01c806377e56357116101c6578063bee1f2b9116100f7578063da3ef23f11610095578063edec5f271161006f578063edec5f271461089c578063f2c4ce1e146108bc578063f2fde38b146108dc578063ff42811d146108fc57610350565b8063da3ef23f1461083c578063e985e9c51461085c578063ea116f391461087c57610350565b8063c87b56dd116100d1578063c87b56dd146107c7578063d0eb26b0146107e7578063d1d1921314610807578063d5abeb011461082757610350565b8063bee1f2b914610788578063c4c72f0d1461079d578063c6682862146107b257610350565b806397549a4611610164578063a475b5dd1161013e578063a475b5dd1461071e578063b88d4fde14610733578063ba4e5c4914610753578063ba7d2c761461077357610350565b806397549a46146106cb578063a0712d68146106eb578063a22cb465146106fe57610350565b80638456cb59116101a05780638456cb5914610677578063872d10ea1461068c5780638da5cb5b146106a157806395d89b41146106b657610350565b806377e56357146106425780637f00c7a614610657578063811d24371461056357610350565b8063239c70ae116102a0578063518302271161023e5780636c0360eb116102185780636c0360eb146105d857806370a08231146105ed578063715018a61461060d57806374050f3f1461062257610350565b8063518302271461058357806355f804b3146105985780636352211e146105b857610350565b80633af32abf1161027a5780633af32abf1461051b5780633ccfd60b1461053b57806342842e0e1461054357806344a0d68a1461056357610350565b8063239c70ae146104d157806323b872dd146104e6578063295e4c331461050657610350565b8063095ea7b31161030d57806313faede6116102e757806313faede61461047257806318160ddd1461048757806318cae2691461049c5780631f398c75146104bc57610350565b8063095ea7b3146104265780630c3f6acf1461044857806313093b1d1461045d57610350565b806301ffc9a71461035557806306afd5921461038b57806306fdde03146103ad578063081812fc146103cf578063081c8c44146103fc578063085ebf7714610411575b600080fd5b34801561036157600080fd5b5061037561037036600461224b565b61091c565b6040516103829190612390565b60405180910390f35b34801561039757600080fd5b506103a0610964565b6040516103829190612989565b3480156103b957600080fd5b506103c261096a565b604051610382919061239b565b3480156103db57600080fd5b506103ef6103ea3660046122c9565b6109fc565b604051610382919061233f565b34801561040857600080fd5b506103c2610a48565b34801561041d57600080fd5b506103a0610ad6565b34801561043257600080fd5b506104466104413660046121b3565b610adc565b005b34801561045457600080fd5b506103a0610b74565b34801561046957600080fd5b506103a0610b7a565b34801561047e57600080fd5b506103a0610b80565b34801561049357600080fd5b506103a0610b86565b3480156104a857600080fd5b506103a06104b7366004612079565b610b8c565b3480156104c857600080fd5b506103a0610b9e565b3480156104dd57600080fd5b506103a0610ba4565b3480156104f257600080fd5b506104466105013660046120c5565b610baa565b34801561051257600080fd5b50610446610be2565b34801561052757600080fd5b50610375610536366004612079565b610c28565b610446610ca1565b34801561054f57600080fd5b5061044661055e3660046120c5565b610d53565b34801561056f57600080fd5b5061044661057e3660046122c9565b610d6e565b34801561058f57600080fd5b50610375610db2565b3480156105a457600080fd5b506104466105b3366004612283565b610dbb565b3480156105c457600080fd5b506103ef6105d33660046122c9565b610e11565b3480156105e457600080fd5b506103c2610e46565b3480156105f957600080fd5b506103a0610608366004612079565b610e53565b34801561061957600080fd5b50610446610e97565b34801561062e57600080fd5b5061044661063d3660046121dc565b610ee2565b34801561064e57600080fd5b50610446610f39565b34801561066357600080fd5b506104466106723660046122c9565b610f7f565b34801561068357600080fd5b50610446610fc3565b34801561069857600080fd5b506103a0611009565b3480156106ad57600080fd5b506103ef61100f565b3480156106c257600080fd5b506103c261101e565b3480156106d757600080fd5b506104466106e63660046122c9565b61102d565b6104466106f93660046122c9565b611071565b34801561070a57600080fd5b50610446610719366004612179565b6112ea565b34801561072a57600080fd5b506104466113b8565b34801561073f57600080fd5b5061044661074e366004612100565b611406565b34801561075f57600080fd5b506103ef61076e3660046122c9565b611445565b34801561077f57600080fd5b506103a061146f565b34801561079457600080fd5b50610446611475565b3480156107a957600080fd5b506103a06114bb565b3480156107be57600080fd5b506103c26114c1565b3480156107d357600080fd5b506103c26107e23660046122c9565b6114ce565b3480156107f357600080fd5b506104466108023660046122c9565b6115ed565b34801561081357600080fd5b506104466108223660046122c9565b611631565b34801561083357600080fd5b506103a0611675565b34801561084857600080fd5b50610446610857366004612283565b61167b565b34801561086857600080fd5b50610375610877366004612093565b6116cd565b34801561088857600080fd5b50610375610897366004612079565b6116fb565b3480156108a857600080fd5b506104466108b73660046121dc565b61176b565b3480156108c857600080fd5b506104466108d7366004612283565b6117c2565b3480156108e857600080fd5b506104466108f7366004612079565b611814565b34801561090857600080fd5b506103ef6109173660046122c9565b611882565b60006001600160e01b031982166380ac58cd60e01b148061094d57506001600160e01b03198216635b5e139f60e01b145b8061095c575061095c82611892565b90505b919050565b600b5481565b60606000805461097990612a20565b80601f01602080910402602001604051908101604052809291908181526020018280546109a590612a20565b80156109f25780601f106109c7576101008083540402835291602001916109f2565b820191906000526020600020905b8154815290600101906020018083116109d557829003601f168201915b5050505050905090565b6000610a07826118ab565b610a2c5760405162461bcd60e51b8152600401610a2390612714565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60098054610a5590612a20565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190612a20565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b505050505081565b600c5481565b6000610ae782610e11565b9050806001600160a01b0316836001600160a01b03161415610b1b5760405162461bcd60e51b8152600401610a239061285d565b806001600160a01b0316610b2d6118c8565b6001600160a01b03161480610b495750610b49816108776118c8565b610b655760405162461bcd60e51b8152600401610a239061257b565b610b6f83836118cc565b505050565b60175481565b600f5481565b600a5481565b60145490565b60166020526000908152604090205481565b600e5481565b60105481565b610bbb610bb56118c8565b8261193a565b610bd75760405162461bcd60e51b8152600401610a23906128ca565b610b6f8383836119bf565b610bea6118c8565b6001600160a01b0316610bfb61100f565b6001600160a01b031614610c215760405162461bcd60e51b8152600401610a2390612760565b6002601755565b6000805b601854811015610c9857826001600160a01b031660188281548110610c6157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610c8657600191505061095f565b80610c9081612a5b565b915050610c2c565b50600092915050565b610ca96118c8565b6001600160a01b0316610cba61100f565b6001600160a01b031614610ce05760405162461bcd60e51b8152600401610a2390612760565b6000610cea61100f565b6001600160a01b031647604051610d009061233c565b60006040518083038185875af1925050503d8060008114610d3d576040519150601f19603f3d011682016040523d82523d6000602084013e610d42565b606091505b5050905080610d5057600080fd5b50565b610b6f83838360405180602001604052806000815250611406565b610d766118c8565b6001600160a01b0316610d8761100f565b6001600160a01b031614610dad5760405162461bcd60e51b8152600401610a2390612760565b600a55565b60155460ff1681565b610dc36118c8565b6001600160a01b0316610dd461100f565b6001600160a01b031614610dfa5760405162461bcd60e51b8152600401610a2390612760565b8051610e0d906007906020840190611ee8565b5050565b6000818152600260205260408120546001600160a01b03168061095c5760405162461bcd60e51b8152600401610a2390612622565b60078054610a5590612a20565b60006001600160a01b038216610e7b5760405162461bcd60e51b8152600401610a23906125d8565b506001600160a01b031660009081526003602052604090205490565b610e9f6118c8565b6001600160a01b0316610eb061100f565b6001600160a01b031614610ed65760405162461bcd60e51b8152600401610a2390612760565b610ee06000611aec565b565b610eea6118c8565b6001600160a01b0316610efb61100f565b6001600160a01b031614610f215760405162461bcd60e51b8152600401610a2390612760565b610f2d60196000611f6c565b610b6f60198383611f8a565b610f416118c8565b6001600160a01b0316610f5261100f565b6001600160a01b031614610f785760405162461bcd60e51b8152600401610a2390612760565b6003601755565b610f876118c8565b6001600160a01b0316610f9861100f565b6001600160a01b031614610fbe5760405162461bcd60e51b8152600401610a2390612760565b601055565b610fcb6118c8565b6001600160a01b0316610fdc61100f565b6001600160a01b0316146110025760405162461bcd60e51b8152600401610a2390612760565b6000601755565b60125481565b6006546001600160a01b031690565b60606001805461097990612a20565b6110356118c8565b6001600160a01b031661104661100f565b6001600160a01b03161461106c5760405162461bcd60e51b8152600401610a2390612760565b600c55565b600061107b610b86565b90506000821161109d5760405162461bcd60e51b8152600401610a2390612952565b600d546110aa8383612992565b11156110c85760405162461bcd60e51b8152600401610a239061266b565b6110d061100f565b6001600160a01b0316336001600160a01b0316146112845760006017541161110a5760405162461bcd60e51b8152600401610a2390612795565b33600090815260166020526040902054601754600114156111c95761112e336116fb565b61114a5760405162461bcd60e51b8152600401610a239061291b565b82600c5461115891906129be565b3410156111775760405162461bcd60e51b8152600401610a239061289e565b600e548311156111995760405162461bcd60e51b8152600401610a239061269b565b6011546111a68483612992565b11156111c45760405162461bcd60e51b8152600401610a239061247d565b611282565b60175460021415611255576111dd33610c28565b6111f95760405162461bcd60e51b8152600401610a239061291b565b82600b5461120791906129be565b3410156112265760405162461bcd60e51b8152600401610a239061289e565b600f548311156112485760405162461bcd60e51b8152600401610a239061269b565b6012546111a68483612992565b82600a5461126391906129be565b3410156112825760405162461bcd60e51b8152600401610a239061289e565b505b60015b828111610b6f573360009081526016602052604081208054916112a983612a5b565b909155506112c29050336112bd8385612992565b611b3e565b601480549060006112d283612a5b565b919050555080806112e290612a5b565b915050611287565b6112f26118c8565b6001600160a01b0316826001600160a01b031614156113235760405162461bcd60e51b8152600401610a23906124f8565b80600560006113306118c8565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556113746118c8565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113ac9190612390565b60405180910390a35050565b6113c06118c8565b6001600160a01b03166113d161100f565b6001600160a01b0316146113f75760405162461bcd60e51b8152600401610a2390612760565b6015805460ff19166001179055565b6114176114116118c8565b8361193a565b6114335760405162461bcd60e51b8152600401610a23906128ca565b61143f84848484611b58565b50505050565b6018818154811061145557600080fd5b6000918252602090912001546001600160a01b0316905081565b60135481565b61147d6118c8565b6001600160a01b031661148e61100f565b6001600160a01b0316146114b45760405162461bcd60e51b8152600401610a2390612760565b6001601755565b60115481565b60088054610a5590612a20565b60606114d9826118ab565b6114f55760405162461bcd60e51b8152600401610a239061280e565b60155460ff16611591576009805461150c90612a20565b80601f016020809104026020016040519081016040528092919081815260200182805461153890612a20565b80156115855780601f1061155a57610100808354040283529160200191611585565b820191906000526020600020905b81548152906001019060200180831161156857829003601f168201915b5050505050905061095f565b600061159b611b8b565b905060008151116115bb57604051806020016040528060008152506115e6565b806115c584611b9a565b6040516020016115d692919061230d565b6040516020818303038152906040525b9392505050565b6115f56118c8565b6001600160a01b031661160661100f565b6001600160a01b03161461162c5760405162461bcd60e51b8152600401610a2390612760565b601355565b6116396118c8565b6001600160a01b031661164a61100f565b6001600160a01b0316146116705760405162461bcd60e51b8152600401610a2390612760565b600b55565b600d5481565b6116836118c8565b6001600160a01b031661169461100f565b6001600160a01b0316146116ba5760405162461bcd60e51b8152600401610a2390612760565b8051610e0d906008906020840190611ee8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000805b601954811015610c9857826001600160a01b03166019828154811061173457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561175957600191505061095f565b8061176381612a5b565b9150506116ff565b6117736118c8565b6001600160a01b031661178461100f565b6001600160a01b0316146117aa5760405162461bcd60e51b8152600401610a2390612760565b6117b660186000611f6c565b610b6f60188383611f8a565b6117ca6118c8565b6001600160a01b03166117db61100f565b6001600160a01b0316146118015760405162461bcd60e51b8152600401610a2390612760565b8051610e0d906009906020840190611ee8565b61181c6118c8565b6001600160a01b031661182d61100f565b6001600160a01b0316146118535760405162461bcd60e51b8152600401610a2390612760565b6001600160a01b0381166118795760405162461bcd60e51b8152600401610a2390612400565b610d5081611aec565b6019818154811061145557600080fd5b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061190182610e11565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611945826118ab565b6119615760405162461bcd60e51b8152600401610a239061252f565b600061196c83610e11565b9050806001600160a01b0316846001600160a01b031614806119a75750836001600160a01b031661199c846109fc565b6001600160a01b0316145b806119b757506119b781856116cd565b949350505050565b826001600160a01b03166119d282610e11565b6001600160a01b0316146119f85760405162461bcd60e51b8152600401610a23906127c5565b6001600160a01b038216611a1e5760405162461bcd60e51b8152600401610a23906124b4565b611a29838383610b6f565b611a346000826118cc565b6001600160a01b0383166000908152600360205260408120805460019290611a5d9084906129dd565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a8b908490612992565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610e0d828260405180602001604052806000815250611cb5565b611b638484846119bf565b611b6f84848484611ce8565b61143f5760405162461bcd60e51b8152600401610a23906123ae565b60606007805461097990612a20565b606081611bbf57506040805180820190915260018152600360fc1b602082015261095f565b8160005b8115611be95780611bd381612a5b565b9150611be29050600a836129aa565b9150611bc3565b60008167ffffffffffffffff811115611c1257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c3c576020820181803683370190505b5090505b84156119b757611c516001836129dd565b9150611c5e600a86612a76565b611c69906030612992565b60f81b818381518110611c8c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cae600a866129aa565b9450611c40565b611cbf8383611e03565b611ccc6000848484611ce8565b610b6f5760405162461bcd60e51b8152600401610a23906123ae565b6000611cfc846001600160a01b0316611ee2565b15611df857836001600160a01b031663150b7a02611d186118c8565b8786866040518563ffffffff1660e01b8152600401611d3a9493929190612353565b602060405180830381600087803b158015611d5457600080fd5b505af1925050508015611d84575060408051601f3d908101601f19168201909252611d8191810190612267565b60015b611dde573d808015611db2576040519150601f19603f3d011682016040523d82523d6000602084013e611db7565b606091505b508051611dd65760405162461bcd60e51b8152600401610a23906123ae565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119b7565b506001949350505050565b6001600160a01b038216611e295760405162461bcd60e51b8152600401610a23906126df565b611e32816118ab565b15611e4f5760405162461bcd60e51b8152600401610a2390612446565b611e5b60008383610b6f565b6001600160a01b0382166000908152600360205260408120805460019290611e84908490612992565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611ef490612a20565b90600052602060002090601f016020900481019282611f165760008555611f5c565b82601f10611f2f57805160ff1916838001178555611f5c565b82800160010185558215611f5c579182015b82811115611f5c578251825591602001919060010190611f41565b50611f68929150611fdd565b5090565b5080546000825590600052602060002090810190610d509190611fdd565b828054828255906000526020600020908101928215611f5c579160200282015b82811115611f5c5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611faa565b5b80821115611f685760008155600101611fde565b600067ffffffffffffffff8084111561200d5761200d612ab6565b604051601f8501601f19168101602001828111828210171561203157612031612ab6565b60405284815291508183850186101561204957600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461095f57600080fd5b60006020828403121561208a578081fd5b6115e682612062565b600080604083850312156120a5578081fd5b6120ae83612062565b91506120bc60208401612062565b90509250929050565b6000806000606084860312156120d9578081fd5b6120e284612062565b92506120f060208501612062565b9150604084013590509250925092565b60008060008060808587031215612115578081fd5b61211e85612062565b935061212c60208601612062565b925060408501359150606085013567ffffffffffffffff81111561214e578182fd5b8501601f8101871361215e578182fd5b61216d87823560208401611ff2565b91505092959194509250565b6000806040838503121561218b578182fd5b61219483612062565b9150602083013580151581146121a8578182fd5b809150509250929050565b600080604083850312156121c5578182fd5b6121ce83612062565b946020939093013593505050565b600080602083850312156121ee578182fd5b823567ffffffffffffffff80821115612205578384fd5b818501915085601f830112612218578384fd5b813581811115612226578485fd5b8660208083028501011115612239578485fd5b60209290920196919550909350505050565b60006020828403121561225c578081fd5b81356115e681612acc565b600060208284031215612278578081fd5b81516115e681612acc565b600060208284031215612294578081fd5b813567ffffffffffffffff8111156122aa578182fd5b8201601f810184136122ba578182fd5b6119b784823560208401611ff2565b6000602082840312156122da578081fd5b5035919050565b600081518084526122f98160208601602086016129f4565b601f01601f19169290920160200192915050565b6000835161231f8184602088016129f4565b8351908301906123338183602088016129f4565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612386908301846122e1565b9695505050505050565b901515815260200190565b6000602082526115e660208301846122e1565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601c908201527f6d6178204e465420706572206164647265737320657863656564656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b60208082526024908201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656040820152631959195960e21b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526017908201527f75736572206973206e6f742077686974656c6973746564000000000000000000604082015260600190565b6020808252601b908201527f6e65656420746f206d696e74206174206c656173742031204e46540000000000604082015260600190565b90815260200190565b600082198211156129a5576129a5612a8a565b500190565b6000826129b9576129b9612aa0565b500490565b60008160001904831182151516156129d8576129d8612a8a565b500290565b6000828210156129ef576129ef612a8a565b500390565b60005b83811015612a0f5781810151838201526020016129f7565b8381111561143f5750506000910152565b600281046001821680612a3457607f821691505b60208210811415612a5557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a6f57612a6f612a8a565b5060010190565b600082612a8557612a85612aa0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d5057600080fdfea2646970667358221220d0911ddd98ed95b36dd3ccc6a51352e21ec623d43419e04e2fb51cef2c8a1f2a64736f6c63430008000033697066733a2f2f516d5a50594c52687477363658433954626d6e465a617943416e645a736f397154554e65697567676b416a753678

Deployed Bytecode

0x6080604052600436106103505760003560e01c806377e56357116101c6578063bee1f2b9116100f7578063da3ef23f11610095578063edec5f271161006f578063edec5f271461089c578063f2c4ce1e146108bc578063f2fde38b146108dc578063ff42811d146108fc57610350565b8063da3ef23f1461083c578063e985e9c51461085c578063ea116f391461087c57610350565b8063c87b56dd116100d1578063c87b56dd146107c7578063d0eb26b0146107e7578063d1d1921314610807578063d5abeb011461082757610350565b8063bee1f2b914610788578063c4c72f0d1461079d578063c6682862146107b257610350565b806397549a4611610164578063a475b5dd1161013e578063a475b5dd1461071e578063b88d4fde14610733578063ba4e5c4914610753578063ba7d2c761461077357610350565b806397549a46146106cb578063a0712d68146106eb578063a22cb465146106fe57610350565b80638456cb59116101a05780638456cb5914610677578063872d10ea1461068c5780638da5cb5b146106a157806395d89b41146106b657610350565b806377e56357146106425780637f00c7a614610657578063811d24371461056357610350565b8063239c70ae116102a0578063518302271161023e5780636c0360eb116102185780636c0360eb146105d857806370a08231146105ed578063715018a61461060d57806374050f3f1461062257610350565b8063518302271461058357806355f804b3146105985780636352211e146105b857610350565b80633af32abf1161027a5780633af32abf1461051b5780633ccfd60b1461053b57806342842e0e1461054357806344a0d68a1461056357610350565b8063239c70ae146104d157806323b872dd146104e6578063295e4c331461050657610350565b8063095ea7b31161030d57806313faede6116102e757806313faede61461047257806318160ddd1461048757806318cae2691461049c5780631f398c75146104bc57610350565b8063095ea7b3146104265780630c3f6acf1461044857806313093b1d1461045d57610350565b806301ffc9a71461035557806306afd5921461038b57806306fdde03146103ad578063081812fc146103cf578063081c8c44146103fc578063085ebf7714610411575b600080fd5b34801561036157600080fd5b5061037561037036600461224b565b61091c565b6040516103829190612390565b60405180910390f35b34801561039757600080fd5b506103a0610964565b6040516103829190612989565b3480156103b957600080fd5b506103c261096a565b604051610382919061239b565b3480156103db57600080fd5b506103ef6103ea3660046122c9565b6109fc565b604051610382919061233f565b34801561040857600080fd5b506103c2610a48565b34801561041d57600080fd5b506103a0610ad6565b34801561043257600080fd5b506104466104413660046121b3565b610adc565b005b34801561045457600080fd5b506103a0610b74565b34801561046957600080fd5b506103a0610b7a565b34801561047e57600080fd5b506103a0610b80565b34801561049357600080fd5b506103a0610b86565b3480156104a857600080fd5b506103a06104b7366004612079565b610b8c565b3480156104c857600080fd5b506103a0610b9e565b3480156104dd57600080fd5b506103a0610ba4565b3480156104f257600080fd5b506104466105013660046120c5565b610baa565b34801561051257600080fd5b50610446610be2565b34801561052757600080fd5b50610375610536366004612079565b610c28565b610446610ca1565b34801561054f57600080fd5b5061044661055e3660046120c5565b610d53565b34801561056f57600080fd5b5061044661057e3660046122c9565b610d6e565b34801561058f57600080fd5b50610375610db2565b3480156105a457600080fd5b506104466105b3366004612283565b610dbb565b3480156105c457600080fd5b506103ef6105d33660046122c9565b610e11565b3480156105e457600080fd5b506103c2610e46565b3480156105f957600080fd5b506103a0610608366004612079565b610e53565b34801561061957600080fd5b50610446610e97565b34801561062e57600080fd5b5061044661063d3660046121dc565b610ee2565b34801561064e57600080fd5b50610446610f39565b34801561066357600080fd5b506104466106723660046122c9565b610f7f565b34801561068357600080fd5b50610446610fc3565b34801561069857600080fd5b506103a0611009565b3480156106ad57600080fd5b506103ef61100f565b3480156106c257600080fd5b506103c261101e565b3480156106d757600080fd5b506104466106e63660046122c9565b61102d565b6104466106f93660046122c9565b611071565b34801561070a57600080fd5b50610446610719366004612179565b6112ea565b34801561072a57600080fd5b506104466113b8565b34801561073f57600080fd5b5061044661074e366004612100565b611406565b34801561075f57600080fd5b506103ef61076e3660046122c9565b611445565b34801561077f57600080fd5b506103a061146f565b34801561079457600080fd5b50610446611475565b3480156107a957600080fd5b506103a06114bb565b3480156107be57600080fd5b506103c26114c1565b3480156107d357600080fd5b506103c26107e23660046122c9565b6114ce565b3480156107f357600080fd5b506104466108023660046122c9565b6115ed565b34801561081357600080fd5b506104466108223660046122c9565b611631565b34801561083357600080fd5b506103a0611675565b34801561084857600080fd5b50610446610857366004612283565b61167b565b34801561086857600080fd5b50610375610877366004612093565b6116cd565b34801561088857600080fd5b50610375610897366004612079565b6116fb565b3480156108a857600080fd5b506104466108b73660046121dc565b61176b565b3480156108c857600080fd5b506104466108d7366004612283565b6117c2565b3480156108e857600080fd5b506104466108f7366004612079565b611814565b34801561090857600080fd5b506103ef6109173660046122c9565b611882565b60006001600160e01b031982166380ac58cd60e01b148061094d57506001600160e01b03198216635b5e139f60e01b145b8061095c575061095c82611892565b90505b919050565b600b5481565b60606000805461097990612a20565b80601f01602080910402602001604051908101604052809291908181526020018280546109a590612a20565b80156109f25780601f106109c7576101008083540402835291602001916109f2565b820191906000526020600020905b8154815290600101906020018083116109d557829003601f168201915b5050505050905090565b6000610a07826118ab565b610a2c5760405162461bcd60e51b8152600401610a2390612714565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60098054610a5590612a20565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190612a20565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b505050505081565b600c5481565b6000610ae782610e11565b9050806001600160a01b0316836001600160a01b03161415610b1b5760405162461bcd60e51b8152600401610a239061285d565b806001600160a01b0316610b2d6118c8565b6001600160a01b03161480610b495750610b49816108776118c8565b610b655760405162461bcd60e51b8152600401610a239061257b565b610b6f83836118cc565b505050565b60175481565b600f5481565b600a5481565b60145490565b60166020526000908152604090205481565b600e5481565b60105481565b610bbb610bb56118c8565b8261193a565b610bd75760405162461bcd60e51b8152600401610a23906128ca565b610b6f8383836119bf565b610bea6118c8565b6001600160a01b0316610bfb61100f565b6001600160a01b031614610c215760405162461bcd60e51b8152600401610a2390612760565b6002601755565b6000805b601854811015610c9857826001600160a01b031660188281548110610c6157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610c8657600191505061095f565b80610c9081612a5b565b915050610c2c565b50600092915050565b610ca96118c8565b6001600160a01b0316610cba61100f565b6001600160a01b031614610ce05760405162461bcd60e51b8152600401610a2390612760565b6000610cea61100f565b6001600160a01b031647604051610d009061233c565b60006040518083038185875af1925050503d8060008114610d3d576040519150601f19603f3d011682016040523d82523d6000602084013e610d42565b606091505b5050905080610d5057600080fd5b50565b610b6f83838360405180602001604052806000815250611406565b610d766118c8565b6001600160a01b0316610d8761100f565b6001600160a01b031614610dad5760405162461bcd60e51b8152600401610a2390612760565b600a55565b60155460ff1681565b610dc36118c8565b6001600160a01b0316610dd461100f565b6001600160a01b031614610dfa5760405162461bcd60e51b8152600401610a2390612760565b8051610e0d906007906020840190611ee8565b5050565b6000818152600260205260408120546001600160a01b03168061095c5760405162461bcd60e51b8152600401610a2390612622565b60078054610a5590612a20565b60006001600160a01b038216610e7b5760405162461bcd60e51b8152600401610a23906125d8565b506001600160a01b031660009081526003602052604090205490565b610e9f6118c8565b6001600160a01b0316610eb061100f565b6001600160a01b031614610ed65760405162461bcd60e51b8152600401610a2390612760565b610ee06000611aec565b565b610eea6118c8565b6001600160a01b0316610efb61100f565b6001600160a01b031614610f215760405162461bcd60e51b8152600401610a2390612760565b610f2d60196000611f6c565b610b6f60198383611f8a565b610f416118c8565b6001600160a01b0316610f5261100f565b6001600160a01b031614610f785760405162461bcd60e51b8152600401610a2390612760565b6003601755565b610f876118c8565b6001600160a01b0316610f9861100f565b6001600160a01b031614610fbe5760405162461bcd60e51b8152600401610a2390612760565b601055565b610fcb6118c8565b6001600160a01b0316610fdc61100f565b6001600160a01b0316146110025760405162461bcd60e51b8152600401610a2390612760565b6000601755565b60125481565b6006546001600160a01b031690565b60606001805461097990612a20565b6110356118c8565b6001600160a01b031661104661100f565b6001600160a01b03161461106c5760405162461bcd60e51b8152600401610a2390612760565b600c55565b600061107b610b86565b90506000821161109d5760405162461bcd60e51b8152600401610a2390612952565b600d546110aa8383612992565b11156110c85760405162461bcd60e51b8152600401610a239061266b565b6110d061100f565b6001600160a01b0316336001600160a01b0316146112845760006017541161110a5760405162461bcd60e51b8152600401610a2390612795565b33600090815260166020526040902054601754600114156111c95761112e336116fb565b61114a5760405162461bcd60e51b8152600401610a239061291b565b82600c5461115891906129be565b3410156111775760405162461bcd60e51b8152600401610a239061289e565b600e548311156111995760405162461bcd60e51b8152600401610a239061269b565b6011546111a68483612992565b11156111c45760405162461bcd60e51b8152600401610a239061247d565b611282565b60175460021415611255576111dd33610c28565b6111f95760405162461bcd60e51b8152600401610a239061291b565b82600b5461120791906129be565b3410156112265760405162461bcd60e51b8152600401610a239061289e565b600f548311156112485760405162461bcd60e51b8152600401610a239061269b565b6012546111a68483612992565b82600a5461126391906129be565b3410156112825760405162461bcd60e51b8152600401610a239061289e565b505b60015b828111610b6f573360009081526016602052604081208054916112a983612a5b565b909155506112c29050336112bd8385612992565b611b3e565b601480549060006112d283612a5b565b919050555080806112e290612a5b565b915050611287565b6112f26118c8565b6001600160a01b0316826001600160a01b031614156113235760405162461bcd60e51b8152600401610a23906124f8565b80600560006113306118c8565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556113746118c8565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113ac9190612390565b60405180910390a35050565b6113c06118c8565b6001600160a01b03166113d161100f565b6001600160a01b0316146113f75760405162461bcd60e51b8152600401610a2390612760565b6015805460ff19166001179055565b6114176114116118c8565b8361193a565b6114335760405162461bcd60e51b8152600401610a23906128ca565b61143f84848484611b58565b50505050565b6018818154811061145557600080fd5b6000918252602090912001546001600160a01b0316905081565b60135481565b61147d6118c8565b6001600160a01b031661148e61100f565b6001600160a01b0316146114b45760405162461bcd60e51b8152600401610a2390612760565b6001601755565b60115481565b60088054610a5590612a20565b60606114d9826118ab565b6114f55760405162461bcd60e51b8152600401610a239061280e565b60155460ff16611591576009805461150c90612a20565b80601f016020809104026020016040519081016040528092919081815260200182805461153890612a20565b80156115855780601f1061155a57610100808354040283529160200191611585565b820191906000526020600020905b81548152906001019060200180831161156857829003601f168201915b5050505050905061095f565b600061159b611b8b565b905060008151116115bb57604051806020016040528060008152506115e6565b806115c584611b9a565b6040516020016115d692919061230d565b6040516020818303038152906040525b9392505050565b6115f56118c8565b6001600160a01b031661160661100f565b6001600160a01b03161461162c5760405162461bcd60e51b8152600401610a2390612760565b601355565b6116396118c8565b6001600160a01b031661164a61100f565b6001600160a01b0316146116705760405162461bcd60e51b8152600401610a2390612760565b600b55565b600d5481565b6116836118c8565b6001600160a01b031661169461100f565b6001600160a01b0316146116ba5760405162461bcd60e51b8152600401610a2390612760565b8051610e0d906008906020840190611ee8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000805b601954811015610c9857826001600160a01b03166019828154811061173457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561175957600191505061095f565b8061176381612a5b565b9150506116ff565b6117736118c8565b6001600160a01b031661178461100f565b6001600160a01b0316146117aa5760405162461bcd60e51b8152600401610a2390612760565b6117b660186000611f6c565b610b6f60188383611f8a565b6117ca6118c8565b6001600160a01b03166117db61100f565b6001600160a01b0316146118015760405162461bcd60e51b8152600401610a2390612760565b8051610e0d906009906020840190611ee8565b61181c6118c8565b6001600160a01b031661182d61100f565b6001600160a01b0316146118535760405162461bcd60e51b8152600401610a2390612760565b6001600160a01b0381166118795760405162461bcd60e51b8152600401610a2390612400565b610d5081611aec565b6019818154811061145557600080fd5b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061190182610e11565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611945826118ab565b6119615760405162461bcd60e51b8152600401610a239061252f565b600061196c83610e11565b9050806001600160a01b0316846001600160a01b031614806119a75750836001600160a01b031661199c846109fc565b6001600160a01b0316145b806119b757506119b781856116cd565b949350505050565b826001600160a01b03166119d282610e11565b6001600160a01b0316146119f85760405162461bcd60e51b8152600401610a23906127c5565b6001600160a01b038216611a1e5760405162461bcd60e51b8152600401610a23906124b4565b611a29838383610b6f565b611a346000826118cc565b6001600160a01b0383166000908152600360205260408120805460019290611a5d9084906129dd565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a8b908490612992565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610e0d828260405180602001604052806000815250611cb5565b611b638484846119bf565b611b6f84848484611ce8565b61143f5760405162461bcd60e51b8152600401610a23906123ae565b60606007805461097990612a20565b606081611bbf57506040805180820190915260018152600360fc1b602082015261095f565b8160005b8115611be95780611bd381612a5b565b9150611be29050600a836129aa565b9150611bc3565b60008167ffffffffffffffff811115611c1257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c3c576020820181803683370190505b5090505b84156119b757611c516001836129dd565b9150611c5e600a86612a76565b611c69906030612992565b60f81b818381518110611c8c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cae600a866129aa565b9450611c40565b611cbf8383611e03565b611ccc6000848484611ce8565b610b6f5760405162461bcd60e51b8152600401610a23906123ae565b6000611cfc846001600160a01b0316611ee2565b15611df857836001600160a01b031663150b7a02611d186118c8565b8786866040518563ffffffff1660e01b8152600401611d3a9493929190612353565b602060405180830381600087803b158015611d5457600080fd5b505af1925050508015611d84575060408051601f3d908101601f19168201909252611d8191810190612267565b60015b611dde573d808015611db2576040519150601f19603f3d011682016040523d82523d6000602084013e611db7565b606091505b508051611dd65760405162461bcd60e51b8152600401610a23906123ae565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119b7565b506001949350505050565b6001600160a01b038216611e295760405162461bcd60e51b8152600401610a23906126df565b611e32816118ab565b15611e4f5760405162461bcd60e51b8152600401610a2390612446565b611e5b60008383610b6f565b6001600160a01b0382166000908152600360205260408120805460019290611e84908490612992565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611ef490612a20565b90600052602060002090601f016020900481019282611f165760008555611f5c565b82601f10611f2f57805160ff1916838001178555611f5c565b82800160010185558215611f5c579182015b82811115611f5c578251825591602001919060010190611f41565b50611f68929150611fdd565b5090565b5080546000825590600052602060002090810190610d509190611fdd565b828054828255906000526020600020908101928215611f5c579160200282015b82811115611f5c5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611faa565b5b80821115611f685760008155600101611fde565b600067ffffffffffffffff8084111561200d5761200d612ab6565b604051601f8501601f19168101602001828111828210171561203157612031612ab6565b60405284815291508183850186101561204957600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461095f57600080fd5b60006020828403121561208a578081fd5b6115e682612062565b600080604083850312156120a5578081fd5b6120ae83612062565b91506120bc60208401612062565b90509250929050565b6000806000606084860312156120d9578081fd5b6120e284612062565b92506120f060208501612062565b9150604084013590509250925092565b60008060008060808587031215612115578081fd5b61211e85612062565b935061212c60208601612062565b925060408501359150606085013567ffffffffffffffff81111561214e578182fd5b8501601f8101871361215e578182fd5b61216d87823560208401611ff2565b91505092959194509250565b6000806040838503121561218b578182fd5b61219483612062565b9150602083013580151581146121a8578182fd5b809150509250929050565b600080604083850312156121c5578182fd5b6121ce83612062565b946020939093013593505050565b600080602083850312156121ee578182fd5b823567ffffffffffffffff80821115612205578384fd5b818501915085601f830112612218578384fd5b813581811115612226578485fd5b8660208083028501011115612239578485fd5b60209290920196919550909350505050565b60006020828403121561225c578081fd5b81356115e681612acc565b600060208284031215612278578081fd5b81516115e681612acc565b600060208284031215612294578081fd5b813567ffffffffffffffff8111156122aa578182fd5b8201601f810184136122ba578182fd5b6119b784823560208401611ff2565b6000602082840312156122da578081fd5b5035919050565b600081518084526122f98160208601602086016129f4565b601f01601f19169290920160200192915050565b6000835161231f8184602088016129f4565b8351908301906123338183602088016129f4565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612386908301846122e1565b9695505050505050565b901515815260200190565b6000602082526115e660208301846122e1565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601c908201527f6d6178204e465420706572206164647265737320657863656564656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b60208082526024908201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656040820152631959195960e21b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526017908201527f75736572206973206e6f742077686974656c6973746564000000000000000000604082015260600190565b6020808252601b908201527f6e65656420746f206d696e74206174206c656173742031204e46540000000000604082015260600190565b90815260200190565b600082198211156129a5576129a5612a8a565b500190565b6000826129b9576129b9612aa0565b500490565b60008160001904831182151516156129d8576129d8612a8a565b500290565b6000828210156129ef576129ef612a8a565b500390565b60005b83811015612a0f5781810151838201526020016129f7565b8381111561143f5750506000910152565b600281046001821680612a3457607f821691505b60208210811415612a5557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a6f57612a6f612a8a565b5060010190565b600082612a8557612a85612aa0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d5057600080fdfea2646970667358221220d0911ddd98ed95b36dd3ccc6a51352e21ec623d43419e04e2fb51cef2c8a1f2a64736f6c63430008000033

Deployed Bytecode Sourcemap

165:6360:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1442:344:4;;;;;;;;;;-1:-1:-1;1442:344:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;391:34:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2560:98:4:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4193:295::-;;;;;;;;;;-1:-1:-1;4193:295:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;319:28:2:-;;;;;;;;;;;;;:::i;431:34::-;;;;;;;;;;;;;:::i;3731:401:4:-;;;;;;;;;;-1:-1:-1;3731:401:4;;;;;:::i;:::-;;:::i;:::-;;888:31:2;;;;;;;;;;;;;:::i;548:34::-;;;;;;;;;;;;;:::i;353:32::-;;;;;;;;;;;;;:::i;3195:86::-;;;;;;;;;;;;;:::i;826:55::-;;;;;;;;;;-1:-1:-1;826:55:2;;;;;:::i;:::-;;:::i;508:34::-;;;;;;;;;;;;;:::i;588:35::-;;;;;;;;;;;;;:::i;5207:364:4:-;;;;;;;;;;-1:-1:-1;5207:364:4;;;;;:::i;:::-;;:::i;5325:80:2:-;;;;;;;;;;;;;:::i;3287:267::-;;;;;;;;;;-1:-1:-1;3287:267:2;;;;;:::i;:::-;;:::i;6049:474::-;;;:::i;5637:179:4:-;;;;;;;;;;-1:-1:-1;5637:179:4;;;;;:::i;:::-;;:::i;4569:84:2:-;;;;;;;;;;-1:-1:-1;4569:84:2;;;;;:::i;:::-;;:::i;792:28::-;;;;;;;;;;;;;:::i;4785:102::-;;;;;;;;;;-1:-1:-1;4785:102:2;;;;;:::i;:::-;;:::i;2185:313:4:-;;;;;;;;;;-1:-1:-1;2185:313:4;;;;;:::i;:::-;;:::i;249:21:2:-;;;;;;;;;;;;;:::i;1845:283:4:-;;;;;;;;;;-1:-1:-1;1845:283:4;;;;;:::i;:::-;;:::i;1631:92:11:-;;;;;;;;;;;;;:::i;5488:126:2:-;;;;;;;;;;-1:-1:-1;5488:126:2;;;;;:::i;:::-;;:::i;5411:71::-;;;;;;;;;;;;;:::i;4659:120::-;;;;;;;;;;-1:-1:-1;4659:120:2;;;;;:::i;:::-;;:::i;5175:67::-;;;;;;;;;;;;;:::i;674:39::-;;;;;;;;;;;;;:::i;999:85:11:-;;;;;;;;;;;;;:::i;2722:102:4:-;;;;;;;;;;;;;:::i;5869:84:2:-;;;;;;;;;;-1:-1:-1;5869:84:2;;;;;:::i;:::-;;:::i;1300:1889::-;;;;;;:::i;:::-;;:::i;4555:318:4:-;;;;;;;;;;-1:-1:-1;4555:318:4;;;;;:::i;:::-;;:::i;4382:67:2:-;;;;;;;;;;;;;:::i;5882:354:4:-;;;;;;;;;;-1:-1:-1;5882:354:4;;;;;:::i;:::-;;:::i;925:37:2:-;;;;;;;;;;-1:-1:-1;925:37:2;;;;;:::i;:::-;;:::i;719:40::-;;;;;;;;;;;;;:::i;5248:71::-;;;;;;;;;;;;;:::i;629:39::-;;;;;;;;;;;;;:::i;276:37::-;;;;;;;;;;;;;:::i;3808:551::-;;;;;;;;;;-1:-1:-1;3808:551:2;;;;;:::i;:::-;;:::i;4455:108::-;;;;;;;;;;-1:-1:-1;4455:108:2;;;;;:::i;:::-;;:::i;5959:84::-;;;;;;;;;;-1:-1:-1;5959:84:2;;;;;:::i;:::-;;:::i;471:31::-;;;;;;;;;;;;;:::i;4893:146::-;;;;;;;;;;-1:-1:-1;4893:146:2;;;;;:::i;:::-;;:::i;4939:206:4:-;;;;;;;;;;-1:-1:-1;4939:206:4;;;;;:::i;:::-;;:::i;3560:242:2:-;;;;;;;;;;-1:-1:-1;3560:242:2;;;;;:::i;:::-;;:::i;5620:151::-;;;;;;;;;;-1:-1:-1;5620:151:2;;;;;:::i;:::-;;:::i;5045:124::-;;;;;;;;;;-1:-1:-1;5045:124:2;;;;;:::i;:::-;;:::i;1872:223:11:-;;;;;;;;;;-1:-1:-1;1872:223:11;;;;;:::i;:::-;;:::i;968:28:2:-;;;;;;;;;;-1:-1:-1;968:28:2;;;;;:::i;:::-;;:::i;1442:344:4:-;1584:4;-1:-1:-1;;;;;;1623:40:4;;-1:-1:-1;;;1623:40:4;;:104;;-1:-1:-1;;;;;;;1679:48:4;;-1:-1:-1;;;1679:48:4;1623:104;:156;;;;1743:36;1767:11;1743:23;:36::i;:::-;1604:175;;1442:344;;;;:::o;391:34:2:-;;;;:::o;2560:98:4:-;2614:13;2646:5;2639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2560:98;:::o;4193:295::-;4309:7;4353:16;4361:7;4353;:16::i;:::-;4332:107;;;;-1:-1:-1;;;4332:107:4;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4457:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4457:24:4;;4193:295::o;319:28:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;431:34::-;;;;:::o;3731:401:4:-;3811:13;3827:23;3842:7;3827:14;:23::i;:::-;3811:39;;3874:5;-1:-1:-1;;;;;3868:11:4;:2;-1:-1:-1;;;;;3868:11:4;;;3860:57;;;;-1:-1:-1;;;3860:57:4;;;;;;;:::i;:::-;3965:5;-1:-1:-1;;;;;3949:21:4;:12;:10;:12::i;:::-;-1:-1:-1;;;;;3949:21:4;;:62;;;;3974:37;3991:5;3998:12;:10;:12::i;3974:37::-;3928:165;;;;-1:-1:-1;;;3928:165:4;;;;;;;:::i;:::-;4104:21;4113:2;4117:7;4104:8;:21::i;:::-;3731:401;;;:::o;888:31:2:-;;;;:::o;548:34::-;;;;:::o;353:32::-;;;;:::o;3195:86::-;3265:9;;3195:86;:::o;826:55::-;;;;;;;;;;;;;:::o;508:34::-;;;;:::o;588:35::-;;;;:::o;5207:364:4:-;5409:41;5428:12;:10;:12::i;:::-;5442:7;5409:18;:41::i;:::-;5388:137;;;;-1:-1:-1;;;5388:137:4;;;;;;;:::i;:::-;5536:28;5546:4;5552:2;5556:7;5536:9;:28::i;5325:80:2:-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5397:1:2::1;5382:12;:16:::0;5325:80::o;3287:267::-;3346:4;;3362:164;3386:20;:27;3382:31;;3362:164;;;3465:5;-1:-1:-1;;;;;3438:32:2;:20;3459:1;3438:23;;;;;;-1:-1:-1;;;3438:23:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3438:23:2;:32;3434:82;;;3497:4;3490:11;;;;;3434:82;3415:3;;;;:::i;:::-;;;;3362:164;;;-1:-1:-1;3542:5:2;;3287:267;-1:-1:-1;;3287:267:2:o;6049:474::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;6338:7:2::1;6359;:5;:7::i;:::-;-1:-1:-1::0;;;;;6351:21:2::1;6380;6351:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6337:69;;;6424:2;6416:11;;;::::0;::::1;;1281:1:11;6049:474:2:o:0;5637:179:4:-;5770:39;5787:4;5793:2;5797:7;5770:39;;;;;;;;;;;;:16;:39::i;4569:84:2:-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;4631:4:2::1;:15:::0;4569:84::o;792:28::-;;;;;;:::o;4785:102::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;4859:21:2;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;4785:102:::0;:::o;2185:313:4:-;2297:7;2336:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2336:16:4;2383:19;2362:107;;;;-1:-1:-1;;;2362:107:4;;;;;;;:::i;249:21:2:-;;;;;;;:::i;1845:283:4:-;1957:7;-1:-1:-1;;;;;2001:19:4;;1980:108;;;;-1:-1:-1;;;1980:108:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2105:16:4;;;;;:9;:16;;;;;;;1845:283::o;1631:92:11:-;1222:12;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;1695:21:::1;1713:1;1695:9;:21::i;:::-;1631:92::o:0;5488:126:2:-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5559:18:2::1;5566:11;;5559:18;:::i;:::-;5587:20;:11;5601:6:::0;;5587:20:::1;:::i;5411:71::-:0;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5474:1:2::1;5459:12;:16:::0;5411:71::o;4659:120::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;4739:13:2::1;:33:::0;4659:120::o;5175:67::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5234:1:2::1;5219:12;:16:::0;5175:67::o;674:39::-;;;;:::o;999:85:11:-;1071:6;;-1:-1:-1;;;;;1071:6:11;999:85;:::o;2722:102:4:-;2778:13;2810:7;2803:14;;;;;:::i;5869:84:2:-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5931:6:2::1;:15:::0;5869:84::o;1300:1889::-;1360:14;1377:13;:11;:13::i;:::-;1360:30;;1422:1;1408:11;:15;1400:55;;;;-1:-1:-1;;;1400:55:2;;;;;;;:::i;:::-;1497:9;;1473:20;1482:11;1473:6;:20;:::i;:::-;:33;;1465:68;;;;-1:-1:-1;;;1465:68:2;;;;;;;:::i;:::-;1561:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:21:2;:10;-1:-1:-1;;;;;1547:21:2;;1543:1456;;1607:1;1592:12;;:16;1584:51;;;;-1:-1:-1;;;1584:51:2;;;;;;;:::i;:::-;1697:10;1649:24;1676:32;;;:20;:32;;;;;;1727:12;;1743:1;1727:17;1723:1266;;;1772:18;1779:10;1772:6;:18::i;:::-;1764:54;;;;-1:-1:-1;;;1764:54:2;;;;;;;:::i;:::-;1887:11;1878:6;;:20;;;;:::i;:::-;1865:9;:33;;1836:122;;;;-1:-1:-1;;;1836:122:2;;;;;;;:::i;:::-;2020:15;;2005:11;:30;;1976:137;;;;-1:-1:-1;;;1976:137:2;;;;;;;:::i;:::-;2194:20;;2160:30;2179:11;2160:16;:30;:::i;:::-;:54;;2131:153;;;;-1:-1:-1;;;2131:153:2;;;;;;;:::i;:::-;1723:1266;;;2309:12;;2325:1;2309:17;2305:684;;;2354:25;2368:10;2354:13;:25::i;:::-;2346:61;;;;-1:-1:-1;;;2346:61:2;;;;;;;:::i;:::-;2476:11;2467:6;;:20;;;;:::i;:::-;2454:9;:33;;2425:122;;;;-1:-1:-1;;;2425:122:2;;;;;;;:::i;:::-;2609:15;;2594:11;:30;;2565:137;;;;-1:-1:-1;;;2565:137:2;;;;;;;:::i;:::-;2783:20;;2749:30;2768:11;2749:16;:30;:::i;2305:684::-;2940:11;2933:4;;:18;;;;:::i;:::-;2920:9;:31;;2912:62;;;;-1:-1:-1;;;2912:62:2;;;;;;;:::i;:::-;1543:1456;;3026:1;3009:174;3034:11;3029:1;:16;3009:174;;3087:10;3066:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;3114:33:2;;-1:-1:-1;3124:10:2;3136;3145:1;3136:6;:10;:::i;:::-;3114:9;:33::i;:::-;3161:9;:11;;;:9;:11;;;:::i;:::-;;;;;;3047:3;;;;;:::i;:::-;;;;3009:174;;4555:318:4;4697:12;:10;:12::i;:::-;-1:-1:-1;;;;;4685:24:4;:8;-1:-1:-1;;;;;4685:24:4;;;4677:62;;;;-1:-1:-1;;;4677:62:4;;;;;;;:::i;:::-;4795:8;4750:18;:32;4769:12;:10;:12::i;:::-;-1:-1:-1;;;;;4750:32:4;;;;;;;;;;;;;;;;;-1:-1:-1;4750:32:4;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;4750:53:4;;;;;;;;;;;4833:12;:10;:12::i;:::-;-1:-1:-1;;;;;4818:48:4;;4857:8;4818:48;;;;;;:::i;:::-;;;;;;;;4555:318;;:::o;4382:67:2:-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;4427:8:2::1;:15:::0;;-1:-1:-1;;4427:15:2::1;4438:4;4427:15;::::0;;4382:67::o;5882:354:4:-;6064:41;6083:12;:10;:12::i;:::-;6097:7;6064:18;:41::i;:::-;6043:137;;;;-1:-1:-1;;;6043:137:4;;;;;;;:::i;:::-;6190:39;6204:4;6210:2;6214:7;6223:5;6190:13;:39::i;:::-;5882:354;;;;:::o;925:37:2:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;925:37:2;;-1:-1:-1;925:37:2;:::o;719:40::-;;;;:::o;5248:71::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5311:1:2::1;5296:12;:16:::0;5248:71::o;629:39::-;;;;:::o;276:37::-;;;;;;;:::i;3808:551::-;3921:13;3971:16;3979:7;3971;:16::i;:::-;3950:110;;;;-1:-1:-1;;;3950:110:2;;;;;;;:::i;:::-;4075:8;;;;4071:69;;4115:14;4108:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4071:69;4150:28;4181:10;:8;:10::i;:::-;4150:41;;4251:1;4226:14;4220:28;:32;:132;;;;;;;;;;;;;;;;;4295:14;4311:18;:7;:16;:18::i;:::-;4278:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4220:132;4201:151;3808:551;-1:-1:-1;;;3808:551:2:o;4455:108::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;4529:18:2::1;:27:::0;4455:108::o;5959:84::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;6021:6:2::1;:15:::0;5959:84::o;471:31::-;;;;:::o;4893:146::-;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;4999:33:2;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;4939:206:4:-:0;-1:-1:-1;;;;;5103:25:4;;;5076:4;5103:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4939:206::o;3560:242:2:-;3612:4;;3628:146;3652:11;:18;3648:22;;3628:146;;;3713:5;-1:-1:-1;;;;;3695:23:2;:11;3707:1;3695:14;;;;;;-1:-1:-1;;;3695:14:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3695:14:2;:23;3691:73;;;3745:4;3738:11;;;;;3691:73;3672:3;;;;:::i;:::-;;;;3628:146;;5620:151;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5698:27:2::1;5705:20;;5698:27;:::i;:::-;5735:29;:20;5758:6:::0;;5735:29:::1;:::i;5045:124::-:0;1222:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;5130:32:2;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;1872:223:11:-:0;1222:12;:10;:12::i;:::-;-1:-1:-1;;;;;1211:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1211:23:11;;1203:68;;;;-1:-1:-1;;;1203:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;1973:22:11;::::1;1952:107;;;;-1:-1:-1::0;;;1952:107:11::1;;;;;;;:::i;:::-;2069:19;2079:8;2069:9;:19::i;968:28:2:-:0;;;;;;;;;;;;775:199:3;-1:-1:-1;;;;;;927:40:3;;-1:-1:-1;;;927:40:3;775:199;;;:::o;7742:125:4:-;7807:4;7830:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7830:16:4;:30;;;7742:125::o;599:96:1:-;678:10;599:96;:::o;11721:171:4:-;11795:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11795:29:4;-1:-1:-1;;;;;11795:29:4;;;;;;;;:24;;11848:23;11795:24;11848:14;:23::i;:::-;-1:-1:-1;;;;;11839:46:4;;;;;;;;;;;11721:171;;:::o;8025:438::-;8150:4;8191:16;8199:7;8191;:16::i;:::-;8170:107;;;;-1:-1:-1;;;8170:107:4;;;;;;;:::i;:::-;8287:13;8303:23;8318:7;8303:14;:23::i;:::-;8287:39;;8355:5;-1:-1:-1;;;;;8344:16:4;:7;-1:-1:-1;;;;;8344:16:4;;:63;;;;8400:7;-1:-1:-1;;;;;8376:31:4;:20;8388:7;8376:11;:20::i;:::-;-1:-1:-1;;;;;8376:31:4;;8344:63;:111;;;;8423:32;8440:5;8447:7;8423:16;:32::i;:::-;8336:120;8025:438;-1:-1:-1;;;;8025:438:4:o;11016:594::-;11183:4;-1:-1:-1;;;;;11156:31:4;:23;11171:7;11156:14;:23::i;:::-;-1:-1:-1;;;;;11156:31:4;;11135:119;;;;-1:-1:-1;;;11135:119:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;11272:16:4;;11264:65;;;;-1:-1:-1;;;11264:65:4;;;;;;;:::i;:::-;11340:39;11361:4;11367:2;11371:7;11340:20;:39::i;:::-;11441:29;11458:1;11462:7;11441:8;:29::i;:::-;-1:-1:-1;;;;;11481:15:4;;;;;;:9;:15;;;;;:20;;11500:1;;11481:15;:20;;11500:1;;11481:20;:::i;:::-;;;;-1:-1:-1;;;;;;;11511:13:4;;;;;;:9;:13;;;;;:18;;11528:1;;11511:13;:18;;11528:1;;11511:18;:::i;:::-;;;;-1:-1:-1;;11539:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;11539:21:4;-1:-1:-1;;;;;11539:21:4;;;;;;;;;11576:27;;11539:16;;11576:27;;;;;;;11016:594;;;:::o;2101:169:11:-;2175:6;;;-1:-1:-1;;;;;2191:17:11;;;-1:-1:-1;;;;;;2191:17:11;;;;;;;2223:40;;2175:6;;;2191:17;2175:6;;2223:40;;2156:16;;2223:40;2101:169;;:::o;8793:108:4:-;8868:26;8878:2;8882:7;8868:26;;;;;;;;;;;;:9;:26::i;7098:341::-;7249:28;7259:4;7265:2;7269:7;7249:9;:28::i;:::-;7308:48;7331:4;7337:2;7341:7;7350:5;7308:22;:48::i;:::-;7287:145;;;;-1:-1:-1;;;7287:145:4;;;;;;;:::i;1188:106:2:-;1248:13;1280:7;1273:14;;;;;:::i;287:703:12:-;343:13;560:10;556:51;;-1:-1:-1;586:10:12;;;;;;;;;;;;-1:-1:-1;;;586:10:12;;;;;;556:51;631:5;616:12;670:75;677:9;;670:75;;702:8;;;;:::i;:::-;;-1:-1:-1;724:10:12;;-1:-1:-1;732:2:12;724:10;;:::i;:::-;;;670:75;;;754:19;786:6;776:17;;;;;;-1:-1:-1;;;776:17:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;776:17:12;;754:39;;803:150;810:10;;803:150;;836:11;846:1;836:11;;:::i;:::-;;-1:-1:-1;904:10:12;912:2;904:5;:10;:::i;:::-;891:24;;:2;:24;:::i;:::-;878:39;;861:6;868;861:14;;;;;;-1:-1:-1;;;861:14:12;;;;;;;;;;;;:56;-1:-1:-1;;;;;861:56:12;;;;;;;;-1:-1:-1;931:11:12;940:2;931:11;;:::i;:::-;;;803:150;;9122:311:4;9247:18;9253:2;9257:7;9247:5;:18::i;:::-;9296:54;9327:1;9331:2;9335:7;9344:5;9296:22;:54::i;:::-;9275:151;;;;-1:-1:-1;;;9275:151:4;;;;;;;:::i;12445:950::-;12595:4;12615:15;:2;-1:-1:-1;;;;;12615:13:4;;:15::i;:::-;12611:778;;;12682:2;-1:-1:-1;;;;;12666:36:4;;12724:12;:10;:12::i;:::-;12758:4;12784:7;12813:5;12666:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12666:170:4;;;;;;;;-1:-1:-1;;12666:170:4;;;;;;;;;;;;:::i;:::-;;;12646:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13015:13:4;;13011:312;;13057:106;;-1:-1:-1;;;13057:106:4;;;;;;;:::i;13011:312::-;13275:6;13269:13;13260:6;13256:2;13252:15;13245:38;12646:691;-1:-1:-1;;;;;;12898:51:4;-1:-1:-1;;;12898:51:4;;-1:-1:-1;12891:58:4;;12611:778;-1:-1:-1;13374:4:4;12445:950;;;;;;:::o;9755:372::-;-1:-1:-1;;;;;9834:16:4;;9826:61;;;;-1:-1:-1;;;9826:61:4;;;;;;;:::i;:::-;9906:16;9914:7;9906;:16::i;:::-;9905:17;9897:58;;;;-1:-1:-1;;;9897:58:4;;;;;;;:::i;:::-;9966:45;9995:1;9999:2;10003:7;9966:20;:45::i;:::-;-1:-1:-1;;;;;10022:13:4;;;;;;:9;:13;;;;;:18;;10039:1;;10022:13;:18;;10039:1;;10022:18;:::i;:::-;;;;-1:-1:-1;;10050:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10050:21:4;-1:-1:-1;;;;;10050:21:4;;;;;;;;10087:33;;10050:16;;;10087:33;;10050:16;;10087:33;9755:372;;:::o;782:377:0:-;1098:20;1144:8;;;782:377::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:607:13;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:13;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:13;473:16;;;470:25;-1:-1:-1;467:2:13;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:13;;735:42;;725:2;;791:1;788;781:12;806:198;;918:2;906:9;897:7;893:23;889:32;886:2;;;939:6;931;924:22;886:2;967:31;988:9;967:31;:::i;1009:274::-;;;1138:2;1126:9;1117:7;1113:23;1109:32;1106:2;;;1159:6;1151;1144:22;1106:2;1187:31;1208:9;1187:31;:::i;:::-;1177:41;;1237:40;1273:2;1262:9;1258:18;1237:40;:::i;:::-;1227:50;;1096:187;;;;;:::o;1288:342::-;;;;1434:2;1422:9;1413:7;1409:23;1405:32;1402:2;;;1455:6;1447;1440:22;1402:2;1483:31;1504:9;1483:31;:::i;:::-;1473:41;;1533:40;1569:2;1558:9;1554:18;1533:40;:::i;:::-;1523:50;;1620:2;1609:9;1605:18;1592:32;1582:42;;1392:238;;;;;:::o;1635:702::-;;;;;1807:3;1795:9;1786:7;1782:23;1778:33;1775:2;;;1829:6;1821;1814:22;1775:2;1857:31;1878:9;1857:31;:::i;:::-;1847:41;;1907:40;1943:2;1932:9;1928:18;1907:40;:::i;:::-;1897:50;;1994:2;1983:9;1979:18;1966:32;1956:42;;2049:2;2038:9;2034:18;2021:32;2076:18;2068:6;2065:30;2062:2;;;2113:6;2105;2098:22;2062:2;2141:22;;2194:4;2186:13;;2182:27;-1:-1:-1;2172:2:13;;2228:6;2220;2213:22;2172:2;2256:75;2323:7;2318:2;2305:16;2300:2;2296;2292:11;2256:75;:::i;:::-;2246:85;;;1765:572;;;;;;;:::o;2342:369::-;;;2468:2;2456:9;2447:7;2443:23;2439:32;2436:2;;;2489:6;2481;2474:22;2436:2;2517:31;2538:9;2517:31;:::i;:::-;2507:41;;2598:2;2587:9;2583:18;2570:32;2645:5;2638:13;2631:21;2624:5;2621:32;2611:2;;2672:6;2664;2657:22;2611:2;2700:5;2690:15;;;2426:285;;;;;:::o;2716:266::-;;;2845:2;2833:9;2824:7;2820:23;2816:32;2813:2;;;2866:6;2858;2851:22;2813:2;2894:31;2915:9;2894:31;:::i;:::-;2884:41;2972:2;2957:18;;;;2944:32;;-1:-1:-1;;;2803:179:13:o;2987:666::-;;;3134:2;3122:9;3113:7;3109:23;3105:32;3102:2;;;3155:6;3147;3140:22;3102:2;3200:9;3187:23;3229:18;3270:2;3262:6;3259:14;3256:2;;;3291:6;3283;3276:22;3256:2;3334:6;3323:9;3319:22;3309:32;;3379:7;3372:4;3368:2;3364:13;3360:27;3350:2;;3406:6;3398;3391:22;3350:2;3451;3438:16;3477:2;3469:6;3466:14;3463:2;;;3498:6;3490;3483:22;3463:2;3557:7;3552:2;3546;3538:6;3534:15;3530:2;3526:24;3522:33;3519:46;3516:2;;;3583:6;3575;3568:22;3516:2;3619;3611:11;;;;;3641:6;;-1:-1:-1;3092:561:13;;-1:-1:-1;;;;3092:561:13:o;3658:257::-;;3769:2;3757:9;3748:7;3744:23;3740:32;3737:2;;;3790:6;3782;3775:22;3737:2;3834:9;3821:23;3853:32;3879:5;3853:32;:::i;3920:261::-;;4042:2;4030:9;4021:7;4017:23;4013:32;4010:2;;;4063:6;4055;4048:22;4010:2;4100:9;4094:16;4119:32;4145:5;4119:32;:::i;4186:482::-;;4308:2;4296:9;4287:7;4283:23;4279:32;4276:2;;;4329:6;4321;4314:22;4276:2;4374:9;4361:23;4407:18;4399:6;4396:30;4393:2;;;4444:6;4436;4429:22;4393:2;4472:22;;4525:4;4517:13;;4513:27;-1:-1:-1;4503:2:13;;4559:6;4551;4544:22;4503:2;4587:75;4654:7;4649:2;4636:16;4631:2;4627;4623:11;4587:75;:::i;4673:190::-;;4785:2;4773:9;4764:7;4760:23;4756:32;4753:2;;;4806:6;4798;4791:22;4753:2;-1:-1:-1;4834:23:13;;4743:120;-1:-1:-1;4743:120:13:o;4868:259::-;;4949:5;4943:12;4976:6;4971:3;4964:19;4992:63;5048:6;5041:4;5036:3;5032:14;5025:4;5018:5;5014:16;4992:63;:::i;:::-;5109:2;5088:15;-1:-1:-1;;5084:29:13;5075:39;;;;5116:4;5071:50;;4919:208;-1:-1:-1;;4919:208:13:o;5132:470::-;;5349:6;5343:13;5365:53;5411:6;5406:3;5399:4;5391:6;5387:17;5365:53;:::i;:::-;5481:13;;5440:16;;;;5503:57;5481:13;5440:16;5537:4;5525:17;;5503:57;:::i;:::-;5576:20;;5319:283;-1:-1:-1;;;;5319:283:13:o;5607:205::-;5807:3;5798:14::o;5817:203::-;-1:-1:-1;;;;;5981:32:13;;;;5963:51;;5951:2;5936:18;;5918:102::o;6025:490::-;-1:-1:-1;;;;;6294:15:13;;;6276:34;;6346:15;;6341:2;6326:18;;6319:43;6393:2;6378:18;;6371:34;;;6441:3;6436:2;6421:18;;6414:31;;;6025:490;;6462:47;;6489:19;;6481:6;6462:47;:::i;:::-;6454:55;6228:287;-1:-1:-1;;;;;;6228:287:13:o;6520:187::-;6685:14;;6678:22;6660:41;;6648:2;6633:18;;6615:92::o;6712:221::-;;6861:2;6850:9;6843:21;6881:46;6923:2;6912:9;6908:18;6900:6;6881:46;:::i;6938:414::-;7140:2;7122:21;;;7179:2;7159:18;;;7152:30;7218:34;7213:2;7198:18;;7191:62;-1:-1:-1;;;7284:2:13;7269:18;;7262:48;7342:3;7327:19;;7112:240::o;7357:402::-;7559:2;7541:21;;;7598:2;7578:18;;;7571:30;7637:34;7632:2;7617:18;;7610:62;-1:-1:-1;;;7703:2:13;7688:18;;7681:36;7749:3;7734:19;;7531:228::o;7764:352::-;7966:2;7948:21;;;8005:2;7985:18;;;7978:30;8044;8039:2;8024:18;;8017:58;8107:2;8092:18;;7938:178::o;8121:352::-;8323:2;8305:21;;;8362:2;8342:18;;;8335:30;8401;8396:2;8381:18;;8374:58;8464:2;8449:18;;8295:178::o;8478:400::-;8680:2;8662:21;;;8719:2;8699:18;;;8692:30;8758:34;8753:2;8738:18;;8731:62;-1:-1:-1;;;8824:2:13;8809:18;;8802:34;8868:3;8853:19;;8652:226::o;8883:349::-;9085:2;9067:21;;;9124:2;9104:18;;;9097:30;9163:27;9158:2;9143:18;;9136:55;9223:2;9208:18;;9057:175::o;9237:408::-;9439:2;9421:21;;;9478:2;9458:18;;;9451:30;9517:34;9512:2;9497:18;;9490:62;-1:-1:-1;;;9583:2:13;9568:18;;9561:42;9635:3;9620:19;;9411:234::o;9650:420::-;9852:2;9834:21;;;9891:2;9871:18;;;9864:30;9930:34;9925:2;9910:18;;9903:62;10001:26;9996:2;9981:18;;9974:54;10060:3;10045:19;;9824:246::o;10075:406::-;10277:2;10259:21;;;10316:2;10296:18;;;10289:30;10355:34;10350:2;10335:18;;10328:62;-1:-1:-1;;;10421:2:13;10406:18;;10399:40;10471:3;10456:19;;10249:232::o;10486:405::-;10688:2;10670:21;;;10727:2;10707:18;;;10700:30;10766:34;10761:2;10746:18;;10739:62;-1:-1:-1;;;10832:2:13;10817:18;;10810:39;10881:3;10866:19;;10660:231::o;10896:346::-;11098:2;11080:21;;;11137:2;11117:18;;;11110:30;-1:-1:-1;;;11171:2:13;11156:18;;11149:52;11233:2;11218:18;;11070:172::o;11247:400::-;11449:2;11431:21;;;11488:2;11468:18;;;11461:30;11527:34;11522:2;11507:18;;11500:62;-1:-1:-1;;;11593:2:13;11578:18;;11571:34;11637:3;11622:19;;11421:226::o;11652:356::-;11854:2;11836:21;;;11873:18;;;11866:30;11932:34;11927:2;11912:18;;11905:62;11999:2;11984:18;;11826:182::o;12013:408::-;12215:2;12197:21;;;12254:2;12234:18;;;12227:30;12293:34;12288:2;12273:18;;12266:62;-1:-1:-1;;;12359:2:13;12344:18;;12337:42;12411:3;12396:19;;12187:234::o;12426:356::-;12628:2;12610:21;;;12647:18;;;12640:30;12706:34;12701:2;12686:18;;12679:62;12773:2;12758:18;;12600:182::o;12787:346::-;12989:2;12971:21;;;13028:2;13008:18;;;13001:30;-1:-1:-1;;;13062:2:13;13047:18;;13040:52;13124:2;13109:18;;12961:172::o;13138:405::-;13340:2;13322:21;;;13379:2;13359:18;;;13352:30;13418:34;13413:2;13398:18;;13391:62;-1:-1:-1;;;13484:2:13;13469:18;;13462:39;13533:3;13518:19;;13312:231::o;13548:411::-;13750:2;13732:21;;;13789:2;13769:18;;;13762:30;13828:34;13823:2;13808:18;;13801:62;-1:-1:-1;;;13894:2:13;13879:18;;13872:45;13949:3;13934:19;;13722:237::o;13964:397::-;14166:2;14148:21;;;14205:2;14185:18;;;14178:30;14244:34;14239:2;14224:18;;14217:62;-1:-1:-1;;;14310:2:13;14295:18;;14288:31;14351:3;14336:19;;14138:223::o;14366:342::-;14568:2;14550:21;;;14607:2;14587:18;;;14580:30;-1:-1:-1;;;14641:2:13;14626:18;;14619:48;14699:2;14684:18;;14540:168::o;14713:413::-;14915:2;14897:21;;;14954:2;14934:18;;;14927:30;14993:34;14988:2;14973:18;;14966:62;-1:-1:-1;;;15059:2:13;15044:18;;15037:47;15116:3;15101:19;;14887:239::o;15131:347::-;15333:2;15315:21;;;15372:2;15352:18;;;15345:30;15411:25;15406:2;15391:18;;15384:53;15469:2;15454:18;;15305:173::o;15483:351::-;15685:2;15667:21;;;15724:2;15704:18;;;15697:30;15763:29;15758:2;15743:18;;15736:57;15825:2;15810:18;;15657:177::o;15839:::-;15985:25;;;15973:2;15958:18;;15940:76::o;16021:128::-;;16092:1;16088:6;16085:1;16082:13;16079:2;;;16098:18;;:::i;:::-;-1:-1:-1;16134:9:13;;16069:80::o;16154:120::-;;16220:1;16210:2;;16225:18;;:::i;:::-;-1:-1:-1;16259:9:13;;16200:74::o;16279:168::-;;16385:1;16381;16377:6;16373:14;16370:1;16367:21;16362:1;16355:9;16348:17;16344:45;16341:2;;;16392:18;;:::i;:::-;-1:-1:-1;16432:9:13;;16331:116::o;16452:125::-;;16520:1;16517;16514:8;16511:2;;;16525:18;;:::i;:::-;-1:-1:-1;16562:9:13;;16501:76::o;16582:258::-;16654:1;16664:113;16678:6;16675:1;16672:13;16664:113;;;16754:11;;;16748:18;16735:11;;;16728:39;16700:2;16693:10;16664:113;;;16795:6;16792:1;16789:13;16786:2;;;-1:-1:-1;;16830:1:13;16812:16;;16805:27;16635:205::o;16845:380::-;16930:1;16920:12;;16977:1;16967:12;;;16988:2;;17042:4;17034:6;17030:17;17020:27;;16988:2;17095;17087:6;17084:14;17064:18;17061:38;17058:2;;;17141:10;17136:3;17132:20;17129:1;17122:31;17176:4;17173:1;17166:15;17204:4;17201:1;17194:15;17058:2;;16900:325;;;:::o;17230:135::-;;-1:-1:-1;;17290:17:13;;17287:2;;;17310:18;;:::i;:::-;-1:-1:-1;17357:1:13;17346:13;;17277:88::o;17370:112::-;;17428:1;17418:2;;17433:18;;:::i;:::-;-1:-1:-1;17467:9:13;;17408:74::o;17487:127::-;17548:10;17543:3;17539:20;17536:1;17529:31;17579:4;17576:1;17569:15;17603:4;17600:1;17593:15;17619:127;17680:10;17675:3;17671:20;17668:1;17661:31;17711:4;17708:1;17701:15;17735:4;17732:1;17725:15;17751:127;17812:10;17807:3;17803:20;17800:1;17793:31;17843:4;17840:1;17833:15;17867:4;17864:1;17857:15;17883:133;-1:-1:-1;;;;;;17959:32:13;;17949:43;;17939:2;;18006:1;18003;17996:12

Swarm Source

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