Copyright 1995 Sun Microsystems, Inc.
Printed in the United States of America.
All Rights Reserved.

This software product (LICENSED PRODUCT), implementing the Object
Management Group's "Internet Inter-ORB Protocol", is protected by
copyright and is distributed under the following license restricting
its use.  Portions of LICENSED PRODUCT may be protected by one or more
U.S. or foreign patents, or pending applications.

LICENSED PRODUCT is made available for your use provided that you
include this license and copyright notice on all media and
documentation and the software program in which this product is
incorporated in whole or part.

You may copy, modify, distribute, or sublicense the LICENSED PRODUCT
without charge as part of a product or software program developed by
you, so long as you preserve the functionality of interoperating with
the Object Management Group's "Internet Inter-ORB Protocol" version
one.  However, any uses other than the foregoing uses shall require
the express written consent of Sun Microsystems, Inc.

The names of Sun Microsystems, Inc. and any of its subsidiaries or
affiliates may not be used in advertising or publicity pertaining to
distribution of the LICENSED PRODUCT as permitted herein.

This license is effective until terminated by Sun for failure to
comply with this license.  Upon termination, you shall destroy or
return all code and documentation for the LICENSED PRODUCT.

LICENSED PRODUCT IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A
PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
DEALING, USAGE OR TRADE PRACTICE.

LICENSED PRODUCT IS PROVIDED WITH NO SUPPORT AND WITHOUT ANY
OBLIGATION ON THE PART OF SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.

SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY
WITH RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY
PATENTS BY LICENSED PRODUCT OR ANY PART THEREOF.

IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE
LIABLE FOR ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND
CONSEQUENTIAL DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY
OF SUCH DAMAGES.

Use, duplication, or disclosure by the government is subject to
restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
Technical Data and Computer Software clause at DFARS 252.227-7013 and
FAR 52.227-19.

SunOS, SunSoft, Sun, Solaris, Sun Microsystems and the Sun logo are
trademarks or registered trademarks of Sun Microsystems, Inc.

SunSoft, Inc.
2550 Garcia Avenue
Mountain View, California  94043
