contract VotedToken is
    ERC1155Mintable,
    Ownable
{
    /// @dev creates a new token
    /// @param uri URI of token
    /// @param isNF is non-fungible token
    /// @return type_ of token (a unique identifier)
    function create(
        string calldata uri,
        bool isNF
    )
        external
        onlyOwner()
        returns (uint256 type_)
    {
        // Store the type in the upper 128 bits
        type_ = (++nonce << 128);

        // Set a flag if this is an NFI.
        if (isNF) {
            type_ = type_ | TYPE_NF_BIT;
        }

        // This will allow restricted access to creators.
        creators[type_] = msg.sender;

        // emit a Transfer event with Create semantic to help with discovery.
        emit TransferSingle(
            msg.sender,
            address(0x0),
            address(0x0),
            type_,
            0
        );

        if (bytes(uri).length > 0) {
            emit URI(uri, type_);
        }
    }

    /// @dev creates a new token
    /// @param type_ of token
    /// @param uri URI of token
    function createWithType(
        uint256 type_,
        string calldata uri
    )
        external
        onlyOwner()
    {
        // This will allow restricted access to creators.
        creators[type_] = msg.sender;

        // emit a Transfer event with Create semantic to help with discovery.
        emit TransferSingle(
            msg.sender,
            address(0x0),
            address(0x0),
            type_,
            0
        );

        if (bytes(uri).length > 0) {
            emit URI(uri, type_);
        }
    }

}
function create(
    string calldata uri,
    bool isNF
)
    external
    onlyOwner()
    returns (uint256 type_)
{
    // Store the type in the upper 128 bits
    type_ = (++nonce << 128);

    // Set a flag if this is an NFI.
    if (isNF) {
        type_ = type_ | TYPE_NF_BIT;
    }

    // This will allow restricted access to creators.
    creators[type_] = msg.sender;

    // emit a Transfer event with Create semantic to help with discovery.
    emit TransferSingle(
        msg.sender,
        address(0x0),
        address(0x0),
        type_,
        0
    );

    if (bytes(uri).length > 0) {
        emit URI(uri, type_);
    }
}

/// @dev creates a new token
/// @param uri URI of token
/// @param isNF is non-fungible token
/// @return type_ of token (a unique identifier)