LICENSE AGREEMENT FOR PYCHARM
(Commercial and Personal 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 or legal entity specified in the License Certificate. For legal entities, "Licensee" includes any entity which controls, is controlled by, or is under common control with Licensee. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.

2. DEFINITIONS

(a) "Authorized User" means (i) if Licensee is an individual, solely Licensee; (ii) if Licensee is a legal entity, any employee, independent contractor and other temporary worker authorized by Licensee to use Software while performing duties within the scope of their employment or assignment.

(b) "Client" means a computer device used by Authorized User for running 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 Software at a time. Only Licensor and/or its representatives are permitted to produce License Keys for Software.

(e) "License Server" means a server application that is designed to store License Keys and to enable access to Software from Clients within Licensee's local area network ("Licensee's LAN"). License Server may be optionally provided by Licensor to Licensee.

(f) "Server Computer" means a central computer device that is part of Licensee's LAN and that is dedicated by Licensee to run License Server.

(g) "Software" means software program known as PyCharm 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 are either integrated with or made part of PyCharm (collectively, "Third Party Software").

3. OWNERSHIP

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

(b) Software is protected by United States Copyright Law and International Treaty provisions. Further, the structure, organization, and code embodied in 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 Software as follows:

(a) Licensee may:

(i) install and use the licensed edition and version of Software specified in License Certificate(s) on any number of Clients and on any operating system supported by Software, provided that a number of concurrent users of 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) access Software from Clients via License Server if Licensee has obtained License Server from Licensor. Licensee may install multiple instances of License Server, provided that Licensee complies with restrictions set forth in this Section 4; and

(iii) make one back-up copy of Software solely for archival purposes.

(b) Licensee may not:

(i) sell, redistribute, encumber, give, lend, rent, lease, sublicense, or otherwise transfer Software, or any portions of 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 Software, or create derivative works from Software; or

(iii) allow the use of the same License Key by multiple Authorized Users, on multiple instances of License Server, on multiple Clients or on different operating systems at a time. Software may contain a feature preventing concurrent use of the same License Key by multiple Authorized Users, on multiple instances of License Server, on multiple Clients or on different operating systems at a time.

(c) Additional Limitations for private individuals (applicable to Personal License only):

If Licensee is a private individual, Licensee acknowledges that Software provided under this Agreement is only for his/her individual use and agrees to purchase Software using his/her own funds only. Notwithstanding anything to the contrary set forth above, Licensee may not use Software, and this Agreement shall not be in effect, in the event that Licensee does not pay Software license fee using Licensee's own funds, or if any third party pays Software license fee, or if Licensee expects or receives reimbursement for Software license fee from any third party.

5. THIRD PARTY SOFTWARE LICENSE

Licensee agrees to comply with the terms and conditions contained in Third-Party Software license agreements with respect to the applicable Third-Party Software.

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.

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 Software for evaluation purposes without charge for a period of thirty (30) days from the date of installation of Software unless otherwise specified (Evaluation Period).

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

(c) Upon expiration of Evaluation Period, Licensee must obtain License Key for perpetual use of Software or cease using Software. Software contains a feature that will automatically disable Software upon expiration of Evaluation Period. Licensee may not disable, destroy, or remove this feature of Software, and any attempt to do so will be in violation of this Agreement and will terminate Licensee's rights to use 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 Software will be free of charge to Licensee during the initial one (1) year period after purchase of Software. If Licensee obtains a new License Key for upgrade, Licensee shall destroy a License Key obtained for the previous version of 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 License 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. TERM AND TERMINATION

(a) Except as otherwise provided in License Certificate, the license granted herein shall be perpetual.

(b) If Licensee fails to comply with the terms and conditions of this Agreement, this Agreement and Licensee's right and license to use 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 Software and delete Software from its Clients and archives.

LICENSEE AGREES THAT UPON TERMINATION OF THIS AGREEMENT FOR ANY REASON, LICENSOR MAY TAKE ACTIONS SO THAT 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 Software and to alter prices, features, specifications, capabilities, functions, licensing terms, release dates, general availability or other characteristics of Software.

(b) This Agreement, including the Third Party Software license agreements, constitutes the entire agreement between the parties concerning Licensee's use of Software, and supersedes any and all prior or contemporaneous oral or written representations, communications, or advertising with respect to 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
