Molsoft LLC
License Agreement Applicable to the Molsoft ICM Software Downloaded from the
MolSoft Web Site at www.molsoft.com

IMPORTANT - READ CAREFULLY BEFORE INSTALLING SOFTWARE THE SOFTWARE YOU ARE ABOUT TO ACCESS CONTAINS PROGRAMS, DOCUMENTATION, AND OTHER PROPRIETARY MATERIAL ("SOFTWARE") THAT BELONGS TO MOLSOFT LLC.  POSSESSION AND USE OF THE SOFTWARE IS SUBJECT TO THIS SOFTWARE LICENSE AGREEMENT (THE "LICENSE"). BY CLICKING THE ACCEPT BUTTON YOU AND YOUR EMPLOYER (IF THE SOFTWARE IS BEING USED IN THE COURSE OF YOUR DUTIES OF EMPLOYMENT) REPRESENT AND WARRANT THAT:(A) YOU HAVE READ AND AGREE TO BE FULLY BOUND BY AND BECOME A PARTY TO THIS LICENSE; AND (B) YOU ARE NOT (1) A NATIONAL OR RESIDENT OF CUBA, LIBYA, IRAQ, IRAN, SUDAN, SYRIA, OR NORTH KOREA; (2) YOU ARE NOT THE U.S. TREASURY DEPARTMENT'S LIST OF SPECIALLY DESIGNATED NATIONALS, TERRORISTS, AND NARCOTICS TRAFFICKERS OR THE U.S. COMMERC DEPARTMENT'S TABLE OF DENY ORDERS OR THE U.S. STATE DEPARTMENT'S PROLIFERATION ENTITY LIST. (C) IN THE EVENT THAT YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS OF THIS LICENSE, OR, IF YOU CANNOT WARRANT THAT YOU ARE NOT IN VIOLATION OF (B) ABOVE, YOU ARE NOT AUTHORIZED TO INSTALL, USE OR POSSESS THE SOFTWARE AND MUST IMMEDIATELY CEASE TO INSTALL THE SOFTWARE.

This Agreement has three parts.  Part I applies if you have NOT purchased a license to the accompanying software (the "Software").  Part II applies if you have purchased a license to the Software.  Part III applies to all license grants.  If you initially acquired a copy of the Software without purchasing a license and you wish to purchase a license, contact MolSoft L.L.C. ("Molsoft LLC") on the Internet at http://www.MolSoft.com or by email to info@molsoft.com.

PART I -- TERMS APPLICABLE WHEN LICENSE FEES NOT (YET) PAID (LIMITED TO EVALUATION, EDUCATIONAL AND NON-PROFIT USES).

Molsoft LLC grants you a non-exclusive license to use the Software free of charge if (a) you are a student, faculty member or staff member of an educational institution (K-12, junior college, college or library), a staff member of a religious organization, or an employee of an organization which meets Molsoft LLC's criteria for a charitable  non-profit organization; or (b) your use of the Software is for the purpose of evaluating whether to purchase an ongoing license to the Software.  The evaluation period for use by or on behalf of a commercial entity is limited to 14 days unless Molsoft's written consent is obtained. Evaluation use by others is not subject to the 14 day limit.  Government agencies (other than public libraries) are not considered educational, religious, or charitable non-profit organizations for purposes of this Agreement. If you are using the Software free of charge, you are not entitled to hard-copy documentation, support or telephone assistance.  If you fit within the description above, you may use the Software in the manner described in Part III below under "Scope of Grant."

DISCLAIMER OF WARRANTY.

Free of charge Software is provided on an "AS IS" basis, without warranty of any kind, including without limitation the warranties of merchantability, fitness for a particular purpose and non-infringement. The entire risk as to the quality and performance of the Software is borne by you.  Should the Software prove defective, you and not Molsoft LLC assume the entire cost of any service and repair. You must determine that the Software sufficiently meets your requirements. This disclaimer of warranty constitutes an essential part of the agreement. SOME JURISDICTIONS DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO YOU AND YOU MAY HAVE OTHER LEGAL RIGHTS THAT VARY BY JURISDICTION.

PART II -- TERMS APPLICABLE WHEN LICENSE FEES PAID.

GRANT. Subject to payment of applicable license fees, Molsoft LLC grants to you a limited, non-exclusive, non-transferable license to use the Software and accompanying documentation ("Documentation") in the manner described in Part III below under "Scope of Grant."

LIMITED WARRANTY.

