ETH Price: $3,000.20 (+2.92%)
Gas: 2 Gwei

Token

DooggiesSnack (DooggiesSnack)
 

Overview

Max Total Supply

1,110 DooggiesSnack

Holders

199

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
mikehoncho97.eth
Balance
1 DooggiesSnack
0x1c238fa5a4a088b3ad0c80c91cf23a714d78d983
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:
DooggiesSnack

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-11
*/

// SPDX-License-Identifier: MIT

//  ▄▄▄▄▄▄  ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ 
// █      ██       █       █       █       █   █       █       █
// █  ▄    █   ▄   █   ▄   █   ▄▄▄▄█   ▄▄▄▄█   █    ▄▄▄█  ▄▄▄▄▄█
// █ █ █   █  █ █  █  █ █  █  █  ▄▄█  █  ▄▄█   █   █▄▄▄█ █▄▄▄▄▄ 
// █ █▄█   █  █▄█  █  █▄█  █  █ █  █  █ █  █   █    ▄▄▄█▄▄▄▄▄  █
// █       █       █       █  █▄▄█ █  █▄▄█ █   █   █▄▄▄ ▄▄▄▄▄█ █
// █▄▄▄▄▄▄██▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█
//
//  ▄▄   ▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄  ▄▄▄▄▄▄▄    ▄     ▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄   ▄▄ 
// █  █▄█  █      █      ██       █  █ █ ▄ █ █   █       █  █ █  █
// █       █  ▄   █  ▄    █    ▄▄▄█  █ ██ ██ █   █▄     ▄█  █▄█  █
// █       █ █▄█  █ █ █   █   █▄▄▄   █       █   █ █   █ █       █
// █       █      █ █▄█   █    ▄▄▄█  █       █   █ █   █ █   ▄   █
// █ ██▄██ █  ▄   █       █   █▄▄▄   █   ▄   █   █ █   █ █  █ █  █
// █▄█   █▄█▄█ █▄▄█▄▄▄▄▄▄██▄▄▄▄▄▄▄█  █▄▄█ █▄▄█▄▄▄█ █▄▄▄█ █▄▄█ █▄▄█
//
//  ▄▄▄     ▄▄▄▄▄▄▄ ▄▄   ▄▄ ▄▄▄▄▄▄▄ 
// █   █   █       █  █ █  █       █
// █   █   █   ▄   █  █▄█  █    ▄▄▄█
// █   █   █  █ █  █       █   █▄▄▄ 
// █   █▄▄▄█  █▄█  █       █    ▄▄▄█
// █       █       ██     ██   █▄▄▄ 
// █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█
//

pragma solidity 0.8.10;

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

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

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    IERC1155 internal dooggies;
    bool internal _isMintedOut = false;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) internal _owners;
    mapping(address => uint256) internal _balances;
    mapping(uint => uint) internal idStakeLockTimes;
    mapping(uint => bool) internal OGDooggiesMintedNewNew;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_, address dooggiesContract) {
        _name = name_;
        _symbol = symbol_;
        dooggies = IERC1155(dooggiesContract);
    }

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

    function balanceOf(address owner) external view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        if(_isMintedOut == false && idStakeLockTimes[tokenId] != 0 && OGDooggiesMintedNewNew[tokenId] == false) {
            return address(this);
        }
        return owner;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }

    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) external 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())) : "";
    }

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

    function approve(address to, uint256 tokenId) external virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) external virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

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

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

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender || owner == address(this));
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        if(_isMintedOut == false) {
            require(idStakeLockTimes[tokenId] == 0 || OGDooggiesMintedNewNew[tokenId], "NFT Cant currently be sent cause its staked");
        }
        require(ERC721.ownerOf(tokenId) == from || from == address(this), "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

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

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

        emit Transfer(from, to, tokenId);
    }

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

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

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

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
    }

    uint256 internal _currentIndex;
    string private _name;
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

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

    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    function balanceOf(address owner) external view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
                while (true) {
                    curr--;
                    ownership = _ownerships[curr];
                    if (ownership.addr != address(0)) {
                            return ownership;
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }

    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) external view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    function approve(address to, uint256 tokenId) external override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) external virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external virtual override {
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

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

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

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

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

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

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

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }
}

contract DooggiesSnack is ERC721A, Ownable {
    address private devOwner;
    address private whoCanMint;
    bool internal _revealed = false;
    bool internal mintEnabled = true;

    string private baseURIForNewNew = "ipfs://QmUtKHbiThL5FikUuUgvLrH7HdNzQ9KmfUtDsE6o3hUKTp";
    string private baseExt = "";

    constructor(address owner_, address whoCanMint_) ERC721A("DooggiesSnack", "DooggiesSnack") { // not the real name ;)
        devOwner = owner_;
        whoCanMint = whoCanMint_;
    }

    receive() external payable {
        (bool sent, ) = payable(owner()).call{value: msg.value}("");
        require(sent, "Failed to send Ether");
    }

    function mint(uint256 numberOfTokens, address user) external {
        require(mintEnabled, "Cant mint yet");
        require(whoCanMint == msg.sender, "You cant mint");
        require(
            numberOfTokens + totalSupply() <= 5000,
            "Not enough supply"
        );
        _safeMint(user, numberOfTokens);
    }

    function reveal(bool revealed, string calldata _baseURI) external {
        require(msg.sender == devOwner, "You are not the owner");
        _revealed = revealed;
        baseURIForNewNew = _baseURI;
    }

    function setExtension(string calldata _baseExt) external {
        require(msg.sender == devOwner, "You are not the owner");
        baseExt = _baseExt;
    }

    function updateOwner(address owner_) external {
        require(msg.sender == devOwner, "You are not the owner");
        require(owner_ != address(0));
        devOwner = owner_;
    }

    function toggleMint() external {
        require(msg.sender == devOwner, "You are not the owner");
        mintEnabled = !mintEnabled;
    }

    function isMintEnabled() external view returns (bool) {
        return mintEnabled;
    }

    function tokenURI(uint256 tokenId)
        external
        view
        virtual
        override
        returns (string memory)
    {
        if (_revealed) {
            return string(abi.encodePacked(baseURIForNewNew, Strings.toString(tokenId), baseExt));
        } else {
            return string(abi.encodePacked(baseURIForNewNew));
        }
    }
}

