POL Price: $0.378583 (+1.45%)
Gas: 36 GWei
 

Overview

Max Total Supply

9,999 BigBPunks

Holders

584

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BigBPunks

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-11-17
*/

// SPDX-License-Identifier:UNLICENSED
pragma solidity ^0.8.9;

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

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

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

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

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
} 

interface IERC165 {

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */ 

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

abstract contract ERC165 is IERC165 {

    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

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

    event URI(string value, uint256 indexed id);

    event tokenBaseURI(string value);

    event NameChanged(uint256 indexed tokenId, string indexed name);


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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}


interface IERC721Receiver {

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

interface IERC721Enumerable is IERC721 {

    function AssignedNFTs() external view returns (uint256);
}

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 Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using EnumerableSet for EnumerableSet.UintSet;
    using EnumerableMap for EnumerableMap.UintToAddressMap;
    using Strings for uint256;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to account balances

    mapping (address => EnumerableSet.UintSet) private _holderTokens;

    EnumerableMap.UintToAddressMap private _tokenOwners;

     // Mapping from tokenId to operator approvals

    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from account to operator approvals

    mapping (address => mapping (address => bool)) private _operatorApprovals;

    mapping (uint256 => string) private _tokenName;

       // Mapping if certain name string has already been reserved
    mapping (string => bool) private _nameReserved;

    string private _name;

    string private _symbol;

    // mapping for token URIs

   mapping(uint256 => string) private _tokenURIs;

    address public operator;


    string private _baseURI;

    uint256 public totalSupply;

    uint256 public royaltyFee;

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        totalSupply = 9999;
        royaltyFee = 5;

        _registerInterface(_INTERFACE_ID_ERC721);
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    /**
        @notice Get the Token balance of an account's.
        @param owner  The address of the token holder
        @return        The account's balance of the Token type requested
     */

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _holderTokens[owner].length();
    }

    /**
        @notice Get the owner of tokenId.
        @param tokenId  The tokenId of the token holder
        @return        The current owner of the requested tokenId
     */

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token");
    }

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

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

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

        string memory base = _baseURI;

        string memory _tokenURI = _tokenURIs[tokenId];

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function baseURI() public view virtual returns (string memory) {
        return _baseURI;
    }

    function AssignedNFTs() public view virtual override returns (uint256) {
        return _tokenOwners.length();
    }


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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param _operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */

    function setApprovalForAll(address _operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param owner     The owner of the Tokens
        @param _operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

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

    function transferFrom(address from, address to, uint256 tokenId) public 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, "");
    }


    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC721Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type.
        @param _data    Additional data with no specified format, MUST be sent unaltered in call to `onERC721Received` on `_to`
    */

    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 _tokenOwners.contains(tokenId);
    }

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

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

    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        _operatorApprovals[to][msg.sender] = true;
        emit ApprovalForAll(to, msg.sender, true);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

        _beforeTokenTransfer(address(0), msg.sender, tokenId);

        _holderTokens[to].add(tokenId);

        _tokenOwners.set(tokenId, to);

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

     /**
     * @dev Internal function to burn a specific token.
     * Reverts if the token does not exist.
     * Deprecated, use {ERC721-_burn} instead.
     * required msg.sender must be owner of the token.
     * @param tokenId uint256 Token being burned
     */

    function _burn(uint256 tokenId) internal virtual {
        require(msg.sender == ownerOf(tokenId),"ERC721: caller doesn't have the given tokenId");
        address owner = ERC721.ownerOf(tokenId); // internal owner

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

        _approve(address(0), tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }

        _holderTokens[owner].remove(tokenId);

        _tokenOwners.remove(tokenId);

        _nameReserved[toLower(_tokenName[tokenId])] = false;

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

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _holderTokens[from].remove(tokenId);
        _holderTokens[to].add(tokenId);

        _tokenOwners.set(tokenId, to);

        emit Transfer(from, to, tokenId);
    }

     /**
     * @dev Internal function to set the token URI for a given token.
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to set its URI
     * @param _tokenURI string URI to assign
     */

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
         emit URI(_tokenURI, tokenId);
    }

    function _setBaseURI(string memory baseURI_) internal virtual {
        _baseURI = baseURI_;
        emit tokenBaseURI(baseURI_);
    }

    function changeName(uint256 tokenId, string memory newName) public {
        require(msg.sender == operator, "ERC721: caller is not have the operator Role");
        require(_exists(tokenId),"ERC721: nonexistent token");
        require(sha256(bytes(newName)) != sha256(bytes(_tokenName[tokenId])), "New name is same as the current one");
        require(isNameReserved(newName) == false, "Name already reserved");
        // If already named, dereserve old name
        if (bytes(_tokenName[tokenId]).length > 0) {
            toggleReserveName(_tokenName[tokenId], false);
        }
        toggleReserveName(newName, true);
        _tokenName[tokenId] = newName;
        emit NameChanged(tokenId, newName);
    }
    
    function tokenName(uint256 tokenId) public view returns(string memory) {
        require(_exists(tokenId),"ERC721: nonexistent token");
        return _tokenName[tokenId];
    }

    /**
     * @dev Returns if the name has been reserved.
     */
    function isNameReserved(string memory nameString) public view returns (bool) {
        return _nameReserved[toLower(nameString)];
    }
    
    /**
     * @dev Reserves the name if isReserve is set to true, de-reserves if set to false
     */
    function toggleReserveName(string memory str, bool isReserve) internal {
        _nameReserved[toLower(str)] = isReserve;
    }

    /**
     * @dev Converts the string to lowercase
     */
    function toLower(string memory str) internal pure returns (string memory){
        bytes memory bStr = bytes(str);
        bytes memory bLower = new bytes(bStr.length);
        for (uint i = 0; i < bStr.length; i++) {
            // Uppercase character
            if ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {
                bLower[i] = bytes1(uint8(bStr[i]) + 32);
            } else {
                bLower[i] = bStr[i];
            }
        }
        return string(bLower);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }
        bytes memory returndata = to.functionCall(abi.encodeWithSelector(
            IERC721Receiver(to).onERC721Received.selector,
            _msgSender(),
            from,
            tokenId,
            _data
        ), "ERC721: transfer to non ERC721Receiver implementer");
        bytes4 retval = abi.decode(returndata, (bytes4));
        return (retval == _ERC721_RECEIVED);
    }

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

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

interface IBaseNFT721 {

    function createCollectible(address creator, string memory tokenURI) external returns (uint256);

    function setRoyaltyFee(uint256 _royalty) external returns(bool);

}

