abstract contract ERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param _interfaceID The interface identifier, as specified in ERC-165
     * @return `true` if the contract implements `_interfaceID`
     */
    function supportsInterface(bytes4 _interfaceID)
        public
        pure
        virtual
        returns (bool)
    {
        return _interfaceID == this.supportsInterface.selector;
    }
}
function supportsInterface(bytes4 _interfaceID)
    public
    pure
    virtual
    returns (bool)
{
    return _interfaceID == this.supportsInterface.selector;
}

/**
 * @notice Query if a contract implements an interface
 * @param _interfaceID The interface identifier, as specified in ERC-165
 * @return `true` if the contract implements `_interfaceID`
 */