contract WrapYourDooggies is ERC721, ReentrancyGuard, IERC721Receiver, IERC1155Receiver, Ownable {
    address private devOwner;
    bool private lockMintForever = false;
    uint private totalAmount = 0;

    uint constant private dayCount = 60 days;
    uint constant private mintOutLock = 365 days;
    uint private whenDidWeDeploy;

    string private baseURIForOGDooggies = "ipfs://QmSRPvb4E4oT8J73QoWGyvdFizWzpMkkSozAnCEMjT5K7G/";
    string private baseExt = "";

    DooggiesSnack dooggiesSnack; // Hmm you curious what this could be if youre a reader of the github???

    constructor(address dooggiesContract) ERC721("Dooggies", "Dooggies", dooggiesContract) {
        devOwner = address(0xf8c45B2375a574BecA18224C47353969C044a9EC);
        dooggiesSnack = new DooggiesSnack(devOwner, address(this));
        whenDidWeDeploy = block.timestamp;
    }

    receive() external payable {
        (bool sent, ) = payable(owner()).call{value: msg.value}("");
        require(sent, "Failed to send Ether");
    }

    function wrapMany(uint[] calldata tokenIds) nonReentrant external {
        require(
            dooggies.isApprovedForAll(msg.sender, address(this)),
            "You need approval"
        );
        require(tokenIds.length > 0, "Must have something");

        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, "");

            for(uint i = 0; i < count; i++) {
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                safeTransferFrom(address(this), msg.sender, tokenIds[i]);
            }
        }
    }

    function unwrapMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that");
                safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            }

            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(address(this), msg.sender, tokenIds, qty, "");
        }
    }

    function wrapManyAndStake(uint[] calldata tokenIds) nonReentrant external {
        require(
            dooggies.isApprovedForAll(msg.sender, address(this)),
            "You need approval"
        );
        require(tokenIds.length > 0, "Must have something");
        require(_isMintedOut == false, "Already minted out");

        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, "");

            for(uint i = 0; i < count; i++) {
                require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked");
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                _owners[tokenIds[i]] = msg.sender;
                idStakeLockTimes[tokenIds[i]] = block.timestamp;
                // lol so it shows up on Opensea xD
                // since we want to funnel people here on first wrap :)
                // This will put it in the users wallet on opensea but not allow
                // them to sell since they dont own the asset
                emit Transfer(msg.sender, address(this), tokenIds[i]);
            }
        }
    }

    function stakeMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        require(_isMintedOut == false, "Already minted out");
        unchecked {
            uint count = tokenIds.length;
            for(uint i = 0; i < count; i++) {
                require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that");
                safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            }

            for(uint i = 0; i < count; i++) {
                require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked");
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                _owners[tokenIds[i]] = msg.sender;
                idStakeLockTimes[tokenIds[i]] = block.timestamp;
            }
        }
    }

    function unStakeMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        unchecked {
            uint count = tokenIds.length;

            for(uint i = 0; i < count; i++) {
                require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                require(idStakeLockTimes[tokenIds[i]] != 0, "Bruh.. this is not staked");
                idStakeLockTimes[tokenIds[i]] = 0;
                safeTransferFrom(address(this), msg.sender, tokenIds[i]);
            }
        }
    }

    function zMintNewNew(uint[] calldata tokenIds) nonReentrant external {
        require(_isMintedOut == false, "Already minted out");
        unchecked {
            uint count = tokenIds.length;
            require(count >= 2, "You need at least two dooggies to mint");

            uint amountToMint = 0;
            uint8 localCounter = 0;
            for(uint i = 0; i < count; i++) {
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only mint once.");
                require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that");
                if(block.timestamp - idStakeLockTimes[tokenIds[i]] >= dayCount) {
                    OGDooggiesMintedNewNew[tokenIds[i]] = true;
                    localCounter += 1;
                    if(localCounter >= 2) {
                        localCounter = 0;
                        amountToMint += 1;
                    }
                    safeTransferFrom(address(this), msg.sender, tokenIds[i]);
                }
            }
            require(amountToMint > 0, "Need to have some to mint");

            dooggiesSnack.mint(amountToMint, msg.sender);
        }
    }

    function zzMintOutMystery(uint amount) external {
        require(msg.sender == devOwner, "You are not the owner");
        
        // give people time to wrap for the mystery mint. 
        // they will always be able to wrap but not be able to mint out
        require(block.timestamp - whenDidWeDeploy >= mintOutLock);
        
        dooggiesSnack.mint(amount, msg.sender);

        if(dooggiesSnack.totalSupply() > 4999) {
            _isMintedOut = true;
        }
    }

    function zzLockMint() external {
        require(msg.sender == devOwner, "You are not the owner");
        require(lockMintForever == false, "Mint is already locked");
        lockMintForever = true;
    }

    function zzinitialise(uint256[] calldata tokenIds) external {
        require(lockMintForever == false, "You can no longer mint");
        require(msg.sender == devOwner, "You are not the owner");

        uint count = tokenIds.length;
        require(count > 0, "Must have something");
        _balances[address(this)] += count;

        emit Transfer(address(this), address(this), tokenIds[0]);

        unchecked {
            totalAmount += count;
        }

        // update the balances so that on wrapping the contract logic works
        for (uint256 i = 0; i < count; i++) {
            require(_owners[tokenIds[i]] == address(0), "You cant mint twice");
            _owners[tokenIds[i]] = address(this);
        }
    }

    function updateOwner(address owner_) external {
        require(msg.sender == devOwner, "You are not the owner");
        require(owner_ != address(0));
        devOwner = owner_;
    }

    function setExtension(string calldata _baseExt) external {
        require(msg.sender == devOwner, "You are not the owner");
        baseExt = _baseExt;
    }

    function onERC721Received(address, address, uint256, bytes calldata) pure external returns(bytes4) {
        return WrapYourDooggies.onERC721Received.selector;
    }

    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) pure external returns (bytes4) {
        return WrapYourDooggies.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) pure external returns (bytes4) {
        return WrapYourDooggies.onERC1155BatchReceived.selector;
    }

    function tokenURI(uint256 tokenId)
        external
        view
        virtual
        override
        returns (string memory)
    {
        return string(abi.encodePacked(baseURIForOGDooggies, Strings.toString(tokenId), baseExt)); 
    }

    function setURIOG(string calldata _baseURI) external {
        require(msg.sender == devOwner, "Step off brah");
        baseURIForOGDooggies = _baseURI;
    }

    function totalSupply() external view returns (uint256) {
        return totalAmount;
    }

    function newnewAddress() external view returns (address) {
        return address(dooggiesSnack);
    }

    function timeLeftForID(uint tokenID) external view returns (uint) {
        if((block.timestamp - idStakeLockTimes[tokenID]) < dayCount) {
            return dayCount - (block.timestamp - idStakeLockTimes[tokenID]);
        } else {
            return 0;
        }
    }

    function hasIDBeenMinted(uint tokenID) external view returns (bool) {
        return OGDooggiesMintedNewNew[tokenID];
    }

    function isStaked(uint tokenID) external view returns (bool) {
        return idStakeLockTimes[tokenID] != 0 && OGDooggiesMintedNewNew[tokenID] == false;
    }

    function isMintLocked() external view returns (bool) {
        return lockMintForever;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"whoCanMint_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"reveal","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":"_baseExt","type":"string"}],"name":"setExtension","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":[],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6009805461ffff60a01b1916600160a81b17905560e0604052603560808181529062001ca760a03980516200003d91600a9160209091019062000184565b506040805160208101918290526000908190526200005e91600b9162000184565b503480156200006c57600080fd5b5060405162001cdc38038062001cdc8339810160408190526200008f9162000247565b604080518082018252600d8082526c446f6f6767696573536e61636b60981b602080840182815285518087019096529285528401528151919291620000d79160019162000184565b508051620000ed90600290602084019062000184565b5050600160005550620001003362000132565b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055620002bc565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000192906200027f565b90600052602060002090601f016020900481019282620001b6576000855562000201565b82601f10620001d157805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000201578251825591602001919060010190620001e4565b506200020f92915062000213565b5090565b5b808211156200020f576000815560010162000214565b80516001600160a01b03811681146200024257600080fd5b919050565b600080604083850312156200025b57600080fd5b62000266836200022a565b915062000276602084016200022a565b90509250929050565b600181811c908216806200029457607f821691505b60208210811415620002b657634e487b7160e01b600052602260045260246000fd5b50919050565b6119db80620002cc6000396000f3fe6080604052600436106101395760003560e01c8063880cdc31116100ab578063a22cb4651161006f578063a22cb4651461041c578063b88d4fde1461043c578063c87b56dd1461045c578063d3dd5fe01461047c578063e985e9c514610491578063f2fde38b146104da57600080fd5b8063880cdc31146103895780638da5cb5b146103a957806394bf804d146103c757806395d89b41146103e7578063a101ff6d146103fc57600080fd5b806323b872dd116100fd57806323b872dd146102ca578063346de50a146102ea57806342842e0e146103095780636352211e1461032957806370a08231146103495780637e2285aa1461036957600080fd5b806301ffc9a7146101f657806306fdde031461022b578063081812fc1461024d578063095ea7b31461028557806318160ddd146102a757600080fd5b366101f15760006101526007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461019c576040519150601f19603f3d011682016040523d82523d6000602084013e6101a1565b606091505b50509050806101ee5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b34801561020257600080fd5b506102166102113660046113b4565b6104fa565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b5061024061054c565b6040516102229190611430565b34801561025957600080fd5b5061026d610268366004611443565b6105de565b6040516001600160a01b039091168152602001610222565b34801561029157600080fd5b506102a56102a0366004611473565b610622565b005b3480156102b357600080fd5b50600054600019015b604051908152602001610222565b3480156102d657600080fd5b506102a56102e536600461149d565b6106b0565b3480156102f657600080fd5b50600954600160a81b900460ff16610216565b34801561031557600080fd5b506102a561032436600461149d565b6106bb565b34801561033557600080fd5b5061026d610344366004611443565b6106d6565b34801561035557600080fd5b506102bc6103643660046114d9565b6106e8565b34801561037557600080fd5b506102a561038436600461153d565b610737565b34801561039557600080fd5b506102a56103a43660046114d9565b61076d565b3480156103b557600080fd5b506007546001600160a01b031661026d565b3480156103d357600080fd5b506102a56103e236600461157f565b6107cc565b3480156103f357600080fd5b506102406108c9565b34801561040857600080fd5b506102a56104173660046115bb565b6108d8565b34801561042857600080fd5b506102a561043736600461160e565b61092b565b34801561044857600080fd5b506102a561045736600461164e565b6109c1565b34801561046857600080fd5b50610240610477366004611443565b610a0c565b34801561048857600080fd5b506102a5610a6d565b34801561049d57600080fd5b506102166104ac36600461172a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156104e657600080fd5b506102a56104f53660046114d9565b610ab8565b60006001600160e01b031982166380ac58cd60e01b148061052b57506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461055b90611754565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611754565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b60006105e982610b31565b610606576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061062d826106d6565b9050806001600160a01b0316836001600160a01b031614156106625760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610682575061068081336104ac565b155b156106a0576040516367d9dca160e11b815260040160405180910390fd5b6106ab838383610b47565b505050565b6106ab838383610ba3565b6106ab838383604051806020016040528060008152506109c1565b60006106e182610d92565b5192915050565b60006001600160a01b038216610711576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107615760405162461bcd60e51b81526004016101e59061178f565b6106ab600b8383611305565b6008546001600160a01b031633146107975760405162461bcd60e51b81526004016101e59061178f565b6001600160a01b0381166107aa57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600160a81b900460ff166108155760405162461bcd60e51b815260206004820152600d60248201526c10d85b9d081b5a5b9d081e595d609a1b60448201526064016101e5565b6009546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820152600d60248201526c165bdd4818d85b9d081b5a5b9d609a1b60448201526064016101e5565b61138861086f6000546000190190565b61087990846117d4565b11156108bb5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101e5565b6108c58183610e7b565b5050565b60606002805461055b90611754565b6008546001600160a01b031633146109025760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a01b1916600160a01b85151502179055610925600a8383611305565b50505050565b6001600160a01b0382163314156109555760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109cc848484610ba3565b6001600160a01b0383163b151580156109ee57506109ec84848484610e95565b155b15610925576040516368d2bf6b60e11b815260040160405180910390fd5b600954606090600160a01b900460ff1615610a5657600a610a2c83610f7e565b600b604051602001610a4093929190611886565b6040516020818303038152906040529050919050565b600a604051602001610a4091906118b9565b919050565b6008546001600160a01b03163314610a975760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610ac061107c565b6001600160a01b038116610b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101e5565b610b2e816110d8565b50565b6000816001111580156105465750506000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610bae82610d92565b9050836001600160a01b031681600001516001600160a01b031614610be55760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610c035750610c0385336104ac565b80610c1e575033610c13846105de565b6001600160a01b0316145b905080610c3e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610c6557604051633a954ecd60e21b815260040160405180910390fd5b610c7160008487610b47565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610d47576000548214610d47578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051808201909152600080825260208201528180600111158015610db9575060005481105b15610e62576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e0b579392505050565b50600019016000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e5d579392505050565b610e0b565b604051636f96cda160e11b815260040160405180910390fd5b6108c582826040518060200160405280600081525061112a565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610eca9033908990889088906004016118c5565b6020604051808303816000875af1925050508015610f05575060408051601f3d908101601f19168201909252610f0291810190611902565b60015b610f60573d808015610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b508051610f58576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610fa25750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fcc5780610fb68161191f565b9150610fc59050600a83611950565b9150610fa6565b60008167ffffffffffffffff811115610fe757610fe7611638565b6040519080825280601f01601f191660200182016040528015611011576020820181803683370190505b5090505b8415610f7657611026600183611964565b9150611033600a8661197b565b61103e9060306117d4565b60f81b8183815181106110535761105361198f565b60200101906001600160f81b031916908160001a905350611075600a86611950565b9450611015565b6007546001600160a01b031633146110d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101e5565b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106ab83838360016000546001600160a01b03851661115b57604051622e076360e81b815260040160405180910390fd5b836111795760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600390925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561122b57506001600160a01b0387163b15155b156112b4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461127c6000888480600101955088610e95565b611299576040516368d2bf6b60e11b815260040160405180910390fd5b808214156112315782600054146112af57600080fd5b6112fa565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156112b5575b506000555050505050565b82805461131190611754565b90600052602060002090601f0160209004810192826113335760008555611379565b82601f1061134c5782800160ff19823516178555611379565b82800160010185558215611379579182015b8281111561137957823582559160200191906001019061135e565b50611385929150611389565b5090565b5b80821115611385576000815560010161138a565b6001600160e01b031981168114610b2e57600080fd5b6000602082840312156113c657600080fd5b81356113d18161139e565b9392505050565b60005b838110156113f35781810151838201526020016113db565b838111156109255750506000910152565b6000815180845261141c8160208601602086016113d8565b601f01601f19169290920160200192915050565b6020815260006113d16020830184611404565b60006020828403121561145557600080fd5b5035919050565b80356001600160a01b0381168114610a6857600080fd5b6000806040838503121561148657600080fd5b61148f8361145c565b946020939093013593505050565b6000806000606084860312156114b257600080fd5b6114bb8461145c565b92506114c96020850161145c565b9150604084013590509250925092565b6000602082840312156114eb57600080fd5b6113d18261145c565b60008083601f84011261150657600080fd5b50813567ffffffffffffffff81111561151e57600080fd5b60208301915083602082850101111561153657600080fd5b9250929050565b6000806020838503121561155057600080fd5b823567ffffffffffffffff81111561156757600080fd5b611573858286016114f4565b90969095509350505050565b6000806040838503121561159257600080fd5b823591506115a26020840161145c565b90509250929050565b80358015158114610a6857600080fd5b6000806000604084860312156115d057600080fd5b6115d9846115ab565b9250602084013567ffffffffffffffff8111156115f557600080fd5b611601868287016114f4565b9497909650939450505050565b6000806040838503121561162157600080fd5b61162a8361145c565b91506115a2602084016115ab565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561166457600080fd5b61166d8561145c565b935061167b6020860161145c565b925060408501359150606085013567ffffffffffffffff8082111561169f57600080fd5b818701915087601f8301126116b357600080fd5b8135818111156116c5576116c5611638565b604051601f8201601f19908116603f011681019083821181831017156116ed576116ed611638565b816040528281528a602084870101111561170657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561173d57600080fd5b6117468361145c565b91506115a26020840161145c565b600181811c9082168061176857607f821691505b6020821081141561178957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117e7576117e76117be565b500190565b8054600090600181811c908083168061180657607f831692505b602080841082141561182857634e487b7160e01b600052602260045260246000fd5b81801561183c576001811461184d5761187a565b60ff1986168952848901965061187a565b60008881526020902060005b868110156118725781548b820152908501908301611859565b505084890196505b50505050505092915050565b600061189282866117ec565b84516118a28183602089016113d8565b6118ae818301866117ec565b979650505050505050565b60006113d182846117ec565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118f890830184611404565b9695505050505050565b60006020828403121561191457600080fd5b81516113d18161139e565b6000600019821415611933576119336117be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261195f5761195f61193a565b500490565b600082821015611976576119766117be565b500390565b60008261198a5761198a61193a565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af64736f6c634300080a0033697066733a2f2f516d55744b48626954684c3546696b55755567764c72483748644e7a51394b6d665574447345366f3368554b5470000000000000000000000000f8c45b2375a574beca18224c47353969c044a9ec000000000000000000000000b4e62d6363f82e0e74e8963828815f907eab2c66

Deployed Bytecode

0x6080604052600436106101395760003560e01c8063880cdc31116100ab578063a22cb4651161006f578063a22cb4651461041c578063b88d4fde1461043c578063c87b56dd1461045c578063d3dd5fe01461047c578063e985e9c514610491578063f2fde38b146104da57600080fd5b8063880cdc31146103895780638da5cb5b146103a957806394bf804d146103c757806395d89b41146103e7578063a101ff6d146103fc57600080fd5b806323b872dd116100fd57806323b872dd146102ca578063346de50a146102ea57806342842e0e146103095780636352211e1461032957806370a08231146103495780637e2285aa1461036957600080fd5b806301ffc9a7146101f657806306fdde031461022b578063081812fc1461024d578063095ea7b31461028557806318160ddd146102a757600080fd5b366101f15760006101526007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461019c576040519150601f19603f3d011682016040523d82523d6000602084013e6101a1565b606091505b50509050806101ee5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b34801561020257600080fd5b506102166102113660046113b4565b6104fa565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b5061024061054c565b6040516102229190611430565b34801561025957600080fd5b5061026d610268366004611443565b6105de565b6040516001600160a01b039091168152602001610222565b34801561029157600080fd5b506102a56102a0366004611473565b610622565b005b3480156102b357600080fd5b50600054600019015b604051908152602001610222565b3480156102d657600080fd5b506102a56102e536600461149d565b6106b0565b3480156102f657600080fd5b50600954600160a81b900460ff16610216565b34801561031557600080fd5b506102a561032436600461149d565b6106bb565b34801561033557600080fd5b5061026d610344366004611443565b6106d6565b34801561035557600080fd5b506102bc6103643660046114d9565b6106e8565b34801561037557600080fd5b506102a561038436600461153d565b610737565b34801561039557600080fd5b506102a56103a43660046114d9565b61076d565b3480156103b557600080fd5b506007546001600160a01b031661026d565b3480156103d357600080fd5b506102a56103e236600461157f565b6107cc565b3480156103f357600080fd5b506102406108c9565b34801561040857600080fd5b506102a56104173660046115bb565b6108d8565b34801561042857600080fd5b506102a561043736600461160e565b61092b565b34801561044857600080fd5b506102a561045736600461164e565b6109c1565b34801561046857600080fd5b50610240610477366004611443565b610a0c565b34801561048857600080fd5b506102a5610a6d565b34801561049d57600080fd5b506102166104ac36600461172a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156104e657600080fd5b506102a56104f53660046114d9565b610ab8565b60006001600160e01b031982166380ac58cd60e01b148061052b57506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461055b90611754565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611754565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b60006105e982610b31565b610606576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061062d826106d6565b9050806001600160a01b0316836001600160a01b031614156106625760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610682575061068081336104ac565b155b156106a0576040516367d9dca160e11b815260040160405180910390fd5b6106ab838383610b47565b505050565b6106ab838383610ba3565b6106ab838383604051806020016040528060008152506109c1565b60006106e182610d92565b5192915050565b60006001600160a01b038216610711576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107615760405162461bcd60e51b81526004016101e59061178f565b6106ab600b8383611305565b6008546001600160a01b031633146107975760405162461bcd60e51b81526004016101e59061178f565b6001600160a01b0381166107aa57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600160a81b900460ff166108155760405162461bcd60e51b815260206004820152600d60248201526c10d85b9d081b5a5b9d081e595d609a1b60448201526064016101e5565b6009546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820152600d60248201526c165bdd4818d85b9d081b5a5b9d609a1b60448201526064016101e5565b61138861086f6000546000190190565b61087990846117d4565b11156108bb5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101e5565b6108c58183610e7b565b5050565b60606002805461055b90611754565b6008546001600160a01b031633146109025760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a01b1916600160a01b85151502179055610925600a8383611305565b50505050565b6001600160a01b0382163314156109555760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109cc848484610ba3565b6001600160a01b0383163b151580156109ee57506109ec84848484610e95565b155b15610925576040516368d2bf6b60e11b815260040160405180910390fd5b600954606090600160a01b900460ff1615610a5657600a610a2c83610f7e565b600b604051602001610a4093929190611886565b6040516020818303038152906040529050919050565b600a604051602001610a4091906118b9565b919050565b6008546001600160a01b03163314610a975760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610ac061107c565b6001600160a01b038116610b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101e5565b610b2e816110d8565b50565b6000816001111580156105465750506000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610bae82610d92565b9050836001600160a01b031681600001516001600160a01b031614610be55760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610c035750610c0385336104ac565b80610c1e575033610c13846105de565b6001600160a01b0316145b905080610c3e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610c6557604051633a954ecd60e21b815260040160405180910390fd5b610c7160008487610b47565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610d47576000548214610d47578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051808201909152600080825260208201528180600111158015610db9575060005481105b15610e62576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e0b579392505050565b50600019016000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e5d579392505050565b610e0b565b604051636f96cda160e11b815260040160405180910390fd5b6108c582826040518060200160405280600081525061112a565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610eca9033908990889088906004016118c5565b6020604051808303816000875af1925050508015610f05575060408051601f3d908101601f19168201909252610f0291810190611902565b60015b610f60573d808015610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b508051610f58576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610fa25750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fcc5780610fb68161191f565b9150610fc59050600a83611950565b9150610fa6565b60008167ffffffffffffffff811115610fe757610fe7611638565b6040519080825280601f01601f191660200182016040528015611011576020820181803683370190505b5090505b8415610f7657611026600183611964565b9150611033600a8661197b565b61103e9060306117d4565b60f81b8183815181106110535761105361198f565b60200101906001600160f81b031916908160001a905350611075600a86611950565b9450611015565b6007546001600160a01b031633146110d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101e5565b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106ab83838360016000546001600160a01b03851661115b57604051622e076360e81b815260040160405180910390fd5b836111795760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600390925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561122b57506001600160a01b0387163b15155b156112b4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461127c6000888480600101955088610e95565b611299576040516368d2bf6b60e11b815260040160405180910390fd5b808214156112315782600054146112af57600080fd5b6112fa565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156112b5575b506000555050505050565b82805461131190611754565b90600052602060002090601f0160209004810192826113335760008555611379565b82601f1061134c5782800160ff19823516178555611379565b82800160010185558215611379579182015b8281111561137957823582559160200191906001019061135e565b50611385929150611389565b5090565b5b80821115611385576000815560010161138a565b6001600160e01b031981168114610b2e57600080fd5b6000602082840312156113c657600080fd5b81356113d18161139e565b9392505050565b60005b838110156113f35781810151838201526020016113db565b838111156109255750506000910152565b6000815180845261141c8160208601602086016113d8565b601f01601f19169290920160200192915050565b6020815260006113d16020830184611404565b60006020828403121561145557600080fd5b5035919050565b80356001600160a01b0381168114610a6857600080fd5b6000806040838503121561148657600080fd5b61148f8361145c565b946020939093013593505050565b6000806000606084860312156114b257600080fd5b6114bb8461145c565b92506114c96020850161145c565b9150604084013590509250925092565b6000602082840312156114eb57600080fd5b6113d18261145c565b60008083601f84011261150657600080fd5b50813567ffffffffffffffff81111561151e57600080fd5b60208301915083602082850101111561153657600080fd5b9250929050565b6000806020838503121561155057600080fd5b823567ffffffffffffffff81111561156757600080fd5b611573858286016114f4565b90969095509350505050565b6000806040838503121561159257600080fd5b823591506115a26020840161145c565b90509250929050565b80358015158114610a6857600080fd5b6000806000604084860312156115d057600080fd5b6115d9846115ab565b9250602084013567ffffffffffffffff8111156115f557600080fd5b611601868287016114f4565b9497909650939450505050565b6000806040838503121561162157600080fd5b61162a8361145c565b91506115a2602084016115ab565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561166457600080fd5b61166d8561145c565b935061167b6020860161145c565b925060408501359150606085013567ffffffffffffffff8082111561169f57600080fd5b818701915087601f8301126116b357600080fd5b8135818111156116c5576116c5611638565b604051601f8201601f19908116603f011681019083821181831017156116ed576116ed611638565b816040528281528a602084870101111561170657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561173d57600080fd5b6117468361145c565b91506115a26020840161145c565b600181811c9082168061176857607f821691505b6020821081141561178957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117e7576117e76117be565b500190565b8054600090600181811c908083168061180657607f831692505b602080841082141561182857634e487b7160e01b600052602260045260246000fd5b81801561183c576001811461184d5761187a565b60ff1986168952848901965061187a565b60008881526020902060005b868110156118725781548b820152908501908301611859565b505084890196505b50505050505092915050565b600061189282866117ec565b84516118a28183602089016113d8565b6118ae818301866117ec565b979650505050505050565b60006113d182846117ec565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118f890830184611404565b9695505050505050565b60006020828403121561191457600080fd5b81516113d18161139e565b6000600019821415611933576119336117be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261195f5761195f61193a565b500490565b600082821015611976576119766117be565b500390565b60008261198a5761198a61193a565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af64736f6c634300080a0033

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

000000000000000000000000f8c45b2375a574beca18224c47353969c044a9ec000000000000000000000000b4e62d6363f82e0e74e8963828815f907eab2c66

-----Decoded View---------------
Arg [0] : owner_ (address): 0xf8c45B2375a574BecA18224C47353969C044a9EC
Arg [1] : whoCanMint_ (address): 0xB4e62D6363f82E0E74E8963828815f907Eab2C66

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8c45b2375a574beca18224c47353969c044a9ec
Arg [1] : 000000000000000000000000b4e62d6363f82e0e74e8963828815f907eab2c66


Deployed Bytecode Sourcemap

27595:2228:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28153:9;28176:7;6169:6;;-1:-1:-1;;;;;6169:6:0;;6096:87;28176:7;-1:-1:-1;;;;;28168:21:0;28197:9;28168:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:59;;;28230:4;28222:37;;;;-1:-1:-1;;;28222:37:0;;426:2:1;28222:37:0;;;408:21:1;465:2;445:18;;;438:30;-1:-1:-1;;;484:18:1;;;477:50;544:18;;28222:37:0;;;;;;;;;28141:126;27595:2228;;;;;18749:305;;;;;;;;;;-1:-1:-1;18749:305:0;;;;;:::i;:::-;;:::i;:::-;;;1124:14:1;;1117:22;1099:41;;1087:2;1072:18;18749:305:0;;;;;;;;20151:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21186:204::-;;;;;;;;;;-1:-1:-1;21186:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2251:32:1;;;2233:51;;2221:2;2206:18;21186:204:0;2087:203:1;20805:373:0;;;;;;;;;;-1:-1:-1;20805:373:0;;;;;:::i;:::-;;:::i;:::-;;18453:288;;;;;;;;;;-1:-1:-1;18497:7:0;18691:13;-1:-1:-1;;18691:31:0;18453:288;;;2878:25:1;;;2866:2;2851:18;18453:288:0;2732:177:1;21867:172:0;;;;;;;;;;-1:-1:-1;21867:172:0;;;;;:::i;:::-;;:::i;29354:91::-;;;;;;;;;;-1:-1:-1;29426:11:0;;-1:-1:-1;;;29426:11:0;;;;29354:91;;22047:185;;;;;;;;;;-1:-1:-1;22047:185:0;;;;;:::i;:::-;;:::i;20018:125::-;;;;;;;;;;-1:-1:-1;20018:125:0;;;;;:::i;:::-;;:::i;19062:208::-;;;;;;;;;;-1:-1:-1;19062:208:0;;;;;:::i;:::-;;:::i;28837:161::-;;;;;;;;;;-1:-1:-1;28837:161:0;;;;;:::i;:::-;;:::i;29006:189::-;;;;;;;;;;-1:-1:-1;29006:189:0;;;;;:::i;:::-;;:::i;6096:87::-;;;;;;;;;;-1:-1:-1;6169:6:0;;-1:-1:-1;;;;;6169:6:0;6096:87;;28275:336;;;;;;;;;;-1:-1:-1;28275:336:0;;;;;:::i;:::-;;:::i;20261:106::-;;;;;;;;;;;;;:::i;28619:210::-;;;;;;;;;;-1:-1:-1;28619:210:0;;;;;:::i;:::-;;:::i;21398:289::-;;;;;;;;;;-1:-1:-1;21398:289:0;;;;;:::i;:::-;;:::i;22240:369::-;;;;;;;;;;-1:-1:-1;22240:369:0;;;;;:::i;:::-;;:::i;29453:367::-;;;;;;;;;;-1:-1:-1;29453:367:0;;;;;:::i;:::-;;:::i;29203:143::-;;;;;;;;;;;;;:::i;21695:164::-;;;;;;;;;;-1:-1:-1;21695:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;21816:25:0;;;21792:4;21816:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;21695:164;6331:201;;;;;;;;;;-1:-1:-1;6331:201:0;;;;;:::i;:::-;;:::i;18749:305::-;18851:4;-1:-1:-1;;;;;;18888:40:0;;-1:-1:-1;;;18888:40:0;;:105;;-1:-1:-1;;;;;;;18945:48:0;;-1:-1:-1;;;18945:48:0;18888:105;:158;;;-1:-1:-1;;;;;;;;;;9144:40:0;;;19010:36;18868:178;18749:305;-1:-1:-1;;18749:305:0:o;20151:102::-;20207:13;20240:5;20233:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20151:102;:::o;21186:204::-;21254:7;21279:16;21287:7;21279;:16::i;:::-;21274:64;;21304:34;;-1:-1:-1;;;21304:34:0;;;;;;;;;;;21274:64;-1:-1:-1;21358:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;21358:24:0;;21186:204::o;20805:373::-;20880:13;20896:24;20912:7;20896:15;:24::i;:::-;20880:40;;20941:5;-1:-1:-1;;;;;20935:11:0;:2;-1:-1:-1;;;;;20935:11:0;;20931:48;;;20955:24;;-1:-1:-1;;;20955:24:0;;;;;;;;;;;20931:48;5758:10;-1:-1:-1;;;;;20996:21:0;;;;;;:63;;-1:-1:-1;21022:37:0;21039:5;5758:10;21695:164;:::i;21022:37::-;21021:38;20996:63;20992:138;;;21083:35;;-1:-1:-1;;;21083:35:0;;;;;;;;;;;20992:138;21142:28;21151:2;21155:7;21164:5;21142:8;:28::i;:::-;20869:309;20805:373;;:::o;21867:172::-;22003:28;22013:4;22019:2;22023:7;22003:9;:28::i;22047:185::-;22185:39;22202:4;22208:2;22212:7;22185:39;;;;;;;;;;;;:16;:39::i;20018:125::-;20082:7;20109:21;20122:7;20109:12;:21::i;:::-;:26;;20018:125;-1:-1:-1;;20018:125:0:o;19062:208::-;19128:7;-1:-1:-1;;;;;19152:19:0;;19148:60;;19180:28;;-1:-1:-1;;;19180:28:0;;;;;;;;;;;19148:60;-1:-1:-1;;;;;;19234:19:0;;;;;:12;:19;;;;;:27;;;;19062:208::o;28837:161::-;28927:8;;-1:-1:-1;;;;;28927:8:0;28913:10;:22;28905:56;;;;-1:-1:-1;;;28905:56:0;;;;;;;:::i;:::-;28972:18;:7;28982:8;;28972:18;:::i;29006:189::-;29085:8;;-1:-1:-1;;;;;29085:8:0;29071:10;:22;29063:56;;;;-1:-1:-1;;;29063:56:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29138:20:0;;29130:29;;;;;;29170:8;:17;;-1:-1:-1;;;;;;29170:17:0;-1:-1:-1;;;;;29170:17:0;;;;;;;;;;29006:189::o;28275:336::-;28355:11;;-1:-1:-1;;;28355:11:0;;;;28347:37;;;;-1:-1:-1;;;28347:37:0;;7851:2:1;28347:37:0;;;7833:21:1;7890:2;7870:18;;;7863:30;-1:-1:-1;;;7909:18:1;;;7902:43;7962:18;;28347:37:0;7649:337:1;28347:37:0;28403:10;;-1:-1:-1;;;;;28403:10:0;28417;28403:24;28395:50;;;;-1:-1:-1;;;28395:50:0;;8193:2:1;28395:50:0;;;8175:21:1;8232:2;8212:18;;;8205:30;-1:-1:-1;;;8251:18:1;;;8244:43;8304:18;;28395:50:0;7991:337:1;28395:50:0;28512:4;28495:13;18497:7;18691:13;-1:-1:-1;;18691:31:0;;18453:288;28495:13;28478:30;;:14;:30;:::i;:::-;:38;;28456:105;;;;-1:-1:-1;;;28456:105:0;;8800:2:1;28456:105:0;;;8782:21:1;8839:2;8819:18;;;8812:30;-1:-1:-1;;;8858:18:1;;;8851:47;8915:18;;28456:105:0;8598:341:1;28456:105:0;28572:31;28582:4;28588:14;28572:9;:31::i;:::-;28275:336;;:::o;20261:106::-;20319:13;20352:7;20345:14;;;;;:::i;28619:210::-;28718:8;;-1:-1:-1;;;;;28718:8:0;28704:10;:22;28696:56;;;;-1:-1:-1;;;28696:56:0;;;;;;;:::i;:::-;28763:9;:20;;-1:-1:-1;;;;28763:20:0;-1:-1:-1;;;28763:20:0;;;;;;;28794:27;:16;28813:8;;28794:27;:::i;:::-;;28619:210;;;:::o;21398:289::-;-1:-1:-1;;;;;21499:24:0;;5758:10;21499:24;21495:54;;;21532:17;;-1:-1:-1;;;21532:17:0;;;;;;;;;;;21495:54;5758:10;21562:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;21562:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;21562:53:0;;;;;;;;;;21631:48;;1099:41:1;;;21562:42:0;;5758:10;21631:48;;1072:18:1;21631:48:0;;;;;;;21398:289;;:::o;22240:369::-;22407:28;22417:4;22423:2;22427:7;22407:9;:28::i;:::-;-1:-1:-1;;;;;22450:13:0;;5607:19;:23;;22450:76;;;;;22470:56;22501:4;22507:2;22511:7;22520:5;22470:30;:56::i;:::-;22469:57;22450:76;22446:156;;;22550:40;;-1:-1:-1;;;22550:40:0;;;;;;;;;;;29453:367;29608:9;;29573:13;;-1:-1:-1;;;29608:9:0;;;;29604:209;;;29665:16;29683:25;29700:7;29683:16;:25::i;:::-;29710:7;29648:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29634:85;;29453:367;;;:::o;29604:209::-;29783:16;29766:34;;;;;;;;:::i;29604:209::-;29453:367;;;:::o;29203:143::-;29267:8;;-1:-1:-1;;;;;29267:8:0;29253:10;:22;29245:56;;;;-1:-1:-1;;;29245:56:0;;;;;;;:::i;:::-;29327:11;;;-1:-1:-1;;;;29312:26:0;;-1:-1:-1;;;29327:11:0;;;;;;29326:12;29312:26;;;;;;29203:143::o;6331:201::-;6055:13;:11;:13::i;:::-;-1:-1:-1;;;;;6420:22:0;::::1;6412:73;;;::::0;-1:-1:-1;;;6412:73:0;;10913:2:1;6412:73:0::1;::::0;::::1;10895:21:1::0;10952:2;10932:18;;;10925:30;10991:34;10971:18;;;10964:62;-1:-1:-1;;;11042:18:1;;;11035:36;11088:19;;6412:73:0::1;10711:402:1::0;6412:73:0::1;6496:28;6515:8;6496:18;:28::i;:::-;6331:201:::0;:::o;22617:142::-;22674:4;22717:7;18436:1;22698:26;;:53;;;;-1:-1:-1;;22738:13:0;;-1:-1:-1;22728:23:0;22617:142::o;26717:196::-;26832:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;26832:29:0;-1:-1:-1;;;;;26832:29:0;;;;;;;;;26877:28;;26832:24;;26877:28;;;;;;;26717:196;;;:::o;24688:2021::-;24803:35;24841:21;24854:7;24841:12;:21::i;:::-;24803:59;;24901:4;-1:-1:-1;;;;;24879:26:0;:13;:18;;;-1:-1:-1;;;;;24879:26:0;;24875:67;;24914:28;;-1:-1:-1;;;24914:28:0;;;;;;;;;;;24875:67;24955:22;5758:10;-1:-1:-1;;;;;24981:20:0;;;;:73;;-1:-1:-1;25018:36:0;25035:4;5758:10;21695:164;:::i;25018:36::-;24981:126;;;-1:-1:-1;5758:10:0;25071:20;25083:7;25071:11;:20::i;:::-;-1:-1:-1;;;;;25071:36:0;;24981:126;24955:153;;25126:17;25121:66;;25152:35;;-1:-1:-1;;;25152:35:0;;;;;;;;;;;25121:66;-1:-1:-1;;;;;25202:16:0;;25198:52;;25227:23;;-1:-1:-1;;;25227:23:0;;;;;;;;;;;25198:52;25315:35;25332:1;25336:7;25345:4;25315:8;:35::i;:::-;-1:-1:-1;;;;;25646:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;25646:31:0;;;;;;;-1:-1:-1;;25646:31:0;;;;;;;25692:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;25692:29:0;;;;;;;;;;;25772:20;;;:11;:20;;;;;;25807:18;;-1:-1:-1;;;;;;25840:49:0;;;;-1:-1:-1;;;25873:15:0;25840:49;;;;;;;;;;26163:11;;26223:24;;;;;26266:13;;25772:20;;26223:24;;26266:13;26262:384;;26476:13;;26461:11;:28;26457:174;;26514:20;;26583:28;;;;26557:54;;-1:-1:-1;;;26557:54:0;-1:-1:-1;;;;;;26557:54:0;;;-1:-1:-1;;;;;26514:20:0;;26557:54;;;;26457:174;25621:1036;;;26693:7;26689:2;-1:-1:-1;;;;;26674:27:0;26683:4;-1:-1:-1;;;;;26674:27:0;;;;;;;;;;;24792:1917;;24688:2021;;;:::o;19278:732::-;-1:-1:-1;;;;;;;;;;;;;;;;;19389:7:0;;18436:1;19438:23;;:47;;;;;19472:13;;19465:4;:20;19438:47;19434:509;;;19506:31;19540:17;;;:11;:17;;;;;;;;;19506:51;;;;;;;;;-1:-1:-1;;;;;19506:51:0;;;;;-1:-1:-1;;;19506:51:0;;;;;;;;;;;;19580:28;19576:93;;19640:9;19278:732;-1:-1:-1;;;19278:732:0:o;19576:93::-;-1:-1:-1;;;19723:6:0;19764:17;;;;:11;:17;;;;;;;;;19752:29;;;;;;;;;-1:-1:-1;;;;;19752:29:0;;;;;-1:-1:-1;;;19752:29:0;;;;;;;;;;;;19808:28;19804:105;;19876:9;19278:732;-1:-1:-1;;;19278:732:0:o;19804:105::-;19687:241;;19434:509;19971:31;;-1:-1:-1;;;19971:31:0;;;;;;;;;;;22767:104;22836:27;22846:2;22850:8;22836:27;;;;;;;;;;;;:9;:27::i;26921:667::-;27105:72;;-1:-1:-1;;;27105:72:0;;27084:4;;-1:-1:-1;;;;;27105:36:0;;;;;:72;;5758:10;;27156:4;;27162:7;;27171:5;;27105:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27105:72:0;;;;;;;;-1:-1:-1;;27105:72:0;;;;;;;;;;;;:::i;:::-;;;27101:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27339:13:0;;27335:235;;27385:40;;-1:-1:-1;;;27385:40:0;;;;;;;;;;;27335:235;27528:6;27522:13;27513:6;27509:2;27505:15;27498:38;27101:480;-1:-1:-1;;;;;;27224:55:0;-1:-1:-1;;;27224:55:0;;-1:-1:-1;27101:480:0;26921:667;;;;;;:::o;8016:723::-;8072:13;8293:10;8289:53;;-1:-1:-1;;8320:10:0;;;;;;;;;;;;-1:-1:-1;;;8320:10:0;;;;;8016:723::o;8289:53::-;8367:5;8352:12;8408:78;8415:9;;8408:78;;8441:8;;;;:::i;:::-;;-1:-1:-1;8464:10:0;;-1:-1:-1;8472:2:0;8464:10;;:::i;:::-;;;8408:78;;;8496:19;8528:6;8518:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8518:17:0;;8496:39;;8546:154;8553:10;;8546:154;;8580:11;8590:1;8580:11;;:::i;:::-;;-1:-1:-1;8649:10:0;8657:2;8649:5;:10;:::i;:::-;8636:24;;:2;:24;:::i;:::-;8623:39;;8606:6;8613;8606:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8606:56:0;;;;;;;;-1:-1:-1;8677:11:0;8686:2;8677:11;;:::i;:::-;;;8546:154;;6191:132;6169:6;;-1:-1:-1;;;;;6169:6:0;5758:10;6255:23;6247:68;;;;-1:-1:-1;;;6247:68:0;;12844:2:1;6247:68:0;;;12826:21:1;;;12863:18;;;12856:30;12922:34;12902:18;;;12895:62;12974:18;;6247:68:0;12642:356:1;6247:68:0;6191:132::o;6540:191::-;6633:6;;;-1:-1:-1;;;;;6650:17:0;;;-1:-1:-1;;;;;;6650:17:0;;;;;;;6683:40;;6633:6;;;6650:17;6633:6;;6683:40;;6614:16;;6683:40;6603:128;6540:191;:::o;22879:163::-;23002:32;23008:2;23012:8;23022:5;23029:4;23189:20;23212:13;-1:-1:-1;;;;;23240:16:0;;23236:48;;23265:19;;-1:-1:-1;;;23265:19:0;;;;;;;;;;;23236:48;23299:13;23295:44;;23321:18;;-1:-1:-1;;;23321:18:0;;;;;;;;;;;23295:44;-1:-1:-1;;;;;23616:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;23675:49:0;;23616:44;;;;;;;;23675:49;;;;-1:-1:-1;;23616:44:0;;;;;;23675:49;;;;;;;;;;;;;;;;23741:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;23791:66:0;;;;-1:-1:-1;;;23841:15:0;23791:66;;;;;;;;;;23741:25;23938:23;;;23982:4;:23;;;;-1:-1:-1;;;;;;23990:13:0;;5607:19;:23;;23990:15;23978:641;;;24026:314;24057:38;;24082:12;;-1:-1:-1;;;;;24057:38:0;;;24074:1;;24057:38;;24074:1;;24057:38;24123:69;24162:1;24166:2;24170:14;;;;;;24186:5;24123:30;:69::i;:::-;24118:174;;24228:40;;-1:-1:-1;;;24228:40:0;;;;;;;;;;;24118:174;24335:3;24319:12;:19;;24026:314;;24421:12;24404:13;;:29;24400:43;;24435:8;;;24400:43;23978:641;;;24484:120;24515:40;;24540:14;;;;;-1:-1:-1;;;;;24515:40:0;;;24532:1;;24515:40;;24532:1;;24515:40;24599:3;24583:12;:19;;24484:120;;23978:641;-1:-1:-1;24633:13:0;:28;-1:-1:-1;;;;;23050:1630:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;573:131:1;-1:-1:-1;;;;;;647:32:1;;637:43;;627:71;;694:1;691;684:12;709:245;767:6;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:30;918:5;894:30;:::i;:::-;943:5;709:245;-1:-1:-1;;;709:245:1:o;1151:258::-;1223:1;1233:113;1247:6;1244:1;1241:13;1233:113;;;1323:11;;;1317:18;1304:11;;;1297:39;1269:2;1262:10;1233:113;;;1364:6;1361:1;1358:13;1355:48;;;-1:-1:-1;;1399:1:1;1381:16;;1374:27;1151:258::o;1414:::-;1456:3;1494:5;1488:12;1521:6;1516:3;1509:19;1537:63;1593:6;1586:4;1581:3;1577:14;1570:4;1563:5;1559:16;1537:63;:::i;:::-;1654:2;1633:15;-1:-1:-1;;1629:29:1;1620:39;;;;1661:4;1616:50;;1414:258;-1:-1:-1;;1414:258:1:o;1677:220::-;1826:2;1815:9;1808:21;1789:4;1846:45;1887:2;1876:9;1872:18;1864:6;1846:45;:::i;1902:180::-;1961:6;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;-1:-1:-1;2053:23:1;;1902:180;-1:-1:-1;1902:180:1:o;2295:173::-;2363:20;;-1:-1:-1;;;;;2412:31:1;;2402:42;;2392:70;;2458:1;2455;2448:12;2473:254;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2641:29;2660:9;2641:29;:::i;:::-;2631:39;2717:2;2702:18;;;;2689:32;;-1:-1:-1;;;2473:254:1:o;2914:328::-;2991:6;2999;3007;3060:2;3048:9;3039:7;3035:23;3031:32;3028:52;;;3076:1;3073;3066:12;3028:52;3099:29;3118:9;3099:29;:::i;:::-;3089:39;;3147:38;3181:2;3170:9;3166:18;3147:38;:::i;:::-;3137:48;;3232:2;3221:9;3217:18;3204:32;3194:42;;2914:328;;;;;:::o;3247:186::-;3306:6;3359:2;3347:9;3338:7;3334:23;3330:32;3327:52;;;3375:1;3372;3365:12;3327:52;3398:29;3417:9;3398:29;:::i;3438:348::-;3490:8;3500:6;3554:3;3547:4;3539:6;3535:17;3531:27;3521:55;;3572:1;3569;3562:12;3521:55;-1:-1:-1;3595:20:1;;3638:18;3627:30;;3624:50;;;3670:1;3667;3660:12;3624:50;3707:4;3699:6;3695:17;3683:29;;3759:3;3752:4;3743:6;3735;3731:19;3727:30;3724:39;3721:59;;;3776:1;3773;3766:12;3721:59;3438:348;;;;;:::o;3791:411::-;3862:6;3870;3923:2;3911:9;3902:7;3898:23;3894:32;3891:52;;;3939:1;3936;3929:12;3891:52;3979:9;3966:23;4012:18;4004:6;4001:30;3998:50;;;4044:1;4041;4034:12;3998:50;4083:59;4134:7;4125:6;4114:9;4110:22;4083:59;:::i;:::-;4161:8;;4057:85;;-1:-1:-1;3791:411:1;-1:-1:-1;;;;3791:411:1:o;4207:254::-;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4388:9;4375:23;4365:33;;4417:38;4451:2;4440:9;4436:18;4417:38;:::i;:::-;4407:48;;4207:254;;;;;:::o;4466:160::-;4531:20;;4587:13;;4580:21;4570:32;;4560:60;;4616:1;4613;4606:12;4631:479;4708:6;4716;4724;4777:2;4765:9;4756:7;4752:23;4748:32;4745:52;;;4793:1;4790;4783:12;4745:52;4816:26;4832:9;4816:26;:::i;:::-;4806:36;;4893:2;4882:9;4878:18;4865:32;4920:18;4912:6;4909:30;4906:50;;;4952:1;4949;4942:12;4906:50;4991:59;5042:7;5033:6;5022:9;5018:22;4991:59;:::i;:::-;4631:479;;5069:8;;-1:-1:-1;4965:85:1;;-1:-1:-1;;;;4631:479:1:o;5115:254::-;5180:6;5188;5241:2;5229:9;5220:7;5216:23;5212:32;5209:52;;;5257:1;5254;5247:12;5209:52;5280:29;5299:9;5280:29;:::i;:::-;5270:39;;5328:35;5359:2;5348:9;5344:18;5328:35;:::i;5374:127::-;5435:10;5430:3;5426:20;5423:1;5416:31;5466:4;5463:1;5456:15;5490:4;5487:1;5480:15;5506:1138;5601:6;5609;5617;5625;5678:3;5666:9;5657:7;5653:23;5649:33;5646:53;;;5695:1;5692;5685:12;5646:53;5718:29;5737:9;5718:29;:::i;:::-;5708:39;;5766:38;5800:2;5789:9;5785:18;5766:38;:::i;:::-;5756:48;;5851:2;5840:9;5836:18;5823:32;5813:42;;5906:2;5895:9;5891:18;5878:32;5929:18;5970:2;5962:6;5959:14;5956:34;;;5986:1;5983;5976:12;5956:34;6024:6;6013:9;6009:22;5999:32;;6069:7;6062:4;6058:2;6054:13;6050:27;6040:55;;6091:1;6088;6081:12;6040:55;6127:2;6114:16;6149:2;6145;6142:10;6139:36;;;6155:18;;:::i;:::-;6230:2;6224:9;6198:2;6284:13;;-1:-1:-1;;6280:22:1;;;6304:2;6276:31;6272:40;6260:53;;;6328:18;;;6348:22;;;6325:46;6322:72;;;6374:18;;:::i;:::-;6414:10;6410:2;6403:22;6449:2;6441:6;6434:18;6489:7;6484:2;6479;6475;6471:11;6467:20;6464:33;6461:53;;;6510:1;6507;6500:12;6461:53;6566:2;6561;6557;6553:11;6548:2;6540:6;6536:15;6523:46;6611:1;6606:2;6601;6593:6;6589:15;6585:24;6578:35;6632:6;6622:16;;;;;;;5506:1138;;;;;;;:::o;6649:260::-;6717:6;6725;6778:2;6766:9;6757:7;6753:23;6749:32;6746:52;;;6794:1;6791;6784:12;6746:52;6817:29;6836:9;6817:29;:::i;:::-;6807:39;;6865:38;6899:2;6888:9;6884:18;6865:38;:::i;6914:380::-;6993:1;6989:12;;;;7036;;;7057:61;;7111:4;7103:6;7099:17;7089:27;;7057:61;7164:2;7156:6;7153:14;7133:18;7130:38;7127:161;;;7210:10;7205:3;7201:20;7198:1;7191:31;7245:4;7242:1;7235:15;7273:4;7270:1;7263:15;7127:161;;6914:380;;;:::o;7299:345::-;7501:2;7483:21;;;7540:2;7520:18;;;7513:30;-1:-1:-1;;;7574:2:1;7559:18;;7552:51;7635:2;7620:18;;7299:345::o;8333:127::-;8394:10;8389:3;8385:20;8382:1;8375:31;8425:4;8422:1;8415:15;8449:4;8446:1;8439:15;8465:128;8505:3;8536:1;8532:6;8529:1;8526:13;8523:39;;;8542:18;;:::i;:::-;-1:-1:-1;8578:9:1;;8465:128::o;9070:973::-;9155:12;;9120:3;;9210:1;9230:18;;;;9283;;;;9310:61;;9364:4;9356:6;9352:17;9342:27;;9310:61;9390:2;9438;9430:6;9427:14;9407:18;9404:38;9401:161;;;9484:10;9479:3;9475:20;9472:1;9465:31;9519:4;9516:1;9509:15;9547:4;9544:1;9537:15;9401:161;9578:18;9605:104;;;;9723:1;9718:319;;;;9571:466;;9605:104;-1:-1:-1;;9638:24:1;;9626:37;;9683:16;;;;-1:-1:-1;9605:104:1;;9718:319;9017:1;9010:14;;;9054:4;9041:18;;9812:1;9826:165;9840:6;9837:1;9834:13;9826:165;;;9918:14;;9905:11;;;9898:35;9961:16;;;;9855:10;;9826:165;;;9830:3;;10020:6;10015:3;10011:16;10004:23;;9571:466;;;;;;;9070:973;;;;:::o;10048:456::-;10269:3;10297:38;10331:3;10323:6;10297:38;:::i;:::-;10364:6;10358:13;10380:52;10425:6;10421:2;10414:4;10406:6;10402:17;10380:52;:::i;:::-;10448:50;10490:6;10486:2;10482:15;10474:6;10448:50;:::i;:::-;10441:57;10048:456;-1:-1:-1;;;;;;;10048:456:1:o;10509:197::-;10637:3;10662:38;10696:3;10688:6;10662:38;:::i;11118:489::-;-1:-1:-1;;;;;11387:15:1;;;11369:34;;11439:15;;11434:2;11419:18;;11412:43;11486:2;11471:18;;11464:34;;;11534:3;11529:2;11514:18;;11507:31;;;11312:4;;11555:46;;11581:19;;11573:6;11555:46;:::i;:::-;11547:54;11118:489;-1:-1:-1;;;;;;11118:489:1:o;11612:249::-;11681:6;11734:2;11722:9;11713:7;11709:23;11705:32;11702:52;;;11750:1;11747;11740:12;11702:52;11782:9;11776:16;11801:30;11825:5;11801:30;:::i;11866:135::-;11905:3;-1:-1:-1;;11926:17:1;;11923:43;;;11946:18;;:::i;:::-;-1:-1:-1;11993:1:1;11982:13;;11866:135::o;12006:127::-;12067:10;12062:3;12058:20;12055:1;12048:31;12098:4;12095:1;12088:15;12122:4;12119:1;12112:15;12138:120;12178:1;12204;12194:35;;12209:18;;:::i;:::-;-1:-1:-1;12243:9:1;;12138:120::o;12263:125::-;12303:4;12331:1;12328;12325:8;12322:34;;;12336:18;;:::i;:::-;-1:-1:-1;12373:9:1;;12263:125::o;12393:112::-;12425:1;12451;12441:35;;12456:18;;:::i;:::-;-1:-1:-1;12490:9:1;;12393:112::o;12510:127::-;12571:10;12566:3;12562:20;12559:1;12552:31;12602:4;12599:1;12592:15;12626:4;12623:1;12616:15

Swarm Source

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