ACADEMIC SOFTWARE LICENSE AGREEMENT FOR END-USERS AT PUBLIC FUNDED ACADEMIC, EDUCATION OR RESEARCH INSTITUTIONS FOR THE USE OF ARP/WARP 7.0

By clicking the Acceptance button for the ARP/wARP 7.0 Software ("Licensed Software"), you are consenting to be bound by and become a party to this agreement as the "Licensee". If you do not agree to all of the terms of this agreement, you must not click the Acceptance button, not install the product nor use the product, and you do not become a LICENSEE under this agreement.

If you are not a member of a public funded academic and/or education and/or research institution you must obtain a commercial license from EMBLEM (Info@embl-em.de).

This software license agreement is entered into by and between EMBL Enterprise Management GmbH (hereinafter "EMBLEM") located at Boxbergring 107, D-69126 Heidelberg, Germany and the "LICENSEE".

WHEREAS EMBLEM has the right to license all copyrights and other property rights in the Licensed Software identified as ARP/wARP 7.0 and developed by EMBL (European Molecular Biology Laboratory, Meyerhofstrasse 1, D-69117 Heidelberg, Germany) in collaboration with the NKI (The Netherlands Cancer Institute, Plesmanlaan 121, 1066CX Amsterdam, The Netherlands), and EMBLEM desires to license the Software so that it becomes available for public use and benefit.

WHEREAS LICENSEE is a public funded academic and/or education and/or research institution.

WHEREAS LICENSEE desires to acquire a free non-exclusive license to use the Software for internal research purposes only.

NOW, THEREFORE, in consideration of the mutual promises and covenants contained herein, the parties agree as follows:

1. Definitions
"Licensed Software", means the current version ARP/wARP 7.0 computer package developed by Victor Lamzin and Anastassis Perrakis, collectively the "Authors", pursuant to this Agreement.

ARP/wARP 7.0 calls for the use of some CCP4 (Collaborative Computer Project 4, Daresbury Laboratory, UK) programs and specialized libraries. Therefore, LICENSEE of ARP/wARP must obtain a CCP4 license and must install CCP4 prior to installation of ARP/wARP.

Any opinion, findings, conclusions or recommendations expressed in the ARP/wARP 7.0 suite are those of the authors and do not necessarily reflect the views of EMBL, NKI and EMBLEM.

2. License
Subject to the terms and conditions of this Agreement a non-exclusive, non-transferable License to use and copy the Licensed Software is made available free of charge for the LICENSEE, which is a non-profit educational, academic and/or research institution. The License is only granted for personal and internal use in research only at one Site, where a Site is defined as a set of contiguous buildings in one location. The software will be used at only one location of LICENSEE. The LICENSEE can use the Software only for academic research projects. This explicitly excludes projects which are contracted to the LICENSEE by third parties for a fee, or projects that are done in collaboration with a third party that is funding the research in whole or in part in exchange for commercial rights on the results and/or possible delay in publication of any relevant results to the academic community.

This license does not entitle LICENSEE to receive from EMBLEM any copies of the Licensed Software including but not limited to Licensed Software on disks, tapes or CD's, hard-copy documentation, technical support, telephone assistance, or enhancements or updates to the Licensed Software.

The user and any research assistants, co-workers or other workers who may use the Software agree to not give the source code to third parties or grant licenses on any software that includes the Licensed Software, alone or integrated into other software, to third parties. Modification of the Licensed Software code is prohibited without the prior written consent of EMBLEM.

3. Ownership
Except as expressly licensed in this Agreement, EMBL and NKI shall retain title to the Licensed Software, and any upgrades and modifications created by EMBL and NKI.

4. Consideration
In consideration for the license rights granted by EMBLEM, LICENSEE will obtain this academic license free of charge.

5. Copies
LICENSEE shall have the right to make copies of the Licensed Software for internal use at the Site and for back-up purposes under this Agreement, but agrees that all such copies shall contain the copyright notices and all other reasonable and appropriate proprietary markings or confidential legends that appear on the Licensed Software provided hereunder.

6. Support
EMBLEM shall have no obligation to offer support services to LICENSEE, and nothing contained herein shall be interpreted as to require EMBLEM to provide maintenance, installation services, debugging, consultation, or end-user support of any kind.

7. Software Protection
LICENSEE acknowledges that ARP/wARP is proprietary to EMBL and NKI. The software code of the Licensed Software shall be treated as trade secrets and confidential information, and LICENSEE agrees to use their best efforts to hold the same in confidence. LICENSEE's obligation for confidentiality shall not extend to any information which is, or becomes generally available to the public, is already known to or subsequently disclosed by third parties to LICENSEE and is at its free disposal, or is independently developed by LICENSEE or its affiliates without the use of the confidential information disclosed by EMBL or NKI, or is required by law or legal process.

Except as otherwise expressly permitted in this Agreement, LICENSEE may not (i) modify or create any derivative works of the Licensed Software or documentation to the Licensed Software, including customization, translation or localization; (ii) decompile, disassemble, reverse engineer, or otherwise attempt to derive the source code for the Product; (iii) redistribute, encumber, sell, rent, lease, sublicense, or otherwise transfer rights to the Licensed Software; (iv) remove or alter any trademark, logo, copyright or other proprietary notices, legends, symbols or labels in the Product; or (v) publish any results of benchmark tests run on the Product to a third party without EMBLEM's prior written consent.

