License Agreement for WebStorm
Academic License

IMPORTANT! READ CAREFULLY: THIS IS A LEGAL AGREEMENT. BY DOWNLOADING, INSTALLING, COPYING, SAVING ON YOUR COMPUTER, OR OTHERWISE USING THIS SOFTWARE, YOU (LICENSEE, AS DEFINED BELOW) ARE BECOMING A PARTY TO THIS AGREEMENT AND YOU ARE CONSENTING TO BE BOUND BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU SHOULD NOT DOWNLOAD, INSTALL AND USE THE SOFTWARE.

1. PARTIES

(a) "Licensor" means JetBrains s.r.o., having its principal place of business at Na hrebenech II 1718/10, Prague, 14700, Czech Republic, registered with Commercial Register kept by the Municipal Court of Prague, Section C, file 86211, ID.Nr.: 265 02 275.

(b) "Licensee" means the individual who is a student, faculty or staff member at an educational institution, or the educational institution specified in the License Certificate, exercising rights under, and complying with all of the terms of, this Agreement. For purposes of this definition, "educational institution" means a public or private school, college, university or other post secondary educational establishment.

2. DEFINITIONS

(a) "Authorized User" means (i) if Licensee is an individual, solely Licensee; (ii) if Licensee is an educational institution, any student, faculty or staff member authorized by Licensee to use the Software while performing duties within the scope of their employment or assignment.

(b) "Client" means a computer device used by Authorized User for running the Software.

(c) "License Certificate" means evidence of a license provided by Licensor to Licensee in electronic or printed form.

(d) "License Key" means a unique key-code that enables a single Authorized User to use the Software at a time. Only Licensor and/or its representatives are permitted to produce License Keys for the Software.

(e) "Software" means software program known as WebStorm in binary form, including its documentation, upgrades provided pursuant to Section 8 of this Agreement, and any third party software programs that are owned and licensed pursuant to Section 5 of this Agreement by parties other than Licensor and that either integrated with or made part of WebStorm (collectively, "Third Party Software").

3. OWNERSHIP

(a) The Software is the property of Licensor or its suppliers. The Software is licensed, not sold. Title and copyrights to the Software, in whole and in part and all copies thereof, and all modifications, enhancements, derivatives and other alterations of the Software regardless of who made any modifications, if any, are, and will remain, the sole and exclusive property of Licensor and its suppliers.

(b) The Software is protected by United States Copyright Law and International Treaty provisions. Further, the structure, organization, and code embodied in the Software are the valuable and confidential trade secrets of Licensor and its suppliers and are protected by intellectual property laws and treaties. Licensee agrees to abide by the copyright law and all other applicable laws of the United States including, but not limited to, export control laws.

4. GRANT OF LICENSE

Subject to the terms, conditions, and limitations set forth in this Agreement, including any amendments thereto, Licensor hereby grants to Licensee a limited, non-exclusive, non-transferable license to use the Software as follows:

(a) Licensee may:
(i) install and use the licensed edition and version of the Software specified in License Certificate(s) on any number of Clients and on any operating system supported by the Software, provided that a number of concurrent users of the Software never exceeds the number of Authorized Users specified in the appropriate License Certificate(s) and that the same License Key is not used by multiple Authorized Users, on multiple Clients, or on different operating systems at a time;
(ii) use the Software for non-commercial, educational purposes only, including conducting academic research or providing educational services; and
(iii) make one back-up copy of the Software solely for archival purposes.

(b) Licensee may not:
(i) sell, redistribute, encumber, give, lend, rent, lease, sublicense, or otherwise transfer the Software, or any portions of the Software, to anyone without the prior written consent of Licensor;
(ii) reverse engineer, decompile, disassemble, modify, translate, make any attempt to discover the source code of the Software, or create derivative works from the Software;
(iii) allow the use of the same License Key by multiple Authorized Users, on multiple Clients or on different operating systems at a time. The Software may contain a feature preventing concurrent use of the same License Key by multiple Authorized Users, on multiple Clients or on different operating systems at a time; 
(iv) use the Software for any commercial purpose.

5. THIRD PARTY SOFTWARE LICENSE

(a) Licensee agrees to comply with the terms and conditions contained in Third-Party Software license agreements with respect to the applicable Third-Party Software.
 
(b) Licensee agrees and acknowledges that Sections 9 and 10 of this Agreement shall also govern Licensee's use of the Third-Party Software. Licensor will have no responsibility with respect to any Third Party Software, and Licensee will look solely to the licensor(s) of the Third Party Software for any remedy. Licensor claims no right in the Third Party Software, and the same is owned exclusively by the licensor(s) of the Third Party Software. 

(c)	LICENSOR PROVIDES NO WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT, WITH RESPECT TO ANY THIRD PARTY SOFTWARE.

6. RESTRICTED USE DURING EVALUATION PERIOD

(a) Subject to the terms of this Agreement, Licensee is granted a right to use the Software for evaluation purposes without charge for a period of thirty (30) days from the date of installation of the Software unless otherwise specified (Evaluation Period).

(b) Licensees use of the Software during Evaluation Period shall be limited to the internal evaluation of the Software for the sole purpose of determining whether the Software meets Licensees requirements and whether Licensee desires to continue using the Software.

(c) Upon expiration of Evaluation Period, Licensee must obtain License Key for perpetual use of the Software or cease using the Software. The Software contains a feature that will automatically disable the Software upon expiration of Evaluation Period. Licensee may not disable, destroy, or remove this feature of the Software, and any attempt to do so will be in violation of this Agreement and will terminate Licensee's rights to use the Software.