Molsoft LLC warrants that for a period of ninety (90) days from the date of acquisition, the Software, if operated as directed, will substantially achieve the functionality described in the Documentation. Molsoft LLC does not warrant, however, that your use of the Software will be uninterrupted or that the operation of the Software will be error-free or secure.  You must determine that the Software sufficiently meets your requirements.  Molsoft LLC also warrants that the media containing the Software, if provided by Molsoft LLC, is free from defects in material and workmanship and will so remain for ninety (90) days from the date you acquired the Software. Molsoft LLC's sole liability for any breach of this warranty shall be, in Molsoft LLC's sole discretion: (i) to replace your defective media; or (ii) to advise you how to achieve substantially the same functionality with the Software as described in the Documentation through a procedure different from that set forth in the Documentation; or (iii) if the above remedies are impracticable, to refund the license fee you paid for the Software. Repaired, corrected, or replaced Software and Documentation shall be covered by this limited warranty for the period remaining under the warranty that covered the original Software, or if longer, for thirty (30) days after the date (a) of shipment to you of the repaired or replaced Software, or (b) Molsoft LLC advised you how to operate the Software so as to achieve the functionality described in the Documentation. Only if you inform Molsoft LLC of your problem with the Software during the applicable warranty period and provide evidence of the date you purchased a license to the Software will Molsoft LLC be obligated to honor this warranty. Molsoft LLC will use reasonable commercial efforts to repair, replace, advise, or, for individual consumers, refund pursuant to the foregoing warranty within 30 days of being so notified.

THIS IS A LIMITED WARRANTY, AND IT IS THE ONLY WARRANTY MADE BY MOLSOFT LLC.  MOLSOFT LLC MAKES NO OTHER EXPRESS WARRANTY AND NO WARRANTY OF NONINFRINGEMENT OF THIRD PARTIES' RIGHTS. THE DURATION OF IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY AND OF FITNESS FOR A PARTICULAR PURPOSE, IS LIMITED TO THE ABOVE LIMITED WARRANTY PERIOD; SOME JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO LIMITATIONS MAY NOT APPLY TO YOU. NO MOLSOFT LLC DEALER, AGENT, OR EMPLOYEE IS AUTHORIZED TO MAKE ANY MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.

If any modifications are made to the Software by you during the warranty period; if the media is subjected to accident, abuse, or improper use; or if you violate the terms of this Agreement, then this warranty shall immediately be terminated. This warranty shall not apply if the Software is used on or in conjunction with hardware or software other than the unmodified version of hardware and software with which the software was designed to be used as described in the Documentation.  THIS WARRANTY GIVES YOU SPECIFIC LEGAL RIGHTS, AND YOU MAY HAVE OTHER LEGAL RIGHTS THAT VARY BY JURISDICTION.

PART III -- TERMS APPLICABLE TO ALL LICENSE GRANTS.

SCOPE OF GRANT.

You may:

*	use the Software on any single computer;

*	use the Software on a network, provided that each person accessing the Software through the network has a copy of the Software licensed to that person;

*	use the Software on a second computer so long as only one copy is used at a time;

*	copy the Software for archival purposes, provided any copy must contain all of
the original Software's proprietary notices; or

*	if you have purchased a Pack of licenses for the Software (but not the Documentation), provided any copy must contain all of the original Software's proprietary notices.  The number of copies is the total number of copies that may be made for all platforms.  Additional copies of Documentation may be purchased.

You may not:

*	permit other individuals to use the Software except under the terms listed above;

*	permit concurrent use of the Software;

*	modify, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction), or create derivative works based on the Software;

*	copy the Software other than as specified above;

*	rent, lease, grant a security interest in, or otherwise transfer rights to the Software;

or

*	remove any proprietary notices or labels on the Software.

TITLE.

Title, ownership rights, and intellectual property rights in the Software and Documentation shall remain in Molsoft LLC. The Software and Documentation are protected by copyright and other intellectual property laws and by international treaties. Title and related rights in the content accessed through the Software is the property of the applicable content owner and may be protected by applicable law. This License gives you no rights to such content.

TERMINATION.

The license will terminate automatically if you fail to comply with the limitations described herein.  On termination, you must destroy all copies of the Software and Documentation.

USE OF FREE LIBRARY.

Molsoft ICM Version 3.0 uses a free library called Qwt for building its executable.  The Qwt library is found in the ICM 3.0 file "qwt.dll" in the distribution and is available under the GNU Lesser General Public License, which is available at http://www.gnu.org/copyleft/lesser.html.  According to the terms of the GNU Lesser General Public License for the use of Qwt, Licensees are free to modify the source code for Qwt, which can be found at:

http://sourceforge.net/projects/qwt.

You are free to modify the content of the Qwt library and recompile the library, but you are prohibited from changing the content of the definition file.  The following disclaimer applies to the Qwt library:

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.  You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Molsoft LLC hereby disclaims all copyright interest in the library "Qwt" (a library containing GUI components and utility classes) written by Josef Wilgen.  However, the remainder of ICM Version 3.0 is protected by Copyright (c) 1989-2002 Molsoft LLC.

LICENSES INCLUDING THE MINI-XPDB OR THE XPDB DATABASE.

