1999-08-04 02:03:56 +00:00
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" >
2000-05-06 19:36:18 +00:00
< meta name = "GENERATOR" content = "Mozilla/4.72 [en] (WinNT; I) [Netscape]" >
1999-09-15 18:32:21 +00:00
< meta name = "Author" content = "Jacob Rosenschein" >
2000-05-06 19:36:18 +00:00
< meta name = "Description" content = "Release Notes for version 4.1 of the Directory SDK for Java" >
1999-09-15 18:32:21 +00:00
< meta name = "KeyWords" content = "Java SDK, Directory SDK, LDAP SDK, SDK, LDAP, Directory, Netscape Directory, Netscape SDK, Java LDAP SDK" >
2000-05-06 19:36:18 +00:00
< title > Directory SDK 4.1 for Java Source Code Release Notes< / title >
1999-08-04 02:03:56 +00:00
< / head >
1999-09-15 18:32:21 +00:00
< body text = "#000000" bgcolor = "#FFFFFF" link = "#0000EE" vlink = "#551A8B" alink = "#FF0000" >
1999-08-04 02:03:56 +00:00
< center >
< h2 >
2000-05-06 19:36:18 +00:00
< font face = "Arial,Helvetica" > Directory SDK 4.1 for Java Source Code Release
Notes< / font > < / h2 > < / center >
1999-09-15 18:32:21 +00:00
2000-05-06 19:36:18 +00:00
< center > Last Updated May 06, 2000< / center >
1999-09-15 18:32:21 +00:00
< p > These release notes contain information about:
1999-08-04 02:03:56 +00:00
< ul >
2000-05-06 19:36:18 +00:00
< li >
< a href = "#new41" > What's New in Version 4.1< / a > < / li >
< li >
< a href = "#fixed40" > Bugs Fixed Since Version 4.0< / a > < / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
< a href = "#new" > What's New in Version 4.0< / a > < / li >
< li >
2000-05-06 19:36:18 +00:00
< a href = "#fixed305" > Bugs Fixed Since Version 3.05< / a > < / li >
1999-09-15 18:32:21 +00:00
< li >
2000-05-06 19:36:18 +00:00
< a href = "#install" > Downloading and Building the Source< / a > < / li >
1999-09-15 18:32:21 +00:00
< li >
2000-05-06 19:36:18 +00:00
< a href = "#update" > Updating Java Classes in Netscape Communicator< / a > < / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
< a href = "#report" > Reporting Problems< / a > < / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
< a href = "#newsgroup" > Accessing the Directory Developers Newsgroup< / a > < / li >
1999-08-04 02:03:56 +00:00
< / ul >
2000-05-06 19:36:18 +00:00
For the latest documentation, see the < i > < a href = "http://developer.iplanet.com/docs/manuals/dirsdk/jsdk40/contents.htm" TARGET = "_top" > Netscape
1999-09-15 18:32:21 +00:00
Directory SDK 4.0 for Java Programmer's Guide< / a > < / i > , which is available
2000-05-06 19:36:18 +00:00
on the iPlanet Developer Documentation site.
< p > Reference materials for the Directory SDK 4.x for Java are produced
1999-09-15 18:32:21 +00:00
using the Javadoc utility. They are available in the < tt > /dist/doc/< / tt >
2000-05-06 19:36:18 +00:00
directory where you installed the SDK or online at:
< br > < tt > < a href = "http://developer.iplanet.com/docs/manuals/dirsdk/jsdk40/Reference/index.html" > http://developer.iplanet.com/docs/manuals/dirsdk/jsdk40/Reference/index.html< / a > .< / tt >
< p > If you only want the Directory SDK 4.x for Java (not the source code),
you can download it from the < a href = "http://www.iplanet.com/downloads/developer/index.html" > iPlanet
Developer Downloads< / a > site.
1999-09-15 18:32:21 +00:00
< p >
2000-05-06 19:36:18 +00:00
< hr SIZE = 1 NOSHADE WIDTH = "100%" >
< br > < a NAME = "new41" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > What's
New in Version 4.1< / font > < / font > < / b >
< p > The Directory SDK 4.1 for Java is a bug fix relase. Please check the
list of < a href = "#fixed40" > Bugs Fixed Since Version 4.0< / a > . The following
new features have been added in this release:
< ul >
< li >
A new class, < tt > netscape.ldap.factory.JSSESocketFactory< / tt > . It implements
the < tt > LDAPSocketFactory< / tt > interface using the Java Secure Socket Extension
(JSSE) intefaces as the SSL provider. A JSSE implementation is not
packaged with the Directory SDK classes; you will need to have one in your
CLASSPATH to be able to use < tt > JSSESocketFactory< / tt > . A reference
implementation of JSSE interfaces is available at < a href = "http://java.sun.com/products/jsse/" > http://java.sun.com/products/jsse/< / a > .< / li >
< li >
A new interface, < tt > netscape.ldap.LDAPTraceWriter,< / tt > enables
logging of LDAP trace messages in environments where an < tt > OutputStream< / tt >
cannot be used. The interface is meant primarily for integrating LDAP tracing
with the servlet log facility.< / li >
< li >
A new method < tt > setConnectTimeout() < / tt > has been added to < tt > LDAPConnection.
< / tt > This
method allows you to limit the amount of time that application code
waits for < tt > LDAPConnection.connnect() < / tt > to establish a connection.
By setting the connect timeout, an application can avoid blocking for a
long period of time when a Directory Server host is down or unreachable.< / li >
< li >
All base classes in the < tt > netscape.ldap< / tt > and < tt > netscape.ldap.util< / tt >
package are now serializable.< / li >
< / ul >
< hr SIZE = 1 NOSHADE WIDTH = "100%" >
< br > < a NAME = "fixed40" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > Bugs
Fixed Since Version 4.0< / font > < / font > < / b >
< p > The following bugs have been fixed since the release of the Directory
SDK 4.0 for Java. iPlanet bug numbers are shown in parentheses.
< ul >
< li >
Bugzilla < a href = "http://bugzilla.mozilla.org/show_bug.cgi?id=28001" > 28001< / a > :
Parsing in < tt > LDAPUrl(String url)< / tt > ignores attributes if DN is empty.< / li >
< li >
Bugzilla < a href = "http://bugzilla.mozilla.org/show_bug.cgi?id=28005" > 28005< / a > :
Exceptions thrown in < tt > connect()< / tt > and < tt > disconnect()< / tt > .< / li >
< li >
Bugzilla < a href = "http://bugzilla.mozilla.org/show_bug.cgi?id=13546" > 13546< / a > :
< tt > JDAPFilterOpers< / tt >
throws StringIndexOutOfBoundsException.< / li >
< li >
Bugzilla < a href = "http://bugzilla.mozilla.org/show_bug.cgi?id=16514" > 16514< / a > :
< tt > LDAPAttributeSet.removeElementAt()< / tt >
doesn't remove the attribute completely.< / li >
< li >
Bugzilla < a href = "http://bugzilla.mozilla.org/show_bug.cgi?id=34326" > 34326:< / a > < tt >
LDAPDN.unEscapeRDN()< / tt > removes all /'s - not just the escape characters.< / li >
< li >
Bugzilla < a href = "http://bugzilla.mozilla.org/show_bug.cgi?id=29262" > 29262:< / a > < tt >
LDAPSearch< / tt > doesn't apply base64-encoding to to nonprintable DNs.< / li >
< li >
Wrong user DN supplied for referral on bind operation. (364869)< / li >
< li >
4.0 LDAPMatchingRuleSchema not binary compatible with 3.x. (365423)< / li >
< li >
LDAP JDK does not properly abandon operation. (341439)< / li >
< li >
< tt > RDN.equals()< / tt > assumes case-insensitivity, ignores multiple values.
(365574)< / li >
< li >
< tt > authenticate()< / tt > with bad password does not throw exception. (366578)< / li >
< li >
Should provide DSML option for LDAPSearch. (368416)< / li >
< li >
Incorrect signature for < tt > LDAPResponseListener.merge()< / tt > . (364775)< / li >
< li >
MS JVM throws < tt > LDAPSortControl< / tt > runtime exception. (365574)< / li >
< li >
Need new method < tt > LDAPDN.equals( String dn1, String dn2)< / tt > . (365575)< / li >
< li >
Some 3.x < tt > LDAPSchema< / tt > public methods are protected in 4.x. (381574)< / li >
< li >
Server using VLV for non-search operations - 'Critical extension unavailable'
error in log. (382605)< / li >
< li >
< tt > LDAPSearchResults.getCount()< / tt > returns wrong count. (355336)< / li >
< li >
< tt > LDAPCache.cleanup()< / tt > throws NullPointerException. (388736)< / li >
< li >
< tt > LDAPConnection.read()< / tt > doesn't return subentries (387722)< / li >
< li >
LDAP SDK 4.0 causes NAS crash. (390128)< / li >
< li >
NullPointerException in < tt > deleteThreadConnEntry()< / tt > . (389228)< / li >
< li >
< tt > LDAPSchema.getSyntaxes()< / tt > missing (I-D conformance). (388463)< / li >
< li >
SASL bugs found at CMU. (391585)< / li >
< li >
< tt > LDAPCompareAttrNames< / tt > not consistently case-sensitive. (390382)< / li >
< li >
< tt > LDAPEntry< / tt > throws a null exception when reading non existing attribute
(388577)< / li >
< li >
NullPointerException with Malformed Filter. (390249)< / li >
< li >
LDAP objects not really serializable. (356821)< / li >
< li >
< tt > LDAPSearch -l< / tt > option does not work correctly (393676)< / li >
< li >
NullPointerException in < tt > LDAPSearch< / tt > (387453)< / li >
< li >
< tt > java-object-schema.conf< / tt > is not packaged with SDK. (390154)< / li >
< li >
JNDI SP: < tt > LdapContextImpl.reconnect(null)< / tt > throw null pointer exceptions
(383788)< / li >
< / ul >
< hr SIZE = 1 NOSHADE WIDTH = "100%" >
< p > < a NAME = "new" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > What's
1999-09-15 18:32:21 +00:00
New in Version 4.0< / font > < / font > < / b >
2000-05-06 19:36:18 +00:00
< p > The Directory SDK 4.0 for Java provides programmers with the tools to
develop directory-enabled software. This release includes:
1999-09-15 18:32:21 +00:00
< ul >
< li >
Application Program Interface (API) updates to match the newest LDAP (Lightweight
Directory Access Protocol) internet drafts< / li >
1999-08-04 02:03:56 +00:00
1999-09-15 18:32:21 +00:00
< li >
an asynchronous interface to LDAP< / li >
1999-08-04 02:03:56 +00:00
1999-09-15 18:32:21 +00:00
< li >
a new SASL (Simple Authentication and Security Layer) API< / li >
< li >
2000-05-06 19:36:18 +00:00
the Netscape LDAP Service Provider for LDAP.< / li >
1999-09-15 18:32:21 +00:00
< / ul >
Additional improvements and changes to the Directory SDK are listed under
2000-05-06 19:36:18 +00:00
< a href = "#fixed305" > Bugs
1999-09-15 18:32:21 +00:00
Fixed Since Version 3.05< / a > .
< p > < b > < font face = "Arial,Helvetica" > API updates< / font > < / b >
2000-05-06 19:36:18 +00:00
< p > The Directory SDK 4.0 for Java supports these changes to the LDAP API:
1999-08-04 02:03:56 +00:00
< ul >
< li >
1999-09-15 18:32:21 +00:00
Sophisticated client-side management of referral authentication using the
< tt > LDAPBind< / tt >
interface.< / li >
< li >
Dynamic registration and instantiation of server response controls using
the < tt > register< / tt > and < tt > newInstance< / tt > methods of < tt > LDAPControl< / tt > .< / li >
< li >
The separation of the constraint class into < tt > LDAPConstraints< / tt > and
its subclass < tt > LDAPSearchConstraints< / tt > . < tt > LDAPConstraints< / tt > contains
only those methods implemented in the interface that apply to < i > all < / i > operations.
< tt > LDAPSearchConstraints< / tt >
is unchanged. All < tt > LDAPConnection< / tt > methods that used to take < tt > LDAPSearchConstraints< / tt >
as an argument (except for read and search methods) now pass < tt > LDAPConstraints< / tt >
instead.< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
When using < tt > LDAPConnection< / tt > for searching, retrieval of server response
controls is now handled by < tt > LDAPSearchResults< / tt > . Although the SDK
is backward compatible, you should call < tt > LDAPSearchResults.getResponseControls()< / tt >
instead of < tt > LDAPConnection.getResponseControls()< / tt > when writing new
code.< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
< tt > LDAPConnection.getServerControls()< / tt > now automatically parses controls.
As a result, calling < tt > parseResponse()< / tt > is no longer necessary.< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
Support for transparent failover connection policies. The available policies
are: (1) serial, (2) parallel with no delay, and (3) parallel with delay.
For more information, see < tt > LDAPConnection.setConnSetupDelay()< / tt > in
the javadocs.< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
< tt > LDAPConnection< / tt > has a new method called < tt > reconnect()< / tt > . This
method first disconnects and then connects and binds again using the same
parameters and mechanisms as the original connection..< / li >
< li >
Support for connection pools. For more information see < tt > netscape.ldap.util.ConnectionPool< / tt >
in the javadocs.< / li >
< li >
The addition of < tt > LDAPInterruptedException< / tt > , which is thrown if an
LDAP operation is interrupted.< / li >
< li >
The addition of < tt > LDAPProxiedAuthControl< / tt > , which can execute operations,
using different credentials, without rebinding.< / li >
< li >
< tt > LDAPConnection< / tt > now runs as a daemon thread. You no longer need
to call < tt > System.exit< / tt > when terminating your program.< / li >
< / ul >
< b > < font face = "Arial,Helvetica" > Asynchronous API< / font > < / b >
2000-05-06 19:36:18 +00:00
< p > The Directory SDK 4.0 for Java provides an interface called
1999-09-15 18:32:21 +00:00
< tt > LDAPAsynchronousConnection< / tt > .
This interface contains methods for performing LDAP operations asynchronously.
Instead of blocking while waiting for a response, methods in < tt > LDAPAsynchronousConnection< / tt >
return control to an application before they complete. For more information
on the asynchronous interface, see "< a href = "http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/asynch.htm" > Using
the Asynchronous Interface< / a > " in the < i > < a href = "http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/contents.htm" > Netscape
Directory SDK 4.0 for Java Programmer's Guide< / a > < / i > .
< p > < b > < font face = "Arial,Helvetica" > SASL API< / font > < / b >
< p > SASL allows clients and servers to communicate securely. The API accomplishes
this by finding a common authentication scheme and facilitating a series
of challenge and response interchanges between the client and server. If
these interchanges complete successfully, the client is authenticated.
For more information on SASL see "< a href = "http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/sasl.htm" > Using
SASL Authentication< / a > " in the < i > < a href = "http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/contents.htm" > Netscape
Directory SDK 4.0 for Java Programmer's Guide< / a > < / i > .
< p > < b > < font face = "Arial,Helvetica" > JNDI Service Provider for LDAP< / font > < / b >
< p > JNDI is a Java API that provides a common way for programmers to access
a variety of naming and directory services. This is accomplished via a
layer of software called a Service Provider. The Directory SDK includes
a Service Provider for LDAP.
< p > The following JNDI features are not implemented in this release of the
Netscape LDAP Service Provider:
< ul >
< li >
Support for federated names< / li >
< li >
Support for the "code base" attribute for objects stored in an LDAP directory.
The class name specified by the < tt > javaClassName< / tt > attribute must exist
in the local < tt > CLASSPATH< / tt > < / li >
< li >
The < tt > search()< / tt > method for schema directory contexts. To perform
searches in a schema directory context use a < tt > Context.lookup()< / tt >
request instead of < tt > DirContext.search()< / tt > .< / li >
< / ul >
For more information see "< a href = "http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/JNDIchap.htm" > Using
the JNDI Service Provider< / a > " in the < i > < a href = "http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/contents.htm" > Netscape
Directory SDK 4.0 for Java Programmer's Guide< / a > < / i > .
< p >
2000-05-06 19:36:18 +00:00
< hr SIZE = 1 NOSHADE WIDTH = "100%" >
< p > < a NAME = "fixed305" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > Bugs
1999-09-15 18:32:21 +00:00
Fixed Since Version 3.05< / font > < / font > < / b >
< p > The following bugs have been fixed since the release of the Directory
SDK 3.05 for Java. Bug numbers are shown in parentheses.
1999-08-04 02:03:56 +00:00
< ul >
< li >
1999-09-15 18:32:21 +00:00
< tt > LDAPSearchResults.getCount()< / tt > returns 0 for synchronous searches.
(355365)< / li >
< li >
Applets in Communicator can't fetch an error string. (351004)< / li >
< li >
< tt > DN.contains()< / tt > is implemented and documented incorrectly. (354615)< / li >
< li >
Search timeout is not handled correctly. (350998)< / li >
< li >
< tt > LDAPSchemaElement< / tt > needs a < tt > modify()< / tt > method. (350997)< / li >
< li >
< tt > LDAPBasePropertySupport< / tt > should enable referrals. (350996, 350995)< / li >
< li >
Cannot set the cache once < tt > LDAPConnection< / tt > has connected. (355904)< / li >
< li >
< tt > LDAPCache< / tt > changes the contents of returned attributes. (355942)< / li >
< li >
The SDK calls < tt > Thread.stop()< / tt > , < tt > suspend()< / tt > , and < tt > resume()< / tt > .
(354503)< / li >
< li >
VLV controls don't support the optional context field. (355215)< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
The SDK doesn't support all the schema options described in RFC 2252. (354347)< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
LDAP Beans don't handle referrals. (353306)< / li >
1999-08-04 02:03:56 +00:00
< li >
1999-09-15 18:32:21 +00:00
< tt > LDAPIsMember< / tt > doesn't handle dynamic groups. (353305)< / li >
< li >
The < tt > netscape.ldap.util.DN< / tt > class does not consider < tt > ""< / tt >
to be a valid DN. (352804)< / li >
< li >
< tt > LDAPCompareAttrNames< / tt > should allow for the specification of a locale.
(351022)< / li >
< li >
< tt > LDAPSearch< / tt > aborts on a size limit exception. (350624)< / li >
< li >
< tt > LDAPModificationSet< / tt > is missing a < tt > toString< / tt > method. (353308,
351719)< / li >
< li >
< tt > LDAPGetEntries< / tt > should allow a choice of which attributes to return.
(353307)< / li >
< li >
The SDK should support the latest LDIF specification. (356470, 352056)< / li >
< li >
The SDK should treat a < tt > "null"< / tt > filter as meaning < tt > "objectclass=*"< / tt > .
(354682)< / li >
< li >
< tt > LDAPSchema< / tt > contains unnecessary public < tt > "add"< / tt > methods.
(354997)< / li >
1999-08-04 02:03:56 +00:00
< / ul >
1999-09-15 18:32:21 +00:00
2000-05-06 19:36:18 +00:00
< hr SIZE = 1 NOSHADE WIDTH = "100%" >
< br > < a NAME = "install" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > Downloading
and Building the Source< / font > < / font > < / b >
< p > The Directory SDK source code is available on the Mozilla website. You
can download it at < a href = "http://www.mozilla.org/directory/javasdk.html" > http://www.mozilla.org/directory/javasdk.html< / a > .
< p > Follow the instructions at < a href = "http://www.mozilla.org/directory/buildjsdk-4.0.txt" > http://www.mozilla.org/directory/buildjsdk-4.0.txt< / a >
to build the Netscape Directory SDK.
< p >
< hr SIZE = 1 NOSHADE WIDTH = "100%" > < a NAME = "update" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > Updating
Java Classes in Netscape Communicator< / font > < / font > < / b >
< p > The LDAP Java classes contained in Netscape Communicator 4.7 and earlier
are outdated. You can upgrade these class files to the latest versions
using Communicator's SmartUpdate feature.
< p > The SmartUpdate page for the LDAP Java classes is at: < a href = "http://developer.netscape.com/software/ldap/ldap.html" > http://developer.netscape.com/software/ldap/ldap.html< / a >
< p > < b > Note: < / b > This page uses Communicator's SmartUpdate feature to update
the classes. Before visiting this page, you must enable SmartUpdate, Java,
JavaScript, and cookies in Communicator.
< p > < b > < font face = "Arial,Helvetica" > To enable SmartUpdate, Java, JavaScript,
and cookies:< / font > < / b >
< ul >
< li >
Go to the Edit menu and choose Preferences.< / li >
< li >
Select Advanced and make sure that Accept all cookies is active (it's radio
button is filled).< / li >
< li >
Make sure that Enable Java and Enable JavaScript are checked.< / li >
< li >
Choose Advanced | SmartUpdate from the left-hand panel.< / li >
< li >
Make sure that Enable SmartUpdate is checked.< / li >
< li >
Click OK.< / li >
< / ul >
1999-09-15 18:32:21 +00:00
< hr SIZE = 1 NOSHADE WIDTH = "100%" > < a NAME = "report" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > Reporting
Problems< / font > < / font > < / b >
< p > Please submit your problem via the the < a href = "http://bugzilla.mozilla.org" > Bugzilla< / a >
bugsystem . Use the "LDAP Java SDK" component.
1999-08-04 02:03:56 +00:00
< p >
1999-09-15 18:32:21 +00:00
< hr SIZE = 1 NOSHADE WIDTH = "100%" > < a NAME = "newsgroup" > < / a > < b > < font face = "Arial,Helvetica" > < font size = +1 > Accessing
the Directory Developers Newsgroup< / font > < / font > < / b >
< p > If you have additional questions or need more information about the
2000-05-06 19:36:18 +00:00
Netscape Directory SDK 4.x for Java, please visit the Mozilla < a href = "news://news.mozilla.org/netscape.public.mozilla.directory" > Directory
1999-09-15 18:32:21 +00:00
newsgroup< / a > and the DevEdge < a href = "http://developer.netscape.com/support/newsgroups/" TARGET = "_top" > Directory
Server newsgroups< / a > .
1999-08-04 02:03:56 +00:00
< center >
1999-09-15 18:32:21 +00:00
< p >
< hr SIZE = 1 NOSHADE WIDTH = "100%" > < font size = -1 > Contains OROMatcher®
regular expression software from ORO Java Software. < nobr > © < / nobr > Copyright
1997 by ORO Java Software.< / font >
< br > < font size = -1 > Redistribution separate from Netscape Directory SDK for
Java or direct use of OROMatcher interfaces< / font >
< br > < font size = -1 > requires a license from ORO Java Software. < a href = "http://www.oroinc.com/" TARGET = "_top" > http://www.oroinc.com< / a > .
OROMatcher® is a trademark of Original Reusable Objects, Inc.< / font >
< p > < font size = -1 > For more Internet development resources, try < a href = "http://home.netscape.com/computing/techsearch/index.html?cp=dev01bnts" TARGET = "_top" > Netscape
TechSearch< / a > .< / font > < / center >
< hr SIZE = 0 WIDTH = "100%" >
1999-08-04 02:03:56 +00:00
< / body >
< / html >