###############################################################
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#  
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#  
###############################################################
UDK_3_0_0 {
	global:
		component_getImplementationEnvironment;
		component_getFactory;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_openStream;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3BII;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3B;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_close;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2I;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_sync;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_openStream;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_close;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_getFilePointer;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_length;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2_3BII;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_readInt;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_seek;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_write;
		Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_writeInt;		
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_openStream;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2_3BII;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_close;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_skip;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_available;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2_3B;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_isStreamElement;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_removeElement;
		Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_renameElement;
	local:
		*;
};