Molsoft LLC's XPDB and the Mini-XPDB databases contain all known proteins annotated in a form designed for rapid and accurate use with Molsoft ICM Software. Molsoft XPDB and Mini-XPDB are derived from data freely available from the Protein Data Bank and found at www.rcsb.org/pdb.  Molsoft wishes to acknowledge the source of the PBD data files: H.M. Berman, J. Westbrook, Z. Feng, G. Gilliland, T.N. Bhat, H. Weissig, I.N. Shindyalov, P.E. Bourne: The Protein Data Bank. Nucleic Acids Research, 28 pp. 235-242 (2000). Users of Molsoft XPDB and Mini-XPDB should note that users assume all responsibility for insuring that intellectual property claims associated with any data set appearing in the Molosft XPDB are honored.  Molsoft's XPDB and Mini-XPDB data files do not contain any information on intellectual property claims with the exception in some cases of a reference for a patent involving the structure. Molsoft XPDB and Mini-XPDB files are provided on an "as is" basis, and Molsoft cannot be held liable to any party for direct, indirect, special, incidental, or consequential damages, including lost profits, arising from the use of the materials. The resources provided by Molsoft XPDB and Mini-XPDB are provided WITHOUT

WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. THIS INCLUDES BUT IS NOT LIMITED TO MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  MOLSOFT LLC MAKES NO REPRESENTATION THAT ITS XPDB RESOURCES WILL NOT INFRINGE ANY PATENT OR OTHER PROPRIETARY RIGHT.

EXPORT CONTROLS.

None of the Software or underlying information or technology may be downloaded or otherwise exported or reexported (i) into (or to a national or resident of) Cuba, Iraq, Libya, Yugoslavia, North Korea, Iran, Syria or any other country to which the U.S. has embargoed goods; or (ii) to anyone on the U.S. Treasury Department's list of Specially Designated Nationals or the U.S. Commerce Department's Table of Denial Orders. By downloading or using the Software, you are agreeing to the foregoing and you are representing and warranting that you are not located in, under the control of, or a national or resident of any such country or on any such list.

In addition, if the licensed Software is identified as a not-for-export product (for example, on the box, media or in the installation process), then the following applies:

EXCEPT FOR EXPORT TO CANADA FOR USE IN CANADA BY CANADIAN CITIZENS, THE SOFTWARE AND ANY UNDERLYING TECHNOLOGY MAY NOT BE EXPORTED OUTSIDE THE UNITED STATES OR TO ANY FOREIGN ENTITY OR "FOREIGN PERSON" AS DEFINED BY U.S. GOVERNMENT EGULATIONS, INCLUDING WITHOUT LIMITATION, ANYONE WHO IS NOT A CITIZEN, NATIONAL OR LAWFUL PERMANENT RESIDENT OF THE UNITED STATES.  BY DOWNLOADING OR USING THE SOFTWARE, YOU ARE AGREEING TO THE FOREGOING AND YOU ARE WARRANTING THAT YOU ARE NOT A "FOREIGN PERSON" OR UNDER THE CONTROL OF A FOREIGN PERSON.

LIMITATION OF LIABILITY.

UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, OR OTHERWISE, SHALL MOLSOFT LLC OR ITS SUPPLIERS OR RESELLERS BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL MOLSOFT LLC BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE AMOUNT MOLSOFT LLC RECEIVED FROM YOU FOR A LICENSE TO THE SOFTWARE, EVEN IF MOLSOFT LLC SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO YOU.

HIGH RISK ACTIVITIES.

The Software is not fault-tolerant and is not designed, manufactured or intended for use or resale as on-line control equipment in hazardous environments requiring fail-safe performance, such as in the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, direct life support machines, or weapons systems, in which the failure of the Software could lead directly to death, personal injury, or severe physical or environmental damage ("High Risk Activities").  Molsoft LLC specifically disclaims any express or implied warranty of fitness for High Risk Activities.

MISCELLANEOUS.

If the copy of the Software you received was accompanied by a printed or other form of a "hard-copy" Software License Agreement whose terms vary from this Agreement, then the hard-copy Software License Agreement governs your use of the Software.  This Agreement represents the complete agreement concerning this license and may be amended only by a writing executed by both parties.  THE ACCEPTANCE OF ANY PURCHASE ORDER PLACED BY YOU IS EXPRESSLY MADE CONDITIONAL ON YOUR ASSENT TO THE TERMS SET FORTH HEREIN AND NOT THOSE IN YOUR PURCHASE ORDER.  If any provision of this Agreement is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.  This Agreement shall be governed by California law (except for conflict of law provisions). The application the United Nations Convention of Contracts for the International Sale of Goods is expressly excluded.

U.S. GOVERNMENT RESTRICTED RIGHTS.

Use, duplication or disclosure by the Government is subject to restrictions set forth in subparagraphs(a) through (d) of the Commercial Computer-Restricted Rights clause at FAR 52.227-19 when applicable, or in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013, or at 252.211-7015, or to Molsoft LLC's standard commercial license, as applicable, and in similar clauses in the NASA FAR Supplement. Contractor/manufacturer is Molsoft, L.L.C., 3366 No. Torrey Pines Ct., Ste. 300, La Jolla, CA  92037 USA.