For the avoidance of doubt there is a note on the above: Customizations of the distributed ARP/wARP code (including but not limited to modifications of the ARP/wARP c-shell, tcl/tk and/or python scripts, as well as writing additional scripts or any other kind of computer code that use parts or the whole of the licensed software including but not limited to the so-called "software pipelines") are explicitly considered 'derivative work' as defined in (i). LICENSEE is not permitted to carry out such 'derivative work' for either local use or redistribution of changed code without the written consent of the authors and EMBLEM.

8. Representations of EMBLEM to LICENSEE
EMBLEM represents to LICENSEE that (i) EMBLEM has the right to grant the License on the Licensed Software and to enter into this agreement and (ii) EMBLEM undertakes to use best efforts to cooperate with and assist LICENSEE, at LICENSEE's expense, in defending itself against any action based on the alleged infringement of any third party patent, copyright or trade secret rights resulting from or relating to the use or licensing of the Licensed Software by LICENSEE.

9. Indemnity and Disclaimer of Warranties
Except as expressly set forth in this agreement, EMBLEM makes no representations or warranties, expressed or implied.

The Licensed Software is provided free of charge, and, therefore, on an "as is" basis, without warranty of any kind, expressed or implied, including without limitation the warranties that it is free of defects, virus free, able to operate on an uninterrupted basis, merchantable, fit for a particular purpose or non-interfering. The entire risk as to the quality and performance of the Licensed Software is borne by LICENSEE.

By way of example, but not limitation, EMBLEM makes no representations or warranties of merchantability or fitness for the Licensed Software and any particular application or that the use of the Licensed Software will not infringe any patents, copyrights or trademarks or other rights of third parties. The entire risk as to the quality and performance of the product is borne by LICENSEE. EMBLEM shall not be liable for any liability or damages with respect to any claim by LICENSEE or any third party on account of, or arising from the license or use of the Software.

Should the Licensed Software prove defective in any respect, LICENSEE and not EMBL, NKI or their affiliates should assume the entire cost of any service and repair. This disclaimer of warranty constitutes an essential part of this agreement. No use of the Licensed Software is authorized hereunder except under this disclaimer.

In no event will EMBL, NKI or their affiliates be liable for any indirect, special, incidental or consequential damages arising out of the use of or inability to use the product, including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if advised of the possibility thereof, and regardless of the legal or equitable theory (contract, tort or otherwise) upon which the claim is based.

LICENSEE has no right to claim any indemnification based on LICENSEE's use of Licensed Software.

10. Promotional Advertising & References
LICENSEE may not use the name "ARP/wARP" in its promotional advertising, product literature, and other similar promotional materials to be disseminated to the public or any portion thereof. LICENSEE agrees not to identify EMBL and/or NKI in any promotional advertising or other promotional materials to be disseminated to the public, or any portion thereof without EMBLEM's prior written consent. For the avoidance of doubt, scientific literature is not defined as advertising and promotional materials.

LICENSEE agrees to cite the use of the Licensed Software on all related scientific publications, posters, grant applications, institutional reports or brochures. LICENSEE agrees further that any reference to the software for crystallographic computations will cite one or more publications as set forth in the manual and in agreement with common scientific practice. EMBLEM, EMBL or NKI shall not use LICENSEE's name in publicity or advertising involving this Agreement or otherwise without LICENSEE's prior written consent which may be withheld at LICENSEE's sole discretion.

11. Term
This Agreement and the license rights granted herein shall become effective as of the date this Agreement is executed by both parties and shall be perpetual unless terminated in accordance with this Section.

EMBLEM may terminate this Agreement at any time.

Either party may terminate this Agreement at any time effective upon the other party's breach of any agreement, covenant, or representation made in this Agreement, such breach remaining uncorrected sixty (60) days after written notice thereof.

LICENSEE shall have the right, at any time, to terminate this Agreement without cause by written notice to EMBLEM specifying the date of termination.

Upon termination, LICENSEE shall destroy all full and partial copies of the Licensed Software.

12. Governing Law
This Agreement shall be construed in accordance with the laws of Germany. Place of Jurisdiction shall be Mannheim.

13. General
The parties agree that this Agreement is the complete and exclusive agreement among the parties and supersedes all proposals and prior agreements whether written or oral, and all other communications among the parties relating to the subject matter of this Agreement. This Agreement cannot be modified except in writing and signed by both parties. Failure by either party at any time to enforce any of the provisions of this Agreement shall not constitute a waiver by such party of such provision nor in any way affect the validity of this Agreement.

The invalidity of singular provisions does not affect the validity of the entire understanding. The parties are obligated, however, to replace the invalid provisions by a regulation, which comes closest to the economic intent of the invalid provision. The same shall apply mutatis mutandis in case of a gap.

IN WITNESS WHEREOF, the LICENSEE hereto has caused this Agreement to be duly executed on the date of the download of the software and by accepting the license conditions by pressing the Acceptance button.

I have read this License Agreement and I agree to uphold the terms and conditions of this license.