ETH Price: $2,412.86 (-2.79%)
 

Overview

Max Total Supply

864 RK

Holders

296

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
0xeazy.eth
Balance
4 RK
0xa9b73541bc17fc04b9154c5d47383aec2fe759db
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RichKidz

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 11 of 12: RichKidz.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC721.sol";

contract RichKidz is ERC721 {
    event Mint(address indexed from, uint256 indexed tokenId);

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    modifier onlyCollaborator() {
        bool isCollaborator = false;
        for (uint256 i; i < collaborators.length; i++) {
            if (collaborators[i].addr == msg.sender) {
                isCollaborator = true;

                break;
            }
        }

        require(
            owner() == _msgSender() || isCollaborator,
            "Ownable: caller is not the owner nor a collaborator"
        );

        _;
    }

    modifier claimStarted() {
        require(
            startClaimDate != 0 && startClaimDate <= block.timestamp,
            "You are too early"
        );

        _;
    }

    struct Collaborators {
        address addr;
        uint256 cut;
    }

    uint256 private startClaimDate = 1629475200;
    uint256 private mintPrice = 30000000000000000;
    uint256 private totalTokens = 10000;
    uint256 private totalMintedTokens = 0;
    uint256 private maxKidzPerWallet = 200;
    uint256 private maxKidzPerTransaction = 10;
    uint128 private basisPoints = 10000;
    string private baseURI =
        "https://richkidztest.s3.us-west-1.amazonaws.com/";
    bool public premintingComplete = false;
    uint256 public giveawayCount = 269;

    mapping(address => uint256) private claimedKidzPerWallet;

    uint16[] availableKidz;
    Collaborators[] private collaborators;

    constructor() ERC721("RichKidz", "RK") {}

    // ONLY OWNER

    /**
     * Sets the collaborators of the project with their cuts
     */
    function addCollaborators(Collaborators[] memory _collaborators)
        external
        onlyOwner
    {
        require(collaborators.length == 0, "Collaborators were already set");

        uint128 totalCut;
        for (uint256 i; i < _collaborators.length; i++) {
            collaborators.push(_collaborators[i]);
            totalCut += uint128(_collaborators[i].cut);
        }

        require(totalCut == basisPoints, "Total cut does not add to 100%");
    }

    // ONLY COLLABORATORS

    /**
     * @dev Allows to withdraw the Ether in the contract and split it among the collaborators
     */
    function withdraw() external onlyCollaborator {
        uint256 totalBalance = address(this).balance;

        for (uint256 i; i < collaborators.length; i++) {
            payable(collaborators[i].addr).transfer(
                mulScale(totalBalance, collaborators[i].cut, basisPoints)
            );
        }
    }

    /**
     * @dev Sets the base URI for the API that provides the NFT data.
     */
    function setBaseTokenURI(string memory _uri) external onlyCollaborator {
        baseURI = _uri;
    }

    /**
     * @dev Sets the claim price for each kid
     */
    function setMintPrice(uint256 _mintPrice) external onlyCollaborator {
        mintPrice = _mintPrice;
    }

    /**
     * @dev Populates the available kidz
     */
    function addAvailableKidz(uint16 from, uint16 to)
        external
        onlyCollaborator
    {
        for (uint16 i = from; i <= to; i++) {
            availableKidz.push(i);
        }
    }

    /**
     * @dev Removes a chosen kid from the available list
     */
    function removeKidzFromAvailableKidz(uint16 tokenId)
        external
        onlyCollaborator
    {
        for (uint16 i; i <= availableKidz.length; i++) {
            if (availableKidz[i] != tokenId) {
                continue;
            }

            availableKidz[i] = availableKidz[availableKidz.length - 1];
            availableKidz.pop();

            break;
        }
    }

    /**
     * @dev Allow devs to hand pick some kidz before the available kidz list is created
     */
    function allocateTokens(uint256[] memory tokenIds)
        external
        onlyCollaborator
    {
        require(availableKidz.length == 0, "Available kidz are already set");

        _batchMint(msg.sender, tokenIds);

        totalMintedTokens += tokenIds.length;
    }

    /**
     * @dev Sets the date that users can start claiming kidz
     */
    function setStartClaimDate(uint256 _startClaimDate)
        external
        onlyCollaborator
    {
        startClaimDate = _startClaimDate;
    }


    /**
     * @dev Checks if an kid is in the available list
     */
    function isKidAvailable(uint16 tokenId)
        external
        view
        onlyCollaborator
        returns (bool)
    {
        for (uint16 i; i < availableKidz.length; i++) {
            if (availableKidz[i] == tokenId) {
                return true;
            }
        }

        return false;
    }


    /**
     * @dev Give random kidz to the provided address
     */
    function reserveKidz(address _address)
        external
        onlyCollaborator
    {
        require(availableKidz.length >= giveawayCount, "No kidz left to be claimed");
        require(!premintingComplete,"Kidz were already reserved for giveaways!");
        totalMintedTokens += giveawayCount;

        uint256[] memory tokenIds = new uint256[](giveawayCount);

        for (uint256 i; i < giveawayCount; i++) {
            tokenIds[i] = getKidToBeClaimed();
        }

        _batchMint(_address, tokenIds);
        premintingComplete = true;
    }

    // END ONLY COLLABORATORS

    /**
     * @dev Claim a single kid
     */
    function claimKid() external payable callerIsUser claimStarted {
        require(msg.value >= mintPrice, "Not enough Ether to claim an kid");

        require(
            claimedKidzPerWallet[msg.sender] < maxKidzPerWallet,
            "You cannot claim more kidz"
        );

        require(availableKidz.length > 0, "No kidz left to be claimed");

        claimedKidzPerWallet[msg.sender]++;
        totalMintedTokens++;

        _mint(msg.sender, getKidToBeClaimed());
    }

    /**
     * @dev Claim up to 10 kidz at once
     */
    function claimKidz(uint256 amount)
        external
        payable
        callerIsUser
        claimStarted
    {
        require(
            msg.value >= mintPrice * amount,
            "Not enough Ether to claim the kidz"
        );
        
        require(amount <= maxKidzPerTransaction, "You can only claim 10 Kidz per transactions");

        require(
            claimedKidzPerWallet[msg.sender] + amount <= maxKidzPerWallet,
            "You cannot claim more kidz"
        );

        require(availableKidz.length >= amount, "No kidz left to be claimed");

        uint256[] memory tokenIds = new uint256[](amount);

        claimedKidzPerWallet[msg.sender] += amount;
        totalMintedTokens += amount;

        for (uint256 i; i < amount; i++) {
            tokenIds[i] = getKidToBeClaimed();
        }

        _batchMint(msg.sender, tokenIds);
    }


    /**
     * @dev Returns the tokenId by index
     */
    function tokenByIndex(uint256 tokenId) external view returns (uint256) {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );

        return tokenId;
    }

    /**
     * @dev Returns the base URI for the tokens API.
     */
    function baseTokenURI() external view returns (string memory) {
        return baseURI;
    }

    /**
     * @dev Returns how many kidz are still available to be claimed
     */
    function getAvailableKidz() external view returns (uint256) {
        return availableKidz.length;
    }

    /**
     * @dev Returns the claim price
     */
    function getmintPrice() external view returns (uint256) {
        return mintPrice;
    }

    /**
     * @dev Returns the total supply
     */
    function totalSupply() external view virtual returns (uint256) {
        return totalMintedTokens;
    }

    // Private and Internal functions

    /**
     * @dev Returns a random available kid to be claimed
     */
    function getKidToBeClaimed() private returns (uint256) {
        uint256 random = _getRandomNumber(availableKidz.length);
        uint256 tokenId = uint256(availableKidz[random]);

        availableKidz[random] = availableKidz[availableKidz.length - 1];
        availableKidz.pop();

        return tokenId;
    }

    /**
     * @dev Generates a pseudo-random number.
     */
    function _getRandomNumber(uint256 _upper) private view returns (uint256) {
        uint256 random = uint256(
            keccak256(
                abi.encodePacked(
                    availableKidz.length,
                    blockhash(block.number - 1),
                    block.coinbase,
                    block.difficulty,
                    msg.sender
                )
            )
        );

        return random % _upper;
    }

    /**
     * @dev See {ERC721}.
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function mulScale(
        uint256 x,
        uint256 y,
        uint128 scale
    ) internal pure returns (uint256) {
        uint256 a = x / scale;
        uint256 b = x % scale;
        uint256 c = y / scale;
        uint256 d = y % scale;

        return a * c * scale + a * d + b * c + (b * d) / scale;
    }
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 3 of 12: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 4 of 12: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Ownable.sol";
import "./Ownable.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, Ownable {
    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) internal _owners;

    // Mapping owner address to token count
    mapping(address => uint256) internal _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}. 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 ||
                ERC721.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 ||
            ERC721.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);
    }

    function _batchMint(address to, uint256[] memory tokenIds)
        internal
        virtual
    {
        require(to != address(0), "ERC721: mint to the zero address");
        _balances[to] += tokenIds.length;

        for (uint256 i; i < tokenIds.length; i++) {
            require(!_exists(tokenIds[i]), "ERC721: token already minted");

            _beforeTokenTransfer(address(0), to, tokenIds[i]);

            _owners[tokenIds[i]] = to;

            emit Transfer(address(0), to, tokenIds[i]);
        }
    }

    /**
     * @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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` 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 {}
}

File 5 of 12: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 6 of 12: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.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 7 of 12: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 8 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 9 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 10 of 12: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[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":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","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":"uint16","name":"from","type":"uint16"},{"internalType":"uint16","name":"to","type":"uint16"}],"name":"addAvailableKidz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"cut","type":"uint256"}],"internalType":"struct RichKidz.Collaborators[]","name":"_collaborators","type":"tuple[]"}],"name":"addCollaborators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"allocateTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimKid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimKidz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableKidz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint16","name":"tokenId","type":"uint16"}],"name":"isKidAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintingComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"removeKidzFromAvailableKidz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"reserveKidz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startClaimDate","type":"uint256"}],"name":"setStartClaimDate","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":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

63611fd180600755666a94d74f43000060085561271060098190556000600a90815560c8600b55600c55600d80546001600160801b031916909117905560e060405260306080818152906200359960a03980516200006691600e9160209091019062000155565b50600f805460ff1916905561010d6010553480156200008457600080fd5b50604051806040016040528060088152602001672934b1b425b4b23d60c11b81525060405180604001604052806002815260200161524b60f01b8152506000620000d36200015160201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200013290600190602085019062000155565b5080516200014890600290602084019062000155565b50505062000238565b3390565b8280546200016390620001fb565b90600052602060002090601f016020900481019282620001875760008555620001d2565b82601f10620001a257805160ff1916838001178555620001d2565b82800160010185558215620001d2579182015b82811115620001d2578251825591602001919060010190620001b5565b50620001e0929150620001e4565b5090565b5b80821115620001e05760008155600101620001e5565b600181811c908216806200021057607f821691505b602082108114156200023257634e487b7160e01b600052602260045260246000fd5b50919050565b61335180620002486000396000f3fe6080604052600436106102045760003560e01c80636352211e11610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461058a578063e9be0f3f146105d3578063f2fde38b146105e9578063f4a0a52814610609578063fc14ba491461062957600080fd5b8063c87b56dd14610522578063c9783c0214610542578063d547cfb714610562578063e91a92261461057757600080fd5b80638d482354116100e75780638d4823541461049a5780638da5cb5b146104af57806395d89b41146104cd578063a22cb465146104e2578063b88d4fde1461050257600080fd5b80636352211e1461043057806370a0823114610450578063715018a61461047057806384fd33711461048557600080fd5b806323ab18f11161019b5780633ccfd60b1161016a5780633ccfd60b146103b357806342842e0e146103c85780634f6ccce7146103e8578063502006ff1461040857806360251cd11461042857600080fd5b806323ab18f11461033357806323b872dd1461035357806328e27bf51461037357806330176e131461039357600080fd5b80630955f63c116101d75780630955f63c146102ba578063095ea7b3146102da57806318160ddd146102fa5780632344e9181461031957600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc1461026057806308b6d26714610298575b600080fd5b34801561021557600080fd5b50610229610224366004612dda565b610649565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361069b565b6040516102359190612f4b565b34801561026c57600080fd5b5061028061027b366004612e9b565b61072d565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612e58565b6107ba565b005b3480156102c657600080fd5b506102b86102d5366004612c93565b6109d4565b3480156102e657600080fd5b506102b86102f5366004612c6a565b610b75565b34801561030657600080fd5b50600a545b604051908152602001610235565b34801561032557600080fd5b50600f546102299060ff1681565b34801561033f57600080fd5b506102b861034e366004612e9b565b610c86565b34801561035f57600080fd5b506102b861036e366004612b7c565b610d33565b34801561037f57600080fd5b506102b861038e366004612e72565b610d64565b34801561039f57600080fd5b506102b86103ae366004612e12565b610e8c565b3480156103bf57600080fd5b506102b8610f46565b3480156103d457600080fd5b506102b86103e3366004612b7c565b6110d2565b3480156103f457600080fd5b5061030b610403366004612e9b565b6110ed565b34801561041457600080fd5b506102b8610423366004612b30565b611118565b6102b8611328565b34801561043c57600080fd5b5061028061044b366004612e9b565b6114e3565b34801561045c57600080fd5b5061030b61046b366004612b30565b61155a565b34801561047c57600080fd5b506102b86115e1565b34801561049157600080fd5b5060125461030b565b3480156104a657600080fd5b5060085461030b565b3480156104bb57600080fd5b506000546001600160a01b0316610280565b3480156104d957600080fd5b50610253611655565b3480156104ee57600080fd5b506102b86104fd366004612c30565b611664565b34801561050e57600080fd5b506102b861051d366004612bb7565b611729565b34801561052e57600080fd5b5061025361053d366004612e9b565b61175b565b34801561054e57600080fd5b5061022961055d366004612e58565b611826565b34801561056e57600080fd5b50610253611959565b6102b8610585366004612e9b565b611968565b34801561059657600080fd5b506102296105a5366004612b4a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105df57600080fd5b5061030b60105481565b3480156105f557600080fd5b506102b8610604366004612b30565b611c57565b34801561061557600080fd5b506102b8610624366004612e9b565b611d41565b34801561063557600080fd5b506102b8610644366004612d53565b611dee565b60006001600160e01b031982166380ac58cd60e01b148061067a57506001600160e01b03198216635b5e139f60e01b145b8061069557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546106aa9061323a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d69061323a565b80156107235780601f106106f857610100808354040283529160200191610723565b820191906000526020600020905b81548152906001019060200180831161070657829003601f168201915b5050505050905090565b600061073882611f0b565b61079e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000805b60135481101561082e57336001600160a01b0316601382815481106107f357634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561081c576001915061082e565b8061082681613291565b9150506107be565b506000546001600160a01b03163314806108455750805b6108615760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216116109cf578261ffff1660128261ffff168154811061089b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16146108c7576109bd565b601280546108d7906001906131f7565b815481106108f557634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660128261ffff168154811061093e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601280548061098c57634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055505050565b806109c78161326f565b915050610864565b505050565b6000546001600160a01b031633146109fe5760405162461bcd60e51b815260040161079590612ffc565b60135415610a4e5760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c61626f7261746f7273207765726520616c72656164792073657400006044820152606401610795565b6000805b8251811015610b13576013838281518110610a7d57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101558251839082908110610ae857634e487b7160e01b600052603260045260246000fd5b60200260200101516020015182610aff919061318a565b915080610b0b81613291565b915050610a52565b50600d546001600160801b03828116911614610b715760405162461bcd60e51b815260206004820152601e60248201527f546f74616c2063757420646f6573206e6f742061646420746f203130302500006044820152606401610795565b5050565b6000610b80826114e3565b9050806001600160a01b0316836001600160a01b03161415610bee5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610795565b336001600160a01b0382161480610c0a5750610c0a81336105a5565b610c7c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610795565b6109cf8383611f28565b6000805b601354811015610cfa57336001600160a01b031660138281548110610cbf57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610ce85760019150610cfa565b80610cf281613291565b915050610c8a565b506000546001600160a01b0316331480610d115750805b610d2d5760405162461bcd60e51b815260040161079590613031565b50600755565b610d3d3382611f96565b610d595760405162461bcd60e51b815260040161079590613084565b6109cf83838361203b565b6000805b601354811015610dd857336001600160a01b031660138281548110610d9d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610dc65760019150610dd8565b80610dd081613291565b915050610d68565b506000546001600160a01b0316331480610def5750805b610e0b5760405162461bcd60e51b815260040161079590613031565b825b8261ffff168161ffff1611610e8657601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344460108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580610e7e8161326f565b915050610e0d565b50505050565b6000805b601354811015610f0057336001600160a01b031660138281548110610ec557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610eee5760019150610f00565b80610ef881613291565b915050610e90565b506000546001600160a01b0316331480610f175750805b610f335760405162461bcd60e51b815260040161079590613031565b81516109cf90600e906020850190612a1a565b6000805b601354811015610fba57336001600160a01b031660138281548110610f7f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610fa85760019150610fba565b80610fb281613291565b915050610f4a565b506000546001600160a01b0316331480610fd15750805b610fed5760405162461bcd60e51b815260040161079590613031565b4760005b6013548110156109cf576013818154811061101c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc611097846013858154811061107257634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600d546001600160801b03166121db565b6040518115909202916000818181858888f193505050501580156110bf573d6000803e3d6000fd5b50806110ca81613291565b915050610ff1565b6109cf83838360405180602001604052806000815250611729565b60006110f882611f0b565b6111145760405162461bcd60e51b815260040161079590612fb0565b5090565b6000805b60135481101561118c57336001600160a01b03166013828154811061115157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561117a576001915061118c565b8061118481613291565b91505061111c565b506000546001600160a01b03163314806111a35750805b6111bf5760405162461bcd60e51b815260040161079590613031565b60105460125410156111e35760405162461bcd60e51b8152600401610795906130d5565b600f5460ff16156112485760405162461bcd60e51b815260206004820152602960248201527f4b69647a207765726520616c726561647920726573657276656420666f72206760448201526869766561776179732160b81b6064820152608401610795565b601054600a600082825461125c91906131ac565b909155505060105460009067ffffffffffffffff81111561128d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112b6578160200160208202803683370190505b50905060005b60105481101561130b576112ce6122b2565b8282815181106112ee57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061130381613291565b9150506112bc565b506113168382612409565b5050600f805460ff1916600117905550565b3233146113775760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b6007541580159061138a57504260075411155b6113ca5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b60085434101561141c5760405162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20616e206b69646044820152606401610795565b600b54336000908152601160205260409020541061147c5760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b60125461149b5760405162461bcd60e51b8152600401610795906130d5565b3360009081526011602052604081208054916114b683613291565b9091555050600a80549060006114cb83613291565b91905055506114e1336114dc6122b2565b612618565b565b6000818152600360205260408120546001600160a01b0316806106955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610795565b60006001600160a01b0382166115c55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610795565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331461160b5760405162461bcd60e51b815260040161079590612ffc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600280546106aa9061323a565b6001600160a01b0382163314156116bd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610795565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117333383611f96565b61174f5760405162461bcd60e51b815260040161079590613084565b610e868484848461274b565b606061176682611f0b565b6117ca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610795565b60006117d4611959565b905060008151116117f4576040518060200160405280600081525061181f565b806117fe8461277e565b60405160200161180f929190612edf565b6040516020818303038152906040525b9392505050565b600080805b60135481101561189b57336001600160a01b03166013828154811061186057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611889576001915061189b565b8061189381613291565b91505061182b565b506000546001600160a01b03163314806118b25750805b6118ce5760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216101561194d578361ffff1660128261ffff168154811061190957634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16141561193b576001925050611953565b806119458161326f565b9150506118d1565b50600091505b50919050565b6060600e80546106aa9061323a565b3233146119b75760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b600754158015906119ca57504260075411155b611a0a5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b80600854611a1891906131d8565b341015611a725760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20746865206b69604482015261323d60f11b6064820152608401610795565b600c54811115611ad85760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e206f6e6c7920636c61696d203130204b69647a20706572207460448201526a72616e73616374696f6e7360a81b6064820152608401610795565b600b5433600090815260116020526040902054611af69083906131ac565b1115611b445760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b601254811115611b665760405162461bcd60e51b8152600401610795906130d5565b60008167ffffffffffffffff811115611b8f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bb8578160200160208202803683370190505b5033600090815260116020526040812080549293508492909190611bdd9084906131ac565b9250508190555081600a6000828254611bf691906131ac565b90915550600090505b82811015611c4c57611c0f6122b2565b828281518110611c2f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611c4481613291565b915050611bff565b50610b713382612409565b6000546001600160a01b03163314611c815760405162461bcd60e51b815260040161079590612ffc565b6001600160a01b038116611ce65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b601354811015611db557336001600160a01b031660138281548110611d7a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611da35760019150611db5565b80611dad81613291565b915050611d45565b506000546001600160a01b0316331480611dcc5750805b611de85760405162461bcd60e51b815260040161079590613031565b50600855565b6000805b601354811015611e6257336001600160a01b031660138281548110611e2757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611e505760019150611e62565b80611e5a81613291565b915050611df2565b506000546001600160a01b0316331480611e795750805b611e955760405162461bcd60e51b815260040161079590613031565b60125415611ee55760405162461bcd60e51b815260206004820152601e60248201527f417661696c61626c65206b69647a2061726520616c72656164792073657400006044820152606401610795565b611eef3383612409565b8151600a6000828254611f0291906131ac565b90915550505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f5d826114e3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fa182611f0b565b611fbd5760405162461bcd60e51b815260040161079590612fb0565b6000611fc8836114e3565b9050806001600160a01b0316846001600160a01b031614806120035750836001600160a01b0316611ff88461072d565b6001600160a01b0316145b8061203357506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661204e826114e3565b6001600160a01b0316146120b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610795565b6001600160a01b0382166121185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b612123600082611f28565b6001600160a01b038316600090815260046020526040812080546001929061214c9084906131f7565b90915550506001600160a01b038216600090815260046020526040812080546001929061217a9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806121f16001600160801b038416866131c4565b905060006122086001600160801b038516876132ac565b9050600061221f6001600160801b038616876131c4565b905060006122366001600160801b038716886132ac565b90506001600160801b03861661224c82856131d8565b61225691906131c4565b61226083856131d8565b61226a83876131d8565b6001600160801b03891661227e86896131d8565b61228891906131d8565b61229291906131ac565b61229c91906131ac565b6122a691906131ac565b98975050505050505050565b6000806122c3601280549050612898565b90506000601282815481106122e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1690506012600160128054905061232691906131f7565b8154811061234457634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff166012838154811061238957634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060128054806123d757634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b6001600160a01b03821661245f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b80516001600160a01b038316600090815260046020526040812080549091906124899084906131ac565b90915550600090505b81518110156109cf576124cb8282815181106124be57634e487b7160e01b600052603260045260246000fd5b6020026020010151611f0b565b156125185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b61253e600084848481518110610e8657634e487b7160e01b600052603260045260246000fd5b826003600084848151811061256357634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508181815181106125bd57634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48061261081613291565b915050612492565b6001600160a01b03821661266e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b61267781611f0b565b156126c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b6001600160a01b03821660009081526004602052604081208054600192906126ed9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61275684848461203b565b6127628484848461290d565b610e865760405162461bcd60e51b815260040161079590612f5e565b6060816127a25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156127cc57806127b681613291565b91506127c59050600a836131c4565b91506127a6565b60008167ffffffffffffffff8111156127f557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561281f576020820181803683370190505b5090505b8415612033576128346001836131f7565b9150612841600a866132ac565b61284c9060306131ac565b60f81b81838151811061286f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612891600a866131c4565b9450612823565b60125460009081906128ab6001436131f7565b6040805160208101939093529040908201526bffffffffffffffffffffffff1941606090811b82168184015244607484015233901b16609482015260a80160408051601f198184030181529190528051602090910120905061181f83826132ac565b60006001600160a01b0384163b15612a0f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612951903390899088908890600401612f0e565b602060405180830381600087803b15801561296b57600080fd5b505af192505050801561299b575060408051601f3d908101601f1916820190925261299891810190612df6565b60015b6129f5573d8080156129c9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ce565b606091505b5080516129ed5760405162461bcd60e51b815260040161079590612f5e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612033565b506001949350505050565b828054612a269061323a565b90600052602060002090601f016020900481019282612a485760008555612a8e565b82601f10612a6157805160ff1916838001178555612a8e565b82800160010185558215612a8e579182015b82811115612a8e578251825591602001919060010190612a73565b506111149291505b808211156111145760008155600101612a96565b600067ffffffffffffffff831115612ac457612ac46132ec565b612ad7601f8401601f1916602001613135565b9050828152838383011115612aeb57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612b1957600080fd5b919050565b803561ffff81168114612b1957600080fd5b600060208284031215612b41578081fd5b61181f82612b02565b60008060408385031215612b5c578081fd5b612b6583612b02565b9150612b7360208401612b02565b90509250929050565b600080600060608486031215612b90578081fd5b612b9984612b02565b9250612ba760208501612b02565b9150604084013590509250925092565b60008060008060808587031215612bcc578081fd5b612bd585612b02565b9350612be360208601612b02565b925060408501359150606085013567ffffffffffffffff811115612c05578182fd5b8501601f81018713612c15578182fd5b612c2487823560208401612aaa565b91505092959194509250565b60008060408385031215612c42578182fd5b612c4b83612b02565b915060208301358015158114612c5f578182fd5b809150509250929050565b60008060408385031215612c7c578182fd5b612c8583612b02565b946020939093013593505050565b60006020808385031215612ca5578182fd5b823567ffffffffffffffff811115612cbb578283fd5b8301601f81018513612ccb578283fd5b8035612cde612cd982613166565b613135565b80828252848201915084840188868560061b8701011115612cfd578687fd5b8694505b83851015612d4757604080828b031215612d19578788fd5b612d2161310c565b612d2a83612b02565b815282880135888201528452600195909501949286019201612d01565b50979650505050505050565b60006020808385031215612d65578182fd5b823567ffffffffffffffff811115612d7b578283fd5b8301601f81018513612d8b578283fd5b8035612d99612cd982613166565b80828252848201915084840188868560051b8701011115612db8578687fd5b8694505b83851015612d47578035835260019490940193918501918501612dbc565b600060208284031215612deb578081fd5b813561181f81613302565b600060208284031215612e07578081fd5b815161181f81613302565b600060208284031215612e23578081fd5b813567ffffffffffffffff811115612e39578182fd5b8201601f81018413612e49578182fd5b61203384823560208401612aaa565b600060208284031215612e69578081fd5b61181f82612b1e565b60008060408385031215612e84578182fd5b612e8d83612b1e565b9150612b7360208401612b1e565b600060208284031215612eac578081fd5b5035919050565b60008151808452612ecb81602086016020860161320e565b601f01601f19169290920160200192915050565b60008351612ef181846020880161320e565b835190830190612f0581836020880161320e565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4190830184612eb3565b9695505050505050565b60208152600061181f6020830184612eb3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601a908201527f4e6f206b69647a206c65667420746f20626520636c61696d6564000000000000604082015260600190565b6040805190810167ffffffffffffffff8111828210171561312f5761312f6132ec565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561315e5761315e6132ec565b604052919050565b600067ffffffffffffffff821115613180576131806132ec565b5060051b60200190565b60006001600160801b03808316818516808303821115612f0557612f056132c0565b600082198211156131bf576131bf6132c0565b500190565b6000826131d3576131d36132d6565b500490565b60008160001904831182151516156131f2576131f26132c0565b500290565b600082821015613209576132096132c0565b500390565b60005b83811015613229578181015183820152602001613211565b83811115610e865750506000910152565b600181811c9082168061324e57607f821691505b6020821081141561195357634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613287576132876132c0565b6001019392505050565b60006000198214156132a5576132a56132c0565b5060010190565b6000826132bb576132bb6132d6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461331857600080fd5b5056fea26469706673582212200bbad6c088bf2d62cd5734bdba011719526b13ab55e4f18d3cb3fba0996f10e864736f6c6343000804003368747470733a2f2f726963686b69647a746573742e73332e75732d776573742d312e616d617a6f6e6177732e636f6d2f

Deployed Bytecode

0x6080604052600436106102045760003560e01c80636352211e11610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461058a578063e9be0f3f146105d3578063f2fde38b146105e9578063f4a0a52814610609578063fc14ba491461062957600080fd5b8063c87b56dd14610522578063c9783c0214610542578063d547cfb714610562578063e91a92261461057757600080fd5b80638d482354116100e75780638d4823541461049a5780638da5cb5b146104af57806395d89b41146104cd578063a22cb465146104e2578063b88d4fde1461050257600080fd5b80636352211e1461043057806370a0823114610450578063715018a61461047057806384fd33711461048557600080fd5b806323ab18f11161019b5780633ccfd60b1161016a5780633ccfd60b146103b357806342842e0e146103c85780634f6ccce7146103e8578063502006ff1461040857806360251cd11461042857600080fd5b806323ab18f11461033357806323b872dd1461035357806328e27bf51461037357806330176e131461039357600080fd5b80630955f63c116101d75780630955f63c146102ba578063095ea7b3146102da57806318160ddd146102fa5780632344e9181461031957600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc1461026057806308b6d26714610298575b600080fd5b34801561021557600080fd5b50610229610224366004612dda565b610649565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361069b565b6040516102359190612f4b565b34801561026c57600080fd5b5061028061027b366004612e9b565b61072d565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612e58565b6107ba565b005b3480156102c657600080fd5b506102b86102d5366004612c93565b6109d4565b3480156102e657600080fd5b506102b86102f5366004612c6a565b610b75565b34801561030657600080fd5b50600a545b604051908152602001610235565b34801561032557600080fd5b50600f546102299060ff1681565b34801561033f57600080fd5b506102b861034e366004612e9b565b610c86565b34801561035f57600080fd5b506102b861036e366004612b7c565b610d33565b34801561037f57600080fd5b506102b861038e366004612e72565b610d64565b34801561039f57600080fd5b506102b86103ae366004612e12565b610e8c565b3480156103bf57600080fd5b506102b8610f46565b3480156103d457600080fd5b506102b86103e3366004612b7c565b6110d2565b3480156103f457600080fd5b5061030b610403366004612e9b565b6110ed565b34801561041457600080fd5b506102b8610423366004612b30565b611118565b6102b8611328565b34801561043c57600080fd5b5061028061044b366004612e9b565b6114e3565b34801561045c57600080fd5b5061030b61046b366004612b30565b61155a565b34801561047c57600080fd5b506102b86115e1565b34801561049157600080fd5b5060125461030b565b3480156104a657600080fd5b5060085461030b565b3480156104bb57600080fd5b506000546001600160a01b0316610280565b3480156104d957600080fd5b50610253611655565b3480156104ee57600080fd5b506102b86104fd366004612c30565b611664565b34801561050e57600080fd5b506102b861051d366004612bb7565b611729565b34801561052e57600080fd5b5061025361053d366004612e9b565b61175b565b34801561054e57600080fd5b5061022961055d366004612e58565b611826565b34801561056e57600080fd5b50610253611959565b6102b8610585366004612e9b565b611968565b34801561059657600080fd5b506102296105a5366004612b4a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105df57600080fd5b5061030b60105481565b3480156105f557600080fd5b506102b8610604366004612b30565b611c57565b34801561061557600080fd5b506102b8610624366004612e9b565b611d41565b34801561063557600080fd5b506102b8610644366004612d53565b611dee565b60006001600160e01b031982166380ac58cd60e01b148061067a57506001600160e01b03198216635b5e139f60e01b145b8061069557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546106aa9061323a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d69061323a565b80156107235780601f106106f857610100808354040283529160200191610723565b820191906000526020600020905b81548152906001019060200180831161070657829003601f168201915b5050505050905090565b600061073882611f0b565b61079e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000805b60135481101561082e57336001600160a01b0316601382815481106107f357634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561081c576001915061082e565b8061082681613291565b9150506107be565b506000546001600160a01b03163314806108455750805b6108615760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216116109cf578261ffff1660128261ffff168154811061089b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16146108c7576109bd565b601280546108d7906001906131f7565b815481106108f557634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660128261ffff168154811061093e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601280548061098c57634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055505050565b806109c78161326f565b915050610864565b505050565b6000546001600160a01b031633146109fe5760405162461bcd60e51b815260040161079590612ffc565b60135415610a4e5760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c61626f7261746f7273207765726520616c72656164792073657400006044820152606401610795565b6000805b8251811015610b13576013838281518110610a7d57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101558251839082908110610ae857634e487b7160e01b600052603260045260246000fd5b60200260200101516020015182610aff919061318a565b915080610b0b81613291565b915050610a52565b50600d546001600160801b03828116911614610b715760405162461bcd60e51b815260206004820152601e60248201527f546f74616c2063757420646f6573206e6f742061646420746f203130302500006044820152606401610795565b5050565b6000610b80826114e3565b9050806001600160a01b0316836001600160a01b03161415610bee5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610795565b336001600160a01b0382161480610c0a5750610c0a81336105a5565b610c7c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610795565b6109cf8383611f28565b6000805b601354811015610cfa57336001600160a01b031660138281548110610cbf57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610ce85760019150610cfa565b80610cf281613291565b915050610c8a565b506000546001600160a01b0316331480610d115750805b610d2d5760405162461bcd60e51b815260040161079590613031565b50600755565b610d3d3382611f96565b610d595760405162461bcd60e51b815260040161079590613084565b6109cf83838361203b565b6000805b601354811015610dd857336001600160a01b031660138281548110610d9d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610dc65760019150610dd8565b80610dd081613291565b915050610d68565b506000546001600160a01b0316331480610def5750805b610e0b5760405162461bcd60e51b815260040161079590613031565b825b8261ffff168161ffff1611610e8657601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344460108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580610e7e8161326f565b915050610e0d565b50505050565b6000805b601354811015610f0057336001600160a01b031660138281548110610ec557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610eee5760019150610f00565b80610ef881613291565b915050610e90565b506000546001600160a01b0316331480610f175750805b610f335760405162461bcd60e51b815260040161079590613031565b81516109cf90600e906020850190612a1a565b6000805b601354811015610fba57336001600160a01b031660138281548110610f7f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610fa85760019150610fba565b80610fb281613291565b915050610f4a565b506000546001600160a01b0316331480610fd15750805b610fed5760405162461bcd60e51b815260040161079590613031565b4760005b6013548110156109cf576013818154811061101c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc611097846013858154811061107257634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600d546001600160801b03166121db565b6040518115909202916000818181858888f193505050501580156110bf573d6000803e3d6000fd5b50806110ca81613291565b915050610ff1565b6109cf83838360405180602001604052806000815250611729565b60006110f882611f0b565b6111145760405162461bcd60e51b815260040161079590612fb0565b5090565b6000805b60135481101561118c57336001600160a01b03166013828154811061115157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561117a576001915061118c565b8061118481613291565b91505061111c565b506000546001600160a01b03163314806111a35750805b6111bf5760405162461bcd60e51b815260040161079590613031565b60105460125410156111e35760405162461bcd60e51b8152600401610795906130d5565b600f5460ff16156112485760405162461bcd60e51b815260206004820152602960248201527f4b69647a207765726520616c726561647920726573657276656420666f72206760448201526869766561776179732160b81b6064820152608401610795565b601054600a600082825461125c91906131ac565b909155505060105460009067ffffffffffffffff81111561128d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112b6578160200160208202803683370190505b50905060005b60105481101561130b576112ce6122b2565b8282815181106112ee57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061130381613291565b9150506112bc565b506113168382612409565b5050600f805460ff1916600117905550565b3233146113775760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b6007541580159061138a57504260075411155b6113ca5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b60085434101561141c5760405162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20616e206b69646044820152606401610795565b600b54336000908152601160205260409020541061147c5760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b60125461149b5760405162461bcd60e51b8152600401610795906130d5565b3360009081526011602052604081208054916114b683613291565b9091555050600a80549060006114cb83613291565b91905055506114e1336114dc6122b2565b612618565b565b6000818152600360205260408120546001600160a01b0316806106955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610795565b60006001600160a01b0382166115c55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610795565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331461160b5760405162461bcd60e51b815260040161079590612ffc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600280546106aa9061323a565b6001600160a01b0382163314156116bd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610795565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117333383611f96565b61174f5760405162461bcd60e51b815260040161079590613084565b610e868484848461274b565b606061176682611f0b565b6117ca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610795565b60006117d4611959565b905060008151116117f4576040518060200160405280600081525061181f565b806117fe8461277e565b60405160200161180f929190612edf565b6040516020818303038152906040525b9392505050565b600080805b60135481101561189b57336001600160a01b03166013828154811061186057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611889576001915061189b565b8061189381613291565b91505061182b565b506000546001600160a01b03163314806118b25750805b6118ce5760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216101561194d578361ffff1660128261ffff168154811061190957634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16141561193b576001925050611953565b806119458161326f565b9150506118d1565b50600091505b50919050565b6060600e80546106aa9061323a565b3233146119b75760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b600754158015906119ca57504260075411155b611a0a5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b80600854611a1891906131d8565b341015611a725760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20746865206b69604482015261323d60f11b6064820152608401610795565b600c54811115611ad85760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e206f6e6c7920636c61696d203130204b69647a20706572207460448201526a72616e73616374696f6e7360a81b6064820152608401610795565b600b5433600090815260116020526040902054611af69083906131ac565b1115611b445760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b601254811115611b665760405162461bcd60e51b8152600401610795906130d5565b60008167ffffffffffffffff811115611b8f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bb8578160200160208202803683370190505b5033600090815260116020526040812080549293508492909190611bdd9084906131ac565b9250508190555081600a6000828254611bf691906131ac565b90915550600090505b82811015611c4c57611c0f6122b2565b828281518110611c2f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611c4481613291565b915050611bff565b50610b713382612409565b6000546001600160a01b03163314611c815760405162461bcd60e51b815260040161079590612ffc565b6001600160a01b038116611ce65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b601354811015611db557336001600160a01b031660138281548110611d7a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611da35760019150611db5565b80611dad81613291565b915050611d45565b506000546001600160a01b0316331480611dcc5750805b611de85760405162461bcd60e51b815260040161079590613031565b50600855565b6000805b601354811015611e6257336001600160a01b031660138281548110611e2757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611e505760019150611e62565b80611e5a81613291565b915050611df2565b506000546001600160a01b0316331480611e795750805b611e955760405162461bcd60e51b815260040161079590613031565b60125415611ee55760405162461bcd60e51b815260206004820152601e60248201527f417661696c61626c65206b69647a2061726520616c72656164792073657400006044820152606401610795565b611eef3383612409565b8151600a6000828254611f0291906131ac565b90915550505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f5d826114e3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fa182611f0b565b611fbd5760405162461bcd60e51b815260040161079590612fb0565b6000611fc8836114e3565b9050806001600160a01b0316846001600160a01b031614806120035750836001600160a01b0316611ff88461072d565b6001600160a01b0316145b8061203357506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661204e826114e3565b6001600160a01b0316146120b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610795565b6001600160a01b0382166121185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b612123600082611f28565b6001600160a01b038316600090815260046020526040812080546001929061214c9084906131f7565b90915550506001600160a01b038216600090815260046020526040812080546001929061217a9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806121f16001600160801b038416866131c4565b905060006122086001600160801b038516876132ac565b9050600061221f6001600160801b038616876131c4565b905060006122366001600160801b038716886132ac565b90506001600160801b03861661224c82856131d8565b61225691906131c4565b61226083856131d8565b61226a83876131d8565b6001600160801b03891661227e86896131d8565b61228891906131d8565b61229291906131ac565b61229c91906131ac565b6122a691906131ac565b98975050505050505050565b6000806122c3601280549050612898565b90506000601282815481106122e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1690506012600160128054905061232691906131f7565b8154811061234457634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff166012838154811061238957634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060128054806123d757634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b6001600160a01b03821661245f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b80516001600160a01b038316600090815260046020526040812080549091906124899084906131ac565b90915550600090505b81518110156109cf576124cb8282815181106124be57634e487b7160e01b600052603260045260246000fd5b6020026020010151611f0b565b156125185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b61253e600084848481518110610e8657634e487b7160e01b600052603260045260246000fd5b826003600084848151811061256357634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508181815181106125bd57634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48061261081613291565b915050612492565b6001600160a01b03821661266e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b61267781611f0b565b156126c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b6001600160a01b03821660009081526004602052604081208054600192906126ed9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61275684848461203b565b6127628484848461290d565b610e865760405162461bcd60e51b815260040161079590612f5e565b6060816127a25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156127cc57806127b681613291565b91506127c59050600a836131c4565b91506127a6565b60008167ffffffffffffffff8111156127f557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561281f576020820181803683370190505b5090505b8415612033576128346001836131f7565b9150612841600a866132ac565b61284c9060306131ac565b60f81b81838151811061286f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612891600a866131c4565b9450612823565b60125460009081906128ab6001436131f7565b6040805160208101939093529040908201526bffffffffffffffffffffffff1941606090811b82168184015244607484015233901b16609482015260a80160408051601f198184030181529190528051602090910120905061181f83826132ac565b60006001600160a01b0384163b15612a0f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612951903390899088908890600401612f0e565b602060405180830381600087803b15801561296b57600080fd5b505af192505050801561299b575060408051601f3d908101601f1916820190925261299891810190612df6565b60015b6129f5573d8080156129c9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ce565b606091505b5080516129ed5760405162461bcd60e51b815260040161079590612f5e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612033565b506001949350505050565b828054612a269061323a565b90600052602060002090601f016020900481019282612a485760008555612a8e565b82601f10612a6157805160ff1916838001178555612a8e565b82800160010185558215612a8e579182015b82811115612a8e578251825591602001919060010190612a73565b506111149291505b808211156111145760008155600101612a96565b600067ffffffffffffffff831115612ac457612ac46132ec565b612ad7601f8401601f1916602001613135565b9050828152838383011115612aeb57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612b1957600080fd5b919050565b803561ffff81168114612b1957600080fd5b600060208284031215612b41578081fd5b61181f82612b02565b60008060408385031215612b5c578081fd5b612b6583612b02565b9150612b7360208401612b02565b90509250929050565b600080600060608486031215612b90578081fd5b612b9984612b02565b9250612ba760208501612b02565b9150604084013590509250925092565b60008060008060808587031215612bcc578081fd5b612bd585612b02565b9350612be360208601612b02565b925060408501359150606085013567ffffffffffffffff811115612c05578182fd5b8501601f81018713612c15578182fd5b612c2487823560208401612aaa565b91505092959194509250565b60008060408385031215612c42578182fd5b612c4b83612b02565b915060208301358015158114612c5f578182fd5b809150509250929050565b60008060408385031215612c7c578182fd5b612c8583612b02565b946020939093013593505050565b60006020808385031215612ca5578182fd5b823567ffffffffffffffff811115612cbb578283fd5b8301601f81018513612ccb578283fd5b8035612cde612cd982613166565b613135565b80828252848201915084840188868560061b8701011115612cfd578687fd5b8694505b83851015612d4757604080828b031215612d19578788fd5b612d2161310c565b612d2a83612b02565b815282880135888201528452600195909501949286019201612d01565b50979650505050505050565b60006020808385031215612d65578182fd5b823567ffffffffffffffff811115612d7b578283fd5b8301601f81018513612d8b578283fd5b8035612d99612cd982613166565b80828252848201915084840188868560051b8701011115612db8578687fd5b8694505b83851015612d47578035835260019490940193918501918501612dbc565b600060208284031215612deb578081fd5b813561181f81613302565b600060208284031215612e07578081fd5b815161181f81613302565b600060208284031215612e23578081fd5b813567ffffffffffffffff811115612e39578182fd5b8201601f81018413612e49578182fd5b61203384823560208401612aaa565b600060208284031215612e69578081fd5b61181f82612b1e565b60008060408385031215612e84578182fd5b612e8d83612b1e565b9150612b7360208401612b1e565b600060208284031215612eac578081fd5b5035919050565b60008151808452612ecb81602086016020860161320e565b601f01601f19169290920160200192915050565b60008351612ef181846020880161320e565b835190830190612f0581836020880161320e565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4190830184612eb3565b9695505050505050565b60208152600061181f6020830184612eb3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601a908201527f4e6f206b69647a206c65667420746f20626520636c61696d6564000000000000604082015260600190565b6040805190810167ffffffffffffffff8111828210171561312f5761312f6132ec565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561315e5761315e6132ec565b604052919050565b600067ffffffffffffffff821115613180576131806132ec565b5060051b60200190565b60006001600160801b03808316818516808303821115612f0557612f056132c0565b600082198211156131bf576131bf6132c0565b500190565b6000826131d3576131d36132d6565b500490565b60008160001904831182151516156131f2576131f26132c0565b500290565b600082821015613209576132096132c0565b500390565b60005b83811015613229578181015183820152602001613211565b83811115610e865750506000910152565b600181811c9082168061324e57607f821691505b6020821081141561195357634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613287576132876132c0565b6001019392505050565b60006000198214156132a5576132a56132c0565b5060010190565b6000826132bb576132bb6132d6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461331857600080fd5b5056fea26469706673582212200bbad6c088bf2d62cd5734bdba011719526b13ab55e4f18d3cb3fba0996f10e864736f6c63430008040033

Deployed Bytecode Sourcemap

81:9199:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:344:3;;;;;;;;;;-1:-1:-1;1524:344:3;;;;;:::i;:::-;;:::i;:::-;;;8963:14:12;;8956:22;8938:41;;8926:2;8911:18;1524:344:3;;;;;;;;2642:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4188:295::-;;;;;;;;;;-1:-1:-1;4188:295:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8261:32:12;;;8243:51;;8231:2;8216:18;4188:295:3;8198:102:12;3400:386:10;;;;;;;;;;-1:-1:-1;3400:386:10;;;;;:::i;:::-;;:::i;:::-;;1767:468;;;;;;;;;;-1:-1:-1;1767:468:10;;;;;:::i;:::-;;:::i;3703:424:3:-;;;;;;;;;;-1:-1:-1;3703:424:3;;;;;:::i;:::-;;:::i;7759:104:10:-;;;;;;;;;;-1:-1:-1;7839:17:10;;7759:104;;;20240:25:12;;;20228:2;20213:18;7759:104:10;20195:76:12;1404:38:10;;;;;;;;;;-1:-1:-1;1404:38:10;;;;;;;;4251:147;;;;;;;;;;-1:-1:-1;4251:147:10;;;;;:::i;:::-;;:::i;5202:364:3:-;;;;;;;;;;-1:-1:-1;5202:364:3;;;;;:::i;:::-;;:::i;3127:194:10:-;;;;;;;;;;-1:-1:-1;3127:194:10;;;;;:::i;:::-;;:::i;2787:102::-;;;;;;;;;;-1:-1:-1;2787:102:10;;;;;:::i;:::-;;:::i;2378:317::-;;;;;;;;;;;;;:::i;5632:179:3:-;;;;;;;;;;-1:-1:-1;5632:179:3;;;;;:::i;:::-;;:::i;6971:220:10:-;;;;;;;;;;-1:-1:-1;6971:220:10;;;;;:::i;:::-;;:::i;4859:555::-;;;;;;;;;;-1:-1:-1;4859:555:10;;;;;:::i;:::-;;:::i;5498:479::-;;;:::i;2267:313:3:-;;;;;;;;;;-1:-1:-1;2267:313:3;;;;;:::i;:::-;;:::i;1927:283::-;;;;;;;;;;-1:-1:-1;1927:283:3;;;;;:::i;:::-;;:::i;1693:145:9:-;;;;;;;;;;;;;:::i;7449:104:10:-;;;;;;;;;;-1:-1:-1;7526:13:10;:20;7449:104;;7611:89;;;;;;;;;;-1:-1:-1;7684:9:10;;7611:89;;1061:85:9;;;;;;;;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;1061:85;;2804:102:3;;;;;;;;;;;;;:::i;4550:318::-;;;;;;;;;;-1:-1:-1;4550:318:3;;;;;:::i;:::-;;:::i;5877:354::-;;;;;;;;;;-1:-1:-1;5877:354:3;;;;;:::i;:::-;;:::i;2972:451::-;;;;;;;;;;-1:-1:-1;2972:451:3;;;;;:::i;:::-;;:::i;4475:308:10:-;;;;;;;;;;-1:-1:-1;4475:308:10;;;;;:::i;:::-;;:::i;7266:93::-;;;;;;;;;;;;;:::i;6039:868::-;;;;;;:::i;:::-;;:::i;4934:206:3:-;;;;;;;;;;-1:-1:-1;4934:206:3;;;;;:::i;:::-;-1:-1:-1;;;;;5098:25:3;;;5071:4;5098:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4934:206;1448:34:10;;;;;;;;;;;;;;;;1987:240:9;;;;;;;;;;-1:-1:-1;1987:240:9;;;;;:::i;:::-;;:::i;2957:107:10:-;;;;;;;;;;-1:-1:-1;2957:107:10;;;;;:::i;:::-;;:::i;3896:272::-;;;;;;;;;;-1:-1:-1;3896:272:10;;;;;:::i;:::-;;:::i;1524:344:3:-;1666:4;-1:-1:-1;;;;;;1705:40:3;;-1:-1:-1;;;1705:40:3;;:104;;-1:-1:-1;;;;;;;1761:48:3;;-1:-1:-1;;;1761:48:3;1705:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:2;;;1825:36:3;1686:175;1524:344;-1:-1:-1;;1524:344:3:o;2642:98::-;2696:13;2728:5;2721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2642:98;:::o;4188:295::-;4304:7;4348:16;4356:7;4348;:16::i;:::-;4327:107;;;;-1:-1:-1;;;4327:107:3;;15162:2:12;4327:107:3;;;15144:21:12;15201:2;15181:18;;;15174:30;15240:34;15220:18;;;15213:62;-1:-1:-1;;;15291:18:12;;;15284:42;15343:19;;4327:107:3;;;;;;;;;-1:-1:-1;4452:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4452:24:3;;4188:295::o;3400:386:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;3514:8:::1;3509:271;3529:13;:20:::0;3524:25:::1;::::0;::::1;;3509:271;;3594:7;3574:27;;:13;3588:1;3574:16;;;;;;;;-1:-1:-1::0;;;3574:16:10::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:27;3570:74;;3621:8;;3570:74;3677:13;3691:20:::0;;:24:::1;::::0;3714:1:::1;::::0;3691:24:::1;:::i;:::-;3677:39;;;;;;-1:-1:-1::0;;;3677:39:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3658:13;3672:1;3658:16;;;;;;;;-1:-1:-1::0;;;3658:16:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;3730:13;:19;;;;;-1:-1:-1::0;;;3730:19:10::1;;;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;3730:19:10;;;;;::::1;;::::0;;::::1;;::::0;;;::::1;;;;;;::::0;;;;3509:271:::1;3400:386:::0;;:::o;3509:271::-:1;3551:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3509:271;;;;3400:386:::0;;:::o;1767:468::-;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;1273:23:9;1265:68;;;;-1:-1:-1;;;1265:68:9;;;;;;;:::i;:::-;1889:13:10::1;:20:::0;:25;1881:68:::1;;;::::0;-1:-1:-1;;;1881:68:10;;10599:2:12;1881:68:10::1;::::0;::::1;10581:21:12::0;10638:2;10618:18;;;10611:30;10677:32;10657:18;;;10650:60;10727:18;;1881:68:10::1;10571:180:12::0;1881:68:10::1;1960:16;1991:9:::0;1986:166:::1;2006:14;:21;2002:1;:25;1986:166;;;2048:13;2067:14;2082:1;2067:17;;;;;;-1:-1:-1::0;;;2067:17:10::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;2048:37;;::::1;::::0;;::::1;::::0;;-1:-1:-1;2048:37:10;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;2048:37:10::1;-1:-1:-1::0;;;;;2048:37:10;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;2119:17;;;;2134:1;;2119:17;::::1;;;-1:-1:-1::0;;;2119:17:10::1;;;;;;;;;;;;;;;:21;;;2099:42;;;;;:::i;:::-;::::0;-1:-1:-1;2029:3:10;::::1;::::0;::::1;:::i;:::-;;;;1986:166;;;-1:-1:-1::0;2182:11:10::1;::::0;-1:-1:-1;;;;;2170:23:10;;::::1;2182:11:::0;::::1;2170:23;2162:66;;;::::0;-1:-1:-1;;;2162:66:10;;12078:2:12;2162:66:10::1;::::0;::::1;12060:21:12::0;12117:2;12097:18;;;12090:30;12156:32;12136:18;;;12129:60;12206:18;;2162:66:10::1;12050:180:12::0;2162:66:10::1;1343:1:9;1767:468:10::0;:::o;3703:424:3:-;3783:13;3799:23;3814:7;3799:14;:23::i;:::-;3783:39;;3846:5;-1:-1:-1;;;;;3840:11:3;:2;-1:-1:-1;;;;;3840:11:3;;;3832:57;;;;-1:-1:-1;;;3832:57:3;;17182:2:12;3832:57:3;;;17164:21:12;17221:2;17201:18;;;17194:30;17260:34;17240:18;;;17233:62;-1:-1:-1;;;17311:18:12;;;17304:31;17352:19;;3832:57:3;17154:223:12;3832:57:3;665:10:1;-1:-1:-1;;;;;3921:21:3;;;;:85;;-1:-1:-1;3962:44:3;3986:5;665:10:1;4934:206:3;:::i;3962:44::-;3900:188;;;;-1:-1:-1;;;3900:188:3;;13209:2:12;3900:188:3;;;13191:21:12;13248:2;13228:18;;;13221:30;13287:34;13267:18;;;13260:62;13358:26;13338:18;;;13331:54;13402:19;;3900:188:3;13181:246:12;3900:188:3;4099:21;4108:2;4112:7;4099:8;:21::i;4251:147:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;-1:-1:-1;4359:14:10::1;:32:::0;4251:147::o;5202:364:3:-;5404:41;665:10:1;5437:7:3;5404:18;:41::i;:::-;5383:137;;;;-1:-1:-1;;;5383:137:3;;;;;;;:::i;:::-;5531:28;5541:4;5547:2;5551:7;5531:9;:28::i;3127:194:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;3249:4;3233:82:::1;3260:2;3255:7;;:1;:7;;;3233:82;;3283:13;:21:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;3283:21:10;;;;;::::1;::::0;::::1;;::::0;;;;;;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;;3264:3:::1;3283:21:::0;3264:3:::1;:::i;:::-;;;;3233:82;;;;3127:194:::0;;;:::o;2787:102::-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;2868:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;2378:317::-:0;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;2457:21:::1;2434:20;2489:200;2509:13;:20:::0;2505:24;::::1;2489:200;;;2558:13;2572:1;2558:16;;;;;;-1:-1:-1::0;;;2558:16:10::1;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;-1:-1:-1::0;;;;;2558:21:10::1;-1:-1:-1::0;;;;;2550:39:10::1;:128;2607:57;2616:12;2630:13;2644:1;2630:16;;;;;;-1:-1:-1::0;;;2630:16:10::1;;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:16;::::0;;::::1;;:20;::::0;2652:11:::1;::::0;-1:-1:-1;;;;;2652:11:10::1;2607:8;:57::i;:::-;2550:128;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;2531:3:10;::::1;::::0;::::1;:::i;:::-;;;;2489:200;;5632:179:3::0;5765:39;5782:4;5788:2;5792:7;5765:39;;;;;;;;;;;;:16;:39::i;6971:220:10:-;7033:7;7073:16;7081:7;7073;:16::i;:::-;7052:107;;;;-1:-1:-1;;;7052:107:10;;;;;;;:::i;:::-;-1:-1:-1;7177:7:10;6971:220::o;4859:555::-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;4986:13:::1;::::0;4962::::1;:20:::0;:37:::1;;4954:76;;;;-1:-1:-1::0;;;4954:76:10::1;;;;;;;:::i;:::-;5049:18;::::0;::::1;;5048:19;5040:72;;;::::0;-1:-1:-1;;;5040:72:10;;19531:2:12;5040:72:10::1;::::0;::::1;19513:21:12::0;19570:2;19550:18;;;19543:30;19609:34;19589:18;;;19582:62;-1:-1:-1;;;19660:18:12;;;19653:39;19709:19;;5040:72:10::1;19503:231:12::0;5040:72:10::1;5143:13;;5122:17;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5209:13:10::1;::::0;5167:25:::1;::::0;5195:28:::1;::::0;::::1;;;;-1:-1:-1::0;;;5195:28:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;5195:28:10::1;;5167:56;;5239:9;5234:98;5254:13;;5250:1;:17;5234:98;;;5302:19;:17;:19::i;:::-;5288:8;5297:1;5288:11;;;;;;-1:-1:-1::0;;;5288:11:10::1;;;;;;;;;;::::0;;::::1;::::0;;;;;:33;5269:3;::::1;::::0;::::1;:::i;:::-;;;;5234:98;;;;5342:30;5353:8;5363;5342:10;:30::i;:::-;-1:-1:-1::0;;5382:18:10::1;:25:::0;;-1:-1:-1;;5382:25:10::1;5403:4;5382:25;::::0;;-1:-1:-1;4859:555:10:o;5498:479::-;221:9;234:10;221:23;213:66;;;;-1:-1:-1;;;213:66:10;;12850:2:12;213:66:10;;;12832:21:12;12889:2;12869:18;;;12862:30;12928:32;12908:18;;;12901:60;12978:18;;213:66:10;12822:180:12;213:66:10;797:14:::1;::::0;:19;;::::1;::::0;:56:::1;;;838:15;820:14;;:33;;797:56;776:120;;;::::0;-1:-1:-1;;;776:120:10;;13634:2:12;776:120:10::1;::::0;::::1;13616:21:12::0;13673:2;13653:18;;;13646:30;-1:-1:-1;;;13692:18:12;;;13685:47;13749:18;;776:120:10::1;13606:167:12::0;776:120:10::1;5592:9:::2;;5579;:22;;5571:67;;;::::0;-1:-1:-1;;;5571:67:10;;10958:2:12;5571:67:10::2;::::0;::::2;10940:21:12::0;;;10977:18;;;10970:30;11036:34;11016:18;;;11009:62;11088:18;;5571:67:10::2;10930:182:12::0;5571:67:10::2;5705:16;::::0;5691:10:::2;5670:32;::::0;;;:20:::2;:32;::::0;;;;;:51:::2;5649:124;;;::::0;-1:-1:-1;;;5649:124:10;;18002:2:12;5649:124:10::2;::::0;::::2;17984:21:12::0;18041:2;18021:18;;;18014:30;18080:28;18060:18;;;18053:56;18126:18;;5649:124:10::2;17974:176:12::0;5649:124:10::2;5792:13;:20:::0;5784:63:::2;;;;-1:-1:-1::0;;;5784:63:10::2;;;;;;;:::i;:::-;5879:10;5858:32;::::0;;;:20:::2;:32;::::0;;;;:34;;;::::2;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;;5902:17:10::2;:19:::0;;;:17:::2;:19;::::0;::::2;:::i;:::-;;;;;;5932:38;5938:10;5950:19;:17;:19::i;:::-;5932:5;:38::i;:::-;5498:479::o:0;2267:313:3:-;2379:7;2418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2418:16:3;2465:19;2444:107;;;;-1:-1:-1;;;2444:107:3;;14391:2:12;2444:107:3;;;14373:21:12;14430:2;14410:18;;;14403:30;14469:34;14449:18;;;14442:62;-1:-1:-1;;;14520:18:12;;;14513:39;14569:19;;2444:107:3;14363:231:12;1927:283:3;2039:7;-1:-1:-1;;;;;2083:19:3;;2062:108;;;;-1:-1:-1;;;2062:108:3;;13980:2:12;2062:108:3;;;13962:21:12;14019:2;13999:18;;;13992:30;14058:34;14038:18;;;14031:62;-1:-1:-1;;;14109:18:12;;;14102:40;14159:19;;2062:108:3;13952:232:12;2062:108:3;-1:-1:-1;;;;;;2187:16:3;;;;;:9;:16;;;;;;;1927:283::o;1693:145:9:-;1107:7;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;1273:23:9;1265:68;;;;-1:-1:-1;;;1265:68:9;;;;;;;:::i;:::-;1799:1:::1;1783:6:::0;;1762:40:::1;::::0;-1:-1:-1;;;;;1783:6:9;;::::1;::::0;1762:40:::1;::::0;1799:1;;1762:40:::1;1829:1;1812:19:::0;;-1:-1:-1;;;;;;1812:19:9::1;::::0;;1693:145::o;2804:102:3:-;2860:13;2892:7;2885:14;;;;;:::i;4550:318::-;-1:-1:-1;;;;;4680:24:3;;665:10:1;4680:24:3;;4672:62;;;;-1:-1:-1;;;4672:62:3;;11724:2:12;4672:62:3;;;11706:21:12;11763:2;11743:18;;;11736:30;11802:27;11782:18;;;11775:55;11847:18;;4672:62:3;11696:175:12;4672:62:3;665:10:1;4745:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4745:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;4745:53:3;;;;;;;;;;4813:48;;8938:41:12;;;4745:42:3;;665:10:1;4813:48:3;;8911:18:12;4813:48:3;;;;;;;4550:318;;:::o;5877:354::-;6059:41;665:10:1;6092:7:3;6059:18;:41::i;:::-;6038:137;;;;-1:-1:-1;;;6038:137:3;;;;;;;:::i;:::-;6185:39;6199:4;6205:2;6209:7;6218:5;6185:13;:39::i;2972:451::-;3085:13;3135:16;3143:7;3135;:16::i;:::-;3114:110;;;;-1:-1:-1;;;3114:110:3;;16346:2:12;3114:110:3;;;16328:21:12;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:12;;;16468:45;16530:19;;3114:110:3;16318:237:12;3114:110:3;3235:21;3259:10;:8;:10::i;:::-;3235:34;;3322:1;3304:7;3298:21;:25;:118;;;;;;;;;;;;;;;;;3366:7;3375:18;:7;:16;:18::i;:::-;3349:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3298:118;3279:137;2972:451;-1:-1:-1;;;2972:451:3:o;4475:308:10:-;4587:4;;;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;4612:8:::1;4607:147;4626:13;:20:::0;4622:24:::1;::::0;::::1;;4607:147;;;4691:7;4671:27;;:13;4685:1;4671:16;;;;;;;;-1:-1:-1::0;;;4671:16:10::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:27;4667:77;;;4725:4;4718:11;;;;;4667:77;4648:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4607:147;;;;4771:5;4764:12;;728:1;4475:308:::0;;;;:::o;7266:93::-;7313:13;7345:7;7338:14;;;;;:::i;6039:868::-;221:9;234:10;221:23;213:66;;;;-1:-1:-1;;;213:66:10;;12850:2:12;213:66:10;;;12832:21:12;12889:2;12869:18;;;12862:30;12928:32;12908:18;;;12901:60;12978:18;;213:66:10;12822:180:12;213:66:10;797:14:::1;::::0;:19;;::::1;::::0;:56:::1;;;838:15;820:14;;:33;;797:56;776:120;;;::::0;-1:-1:-1;;;776:120:10;;13634:2:12;776:120:10::1;::::0;::::1;13616:21:12::0;13673:2;13653:18;;;13646:30;-1:-1:-1;;;13692:18:12;;;13685:47;13749:18;;776:120:10::1;13606:167:12::0;776:120:10::1;6209:6:::2;6197:9;;:18;;;;:::i;:::-;6184:9;:31;;6163:112;;;::::0;-1:-1:-1;;;6163:112:10;;19128:2:12;6163:112:10::2;::::0;::::2;19110:21:12::0;19167:2;19147:18;;;19140:30;19206:34;19186:18;;;19179:62;-1:-1:-1;;;19257:18:12;;;19250:32;19299:19;;6163:112:10::2;19100:224:12::0;6163:112:10::2;6312:21;;6302:6;:31;;6294:87;;;::::0;-1:-1:-1;;;6294:87:10;;18716:2:12;6294:87:10::2;::::0;::::2;18698:21:12::0;18755:2;18735:18;;;18728:30;18794:34;18774:18;;;18767:62;-1:-1:-1;;;18845:18:12;;;18838:41;18896:19;;6294:87:10::2;18688:233:12::0;6294:87:10::2;6458:16;::::0;6434:10:::2;6413:32;::::0;;;:20:::2;:32;::::0;;;;;:41:::2;::::0;6448:6;;6413:41:::2;:::i;:::-;:61;;6392:134;;;::::0;-1:-1:-1;;;6392:134:10;;18002:2:12;6392:134:10::2;::::0;::::2;17984:21:12::0;18041:2;18021:18;;;18014:30;18080:28;18060:18;;;18053:56;18126:18;;6392:134:10::2;17974:176:12::0;6392:134:10::2;6545:13;:20:::0;:30;-1:-1:-1;6545:30:10::2;6537:69;;;;-1:-1:-1::0;;;6537:69:10::2;;;;;;;:::i;:::-;6617:25;6659:6;6645:21;;;;;;-1:-1:-1::0;;;6645:21:10::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;6645:21:10::2;-1:-1:-1::0;6698:10:10::2;6677:32;::::0;;;:20:::2;:32;::::0;;;;:42;;6617:49;;-1:-1:-1;6713:6:10;;6677:32;;;:42:::2;::::0;6713:6;;6677:42:::2;:::i;:::-;;;;;;;;6750:6;6729:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;6772:9:10::2;::::0;-1:-1:-1;6767:91:10::2;6787:6;6783:1;:10;6767:91;;;6828:19;:17;:19::i;:::-;6814:8;6823:1;6814:11;;;;;;-1:-1:-1::0;;;6814:11:10::2;;;;;;;;;;::::0;;::::2;::::0;;;;;:33;6795:3;::::2;::::0;::::2;:::i;:::-;;;;6767:91;;;;6868:32;6879:10;6891:8;6868:10;:32::i;1987:240:9:-:0;1107:7;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;1273:23:9;1265:68;;;;-1:-1:-1;;;1265:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;2075:22:9;::::1;2067:73;;;::::0;-1:-1:-1;;;2067:73:9;;9835:2:12;2067:73:9::1;::::0;::::1;9817:21:12::0;9874:2;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;-1:-1:-1;;;9964:18:12;;;9957:36;10010:19;;2067:73:9::1;9807:228:12::0;2067:73:9::1;2176:6;::::0;;2155:38:::1;::::0;-1:-1:-1;;;;;2155:38:9;;::::1;::::0;2176:6;::::1;::::0;2155:38:::1;::::0;::::1;2203:6;:17:::0;;-1:-1:-1;;;;;;2203:17:9::1;-1:-1:-1::0;;;;;2203:17:9;;;::::1;::::0;;;::::1;::::0;;1987:240::o;2957:107:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;-1:-1:-1;3035:9:10::1;:22:::0;2957:107::o;3896:272::-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;4011:13:::1;:20:::0;:25;4003:68:::1;;;::::0;-1:-1:-1;;;4003:68:10;;18357:2:12;4003:68:10::1;::::0;::::1;18339:21:12::0;18396:2;18376:18;;;18369:30;18435:32;18415:18;;;18408:60;18485:18;;4003:68:10::1;18329:180:12::0;4003:68:10::1;4082:32;4093:10;4105:8;4082:10;:32::i;:::-;4146:8;:15;4125:17;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;3896:272:10:o;7737:125:3:-;7802:4;7825:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7825:16:3;:30;;;7737:125::o;12245:171::-;12319:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12319:29:3;-1:-1:-1;;;;;12319:29:3;;;;;;;;:24;;12372:23;12319:24;12372:14;:23::i;:::-;-1:-1:-1;;;;;12363:46:3;;;;;;;;;;;12245:171;;:::o;8020:445::-;8145:4;8186:16;8194:7;8186;:16::i;:::-;8165:107;;;;-1:-1:-1;;;8165:107:3;;;;;;;:::i;:::-;8282:13;8298:23;8313:7;8298:14;:23::i;:::-;8282:39;;8350:5;-1:-1:-1;;;;;8339:16:3;:7;-1:-1:-1;;;;;8339:16:3;;:63;;;;8395:7;-1:-1:-1;;;;;8371:31:3;:20;8383:7;8371:11;:20::i;:::-;-1:-1:-1;;;;;8371:31:3;;8339:63;:118;;;-1:-1:-1;;;;;;5098:25:3;;;5071:4;5098:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;8418:39;8331:127;8020:445;-1:-1:-1;;;;8020:445:3:o;11540:594::-;11707:4;-1:-1:-1;;;;;11680:31:3;:23;11695:7;11680:14;:23::i;:::-;-1:-1:-1;;;;;11680:31:3;;11659:119;;;;-1:-1:-1;;;11659:119:3;;15936:2:12;11659:119:3;;;15918:21:12;15975:2;15955:18;;;15948:30;16014:34;15994:18;;;15987:62;-1:-1:-1;;;16065:18:12;;;16058:39;16114:19;;11659:119:3;15908:231:12;11659:119:3;-1:-1:-1;;;;;11796:16:3;;11788:65;;;;-1:-1:-1;;;11788:65:3;;11319:2:12;11788:65:3;;;11301:21:12;11358:2;11338:18;;;11331:30;11397:34;11377:18;;;11370:62;-1:-1:-1;;;11448:18:12;;;11441:34;11492:19;;11788:65:3;11291:226:12;11788:65:3;11965:29;11982:1;11986:7;11965:8;:29::i;:::-;-1:-1:-1;;;;;12005:15:3;;;;;;:9;:15;;;;;:20;;12024:1;;12005:15;:20;;12024:1;;12005:20;:::i;:::-;;;;-1:-1:-1;;;;;;;12035:13:3;;;;;;:9;:13;;;;;:18;;12052:1;;12035:13;:18;;12052:1;;12035:18;:::i;:::-;;;;-1:-1:-1;;12063:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;12063:21:3;-1:-1:-1;;;;;12063:21:3;;;;;;;;;12100:27;;12063:16;;12100:27;;;;;;;11540:594;;;:::o;8965:313:10:-;9073:7;;9104:9;-1:-1:-1;;;;;9104:9:10;;:1;:9;:::i;:::-;9092:21;-1:-1:-1;9123:9:10;9135;-1:-1:-1;;;;;9135:9:10;;:1;:9;:::i;:::-;9123:21;-1:-1:-1;9154:9:10;9166;-1:-1:-1;;;;;9166:9:10;;:1;:9;:::i;:::-;9154:21;-1:-1:-1;9185:9:10;9197;-1:-1:-1;;;;;9197:9:10;;:1;:9;:::i;:::-;9185:21;-1:-1:-1;;;;;;9256:15:10;;9257:5;9185:21;9257:1;:5;:::i;:::-;9256:15;;;;:::i;:::-;9248:5;9252:1;9248;:5;:::i;:::-;9240;9244:1;9240;:5;:::i;:::-;-1:-1:-1;;;;;9224:13:10;;:5;9228:1;9224;:5;:::i;:::-;:13;;;;:::i;:::-;:21;;;;:::i;:::-;:29;;;;:::i;:::-;:47;;;;:::i;:::-;9217:54;8965:313;-1:-1:-1;;;;;;;;8965:313:10:o;7981:::-;8027:7;8046:14;8063:38;8080:13;:20;;;;8063:16;:38::i;:::-;8046:55;;8111:15;8137:13;8151:6;8137:21;;;;;;-1:-1:-1;;;8137:21:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8129:30;;8111:48;;8194:13;8231:1;8208:13;:20;;;;:24;;;;:::i;:::-;8194:39;;;;;;-1:-1:-1;;;8194:39:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8170:13;8184:6;8170:21;;;;;;-1:-1:-1;;;8170:21:10;;;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;8243:13;:19;;;;;-1:-1:-1;;;8243:19:10;;;;;;;;;;;;;;;;;-1:-1:-1;;8243:19:10;;;;;;;;;;;;;;;;;;;;;;;;8280:7;7981:313;-1:-1:-1;;7981:313:10:o;10135:516:3:-;-1:-1:-1;;;;;10249:16:3;;10241:61;;;;-1:-1:-1;;;10241:61:3;;14801:2:12;10241:61:3;;;14783:21:12;;;14820:18;;;14813:30;14879:34;14859:18;;;14852:62;14931:18;;10241:61:3;14773:182:12;10241:61:3;10329:15;;-1:-1:-1;;;;;10312:13:3;;;;;;:9;:13;;;;;:32;;:13;;;:32;;10329:15;;10312:32;:::i;:::-;;;;-1:-1:-1;10360:9:3;;-1:-1:-1;10355:290:3;10375:8;:15;10371:1;:19;10355:290;;;10420:20;10428:8;10437:1;10428:11;;;;;;-1:-1:-1;;;10428:11:3;;;;;;;;;;;;;;;10420:7;:20::i;:::-;10419:21;10411:62;;;;-1:-1:-1;;;10411:62:3;;10242:2:12;10411:62:3;;;10224:21:12;10281:2;10261:18;;;10254:30;10320;10300:18;;;10293:58;10368:18;;10411:62:3;10214:178:12;10411:62:3;10488:49;10517:1;10521:2;10525:8;10534:1;10525:11;;;;;;-1:-1:-1;;;10525:11:3;;;;;;;;10488:49;10575:2;10552:7;:20;10560:8;10569:1;10560:11;;;;;;-1:-1:-1;;;10560:11:3;;;;;;;;;;;;;;;10552:20;;;;;;;;;;;;:25;;;;;-1:-1:-1;;;;;10552:25:3;;;;;-1:-1:-1;;;;;10552:25:3;;;;;;10622:8;10631:1;10622:11;;;;;;-1:-1:-1;;;10622:11:3;;;;;;;;;;;;;;;10618:2;-1:-1:-1;;;;;10597:37:3;10614:1;-1:-1:-1;;;;;10597:37:3;;;;;;;;;;;10392:3;;;;:::i;:::-;;;;10355:290;;9757:372;-1:-1:-1;;;;;9836:16:3;;9828:61;;;;-1:-1:-1;;;9828:61:3;;14801:2:12;9828:61:3;;;14783:21:12;;;14820:18;;;14813:30;14879:34;14859:18;;;14852:62;14931:18;;9828:61:3;14773:182:12;9828:61:3;9908:16;9916:7;9908;:16::i;:::-;9907:17;9899:58;;;;-1:-1:-1;;;9899:58:3;;10242:2:12;9899:58:3;;;10224:21:12;10281:2;10261:18;;;10254:30;10320;10300:18;;;10293:58;10368:18;;9899:58:3;10214:178:12;9899:58:3;-1:-1:-1;;;;;10024:13:3;;;;;;:9;:13;;;;;:18;;10041:1;;10024:13;:18;;10041:1;;10024:18;:::i;:::-;;;;-1:-1:-1;;10052:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10052:21:3;-1:-1:-1;;;;;10052:21:3;;;;;;;;10089:33;;10052:16;;;10089:33;;10052:16;;10089:33;9757:372;;:::o;7093:341::-;7244:28;7254:4;7260:2;7264:7;7244:9;:28::i;:::-;7303:48;7326:4;7332:2;7336:7;7345:5;7303:22;:48::i;:::-;7282:145;;;;-1:-1:-1;;;7282:145:3;;;;;;;:::i;271:703:11:-;327:13;544:10;540:51;;-1:-1:-1;;570:10:11;;;;;;;;;;;;-1:-1:-1;;;570:10:11;;;;;271:703::o;540:51::-;615:5;600:12;654:75;661:9;;654:75;;686:8;;;;:::i;:::-;;-1:-1:-1;708:10:11;;-1:-1:-1;716:2:11;708:10;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;-1:-1:-1;;;760:17:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:17:11;;738:39;;787:150;794:10;;787:150;;820:11;830:1;820:11;;:::i;:::-;;-1:-1:-1;888:10:11;896:2;888:5;:10;:::i;:::-;875:24;;:2;:24;:::i;:::-;862:39;;845:6;852;845:14;;;;;;-1:-1:-1;;;845:14:11;;;;;;;;;;;;:56;-1:-1:-1;;;;;845:56:11;;;;;;;;-1:-1:-1;915:11:11;924:2;915:11;;:::i;:::-;;;787:150;;8362:443:10;8548:13;:20;8426:7;;;;8600:16;8615:1;8600:12;:16;:::i;:::-;8510:231;;;;;;7803:19:12;;;;8590:27:10;;7838:12:12;;;7831:28;-1:-1:-1;;8639:14:10;7947:2:12;7943:15;;;7939:24;;7925:12;;;7918:46;8675:16:10;7980:12:12;;;7973:28;8713:10:10;8036:15:12;;8032:24;8017:13;;;8010:47;8073:13;;8510:231:10;;;-1:-1:-1;;8510:231:10;;;;;;;;;8483:272;;8510:231;8483:272;;;;;-1:-1:-1;8783:15:10;8792:6;8483:272;8783:15;:::i;12969:1022:3:-;13119:4;-1:-1:-1;;;;;13139:13:3;;1078:20:0;1116:8;13135:850:3;;13190:170;;-1:-1:-1;;;13190:170:3;;-1:-1:-1;;;;;13190:36:3;;;;;:170;;665:10:1;;13282:4:3;;13308:7;;13337:5;;13190:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13190:170:3;;;;;;;;-1:-1:-1;;13190:170:3;;;;;;;;;;;;:::i;:::-;;;13170:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13543:13:3;;13539:380;;13585:106;;-1:-1:-1;;;13585:106:3;;;;;;;:::i;13539:380::-;13871:6;13865:13;13856:6;13852:2;13848:15;13841:38;13170:763;-1:-1:-1;;;;;;13422:55:3;-1:-1:-1;;;13422:55:3;;-1:-1:-1;13415:62:3;;13135:850;-1:-1:-1;13970:4:3;12969:1022;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:12;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:12;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:12;;532:42;;522:2;;588:1;585;578:12;522:2;474:124;;;:::o;603:159::-;670:20;;730:6;719:18;;709:29;;699:2;;752:1;749;742:12;767:196;826:6;879:2;867:9;858:7;854:23;850:32;847:2;;;900:6;892;885:22;847:2;928:29;947:9;928:29;:::i;968:270::-;1036:6;1044;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1146:29;1165:9;1146:29;:::i;:::-;1136:39;;1194:38;1228:2;1217:9;1213:18;1194:38;:::i;:::-;1184:48;;1055:183;;;;;:::o;1243:338::-;1320:6;1328;1336;1389:2;1377:9;1368:7;1364:23;1360:32;1357:2;;;1410:6;1402;1395:22;1357:2;1438:29;1457:9;1438:29;:::i;:::-;1428:39;;1486:38;1520:2;1509:9;1505:18;1486:38;:::i;:::-;1476:48;;1571:2;1560:9;1556:18;1543:32;1533:42;;1347:234;;;;;:::o;1586:696::-;1681:6;1689;1697;1705;1758:3;1746:9;1737:7;1733:23;1729:33;1726:2;;;1780:6;1772;1765:22;1726:2;1808:29;1827:9;1808:29;:::i;:::-;1798:39;;1856:38;1890:2;1879:9;1875:18;1856:38;:::i;:::-;1846:48;;1941:2;1930:9;1926:18;1913:32;1903:42;;1996:2;1985:9;1981:18;1968:32;2023:18;2015:6;2012:30;2009:2;;;2060:6;2052;2045:22;2009:2;2088:22;;2141:4;2133:13;;2129:27;-1:-1:-1;2119:2:12;;2175:6;2167;2160:22;2119:2;2203:73;2268:7;2263:2;2250:16;2245:2;2241;2237:11;2203:73;:::i;:::-;2193:83;;;1716:566;;;;;;;:::o;2287:367::-;2352:6;2360;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2434:6;2426;2419:22;2381:2;2462:29;2481:9;2462:29;:::i;:::-;2452:39;;2541:2;2530:9;2526:18;2513:32;2588:5;2581:13;2574:21;2567:5;2564:32;2554:2;;2615:6;2607;2600:22;2554:2;2643:5;2633:15;;;2371:283;;;;;:::o;2659:264::-;2727:6;2735;2788:2;2776:9;2767:7;2763:23;2759:32;2756:2;;;2809:6;2801;2794:22;2756:2;2837:29;2856:9;2837:29;:::i;:::-;2827:39;2913:2;2898:18;;;;2885:32;;-1:-1:-1;;;2746:177:12:o;2928:1237::-;3043:6;3074:2;3117;3105:9;3096:7;3092:23;3088:32;3085:2;;;3138:6;3130;3123:22;3085:2;3183:9;3170:23;3216:18;3208:6;3205:30;3202:2;;;3253:6;3245;3238:22;3202:2;3281:22;;3334:4;3326:13;;3322:27;-1:-1:-1;3312:2:12;;3368:6;3360;3353:22;3312:2;3409;3396:16;3432:73;3448:56;3501:2;3448:56;:::i;:::-;3432:73;:::i;:::-;3527:3;3551:2;3546:3;3539:15;3579:2;3574:3;3570:12;3563:19;;3610:2;3606;3602:11;3658:7;3653:2;3647;3644:1;3640:10;3636:2;3632:19;3628:28;3625:41;3622:2;;;3684:6;3676;3669:22;3622:2;3711:6;3702:15;;3726:409;3740:2;3737:1;3734:9;3726:409;;;3795:4;3838:2;3832:3;3823:7;3819:17;3815:26;3812:2;;;3859:6;3851;3844:22;3812:2;3894:22;;:::i;:::-;3943:23;3962:3;3943:23;:::i;:::-;3929:38;;4016:12;;;4003:26;3987:14;;;3980:50;4043:18;;3758:1;3751:9;;;;;4081:12;;;;4113;3726:409;;;-1:-1:-1;4154:5:12;3054:1111;-1:-1:-1;;;;;;;3054:1111:12:o;4170:960::-;4254:6;4285:2;4328;4316:9;4307:7;4303:23;4299:32;4296:2;;;4349:6;4341;4334:22;4296:2;4394:9;4381:23;4427:18;4419:6;4416:30;4413:2;;;4464:6;4456;4449:22;4413:2;4492:22;;4545:4;4537:13;;4533:27;-1:-1:-1;4523:2:12;;4579:6;4571;4564:22;4523:2;4620;4607:16;4643:73;4659:56;4712:2;4659:56;:::i;4643:73::-;4738:3;4762:2;4757:3;4750:15;4790:2;4785:3;4781:12;4774:19;;4821:2;4817;4813:11;4869:7;4864:2;4858;4855:1;4851:10;4847:2;4843:19;4839:28;4836:41;4833:2;;;4895:6;4887;4880:22;4833:2;4922:6;4913:15;;4937:163;4951:2;4948:1;4945:9;4937:163;;;5008:17;;4996:30;;4969:1;4962:9;;;;;5046:12;;;;5078;;4937:163;;5135:255;5193:6;5246:2;5234:9;5225:7;5221:23;5217:32;5214:2;;;5267:6;5259;5252:22;5214:2;5311:9;5298:23;5330:30;5354:5;5330:30;:::i;5395:259::-;5464:6;5517:2;5505:9;5496:7;5492:23;5488:32;5485:2;;;5538:6;5530;5523:22;5485:2;5575:9;5569:16;5594:30;5618:5;5594:30;:::i;5659:480::-;5728:6;5781:2;5769:9;5760:7;5756:23;5752:32;5749:2;;;5802:6;5794;5787:22;5749:2;5847:9;5834:23;5880:18;5872:6;5869:30;5866:2;;;5917:6;5909;5902:22;5866:2;5945:22;;5998:4;5990:13;;5986:27;-1:-1:-1;5976:2:12;;6032:6;6024;6017:22;5976:2;6060:73;6125:7;6120:2;6107:16;6102:2;6098;6094:11;6060:73;:::i;6144:194::-;6202:6;6255:2;6243:9;6234:7;6230:23;6226:32;6223:2;;;6276:6;6268;6261:22;6223:2;6304:28;6322:9;6304:28;:::i;6343:266::-;6409:6;6417;6470:2;6458:9;6449:7;6445:23;6441:32;6438:2;;;6491:6;6483;6476:22;6438:2;6519:28;6537:9;6519:28;:::i;:::-;6509:38;;6566:37;6599:2;6588:9;6584:18;6566:37;:::i;6614:190::-;6673:6;6726:2;6714:9;6705:7;6701:23;6697:32;6694:2;;;6747:6;6739;6732:22;6694:2;-1:-1:-1;6775:23:12;;6684:120;-1:-1:-1;6684:120:12:o;6809:257::-;6850:3;6888:5;6882:12;6915:6;6910:3;6903:19;6931:63;6987:6;6980:4;6975:3;6971:14;6964:4;6957:5;6953:16;6931:63;:::i;:::-;7048:2;7027:15;-1:-1:-1;;7023:29:12;7014:39;;;;7055:4;7010:50;;6858:208;-1:-1:-1;;6858:208:12:o;7071:470::-;7250:3;7288:6;7282:13;7304:53;7350:6;7345:3;7338:4;7330:6;7326:17;7304:53;:::i;:::-;7420:13;;7379:16;;;;7442:57;7420:13;7379:16;7476:4;7464:17;;7442:57;:::i;:::-;7515:20;;7258:283;-1:-1:-1;;;;7258:283:12:o;8305:488::-;-1:-1:-1;;;;;8574:15:12;;;8556:34;;8626:15;;8621:2;8606:18;;8599:43;8673:2;8658:18;;8651:34;;;8721:3;8716:2;8701:18;;8694:31;;;8499:4;;8742:45;;8767:19;;8759:6;8742:45;:::i;:::-;8734:53;8508:285;-1:-1:-1;;;;;;8508:285:12:o;8990:219::-;9139:2;9128:9;9121:21;9102:4;9159:44;9199:2;9188:9;9184:18;9176:6;9159:44;:::i;9214:414::-;9416:2;9398:21;;;9455:2;9435:18;;;9428:30;9494:34;9489:2;9474:18;;9467:62;-1:-1:-1;;;9560:2:12;9545:18;;9538:48;9618:3;9603:19;;9388:240::o;12235:408::-;12437:2;12419:21;;;12476:2;12456:18;;;12449:30;12515:34;12510:2;12495:18;;12488:62;-1:-1:-1;;;12581:2:12;12566:18;;12559:42;12633:3;12618:19;;12409:234::o;15373:356::-;15575:2;15557:21;;;15594:18;;;15587:30;15653:34;15648:2;15633:18;;15626:62;15720:2;15705:18;;15547:182::o;16560:415::-;16762:2;16744:21;;;16801:2;16781:18;;;16774:30;16840:34;16835:2;16820:18;;16813:62;-1:-1:-1;;;16906:2:12;16891:18;;16884:49;16965:3;16950:19;;16734:241::o;17382:413::-;17584:2;17566:21;;;17623:2;17603:18;;;17596:30;17662:34;17657:2;17642:18;;17635:62;-1:-1:-1;;;17728:2:12;17713:18;;17706:47;17785:3;17770:19;;17556:239::o;19739:350::-;19941:2;19923:21;;;19980:2;19960:18;;;19953:30;20019:28;20014:2;19999:18;;19992:56;20080:2;20065:18;;19913:176::o;20276:257::-;20348:4;20342:11;;;20380:17;;20427:18;20412:34;;20448:22;;;20409:62;20406:2;;;20474:18;;:::i;:::-;20510:4;20503:24;20322:211;:::o;20538:275::-;20609:2;20603:9;20674:2;20655:13;;-1:-1:-1;;20651:27:12;20639:40;;20709:18;20694:34;;20730:22;;;20691:62;20688:2;;;20756:18;;:::i;:::-;20792:2;20785:22;20583:230;;-1:-1:-1;20583:230:12:o;20818:196::-;20891:4;20924:18;20916:6;20913:30;20910:2;;;20946:18;;:::i;:::-;-1:-1:-1;20991:1:12;20987:14;21003:4;20983:25;;20900:114::o;21019:253::-;21059:3;-1:-1:-1;;;;;21148:2:12;21145:1;21141:10;21178:2;21175:1;21171:10;21209:3;21205:2;21201:12;21196:3;21193:21;21190:2;;;21217:18;;:::i;21277:128::-;21317:3;21348:1;21344:6;21341:1;21338:13;21335:2;;;21354:18;;:::i;:::-;-1:-1:-1;21390:9:12;;21325:80::o;21410:120::-;21450:1;21476;21466:2;;21481:18;;:::i;:::-;-1:-1:-1;21515:9:12;;21456:74::o;21535:168::-;21575:7;21641:1;21637;21633:6;21629:14;21626:1;21623:21;21618:1;21611:9;21604:17;21600:45;21597:2;;;21648:18;;:::i;:::-;-1:-1:-1;21688:9:12;;21587:116::o;21708:125::-;21748:4;21776:1;21773;21770:8;21767:2;;;21781:18;;:::i;:::-;-1:-1:-1;21818:9:12;;21757:76::o;21838:258::-;21910:1;21920:113;21934:6;21931:1;21928:13;21920:113;;;22010:11;;;22004:18;21991:11;;;21984:39;21956:2;21949:10;21920:113;;;22051:6;22048:1;22045:13;22042:2;;;-1:-1:-1;;22086:1:12;22068:16;;22061:27;21891:205::o;22101:380::-;22180:1;22176:12;;;;22223;;;22244:2;;22298:4;22290:6;22286:17;22276:27;;22244:2;22351;22343:6;22340:14;22320:18;22317:38;22314:2;;;22397:10;22392:3;22388:20;22385:1;22378:31;22432:4;22429:1;22422:15;22460:4;22457:1;22450:15;22486:197;22524:3;22552:6;22593:2;22586:5;22582:14;22620:2;22611:7;22608:15;22605:2;;;22626:18;;:::i;:::-;22675:1;22662:15;;22532:151;-1:-1:-1;;;22532:151:12:o;22688:135::-;22727:3;-1:-1:-1;;22748:17:12;;22745:2;;;22768:18;;:::i;:::-;-1:-1:-1;22815:1:12;22804:13;;22735:88::o;22828:112::-;22860:1;22886;22876:2;;22891:18;;:::i;:::-;-1:-1:-1;22925:9:12;;22866:74::o;22945:127::-;23006:10;23001:3;22997:20;22994:1;22987:31;23037:4;23034:1;23027:15;23061:4;23058:1;23051:15;23077:127;23138:10;23133:3;23129:20;23126:1;23119:31;23169:4;23166:1;23159:15;23193:4;23190:1;23183:15;23209:127;23270:10;23265:3;23261:20;23258:1;23251:31;23301:4;23298:1;23291:15;23325:4;23322:1;23315:15;23341:131;-1:-1:-1;;;;;;23415:32:12;;23405:43;;23395:2;;23462:1;23459;23452:12;23395:2;23385:87;:::o

Swarm Source

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