7. LICENSE FEES AND PAYMENTS

Licensee will pay to Licensor the license fee and other charges and expenses as set forth in an appropriate invoice or other purchase documentation. Licensor may charge Licensee interest for any payment that is more than thirty (30) days past due at the rate of one and one-half percent (1.5%) per month or the highest amount allowed by law, whichever is lower.

8. UPGRADES

(a) All generally available Upgrades to the Software will be free of charge to Licensee during the initial one (1) year period after purchase of the Software. If Licensee obtains a new License Key for upgrade, Licensee shall destroy a License Key obtained for the previous version of the Software.

(b) If not agreed otherwise in writing between Licensor and Licensee, upon upgrading to new version of Software the relationship between parties shall be governed and amended (if applicable) by the terms and conditions of Licensee agreement related to Software available at www.jetbrains.com on the day of upgrade purchase.

9. LIMITED WARRANTY

SOFTWARE IS PROVIDED TO LICENSEE "AS IS" AND WITHOUT WARRANTIES. LICENSOR MAKES NO WARRANTY AS TO ITS USE OR PERFORMANCE. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR, AND ITS AFFILIATES, SUPPLIERS AND RESELLERS, DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT, WITH REGARD TO SOFTWARE, AND THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES. 

10. DISCLAIMER OF DAMAGES

(a)	TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR OR ITS AFFILIATES, LICENSORS, SUPPLIERS OR RESELLERS BE LIABLE TO LICENSEE UNDER ANY THEORY FOR ANY DAMAGES SUFFERED BY LICENSEE OR ANY USER OF SOFTWARE, OR FOR ANY SPECIAL, INCIDENTAL, INDIRECT, CONSEQUENTIAL, OR SIMILAR DAMAGES (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY, FOR FAILURE TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER ) ARISING OUT OF THE USE OR INABILITY TO USE SOFTWARE, OR THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED.

(b)	IN ANY CASE, LICENSOR'S ENTIRE LIABILITY UNDER ANY PROVISION OF THIS AGREEMENT WILL BE LIMITED TO THE AMOUNT ACTUALLY PAID BY LICENSEE FOR SOFTWARE UNDER THIS AGREEMENT. 

11. EXPORT REGULATIONS

Licensee agrees and accepts that Software may be subject to import and export laws of any country, including those of the European Union and United States (specifically the Export Administration Regulations (EAR)). Licensee acknowledges that it is not a citizen, national, or resident of, and is not under control of the governments of Cuba, Iran, North Korea, Sudan or Syria and is not otherwise a restricted end-user as defined by applicable export control laws. Further, Licensee acknowledges that it will not download or otherwise export or re-export Software or any related technical data directly or indirectly to the above-mentioned countries or to citizens, nationals, or residents of those countries, or to any other restricted end user or for any restricted end-use.

12. TERMINATION

If Licensee fails to comply with the terms and conditions of this Agreement, this Agreement and Licensee's right and license to use the Software will terminate immediately. Licensee may terminate this Agreement at any time by notifying Licensor. Upon the termination of this Agreement, Licensee must cease using the Software and delete the Software from its Clients and archives.

LICENSEE AGREES THAT UPON TERMINATION OF THIS AGREEMENT FOR ANY REASON, LICENSOR MAY TAKE ACTIONS SO THAT THE SOFTWARE NO LONGER OPERATES.

13. MARKETING

Licensee agree to be identified as a customer of Licensor and that Licensor may refer to Licensee by name, trade name and trademark, if applicable, and may briefly describe Licensee's business in Licensor's marketing materials, on Licensor's web site, in public or legal documents. Licensee hereby grants Licensor a license to use Licensee's name and any of Licensee's trade names and trademarks solely pursuant to this marketing section.

14. GENERAL

(a) Licensor reserves the right at any time to cease the support of the Software and to alter prices, features, specifications, capabilities, functions, licensing terms, release dates, general availability or other characteristics of the Software.

(b) This Agreement, including the Third Party Software license agreements, constitutes the entire agreement between the parties concerning Licensee's use of the Software, and supersedes any and all prior or contemporaneous oral or written representations, communications, or advertising with respect to the Software. No purchase order, other ordering document or any hand written or typewritten text which purports to modify or supplement the printed text of this Agreement or any schedule will add to or vary the terms of this Agreement unless signed by both Licensee and Licensor.

(c) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach. The provisions of this Agreement which require or contemplate performance after the expiration or termination of this Agreement will be enforceable notwithstanding said expiration or termination.

(d) This Agreement will be governed by the laws of Czech Republic, without reference to conflict of laws principles. Licensee agrees that any litigation relating to this Agreement may only be brought in, and will be subject to the jurisdiction of, any Court of Czech Republic.

(e) Titles are inserted for convenience only and will not affect in any way the meaning or interpretation of this Agreement. If any provision of this Agreement is held invalid, the remainder of this Agreement will continue in full force and effect. Either Licensor or Licensee may assign this Agreement in the case of a merger or sale of substantially all of its respective assets to another entity. This Agreement will be binding upon and will inure to the benefit of the parties, their successors and assigns.

For exceptions or modifications to this Agreement, please contact Licensor at:
Address: Na hrebenech II 1718/10, Prague, 14700, Czech Republic 
Fax: +420 241 722 540
E-mail: sales@jetbrains.com