contract BigBPunks is ERC721 {

    address public owner;

    uint256 public tokenCount;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event OperatorChanged(address indexed previousOperator, address indexed newOperator);

    constructor (string memory name, string memory symbol, string memory tokenURIPrefix, address _operator) ERC721 (name, symbol) {
        owner = msg.sender;
        tokenCount = 1;
        _setBaseURI(tokenURIPrefix);
        setOperator(_operator);
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function ownerTransfership(address newOwner) public onlyOwner returns(bool) {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        return true;
    }


    function setOperator(address _operator) public onlyOwner returns(bool) {
        require(_operator!= address(0),"Operator: operator is the Zero address");
        emit OperatorChanged(operator, _operator);
        operator = _operator;
        return true;
    }

    
    /**
     * @dev Internal function to mint a new token.
     * Reverts if the given token ID already exists.
     * @param tokenURI string memory URI of the token to be minted.
     * @param creator address receiver of the token to be transfer.
     */

    function createCollectible(address creator, string memory tokenURI) public returns (uint256) {
        require(msg.sender == operator,"ERC721: caller doesn't operator role");
        require( tokenCount <= totalSupply,"ERC721: Minting is not available");
        uint256 tokenId = tokenCount;
        _safeMint(creator, tokenId);
        _setTokenURI(tokenId, tokenURI);
        tokenCount += 1;
        return tokenId;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner {
        _setBaseURI(_baseURI);
    }


    function setRoyaltyFee(uint256 _royalty) public returns(bool) {
        require(msg.sender == operator,"ERC721: caller doesn't operator role");
        royaltyFee = _royalty;
        return true;

    }
    
    function burn(uint256 tokenId) public {
        require(_exists(tokenId), "ERC721: nonexistent token");
        _burn(tokenId);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"},{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorChanged","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"tokenBaseURI","type":"event"},{"inputs":[],"name":"AssignedNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newName","type":"string"}],"name":"changeName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"createCollectible","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nameString","type":"string"}],"name":"isNameReserved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"newOwner","type":"address"}],"name":"ownerTransfership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyFee","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":"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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royalty","type":"uint256"}],"name":"setRoyaltyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620030cc380380620030cc83398101604081905262000034916200046b565b8383620000486301ffc9a760e01b620000ef565b81516200005d906008906020850190620002eb565b50805162000073906009906020840190620002eb565b5061270f600d556005600e55620000916380ac58cd60e01b620000ef565b620000a3635b5e139f60e01b620000ef565b620000b563780e9d6360e01b620000ef565b5050600f80546001600160a01b031916331790556001601055620000d98262000174565b620000e481620001c6565b505050505062000590565b6001600160e01b031980821614156200014f5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200018990600c906020840190620002eb565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc30681604051620001bb91906200051e565b60405180910390a150565b600f546000906001600160a01b03163314620002255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000146565b6001600160a01b0382166200028c5760405162461bcd60e51b815260206004820152602660248201527f4f70657261746f723a206f70657261746f7220697320746865205a65726f206160448201526564647265737360d01b606482015260840162000146565b600b546040516001600160a01b038085169216907fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c90600090a350600b80546001600160a01b0383166001600160a01b03199091161790556001919050565b828054620002f99062000553565b90600052602060002090601f0160209004810192826200031d576000855562000368565b82601f106200033857805160ff191683800117855562000368565b8280016001018555821562000368579182015b82811115620003685782518255916020019190600101906200034b565b50620003769291506200037a565b5090565b5b808211156200037657600081556001016200037b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b83811115620003d4576000848401525b50505050565b600082601f830112620003ec57600080fd5b81516001600160401b038082111562000409576200040962000391565b604051601f8301601f19908116603f0116810190828211818310171562000434576200043462000391565b816040528381528660208588010111156200044e57600080fd5b62000461846020830160208901620003a7565b9695505050505050565b600080600080608085870312156200048257600080fd5b84516001600160401b03808211156200049a57600080fd5b620004a888838901620003da565b95506020870151915080821115620004bf57600080fd5b620004cd88838901620003da565b94506040870151915080821115620004e457600080fd5b50620004f387828801620003da565b606087015190935090506001600160a01b03811681146200051357600080fd5b939692955090935050565b60208152600082518060208401526200053f816040850160208701620003a7565b601f01601f19169190910160400192915050565b600181811c908216806200056857607f821691505b602082108114156200058a57634e487b7160e01b600052602260045260246000fd5b50919050565b612b2c80620005a06000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636c0360eb11610104578063a22cb465116100a2578063c39cbef111610071578063c39cbef1146103c9578063c87b56dd146103dc578063e725f877146103ef578063e985e9c51461040257600080fd5b8063a22cb46514610387578063b3ab15fb1461039a578063b88d4fde146103ad578063b8997a97146103c057600080fd5b806388f862e3116100de57806388f862e31461035b5780638da5cb5b1461036357806395d89b41146103765780639f181b5e1461037e57600080fd5b80636c0360eb1461032d5780636fdc202f1461033557806370a082311461034857600080fd5b80633e4086e51161017157806355f804b31161014b57806355f804b3146102e1578063570ca735146102f45780635b193d07146103075780636352211e1461031a57600080fd5b80633e4086e5146102a857806342842e0e146102bb57806342966c68146102ce57600080fd5b8063095ea7b3116101ad578063095ea7b31461025657806315b56d101461026b57806318160ddd1461027e57806323b872dd1461029557600080fd5b806301ffc9a7146101d457806306fdde0314610216578063081812fc1461022b575b600080fd5b6102016101e2366004612329565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b61021e61043e565b60405161020d919061239e565b61023e6102393660046123b1565b6104d0565b6040516001600160a01b03909116815260200161020d565b6102696102643660046123e1565b61055d565b005b6102016102793660046124b7565b610673565b610287600d5481565b60405190815260200161020d565b6102696102a33660046124ec565b6106a6565b6102016102b63660046123b1565b6106d7565b6102696102c93660046124ec565b61070d565b6102696102dc3660046123b1565b610728565b6102696102ef3660046124b7565b610759565b600b5461023e906001600160a01b031681565b610287610315366004612528565b61078c565b61023e6103283660046123b1565b610846565b61021e61086e565b610201610343366004612576565b61087d565b610287610356366004612576565b61096d565b6102876109f9565b600f5461023e906001600160a01b031681565b61021e610a0a565b61028760105481565b610269610395366004612591565b610a19565b6102016103a8366004612576565b610ae0565b6102696103bb3660046125cd565b610bd1565b610287600e5481565b6102696103d7366004612649565b610c09565b61021e6103ea3660046123b1565b610f26565b61021e6103fd3660046123b1565b611122565b61020161041036600461267a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60606008805461044d906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610479906126ad565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b60006104db826111e7565b6105415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061056882610846565b9050806001600160a01b0316836001600160a01b031614156105d65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610538565b336001600160a01b03821614806105f257506105f28133610410565b6106645760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610538565b61066e83836111f4565b505050565b6000600761068083611262565b60405161068d91906126e8565b9081526040519081900360200190205460ff1692915050565b6106b033826113c5565b6106cc5760405162461bcd60e51b815260040161053890612704565b61066e8383836114af565b600b546000906001600160a01b031633146107045760405162461bcd60e51b815260040161053890612755565b50600e55600190565b61066e83838360405180602001604052806000815250610bd1565b610731816111e7565b61074d5760405162461bcd60e51b815260040161053890612799565b61075681611630565b50565b600f546001600160a01b031633146107835760405162461bcd60e51b8152600401610538906127d0565b61075681611837565b600b546000906001600160a01b031633146107b95760405162461bcd60e51b815260040161053890612755565b600d54601054111561080d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a204d696e74696e67206973206e6f7420617661696c61626c656044820152606401610538565b60105461081a8482611885565b61082481846118a3565b600160106000828254610837919061281b565b90915550909150505b92915050565b600061084082604051806060016040528060298152602001612ace6029913960029190611969565b6060600c805461044d906126ad565b600f546000906001600160a01b031633146108aa5760405162461bcd60e51b8152600401610538906127d0565b6001600160a01b03821661090f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610538565b600f546040516001600160a01b038085169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600f80546001600160a01b0319166001600160a01b03831617905560015b919050565b60006001600160a01b0382166109d85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610538565b6001600160a01b038216600090815260016020526040902061084090611980565b6000610a056002611980565b905090565b60606009805461044d906126ad565b600b546001600160a01b0316331415610a745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610538565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600f546000906001600160a01b03163314610b0d5760405162461bcd60e51b8152600401610538906127d0565b6001600160a01b038216610b725760405162461bcd60e51b815260206004820152602660248201527f4f70657261746f723a206f70657261746f7220697320746865205a65726f206160448201526564647265737360d01b6064820152608401610538565b600b546040516001600160a01b038085169216907fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c90600090a350600b80546001600160a01b0383166001600160a01b03199091161790556001919050565b610bdb33836113c5565b610bf75760405162461bcd60e51b815260040161053890612704565b610c038484848461198a565b50505050565b600b546001600160a01b03163314610c785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a2063616c6c6572206973206e6f74206861766520746865206f60448201526b70657261746f7220526f6c6560a01b6064820152608401610538565b610c81826111e7565b610c9d5760405162461bcd60e51b815260040161053890612799565b600082815260066020526040908190209051600291610cbb91612833565b602060405180830381855afa158015610cd8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610cfb91906128cf565b600282604051610d0b91906126e8565b602060405180830381855afa158015610d28573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d4b91906128cf565b1415610da55760405162461bcd60e51b815260206004820152602360248201527f4e6577206e616d652069732073616d65206173207468652063757272656e74206044820152626f6e6560e81b6064820152608401610538565b610dae81610673565b15610df35760405162461bcd60e51b815260206004820152601560248201527413985b5948185b1c9958591e481c995cd95c9d9959605a1b6044820152606401610538565b60008281526006602052604081208054610e0c906126ad565b90501115610eb75760008281526006602052604090208054610eb79190610e32906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5e906126ad565b8015610eab5780601f10610e8057610100808354040283529160200191610eab565b820191906000526020600020905b815481529060010190602001808311610e8e57829003601f168201915b505050505060006119bd565b610ec28160016119bd565b60008281526006602090815260409091208251610ee192840190612244565b5080604051610ef091906126e8565b6040519081900381209083907f8edfa912e70e283a8ef6d6f52cd1faef9690ff989eff2f11a134e8478ba7b28b90600090a35050565b6060610f31826111e7565b610f955760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610538565b6000600c8054610fa4906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd0906126ad565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505090506000600a60008581526020019081526020016000208054611044906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611070906126ad565b80156110bd5780601f10611092576101008083540402835291602001916110bd565b820191906000526020600020905b8154815290600101906020018083116110a057829003601f168201915b505050505090508151600014156110d5579392505050565b8051156111075781816040516020016110ef9291906128e8565b60405160208183030381529060405292505050919050565b81611111856119fa565b6040516020016110ef9291906128e8565b606061112d826111e7565b6111495760405162461bcd60e51b815260040161053890612799565b60008281526006602052604090208054611162906126ad565b80601f016020809104026020016040519081016040528092919081815260200182805461118e906126ad565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b50505050509050919050565b6000610840600283611b11565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061122982610846565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060008290506000815167ffffffffffffffff8111156112855761128561240b565b6040519080825280601f01601f1916602001820160405280156112af576020820181803683370190505b50905060005b82518110156113bd5760418382815181106112d2576112d2612917565b016020015160f81c108015906113025750605a8382815181106112f7576112f7612917565b016020015160f81c11155b156113645782818151811061131957611319612917565b602001015160f81c60f81b60f81c6020611333919061292d565b60f81b82828151811061134857611348612917565b60200101906001600160f81b031916908160001a9053506113ab565b82818151811061137657611376612917565b602001015160f81c60f81b82828151811061139357611393612917565b60200101906001600160f81b031916908160001a9053505b806113b581612952565b9150506112b5565b509392505050565b60006113d0826111e7565b6114315760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610538565b600061143c83610846565b9050806001600160a01b0316846001600160a01b031614806114775750836001600160a01b031661146c846104d0565b6001600160a01b0316145b806114a757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166114c282610846565b6001600160a01b03161461152a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610538565b6001600160a01b03821661158c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610538565b6115976000826111f4565b6001600160a01b03831660009081526001602052604090206115b99082611b29565b506001600160a01b03821660009081526001602052604090206115dc9082611b35565b506115e960028284611b41565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61163981610846565b6001600160a01b0316336001600160a01b0316146116af5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c657220646f65736e27742068617665207468652060448201526c19da5d995b881d1bdad95b9259609a1b6064820152608401610538565b60006116ba82610846565b90506116c76000836111f4565b6000828152600a6020526040902080546116e0906126ad565b1590506116fe576000828152600a602052604081206116fe916122c8565b6001600160a01b03811660009081526001602052604090206117209083611b29565b5061172c600283611b57565b50600082815260066020526040812080546007916117d09161174d906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611779906126ad565b80156117c65780601f1061179b576101008083540402835291602001916117c6565b820191906000526020600020905b8154815290600101906020018083116117a957829003601f168201915b5050505050611262565b6040516117dd91906126e8565b908152604051908190036020018120805492151560ff199093169290921790915582906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b805161184a90600c906020840190612244565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc3068160405161187a919061239e565b60405180910390a150565b61189f828260405180602001604052806000815250611b63565b5050565b6118ac826111e7565b61190d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610538565b6000828152600a60209081526040909120825161192c92840190612244565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161195d919061239e565b60405180910390a25050565b6000611976848484611bfd565b90505b9392505050565b6000610840825490565b6119958484846114af565b6119a184848484611c66565b610c035760405162461bcd60e51b81526004016105389061296d565b8060076119c984611262565b6040516119d691906126e8565b908152604051908190036020019020805491151560ff199092169190911790555050565b606081611a1e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a485780611a3281612952565b9150611a419050600a836129d5565b9150611a22565b60008167ffffffffffffffff811115611a6357611a6361240b565b6040519080825280601f01601f191660200182016040528015611a8d576020820181803683370190505b5090506000611a9d6001846129e9565b90508593505b8315611b0857611ab4600a85612a00565b611abf90603061281b565b60f81b8282611acd81612a14565b935081518110611adf57611adf612917565b60200101906001600160f81b031916908160001a905350611b01600a856129d5565b9350611aa3565b50949350505050565b60008181526001830160205260408120541515611979565b60006119798383611d37565b60006119798383611e2a565b600061197684846001600160a01b038516611e79565b60006119798383611f1a565b611b6d8383612021565b6001600160a01b03831660008181526005602090815260408083203380855290835292819020805460ff1916600190811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3611be16000848484611c66565b61066e5760405162461bcd60e51b81526004016105389061296d565b60008281526001840160205260408120548281611c2d5760405162461bcd60e51b8152600401610538919061239e565b5084611c3a6001836129e9565b81548110611c4a57611c4a612917565b9060005260206000209060020201600101549150509392505050565b60006001600160a01b0384163b611c7f575060016114a7565b6000611d00630a85bd0160e11b33888787604051602401611ca39493929190612a2b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001612a9c603291396001600160a01b0388169190612139565b9050600081806020019051810190611d189190612a68565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b60008181526001830160205260408120548015611e20576000611d5b6001836129e9565b8554909150600090611d6f906001906129e9565b90506000866000018281548110611d8857611d88612917565b9060005260206000200154905080876000018481548110611dab57611dab612917565b600091825260209091200155611dc283600161281b565b60008281526001890160205260409020558654879080611de457611de4612a85565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610840565b6000915050610840565b6000818152600183016020526040812054611e7157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610840565b506000610840565b600082815260018401602052604081205480611ede575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611979565b8285611eeb6001846129e9565b81548110611efb57611efb612917565b9060005260206000209060020201600101819055506000915050611979565b60008181526001830160205260408120548015611e20576000611f3e6001836129e9565b8554909150600090611f52906001906129e9565b90506000866000018281548110611f6b57611f6b612917565b9060005260206000209060020201905080876000018481548110611f9157611f91612917565b60009182526020909120825460029092020190815560019182015490820155611fbb90849061281b565b815460009081526001890160205260409020558654879080611fdf57611fdf612a85565b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506108409350505050565b6001600160a01b0382166120775760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610538565b612080816111e7565b156120cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610538565b6001600160a01b03821660009081526001602052604090206120ef9082611b35565b506120fc60028284611b41565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060611976848460008585843b6121925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610538565b600080866001600160a01b031685876040516121ae91906126e8565b60006040518083038185875af1925050503d80600081146121eb576040519150601f19603f3d011682016040523d82523d6000602084013e6121f0565b606091505b509150915061220082828661220b565b979650505050505050565b6060831561221a575081611979565b82511561222a5782518084602001fd5b8160405162461bcd60e51b8152600401610538919061239e565b828054612250906126ad565b90600052602060002090601f01602090048101928261227257600085556122b8565b82601f1061228b57805160ff19168380011785556122b8565b828001600101855582156122b8579182015b828111156122b857825182559160200191906001019061229d565b506122c49291506122fe565b5090565b5080546122d4906126ad565b6000825580601f106122e4575050565b601f01602090049060005260206000209081019061075691905b5b808211156122c457600081556001016122ff565b6001600160e01b03198116811461075657600080fd5b60006020828403121561233b57600080fd5b813561197981612313565b60005b83811015612361578181015183820152602001612349565b83811115610c035750506000910152565b6000815180845261238a816020860160208601612346565b601f01601f19169290920160200192915050565b6020815260006119796020830184612372565b6000602082840312156123c357600080fd5b5035919050565b80356001600160a01b038116811461096857600080fd5b600080604083850312156123f457600080fd5b6123fd836123ca565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561243c5761243c61240b565b604051601f8501601f19908116603f011681019082821181831017156124645761246461240b565b8160405280935085815286868601111561247d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126124a857600080fd5b61197983833560208501612421565b6000602082840312156124c957600080fd5b813567ffffffffffffffff8111156124e057600080fd5b6114a784828501612497565b60008060006060848603121561250157600080fd5b61250a846123ca565b9250612518602085016123ca565b9150604084013590509250925092565b6000806040838503121561253b57600080fd5b612544836123ca565b9150602083013567ffffffffffffffff81111561256057600080fd5b61256c85828601612497565b9150509250929050565b60006020828403121561258857600080fd5b611979826123ca565b600080604083850312156125a457600080fd5b6125ad836123ca565b9150602083013580151581146125c257600080fd5b809150509250929050565b600080600080608085870312156125e357600080fd5b6125ec856123ca565b93506125fa602086016123ca565b925060408501359150606085013567ffffffffffffffff81111561261d57600080fd5b8501601f8101871361262e57600080fd5b61263d87823560208401612421565b91505092959194509250565b6000806040838503121561265c57600080fd5b82359150602083013567ffffffffffffffff81111561256057600080fd5b6000806040838503121561268d57600080fd5b612696836123ca565b91506126a4602084016123ca565b90509250929050565b600181811c908216806126c157607f821691505b602082108114156126e257634e487b7160e01b600052602260045260246000fd5b50919050565b600082516126fa818460208701612346565b9190910192915050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526024908201527f4552433732313a2063616c6c657220646f65736e2774206f70657261746f7220604082015263726f6c6560e01b606082015260800190565b60208082526019908201527f4552433732313a206e6f6e6578697374656e7420746f6b656e00000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561282e5761282e612805565b500190565b600080835481600182811c91508083168061284f57607f831692505b602080841082141561286f57634e487b7160e01b86526022600452602486fd5b8180156128835760018114612894576128c1565b60ff198616895284890196506128c1565b60008a81526020902060005b868110156128b95781548b8201529085019083016128a0565b505084890196505b509498975050505050505050565b6000602082840312156128e157600080fd5b5051919050565b600083516128fa818460208801612346565b83519083019061290e818360208801612346565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff0382111561294a5761294a612805565b019392505050565b600060001982141561296657612966612805565b5060010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826129e4576129e46129bf565b500490565b6000828210156129fb576129fb612805565b500390565b600082612a0f57612a0f6129bf565b500690565b600081612a2357612a23612805565b506000190190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a5e90830184612372565b9695505050505050565b600060208284031215612a7a57600080fd5b815161197981612313565b634e487b7160e01b600052603160045260246000fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212206bf10cd0332cfb93e6962b83ff592ea96033b51526565701cc9757d295c83ed264736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000098d5a089074be1af5c54fd0dda96f92a2924696600000000000000000000000000000000000000000000000000000000000000094269674250756e6b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094269674250756e6b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636c0360eb11610104578063a22cb465116100a2578063c39cbef111610071578063c39cbef1146103c9578063c87b56dd146103dc578063e725f877146103ef578063e985e9c51461040257600080fd5b8063a22cb46514610387578063b3ab15fb1461039a578063b88d4fde146103ad578063b8997a97146103c057600080fd5b806388f862e3116100de57806388f862e31461035b5780638da5cb5b1461036357806395d89b41146103765780639f181b5e1461037e57600080fd5b80636c0360eb1461032d5780636fdc202f1461033557806370a082311461034857600080fd5b80633e4086e51161017157806355f804b31161014b57806355f804b3146102e1578063570ca735146102f45780635b193d07146103075780636352211e1461031a57600080fd5b80633e4086e5146102a857806342842e0e146102bb57806342966c68146102ce57600080fd5b8063095ea7b3116101ad578063095ea7b31461025657806315b56d101461026b57806318160ddd1461027e57806323b872dd1461029557600080fd5b806301ffc9a7146101d457806306fdde0314610216578063081812fc1461022b575b600080fd5b6102016101e2366004612329565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b61021e61043e565b60405161020d919061239e565b61023e6102393660046123b1565b6104d0565b6040516001600160a01b03909116815260200161020d565b6102696102643660046123e1565b61055d565b005b6102016102793660046124b7565b610673565b610287600d5481565b60405190815260200161020d565b6102696102a33660046124ec565b6106a6565b6102016102b63660046123b1565b6106d7565b6102696102c93660046124ec565b61070d565b6102696102dc3660046123b1565b610728565b6102696102ef3660046124b7565b610759565b600b5461023e906001600160a01b031681565b610287610315366004612528565b61078c565b61023e6103283660046123b1565b610846565b61021e61086e565b610201610343366004612576565b61087d565b610287610356366004612576565b61096d565b6102876109f9565b600f5461023e906001600160a01b031681565b61021e610a0a565b61028760105481565b610269610395366004612591565b610a19565b6102016103a8366004612576565b610ae0565b6102696103bb3660046125cd565b610bd1565b610287600e5481565b6102696103d7366004612649565b610c09565b61021e6103ea3660046123b1565b610f26565b61021e6103fd3660046123b1565b611122565b61020161041036600461267a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60606008805461044d906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610479906126ad565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b60006104db826111e7565b6105415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061056882610846565b9050806001600160a01b0316836001600160a01b031614156105d65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610538565b336001600160a01b03821614806105f257506105f28133610410565b6106645760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610538565b61066e83836111f4565b505050565b6000600761068083611262565b60405161068d91906126e8565b9081526040519081900360200190205460ff1692915050565b6106b033826113c5565b6106cc5760405162461bcd60e51b815260040161053890612704565b61066e8383836114af565b600b546000906001600160a01b031633146107045760405162461bcd60e51b815260040161053890612755565b50600e55600190565b61066e83838360405180602001604052806000815250610bd1565b610731816111e7565b61074d5760405162461bcd60e51b815260040161053890612799565b61075681611630565b50565b600f546001600160a01b031633146107835760405162461bcd60e51b8152600401610538906127d0565b61075681611837565b600b546000906001600160a01b031633146107b95760405162461bcd60e51b815260040161053890612755565b600d54601054111561080d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a204d696e74696e67206973206e6f7420617661696c61626c656044820152606401610538565b60105461081a8482611885565b61082481846118a3565b600160106000828254610837919061281b565b90915550909150505b92915050565b600061084082604051806060016040528060298152602001612ace6029913960029190611969565b6060600c805461044d906126ad565b600f546000906001600160a01b031633146108aa5760405162461bcd60e51b8152600401610538906127d0565b6001600160a01b03821661090f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610538565b600f546040516001600160a01b038085169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600f80546001600160a01b0319166001600160a01b03831617905560015b919050565b60006001600160a01b0382166109d85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610538565b6001600160a01b038216600090815260016020526040902061084090611980565b6000610a056002611980565b905090565b60606009805461044d906126ad565b600b546001600160a01b0316331415610a745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610538565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600f546000906001600160a01b03163314610b0d5760405162461bcd60e51b8152600401610538906127d0565b6001600160a01b038216610b725760405162461bcd60e51b815260206004820152602660248201527f4f70657261746f723a206f70657261746f7220697320746865205a65726f206160448201526564647265737360d01b6064820152608401610538565b600b546040516001600160a01b038085169216907fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c90600090a350600b80546001600160a01b0383166001600160a01b03199091161790556001919050565b610bdb33836113c5565b610bf75760405162461bcd60e51b815260040161053890612704565b610c038484848461198a565b50505050565b600b546001600160a01b03163314610c785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a2063616c6c6572206973206e6f74206861766520746865206f60448201526b70657261746f7220526f6c6560a01b6064820152608401610538565b610c81826111e7565b610c9d5760405162461bcd60e51b815260040161053890612799565b600082815260066020526040908190209051600291610cbb91612833565b602060405180830381855afa158015610cd8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610cfb91906128cf565b600282604051610d0b91906126e8565b602060405180830381855afa158015610d28573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d4b91906128cf565b1415610da55760405162461bcd60e51b815260206004820152602360248201527f4e6577206e616d652069732073616d65206173207468652063757272656e74206044820152626f6e6560e81b6064820152608401610538565b610dae81610673565b15610df35760405162461bcd60e51b815260206004820152601560248201527413985b5948185b1c9958591e481c995cd95c9d9959605a1b6044820152606401610538565b60008281526006602052604081208054610e0c906126ad565b90501115610eb75760008281526006602052604090208054610eb79190610e32906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5e906126ad565b8015610eab5780601f10610e8057610100808354040283529160200191610eab565b820191906000526020600020905b815481529060010190602001808311610e8e57829003601f168201915b505050505060006119bd565b610ec28160016119bd565b60008281526006602090815260409091208251610ee192840190612244565b5080604051610ef091906126e8565b6040519081900381209083907f8edfa912e70e283a8ef6d6f52cd1faef9690ff989eff2f11a134e8478ba7b28b90600090a35050565b6060610f31826111e7565b610f955760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610538565b6000600c8054610fa4906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd0906126ad565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505090506000600a60008581526020019081526020016000208054611044906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611070906126ad565b80156110bd5780601f10611092576101008083540402835291602001916110bd565b820191906000526020600020905b8154815290600101906020018083116110a057829003601f168201915b505050505090508151600014156110d5579392505050565b8051156111075781816040516020016110ef9291906128e8565b60405160208183030381529060405292505050919050565b81611111856119fa565b6040516020016110ef9291906128e8565b606061112d826111e7565b6111495760405162461bcd60e51b815260040161053890612799565b60008281526006602052604090208054611162906126ad565b80601f016020809104026020016040519081016040528092919081815260200182805461118e906126ad565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b50505050509050919050565b6000610840600283611b11565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061122982610846565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060008290506000815167ffffffffffffffff8111156112855761128561240b565b6040519080825280601f01601f1916602001820160405280156112af576020820181803683370190505b50905060005b82518110156113bd5760418382815181106112d2576112d2612917565b016020015160f81c108015906113025750605a8382815181106112f7576112f7612917565b016020015160f81c11155b156113645782818151811061131957611319612917565b602001015160f81c60f81b60f81c6020611333919061292d565b60f81b82828151811061134857611348612917565b60200101906001600160f81b031916908160001a9053506113ab565b82818151811061137657611376612917565b602001015160f81c60f81b82828151811061139357611393612917565b60200101906001600160f81b031916908160001a9053505b806113b581612952565b9150506112b5565b509392505050565b60006113d0826111e7565b6114315760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610538565b600061143c83610846565b9050806001600160a01b0316846001600160a01b031614806114775750836001600160a01b031661146c846104d0565b6001600160a01b0316145b806114a757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166114c282610846565b6001600160a01b03161461152a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610538565b6001600160a01b03821661158c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610538565b6115976000826111f4565b6001600160a01b03831660009081526001602052604090206115b99082611b29565b506001600160a01b03821660009081526001602052604090206115dc9082611b35565b506115e960028284611b41565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61163981610846565b6001600160a01b0316336001600160a01b0316146116af5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c657220646f65736e27742068617665207468652060448201526c19da5d995b881d1bdad95b9259609a1b6064820152608401610538565b60006116ba82610846565b90506116c76000836111f4565b6000828152600a6020526040902080546116e0906126ad565b1590506116fe576000828152600a602052604081206116fe916122c8565b6001600160a01b03811660009081526001602052604090206117209083611b29565b5061172c600283611b57565b50600082815260066020526040812080546007916117d09161174d906126ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611779906126ad565b80156117c65780601f1061179b576101008083540402835291602001916117c6565b820191906000526020600020905b8154815290600101906020018083116117a957829003601f168201915b5050505050611262565b6040516117dd91906126e8565b908152604051908190036020018120805492151560ff199093169290921790915582906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b805161184a90600c906020840190612244565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc3068160405161187a919061239e565b60405180910390a150565b61189f828260405180602001604052806000815250611b63565b5050565b6118ac826111e7565b61190d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610538565b6000828152600a60209081526040909120825161192c92840190612244565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161195d919061239e565b60405180910390a25050565b6000611976848484611bfd565b90505b9392505050565b6000610840825490565b6119958484846114af565b6119a184848484611c66565b610c035760405162461bcd60e51b81526004016105389061296d565b8060076119c984611262565b6040516119d691906126e8565b908152604051908190036020019020805491151560ff199092169190911790555050565b606081611a1e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a485780611a3281612952565b9150611a419050600a836129d5565b9150611a22565b60008167ffffffffffffffff811115611a6357611a6361240b565b6040519080825280601f01601f191660200182016040528015611a8d576020820181803683370190505b5090506000611a9d6001846129e9565b90508593505b8315611b0857611ab4600a85612a00565b611abf90603061281b565b60f81b8282611acd81612a14565b935081518110611adf57611adf612917565b60200101906001600160f81b031916908160001a905350611b01600a856129d5565b9350611aa3565b50949350505050565b60008181526001830160205260408120541515611979565b60006119798383611d37565b60006119798383611e2a565b600061197684846001600160a01b038516611e79565b60006119798383611f1a565b611b6d8383612021565b6001600160a01b03831660008181526005602090815260408083203380855290835292819020805460ff1916600190811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3611be16000848484611c66565b61066e5760405162461bcd60e51b81526004016105389061296d565b60008281526001840160205260408120548281611c2d5760405162461bcd60e51b8152600401610538919061239e565b5084611c3a6001836129e9565b81548110611c4a57611c4a612917565b9060005260206000209060020201600101549150509392505050565b60006001600160a01b0384163b611c7f575060016114a7565b6000611d00630a85bd0160e11b33888787604051602401611ca39493929190612a2b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001612a9c603291396001600160a01b0388169190612139565b9050600081806020019051810190611d189190612a68565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b60008181526001830160205260408120548015611e20576000611d5b6001836129e9565b8554909150600090611d6f906001906129e9565b90506000866000018281548110611d8857611d88612917565b9060005260206000200154905080876000018481548110611dab57611dab612917565b600091825260209091200155611dc283600161281b565b60008281526001890160205260409020558654879080611de457611de4612a85565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610840565b6000915050610840565b6000818152600183016020526040812054611e7157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610840565b506000610840565b600082815260018401602052604081205480611ede575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611979565b8285611eeb6001846129e9565b81548110611efb57611efb612917565b9060005260206000209060020201600101819055506000915050611979565b60008181526001830160205260408120548015611e20576000611f3e6001836129e9565b8554909150600090611f52906001906129e9565b90506000866000018281548110611f6b57611f6b612917565b9060005260206000209060020201905080876000018481548110611f9157611f91612917565b60009182526020909120825460029092020190815560019182015490820155611fbb90849061281b565b815460009081526001890160205260409020558654879080611fdf57611fdf612a85565b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506108409350505050565b6001600160a01b0382166120775760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610538565b612080816111e7565b156120cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610538565b6001600160a01b03821660009081526001602052604090206120ef9082611b35565b506120fc60028284611b41565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060611976848460008585843b6121925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610538565b600080866001600160a01b031685876040516121ae91906126e8565b60006040518083038185875af1925050503d80600081146121eb576040519150601f19603f3d011682016040523d82523d6000602084013e6121f0565b606091505b509150915061220082828661220b565b979650505050505050565b6060831561221a575081611979565b82511561222a5782518084602001fd5b8160405162461bcd60e51b8152600401610538919061239e565b828054612250906126ad565b90600052602060002090601f01602090048101928261227257600085556122b8565b82601f1061228b57805160ff19168380011785556122b8565b828001600101855582156122b8579182015b828111156122b857825182559160200191906001019061229d565b506122c49291506122fe565b5090565b5080546122d4906126ad565b6000825580601f106122e4575050565b601f01602090049060005260206000209081019061075691905b5b808211156122c457600081556001016122ff565b6001600160e01b03198116811461075657600080fd5b60006020828403121561233b57600080fd5b813561197981612313565b60005b83811015612361578181015183820152602001612349565b83811115610c035750506000910152565b6000815180845261238a816020860160208601612346565b601f01601f19169290920160200192915050565b6020815260006119796020830184612372565b6000602082840312156123c357600080fd5b5035919050565b80356001600160a01b038116811461096857600080fd5b600080604083850312156123f457600080fd5b6123fd836123ca565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561243c5761243c61240b565b604051601f8501601f19908116603f011681019082821181831017156124645761246461240b565b8160405280935085815286868601111561247d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126124a857600080fd5b61197983833560208501612421565b6000602082840312156124c957600080fd5b813567ffffffffffffffff8111156124e057600080fd5b6114a784828501612497565b60008060006060848603121561250157600080fd5b61250a846123ca565b9250612518602085016123ca565b9150604084013590509250925092565b6000806040838503121561253b57600080fd5b612544836123ca565b9150602083013567ffffffffffffffff81111561256057600080fd5b61256c85828601612497565b9150509250929050565b60006020828403121561258857600080fd5b611979826123ca565b600080604083850312156125a457600080fd5b6125ad836123ca565b9150602083013580151581146125c257600080fd5b809150509250929050565b600080600080608085870312156125e357600080fd5b6125ec856123ca565b93506125fa602086016123ca565b925060408501359150606085013567ffffffffffffffff81111561261d57600080fd5b8501601f8101871361262e57600080fd5b61263d87823560208401612421565b91505092959194509250565b6000806040838503121561265c57600080fd5b82359150602083013567ffffffffffffffff81111561256057600080fd5b6000806040838503121561268d57600080fd5b612696836123ca565b91506126a4602084016123ca565b90509250929050565b600181811c908216806126c157607f821691505b602082108114156126e257634e487b7160e01b600052602260045260246000fd5b50919050565b600082516126fa818460208701612346565b9190910192915050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526024908201527f4552433732313a2063616c6c657220646f65736e2774206f70657261746f7220604082015263726f6c6560e01b606082015260800190565b60208082526019908201527f4552433732313a206e6f6e6578697374656e7420746f6b656e00000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561282e5761282e612805565b500190565b600080835481600182811c91508083168061284f57607f831692505b602080841082141561286f57634e487b7160e01b86526022600452602486fd5b8180156128835760018114612894576128c1565b60ff198616895284890196506128c1565b60008a81526020902060005b868110156128b95781548b8201529085019083016128a0565b505084890196505b509498975050505050505050565b6000602082840312156128e157600080fd5b5051919050565b600083516128fa818460208801612346565b83519083019061290e818360208801612346565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff0382111561294a5761294a612805565b019392505050565b600060001982141561296657612966612805565b5060010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826129e4576129e46129bf565b500490565b6000828210156129fb576129fb612805565b500390565b600082612a0f57612a0f6129bf565b500690565b600081612a2357612a23612805565b506000190190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a5e90830184612372565b9695505050505050565b600060208284031215612a7a57600080fd5b815161197981612313565b634e487b7160e01b600052603160045260246000fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212206bf10cd0332cfb93e6962b83ff592ea96033b51526565701cc9757d295c83ed264736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000098d5a089074be1af5c54fd0dda96f92a2924696600000000000000000000000000000000000000000000000000000000000000094269674250756e6b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094269674250756e6b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): BigBPunks
Arg [1] : symbol (string): BigBPunks
Arg [2] : tokenURIPrefix (string): https://gateway.pinata.cloud/ipfs/
Arg [3] : _operator (address): 0x98D5A089074Be1Af5c54fd0dda96f92A29246966

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000098d5a089074be1af5c54fd0dda96f92a29246966
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 4269674250756e6b730000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 4269674250756e6b730000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [9] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [10] : 732f000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28051:2412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11404:150;;;;;;:::i;:::-;-1:-1:-1;;;;;;11513:33:0;11489:4;11513:33;;;;;;;;;;;;;;11404:150;;;;565:14:1;;558:22;540:41;;528:2;513:18;11404:150:0;;;;;;;;16540:100;;;:::i;:::-;;;;;;;:::i;17966:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;17966:221:0;1528:203:1;17554:404:0;;;;;;:::i;:::-;;:::i;:::-;;25960:137;;;;;;:::i;:::-;;:::i;15093:26::-;;;;;;;;;3642:25:1;;;3630:2;3615:18;15093:26:0;3496:177:1;19310:252:0;;;;;;:::i;:::-;;:::i;30103:207::-;;;;;;:::i;:::-;;:::i;19570:151::-;;;;;;:::i;:::-;;:::i;30322:136::-;;;;;;:::i;:::-;;:::i;29992:101::-;;;;;;:::i;:::-;;:::i;15027:23::-;;;;;-1:-1:-1;;;;;15027:23:0;;;29551:433;;;;;;:::i;:::-;;:::i;16355:177::-;;;;;;:::i;:::-;;:::i;17321:97::-;;;:::i;28726:270::-;;;;;;:::i;:::-;;:::i;15939:221::-;;;;;;:::i;:::-;;:::i;17426:118::-;;;:::i;28089:20::-;;;;;-1:-1:-1;;;;;28089:20:0;;;16648:104;;;:::i;28118:25::-;;;;;;18550:298;;;;;;:::i;:::-;;:::i;29006:267::-;;;;;;:::i;:::-;;:::i;20841:287::-;;;;;;:::i;:::-;;:::i;15128:25::-;;;;;;24963:727;;;;;;:::i;:::-;;:::i;16760:553::-;;;;;;:::i;:::-;;:::i;25702:180::-;;;;;;:::i;:::-;;:::i;19136:166::-;;;;;;:::i;:::-;-1:-1:-1;;;;;19258:25:0;;;19234:4;19258:25;;;:18;:25;;;;;;;;:36;;;;;;;;;;;;;;;19136:166;16540:100;16594:13;16627:5;16620:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16540:100;:::o;17966:221::-;18042:7;18070:16;18078:7;18070;:16::i;:::-;18062:73;;;;-1:-1:-1;;;18062:73:0;;6874:2:1;18062:73:0;;;6856:21:1;6913:2;6893:18;;;6886:30;6952:34;6932:18;;;6925:62;-1:-1:-1;;;7003:18:1;;;6996:42;7055:19;;18062:73:0;;;;;;;;;-1:-1:-1;18155:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18155:24:0;;17966:221::o;17554:404::-;17635:13;17651:23;17666:7;17651:14;:23::i;:::-;17635:39;;17699:5;-1:-1:-1;;;;;17693:11:0;:2;-1:-1:-1;;;;;17693:11:0;;;17685:57;;;;-1:-1:-1;;;17685:57:0;;7287:2:1;17685:57:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:31;7457:19;;17685:57:0;7085:397:1;17685:57:0;13673:10;-1:-1:-1;;;;;17763:21:0;;;;:69;;-1:-1:-1;17788:44:0;17812:5;13673:10;19136:166;:::i;17788:44::-;17755:161;;;;-1:-1:-1;;;17755:161:0;;7689:2:1;17755:161:0;;;7671:21:1;7728:2;7708:18;;;7701:30;7767:34;7747:18;;;7740:62;7838:26;7818:18;;;7811:54;7882:19;;17755:161:0;7487:420:1;17755:161:0;17929:21;17938:2;17942:7;17929:8;:21::i;:::-;17624:334;17554:404;;:::o;25960:137::-;26031:4;26055:13;26069:19;26077:10;26069:7;:19::i;:::-;26055:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25960:137;-1:-1:-1;;25960:137:0:o;19310:252::-;19418:41;13673:10;19451:7;19418:18;:41::i;:::-;19410:103;;;;-1:-1:-1;;;19410:103:0;;;;;;;:::i;:::-;19526:28;19536:4;19542:2;19546:7;19526:9;:28::i;30103:207::-;30198:8;;30159:4;;-1:-1:-1;;;;;30198:8:0;30184:10;:22;30176:70;;;;-1:-1:-1;;;30176:70:0;;;;;;;:::i;:::-;-1:-1:-1;30257:10:0;:21;30296:4;;30103:207::o;19570:151::-;19674:39;19691:4;19697:2;19701:7;19674:39;;;;;;;;;;;;:16;:39::i;30322:136::-;30379:16;30387:7;30379;:16::i;:::-;30371:54;;;;-1:-1:-1;;;30371:54:0;;;;;;;:::i;:::-;30436:14;30442:7;30436:5;:14::i;:::-;30322:136;:::o;29992:101::-;28642:5;;-1:-1:-1;;;;;28642:5:0;28651:10;28642:19;28634:64;;;;-1:-1:-1;;;28634:64:0;;;;;;;:::i;:::-;30064:21:::1;30076:8;30064:11;:21::i;29551:433::-:0;29677:8;;29635:7;;-1:-1:-1;;;;;29677:8:0;29663:10;:22;29655:70;;;;-1:-1:-1;;;29655:70:0;;;;;;;:::i;:::-;29759:11;;29745:10;;:25;;29736:70;;;;-1:-1:-1;;;29736:70:0;;9933:2:1;29736:70:0;;;9915:21:1;;;9952:18;;;9945:30;10011:34;9991:18;;;9984:62;10063:18;;29736:70:0;9731:356:1;29736:70:0;29835:10;;29856:27;29866:7;29835:10;29856:9;:27::i;:::-;29894:31;29907:7;29916:8;29894:12;:31::i;:::-;29950:1;29936:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;29969:7:0;;-1:-1:-1;;29551:433:0;;;;;:::o;16355:177::-;16427:7;16454:70;16471:7;16454:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;17321:97::-;17369:13;17402:8;17395:15;;;;;:::i;28726:270::-;28642:5;;28796:4;;-1:-1:-1;;;;;28642:5:0;28651:10;28642:19;28634:64;;;;-1:-1:-1;;;28634:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28821:22:0;::::1;28813:73;;;::::0;-1:-1:-1;;;28813:73:0;;10559:2:1;28813:73:0::1;::::0;::::1;10541:21:1::0;10598:2;10578:18;;;10571:30;10637:34;10617:18;;;10610:62;-1:-1:-1;;;10688:18:1;;;10681:36;10734:19;;28813:73:0::1;10357:402:1::0;28813:73:0::1;28923:5;::::0;28902:37:::1;::::0;-1:-1:-1;;;;;28902:37:0;;::::1;::::0;28923:5:::1;::::0;28902:37:::1;::::0;28923:5:::1;::::0;28902:37:::1;-1:-1:-1::0;28950:5:0::1;:16:::0;;-1:-1:-1;;;;;;28950:16:0::1;-1:-1:-1::0;;;;;28950:16:0;::::1;;::::0;;-1:-1:-1;28709:1:0::1;28726:270:::0;;;:::o;15939:221::-;16011:7;-1:-1:-1;;;;;16039:19:0;;16031:74;;;;-1:-1:-1;;;16031:74:0;;10966:2:1;16031:74:0;;;10948:21:1;11005:2;10985:18;;;10978:30;11044:34;11024:18;;;11017:62;-1:-1:-1;;;11095:18:1;;;11088:40;11145:19;;16031:74:0;10764:406:1;16031:74:0;-1:-1:-1;;;;;16123:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;17426:118::-;17488:7;17515:21;:12;:19;:21::i;:::-;17508:28;;17426:118;:::o;16648:104::-;16704:13;16737:7;16730:14;;;;;:::i;18550:298::-;18654:8;;-1:-1:-1;;;;;18654:8:0;13673:10;18654:24;;18646:62;;;;-1:-1:-1;;;18646:62:0;;11377:2:1;18646:62:0;;;11359:21:1;11416:2;11396:18;;;11389:30;11455:27;11435:18;;;11428:55;11500:18;;18646:62:0;11175:349:1;18646:62:0;13673:10;18721:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;18721:43:0;;;;;;;;;;;;:54;;-1:-1:-1;;18721:54:0;;;;;;;;;;18791:49;;540:41:1;;;18721:43:0;;13673:10;18791:49;;513:18:1;18791:49:0;;;;;;;18550:298;;:::o;29006:267::-;28642:5;;29071:4;;-1:-1:-1;;;;;28642:5:0;28651:10;28642:19;28634:64;;;;-1:-1:-1;;;28634:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29096:22:0;::::1;29088:72;;;::::0;-1:-1:-1;;;29088:72:0;;11731:2:1;29088:72:0::1;::::0;::::1;11713:21:1::0;11770:2;11750:18;;;11743:30;11809:34;11789:18;;;11782:62;-1:-1:-1;;;11860:18:1;;;11853:36;11906:19;;29088:72:0::1;11529:402:1::0;29088:72:0::1;29192:8;::::0;29176:36:::1;::::0;-1:-1:-1;;;;;29176:36:0;;::::1;::::0;29192:8:::1;::::0;29176:36:::1;::::0;29192:8:::1;::::0;29176:36:::1;-1:-1:-1::0;29223:8:0::1;:20:::0;;-1:-1:-1;;;;;29223:20:0;::::1;-1:-1:-1::0;;;;;;29223:20:0;;::::1;;::::0;;;29006:267;;;:::o;20841:287::-;20973:41;13673:10;21006:7;20973:18;:41::i;:::-;20965:103;;;;-1:-1:-1;;;20965:103:0;;;;;;;:::i;:::-;21079:39;21093:4;21099:2;21103:7;21112:5;21079:13;:39::i;:::-;20841:287;;;;:::o;24963:727::-;25063:8;;-1:-1:-1;;;;;25063:8:0;25049:10;:22;25041:79;;;;-1:-1:-1;;;25041:79:0;;12138:2:1;25041:79:0;;;12120:21:1;12177:2;12157:18;;;12150:30;12216:34;12196:18;;;12189:62;-1:-1:-1;;;12267:18:1;;;12260:42;12319:19;;25041:79:0;11936:408:1;25041:79:0;25139:16;25147:7;25139;:16::i;:::-;25131:53;;;;-1:-1:-1;;;25131:53:0;;;;;;;:::i;:::-;25242:19;;;;:10;:19;;;;;;;25229:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25203:22;25216:7;25203:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;25195:108;;;;-1:-1:-1;;;25195:108:0;;14257:2:1;25195:108:0;;;14239:21:1;14296:2;14276:18;;;14269:30;14335:34;14315:18;;;14308:62;-1:-1:-1;;;14386:18:1;;;14379:33;14429:19;;25195:108:0;14055:399:1;25195:108:0;25322:23;25337:7;25322:14;:23::i;:::-;:32;25314:66;;;;-1:-1:-1;;;25314:66:0;;14661:2:1;25314:66:0;;;14643:21:1;14700:2;14680:18;;;14673:30;-1:-1:-1;;;14719:18:1;;;14712:51;14780:18;;25314:66:0;14459:345:1;25314:66:0;25480:1;25450:19;;;:10;:19;;;;;25444:33;;;;;:::i;:::-;;;:37;25440:115;;;25516:19;;;;:10;:19;;;;;25498:45;;;;25516:19;25498:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25537:5;25498:17;:45::i;:::-;25565:32;25583:7;25592:4;25565:17;:32::i;:::-;25608:19;;;;:10;:19;;;;;;;;:29;;;;;;;;:::i;:::-;;25674:7;25653:29;;;;;;:::i;:::-;;;;;;;;;;25665:7;;25653:29;;;;;24963:727;;:::o;16760:553::-;16833:13;16867:16;16875:7;16867;:16::i;:::-;16859:76;;;;-1:-1:-1;;;16859:76:0;;15011:2:1;16859:76:0;;;14993:21:1;15050:2;15030:18;;;15023:30;15089:34;15069:18;;;15062:62;-1:-1:-1;;;15140:18:1;;;15133:45;15195:19;;16859:76:0;14809:411:1;16859:76:0;16948:18;16969:8;16948:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16990:23;17016:10;:19;17027:7;17016:19;;;;;;;;;;;16990:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17058:4;17052:18;17074:1;17052:23;17048:72;;;17099:9;16760:553;-1:-1:-1;;;16760:553:0:o;17048:72::-;17134:23;;:27;17130:108;;17209:4;17215:9;17192:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17178:48;;;;16760:553;;;:::o;17130:108::-;17279:4;17285:18;:7;:16;:18::i;:::-;17262:42;;;;;;;;;:::i;25702:180::-;25758:13;25792:16;25800:7;25792;:16::i;:::-;25784:53;;;;-1:-1:-1;;;25784:53:0;;;;;;;:::i;:::-;25855:19;;;;:10;:19;;;;;25848:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25702:180;;;:::o;21416:127::-;21481:4;21505:30;:12;21527:7;21505:21;:30::i;27544:192::-;27619:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;27619:29:0;-1:-1:-1;;;;;27619:29:0;;;;;;;;:24;;27673:23;27619:24;27673:14;:23::i;:::-;-1:-1:-1;;;;;27664:46:0;;;;;;;;;;;27544:192;;:::o;26416:508::-;26475:13;26500:17;26526:3;26500:30;;26541:19;26573:4;:11;26563:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26563:22:0;;26541:44;;26601:6;26596:289;26617:4;:11;26613:1;:15;26596:289;;;26709:2;26697:4;26702:1;26697:7;;;;;;;;:::i;:::-;;;;;;;26691:20;;;;26690:48;;;26735:2;26723:4;26728:1;26723:7;;;;;;;;:::i;:::-;;;;;;;26717:20;;26690:48;26686:188;;;26784:4;26789:1;26784:7;;;;;;;;:::i;:::-;;;;;;;;;26778:14;;26795:2;26778:19;;;;:::i;:::-;26771:27;;26759:6;26766:1;26759:9;;;;;;;;:::i;:::-;;;;:39;-1:-1:-1;;;;;26759:39:0;;;;;;;;;26686:188;;;26851:4;26856:1;26851:7;;;;;;;;:::i;:::-;;;;;;;;;26839:6;26846:1;26839:9;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;26839:19:0;;;;;;;;;26686:188;26630:3;;;;:::i;:::-;;;;26596:289;;;-1:-1:-1;26909:6:0;26416:508;-1:-1:-1;;;26416:508:0:o;21551:355::-;21644:4;21669:16;21677:7;21669;:16::i;:::-;21661:73;;;;-1:-1:-1;;;21661:73:0;;16383:2:1;21661:73:0;;;16365:21:1;16422:2;16402:18;;;16395:30;16461:34;16441:18;;;16434:62;-1:-1:-1;;;16512:18:1;;;16505:42;16564:19;;21661:73:0;16181:408:1;21661:73:0;21745:13;21761:23;21776:7;21761:14;:23::i;:::-;21745:39;;21814:5;-1:-1:-1;;;;;21803:16:0;:7;-1:-1:-1;;;;;21803:16:0;;:51;;;;21847:7;-1:-1:-1;;;;;21823:31:0;:20;21835:7;21823:11;:20::i;:::-;-1:-1:-1;;;;;21823:31:0;;21803:51;:94;;;-1:-1:-1;;;;;;19258:25:0;;;19234:4;19258:25;;;:18;:25;;;;;;;;:36;;;;;;;;;;;;21858:39;21795:103;21551:355;-1:-1:-1;;;;21551:355:0:o;23751:547::-;23876:4;-1:-1:-1;;;;;23849:31:0;:23;23864:7;23849:14;:23::i;:::-;-1:-1:-1;;;;;23849:31:0;;23841:85;;;;-1:-1:-1;;;23841:85:0;;16796:2:1;23841:85:0;;;16778:21:1;16835:2;16815:18;;;16808:30;16874:34;16854:18;;;16847:62;-1:-1:-1;;;16925:18:1;;;16918:39;16974:19;;23841:85:0;16594:405:1;23841:85:0;-1:-1:-1;;;;;23963:16:0;;23955:65;;;;-1:-1:-1;;;23955:65:0;;17206:2:1;23955:65:0;;;17188:21:1;17245:2;17225:18;;;17218:30;17284:34;17264:18;;;17257:62;-1:-1:-1;;;17335:18:1;;;17328:34;17379:19;;23955:65:0;17004:400:1;23955:65:0;24085:29;24102:1;24106:7;24085:8;:29::i;:::-;-1:-1:-1;;;;;24127:19:0;;;;;;:13;:19;;;;;:35;;24154:7;24127:26;:35::i;:::-;-1:-1:-1;;;;;;24173:17:0;;;;;;:13;:17;;;;;:30;;24195:7;24173:21;:30::i;:::-;-1:-1:-1;24216:29:0;:12;24233:7;24242:2;24216:16;:29::i;:::-;;24282:7;24278:2;-1:-1:-1;;;;;24263:27:0;24272:4;-1:-1:-1;;;;;24263:27:0;;;;;;;;;;;23751:547;;;:::o;23100:643::-;23182:16;23190:7;23182;:16::i;:::-;-1:-1:-1;;;;;23168:30:0;:10;-1:-1:-1;;;;;23168:30:0;;23160:87;;;;-1:-1:-1;;;23160:87:0;;17611:2:1;23160:87:0;;;17593:21:1;17650:2;17630:18;;;17623:30;17689:34;17669:18;;;17662:62;-1:-1:-1;;;17740:18:1;;;17733:43;17793:19;;23160:87:0;17409:409:1;23160:87:0;23258:13;23274:23;23289:7;23274:14;:23::i;:::-;23258:39;;23389:29;23406:1;23410:7;23389:8;:29::i;:::-;23441:19;;;;:10;:19;;;;;23435:33;;;;;:::i;:::-;:38;;-1:-1:-1;23431:97:0;;23497:19;;;;:10;:19;;;;;23490:26;;;:::i;:::-;-1:-1:-1;;;;;23540:20:0;;;;;;:13;:20;;;;;:36;;23568:7;23540:27;:36::i;:::-;-1:-1:-1;23589:28:0;:12;23609:7;23589:19;:28::i;:::-;-1:-1:-1;23676:5:0;23652:19;;;:10;:19;;;;;23644:28;;23630:13;;23644:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:28::i;:::-;23630:43;;;;;;:::i;:::-;;;;;;;;;;;;;;:51;;;;;-1:-1:-1;;23630:51:0;;;;;;;;;;23727:7;;23630:43;;-1:-1:-1;;;;;23699:36:0;;;;;23630:43;;23699:36;23149:594;23100:643;:::o;24817:138::-;24890:19;;;;:8;;:19;;;;;:::i;:::-;;24925:22;24938:8;24925:22;;;;;;:::i;:::-;;;;;;;;24817:138;:::o;21914:110::-;21990:26;22000:2;22004:7;21990:26;;;;;;;;;;;;:9;:26::i;:::-;21914:110;;:::o;24554:255::-;24654:16;24662:7;24654;:16::i;:::-;24646:73;;;;-1:-1:-1;;;24646:73:0;;18025:2:1;24646:73:0;;;18007:21:1;18064:2;18044:18;;;18037:30;18103:34;18083:18;;;18076:62;-1:-1:-1;;;18154:18:1;;;18147:42;18206:19;;24646:73:0;17823:408:1;24646:73:0;24730:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;:::-;;24793:7;24778:23;24782:9;24778:23;;;;;;:::i;:::-;;;;;;;;24554:255;;:::o;4901:213::-;5008:7;5059:44;5064:3;5084;5090:12;5059:4;:44::i;:::-;5051:53;-1:-1:-1;4901:213:0;;;;;;:::o;8773:114::-;8833:7;8860:19;8868:3;6451:18;;6368:109;21136:272;21250:28;21260:4;21266:2;21270:7;21250:9;:28::i;:::-;21297:48;21320:4;21326:2;21330:7;21339:5;21297:22;:48::i;:::-;21289:111;;;;-1:-1:-1;;;21289:111:0;;;;;;;:::i;26215:129::-;26327:9;26297:13;26311:12;26319:3;26311:7;:12::i;:::-;26297:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:39;;;;;-1:-1:-1;;26297:39:0;;;;;;;;;-1:-1:-1;;26215:129:0:o;91:557::-;147:13;179:10;175:53;;-1:-1:-1;;206:10:0;;;;;;;;;;;;-1:-1:-1;;;206:10:0;;;;;91:557::o;175:53::-;253:5;238:12;294:78;301:9;;294:78;;327:8;;;;:::i;:::-;;-1:-1:-1;350:10:0;;-1:-1:-1;358:2:0;350:10;;:::i;:::-;;;294:78;;;382:19;414:6;404:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;404:17:0;-1:-1:-1;382:39:0;-1:-1:-1;432:13:0;448:10;457:1;448:6;:10;:::i;:::-;432:26;;476:5;469:12;;492:117;499:9;;492:117;;561:9;568:2;561:4;:9;:::i;:::-;556:14;;:2;:14;:::i;:::-;543:29;;525:6;532:7;;;;:::i;:::-;;;525:15;;;;;;;;:::i;:::-;;;;:47;-1:-1:-1;;;;;525:47:0;;;;;;;;-1:-1:-1;587:10:0;595:2;587:10;;:::i;:::-;;;492:117;;;-1:-1:-1;633:6:0;91:557;-1:-1:-1;;;;91:557:0:o;3938:151::-;4022:4;2129:17;;;:12;;;:17;;;;;;:22;;4046:35;2034:125;8474:137;8544:4;8568:35;8576:3;8596:5;8568:7;:35::i;8335:131::-;8402:4;8426:32;8431:3;8451:5;8426:4;:32::i;3595:185::-;3684:4;3708:64;3713:3;3733;-1:-1:-1;;;;;3747:23:0;;3708:4;:64::i;3788:142::-;3865:4;3889:33;3897:3;3917;3889:7;:33::i;22032:354::-;22128:18;22134:2;22138:7;22128:5;:18::i;:::-;-1:-1:-1;;;;;22157:22:0;;;;;;:18;:22;;;;;;;;22180:10;22157:34;;;;;;;;;;:41;;-1:-1:-1;;22157:41:0;22194:4;22157:41;;;;;;22214:36;;540:41:1;;;22180:10:0;;22157:22;22214:36;;513:18:1;22214:36:0;;;;;;;22269:54;22300:1;22304:2;22308:7;22317:5;22269:22;:54::i;:::-;22261:117;;;;-1:-1:-1;;;22261:117:0;;;;;;;:::i;3207:319::-;3301:7;3340:17;;;:12;;;:17;;;;;;3391:12;3376:13;3368:36;;;;-1:-1:-1;;;3368:36:0;;;;;;;;:::i;:::-;-1:-1:-1;3458:3:0;3471:12;3482:1;3471:8;:12;:::i;:::-;3458:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;3451:40;;;3207:319;;;;;:::o;26932:604::-;27053:4;-1:-1:-1;;;;;27080:13:0;;9183:20;27075:60;;-1:-1:-1;27119:4:0;27112:11;;27075:60;27145:23;27171:252;-1:-1:-1;;;13673:10:0;27311:4;27330:7;27352:5;27187:181;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;27187:181:0;;;;;;;-1:-1:-1;;;;;27187:181:0;;;;;;;;;;;27171:252;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27171:15:0;;;:252;:15;:252::i;:::-;27145:278;;27434:13;27461:10;27450:32;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;27501:26:0;-1:-1:-1;;;27501:26:0;;-1:-1:-1;;;26932:604:0;;;;;;:::o;5552:671::-;5618:4;5656:19;;;:12;;;:19;;;;;;5692:15;;5688:528;;5762:21;5786:14;5799:1;5786:10;:14;:::i;:::-;5835:18;;5762:38;;-1:-1:-1;5815:17:0;;5835:22;;5856:1;;5835:22;:::i;:::-;5815:42;;5872:17;5892:3;:11;;5904:9;5892:22;;;;;;;;:::i;:::-;;;;;;;;;5872:42;;5960:9;5931:3;:11;;5943:13;5931:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;6010:17;:13;6026:1;6010:17;:::i;:::-;5984:23;;;;:12;;;:23;;;;;:43;6071:17;;5984:3;;6071:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6112:3;:12;;:19;6125:5;6112:19;;;;;;;;;;;6105:26;;;6155:4;6148:11;;;;;;;;5688:528;6199:5;6192:12;;;;;5253:291;5316:4;2129:17;;;:12;;;:17;;;;;;5333:204;;-1:-1:-1;5376:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;5436:18;;5414:19;;;:12;;;:19;;;;;;:40;;;;5469:11;;5333:204;-1:-1:-1;5520:5:0;5513:12;;873:470;949:4;985:17;;;:12;;;:17;;;;;;1019:13;1015:321;;-1:-1:-1;;1104:38:0;;;;;;;;;;;;;;;;;;1086:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1178:19;;1158:17;;;:12;;;:17;;;;;;;:39;1212:11;;1015:321;1292:5;1256:3;1269:12;1280:1;1269:8;:12;:::i;:::-;1256:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;1319:5;1312:12;;;;;1351:675;1415:4;1451:17;;;:12;;;:17;;;;;;1485:13;;1481:538;;1551:21;1575:12;1586:1;1575:8;:12;:::i;:::-;1622:19;;1551:36;;-1:-1:-1;1602:17:0;;1622:23;;1644:1;;1622:23;:::i;:::-;1602:43;;1660:26;1689:3;:12;;1702:9;1689:23;;;;;;;;:::i;:::-;;;;;;;;;;;1660:52;;1759:9;1729:3;:12;;1742:13;1729:27;;;;;;;;:::i;:::-;;;;;;;;;:39;;:27;;;;;:39;;;;;;;;;;;;1814:17;;:13;;:17;:::i;:::-;1796:14;;1783:28;;;;:12;;;:28;;;;;:48;1875:18;;1783:3;;1875:18;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;1875:18:0;;;;;;;;;;;;;;;;;;;;;1917:17;;;:12;;;:17;;;;;;1910:24;;;;1875:18;-1:-1:-1;1951:11:0;;-1:-1:-1;;;;1951:11:0;22394:421;-1:-1:-1;;;;;22474:16:0;;22466:61;;;;-1:-1:-1;;;22466:61:0;;20398:2:1;22466:61:0;;;20380:21:1;;;20417:18;;;20410:30;20476:34;20456:18;;;20449:62;20528:18;;22466:61:0;20196:356:1;22466:61:0;22547:16;22555:7;22547;:16::i;:::-;22546:17;22538:58;;;;-1:-1:-1;;;22538:58:0;;20759:2:1;22538:58:0;;;20741:21:1;20798:2;20778:18;;;20771:30;20837;20817:18;;;20810:58;20885:18;;22538:58:0;20557:352:1;22538:58:0;-1:-1:-1;;;;;22675:17:0;;;;;;:13;:17;;;;;:30;;22697:7;22675:21;:30::i;:::-;-1:-1:-1;22718:29:0;:12;22735:7;22744:2;22718:16;:29::i;:::-;-1:-1:-1;22765:33:0;;22790:7;;-1:-1:-1;;;;;22765:33:0;;;22782:1;;22765:33;;22782:1;;22765:33;22394:421;;:::o;9246:195::-;9349:12;9381:52;9403:6;9411:4;9417:1;9420:12;9349;9183:20;;9927:60;;;;-1:-1:-1;;;9927:60:0;;21523:2:1;9927:60:0;;;21505:21:1;21562:2;21542:18;;;21535:30;21601:31;21581:18;;;21574:59;21650:18;;9927:60:0;21321:353:1;9927:60:0;10001:12;10015:23;10042:6;-1:-1:-1;;;;;10042:11:0;10062:5;10070:4;10042:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10000:75;;;;10093:52;10111:7;10120:10;10132:12;10093:17;:52::i;:::-;10086:59;9683:470;-1:-1:-1;;;;;;;9683:470:0:o;10161:515::-;10276:12;10305:7;10301:368;;;-1:-1:-1;10336:10:0;10329:17;;10301:368;10383:17;;:21;10379:279;;10486:10;10480:17;10547:15;10534:10;10530:2;10526:19;10519:44;10379:279;10629:12;10622:20;;-1:-1:-1;;;10622:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1914:254;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2173:127::-;2234:10;2229:3;2225:20;2222:1;2215:31;2265:4;2262:1;2255:15;2289:4;2286:1;2279:15;2305:632;2370:5;2400:18;2441:2;2433:6;2430:14;2427:40;;;2447:18;;:::i;:::-;2522:2;2516:9;2490:2;2576:15;;-1:-1:-1;;2572:24:1;;;2598:2;2568:33;2564:42;2552:55;;;2622:18;;;2642:22;;;2619:46;2616:72;;;2668:18;;:::i;:::-;2708:10;2704:2;2697:22;2737:6;2728:15;;2767:6;2759;2752:22;2807:3;2798:6;2793:3;2789:16;2786:25;2783:45;;;2824:1;2821;2814:12;2783:45;2874:6;2869:3;2862:4;2854:6;2850:17;2837:44;2929:1;2922:4;2913:6;2905;2901:19;2897:30;2890:41;;;;2305:632;;;;;:::o;2942:222::-;2985:5;3038:3;3031:4;3023:6;3019:17;3015:27;3005:55;;3056:1;3053;3046:12;3005:55;3078:80;3154:3;3145:6;3132:20;3125:4;3117:6;3113:17;3078:80;:::i;3169:322::-;3238:6;3291:2;3279:9;3270:7;3266:23;3262:32;3259:52;;;3307:1;3304;3297:12;3259:52;3347:9;3334:23;3380:18;3372:6;3369:30;3366:50;;;3412:1;3409;3402:12;3366:50;3435;3477:7;3468:6;3457:9;3453:22;3435:50;:::i;3678:328::-;3755:6;3763;3771;3824:2;3812:9;3803:7;3799:23;3795:32;3792:52;;;3840:1;3837;3830:12;3792:52;3863:29;3882:9;3863:29;:::i;:::-;3853:39;;3911:38;3945:2;3934:9;3930:18;3911:38;:::i;:::-;3901:48;;3996:2;3985:9;3981:18;3968:32;3958:42;;3678:328;;;;;:::o;4011:396::-;4089:6;4097;4150:2;4138:9;4129:7;4125:23;4121:32;4118:52;;;4166:1;4163;4156:12;4118:52;4189:29;4208:9;4189:29;:::i;:::-;4179:39;;4269:2;4258:9;4254:18;4241:32;4296:18;4288:6;4285:30;4282:50;;;4328:1;4325;4318:12;4282:50;4351;4393:7;4384:6;4373:9;4369:22;4351:50;:::i;:::-;4341:60;;;4011:396;;;;;:::o;4412:186::-;4471:6;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;4563:29;4582:9;4563:29;:::i;4603:347::-;4668:6;4676;4729:2;4717:9;4708:7;4704:23;4700:32;4697:52;;;4745:1;4742;4735:12;4697:52;4768:29;4787:9;4768:29;:::i;:::-;4758:39;;4847:2;4836:9;4832:18;4819:32;4894:5;4887:13;4880:21;4873:5;4870:32;4860:60;;4916:1;4913;4906:12;4860:60;4939:5;4929:15;;;4603:347;;;;;:::o;4955:667::-;5050:6;5058;5066;5074;5127:3;5115:9;5106:7;5102:23;5098:33;5095:53;;;5144:1;5141;5134:12;5095:53;5167:29;5186:9;5167:29;:::i;:::-;5157:39;;5215:38;5249:2;5238:9;5234:18;5215:38;:::i;:::-;5205:48;;5300:2;5289:9;5285:18;5272:32;5262:42;;5355:2;5344:9;5340:18;5327:32;5382:18;5374:6;5371:30;5368:50;;;5414:1;5411;5404:12;5368:50;5437:22;;5490:4;5482:13;;5478:27;-1:-1:-1;5468:55:1;;5519:1;5516;5509:12;5468:55;5542:74;5608:7;5603:2;5590:16;5585:2;5581;5577:11;5542:74;:::i;:::-;5532:84;;;4955:667;;;;;;;:::o;5627:390::-;5705:6;5713;5766:2;5754:9;5745:7;5741:23;5737:32;5734:52;;;5782:1;5779;5772:12;5734:52;5818:9;5805:23;5795:33;;5879:2;5868:9;5864:18;5851:32;5906:18;5898:6;5895:30;5892:50;;;5938:1;5935;5928:12;6022:260;6090:6;6098;6151:2;6139:9;6130:7;6126:23;6122:32;6119:52;;;6167:1;6164;6157:12;6119:52;6190:29;6209:9;6190:29;:::i;:::-;6180:39;;6238:38;6272:2;6261:9;6257:18;6238:38;:::i;:::-;6228:48;;6022:260;;;;;:::o;6287:380::-;6366:1;6362:12;;;;6409;;;6430:61;;6484:4;6476:6;6472:17;6462:27;;6430:61;6537:2;6529:6;6526:14;6506:18;6503:38;6500:161;;;6583:10;6578:3;6574:20;6571:1;6564:31;6618:4;6615:1;6608:15;6646:4;6643:1;6636:15;6500:161;;6287:380;;;:::o;7912:276::-;8043:3;8081:6;8075:13;8097:53;8143:6;8138:3;8131:4;8123:6;8119:17;8097:53;:::i;:::-;8166:16;;;;;7912:276;-1:-1:-1;;7912:276:1:o;8193:413::-;8395:2;8377:21;;;8434:2;8414:18;;;8407:30;8473:34;8468:2;8453:18;;8446:62;-1:-1:-1;;;8539:2:1;8524:18;;8517:47;8596:3;8581:19;;8193:413::o;8611:400::-;8813:2;8795:21;;;8852:2;8832:18;;;8825:30;8891:34;8886:2;8871:18;;8864:62;-1:-1:-1;;;8957:2:1;8942:18;;8935:34;9001:3;8986:19;;8611:400::o;9016:349::-;9218:2;9200:21;;;9257:2;9237:18;;;9230:30;9296:27;9291:2;9276:18;;9269:55;9356:2;9341:18;;9016:349::o;9370:356::-;9572:2;9554:21;;;9591:18;;;9584:30;9650:34;9645:2;9630:18;;9623:62;9717:2;9702:18;;9370:356::o;10092:127::-;10153:10;10148:3;10144:20;10141:1;10134:31;10184:4;10181:1;10174:15;10208:4;10205:1;10198:15;10224:128;10264:3;10295:1;10291:6;10288:1;10285:13;10282:39;;;10301:18;;:::i;:::-;-1:-1:-1;10337:9:1;;10224:128::o;12478:1104::-;12608:3;12637:1;12670:6;12664:13;12700:3;12722:1;12750:9;12746:2;12742:18;12732:28;;12810:2;12799:9;12795:18;12832;12822:61;;12876:4;12868:6;12864:17;12854:27;;12822:61;12902:2;12950;12942:6;12939:14;12919:18;12916:38;12913:165;;;-1:-1:-1;;;12977:33:1;;13033:4;13030:1;13023:15;13063:4;12984:3;13051:17;12913:165;13094:18;13121:104;;;;13239:1;13234:323;;;;13087:470;;13121:104;-1:-1:-1;;13154:24:1;;13142:37;;13199:16;;;;-1:-1:-1;13121:104:1;;13234:323;12425:1;12418:14;;;12462:4;12449:18;;13332:1;13346:165;13360:6;13357:1;13354:13;13346:165;;;13438:14;;13425:11;;;13418:35;13481:16;;;;13375:10;;13346:165;;;13350:3;;13540:6;13535:3;13531:16;13524:23;;13087:470;-1:-1:-1;13573:3:1;;12478:1104;-1:-1:-1;;;;;;;;12478:1104:1:o;13587:184::-;13657:6;13710:2;13698:9;13689:7;13685:23;13681:32;13678:52;;;13726:1;13723;13716:12;13678:52;-1:-1:-1;13749:16:1;;13587:184;-1:-1:-1;13587:184:1:o;15225:470::-;15404:3;15442:6;15436:13;15458:53;15504:6;15499:3;15492:4;15484:6;15480:17;15458:53;:::i;:::-;15574:13;;15533:16;;;;15596:57;15574:13;15533:16;15630:4;15618:17;;15596:57;:::i;:::-;15669:20;;15225:470;-1:-1:-1;;;;15225:470:1:o;15700:127::-;15761:10;15756:3;15752:20;15749:1;15742:31;15792:4;15789:1;15782:15;15816:4;15813:1;15806:15;15832:204;15870:3;15906:4;15903:1;15899:12;15938:4;15935:1;15931:12;15973:3;15967:4;15963:14;15958:3;15955:23;15952:49;;;15981:18;;:::i;:::-;16017:13;;15832:204;-1:-1:-1;;;15832:204:1:o;16041:135::-;16080:3;-1:-1:-1;;16101:17:1;;16098:43;;;16121:18;;:::i;:::-;-1:-1:-1;16168:1:1;16157:13;;16041:135::o;18236:414::-;18438:2;18420:21;;;18477:2;18457:18;;;18450:30;18516:34;18511:2;18496:18;;18489:62;-1:-1:-1;;;18582:2:1;18567:18;;18560:48;18640:3;18625:19;;18236:414::o;18655:127::-;18716:10;18711:3;18707:20;18704:1;18697:31;18747:4;18744:1;18737:15;18771:4;18768:1;18761:15;18787:120;18827:1;18853;18843:35;;18858:18;;:::i;:::-;-1:-1:-1;18892:9:1;;18787:120::o;18912:125::-;18952:4;18980:1;18977;18974:8;18971:34;;;18985:18;;:::i;:::-;-1:-1:-1;19022:9:1;;18912:125::o;19042:112::-;19074:1;19100;19090:35;;19105:18;;:::i;:::-;-1:-1:-1;19139:9:1;;19042:112::o;19159:136::-;19198:3;19226:5;19216:39;;19235:18;;:::i;:::-;-1:-1:-1;;;19271:18:1;;19159:136::o;19300:505::-;-1:-1:-1;;;;;19585:15:1;;;19567:34;;19637:15;;19632:2;19617:18;;19610:43;19684:2;19669:18;;19662:34;;;19732:3;19727:2;19712:18;;19705:31;;;19510:4;;19753:46;;19779:19;;19771:6;19753:46;:::i;:::-;19745:54;19300:505;-1:-1:-1;;;;;;19300:505:1:o;19810:249::-;19879:6;19932:2;19920:9;19911:7;19907:23;19903:32;19900:52;;;19948:1;19945;19938:12;19900:52;19980:9;19974:16;19999:30;20023:5;19999:30;:::i;20064:127::-;20125:10;20120:3;20116:20;20113:1;20106:31;20156:4;20153:1;20146:15;20180:4;20177:1;20170:15

Swarm Source

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