Software License, Version 1.0

Copyright 2002-2003, Trustees of Indiana University.
Copyright 2000-2001, University of Notre Dame.
All rights reserved.

Indiana University has the exclusive rights to license this product under the
following license.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

  * All redistributions of source code must retain the above copyright notice,
    the list of authors in the original source code, this list of conditions
    and the disclaimer listed in this license;

  * All redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the disclaimer listed in this license
    in the documentation and/or other materials provided with the distribution;

  * Any documentation included with all redistributions must include the
    following acknowledgement:

      "This product includes software developed at the University of Notre Dame
      and the Pervasive Technology Labs at Indiana University. For technical
      information contact Andrew Lumsdaine at the Pervasive Technology Labs at
      Indiana University.  For administrative and license questions contact the
      Advanced Research and Technology Institute at 351 West 10th Street.
      Indianapolis, Indiana 46202, phone 317-278-4100, fax 317-274-5902."

    Alternatively, this acknowledgement may appear in the software itself, and
    wherever such third-party acknowledgments normally appear.

  * The name Indiana University, the University of Notre Dame or "Caramel"
    shall not be used to endorse or promote products derived from this software
    without prior written permission from Indiana University.  For written
    permission, please contact Indiana University Advanced Research &
    Technology Institute.

  * Products derived from this software may not be called "Caramel", nor may
    Indiana University, the University of Notre Dame or "Caramel" appear in
    their name, without prior written permission of Indiana University Advanced
    Research & Technology Institute.

Indiana University provides no reassurances that the source code provided does
not infringe the patent or any other intellectual property rights of any other
entity.  Indiana University disclaims any liability to any recipient for claims
brought by any other entity based on infringement of intellectual property
rights or otherwise.  

LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO WARRANTIES
AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES NO WARRANTIES
AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF INFRINGEMENT OF THIRD
PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. INDIANA UNIVERSITY MAKES
NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", "VIRUSES", "TROJAN HORSES",
"TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  LICENSEE ASSUMES THE ENTIRE RISK
AS TO THE PERFORMANCE OF SOFTWARE AND/OR ASSOCIATED MATERIALS, AND TO THE
PERFORMANCE AND VALIDITY OF INFORMATION GENERATED USING SOFTWARE.
