TENABLE NETWORK SECURITY, INC.
NESSUS
SOFTWARE LICENSE AGREEMENT

This is a legal agreement ("Agreement") between Tenable Network Security, Inc., a Delaware corporation having offices at 8830 Stanford Boulevard, Suite 312, Columbia, MD 21045 ("Tenable"), and you, the party licensing Software and obtaining the feed services ("You").  This Agreement covers your permitted use of the Software and the Services.  BY CLICKING BELOW YOU INDICATE YOUR ACCEPTANCE OF THIS AGREEMENT AND YOU ACKNOWLEDGE THAT YOU HAVE READ ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT, UNDERSTAND THEM, AND AGREE TO BE LEGALLY BOUND BY THEM.  If You do not agree with the terms of this Agreement, You may not use the Software, as such term is defined below.  The Software can only be provided to You by Tenable.   The term "Agreement" includes any exhibits to the document.
1. Grant of Software License.  
(a) Grant.  Subject to the terms and conditions, and your acceptance, of this Agreement, Tenable grants to You a perpetual, non-exclusive, non-transferable license (the "License") in object code form only to use the Software (i) solely for Your internal operations and internal security purposes to seek and assess information technology vulnerabilities events for Your own networks; and (ii) to provide services to third parties to seek and assess information technology vulnerabilities events on the third party's network.  Any rights in the Software not granted in this Agreement are expressly reserved by Tenable. 
(b) Definition of Software.  
(i) The term "Software" means (i) Nessus 3.x that You download from any Tenable website, including www.nessus.org, or obtain via CD or any other method; (ii) the associated user manuals and user documentation, if any, as well as any patches, updates, improvements, additions, enhancements and other modifications or revised versions of Nessus 3.x that may be provided to You by Tenable from time to time that were developed by Tenable; and (iii) any Nessus daemons, command line interfaces, and/or any graphical user interfaces You obtain from Tenable that were developed by Tenable.  
(ii) Any Software that is not marked as copyrighted by Tenable are not Software as defined under this Agreement and are subject to other license terms. 
(iii) Tenable has the right to, or the right to license, the Software, including any libraries licensed under LGPL. Contact Tenable for more details.
(c) Maintenance and Support.  Tenable will not provide any maintenance or support services as part of this Agreement unless You obtain a "Direct Feed Subscription", as such term is defined in Exhibit A, from Tenable.  
2. Subscriptions.
You may obtain a subscription to receive Plugins (as such term is defined in Exhibit A) and updates to the Plugins as further described in Exhibit A, which is incorporated herein by reference.  
3. Term.
This Agreement commences on the date on which You execute this Agreement or download, install or use the Software (whichever occurs first) (the "Effective Date") and continues until it is terminated according to the terms of this Agreement.
4. Intellectual Property.  
This Agreement does not transfer to You any title to or any ownership right or interest in the Software.  You acknowledge that Tenable owns and retains all right, title and interest in and to the Software.  All enhancements, modifications and derivative works that Tenable makes to the Software or accompanying documentation, and all intellectual property rights therein, will be the property of Tenable.  Your rights with respect to the Software are limited to the right to use the Software pursuant to the terms and conditions in this Agreement.    
5. No Reverse Engineering, Other Restrictions.  
You may not directly or indirectly: (i) sell, lease, redistribute or transfer any of the Software on a stand-alone basis; (ii) decompile, disassemble, reverse engineer, or otherwise attempt to derive, obtain or modify the source code of the Software; (iii) reproduce, modify, translate or create derivative works of all or part any of the Software; (iv) rent, lease or loan the Software in any form to any third party or otherwise allow a third party to use the Software; or (v) remove, alter or obscure any proprietary notice, labels, or marks on the Software.  You may not sublicense any of the rights granted to You in this Agreement.  You may not distribute or otherwise provide Software to third parties.  You are responsible for all use of the Software and for compliance with this Agreement; any breach by You or any user using the Software on Your behalf shall be deemed to have been made by You.  
6. Restrictions on Third Party Use and Access.
	You agree not to deliver or otherwise make available the Software, in whole or in part, to any party other than Tenable, except for purposes specifically related to Your use of the Software without Tenable's prior written consent. You agree to use Your best efforts and to take all reasonable steps to ensure that no unauthorized parties have access to the Software and that no unauthorized copy, publication, disclosure or distribution of the Software, in whole or in part, in any form is made by You or any third party.  You agree to notify Tenable of any unauthorized access to, or use, copying, publication, disclosure or distribution of, the Software.  You acknowledge that the Software contains valuable confidential information and trade secrets of Tenable or its affiliates and their licensors or suppliers, and that unauthorized access to, or use, copying, publication, disclosure or distribution of, the Software is harmful to Tenable or its affiliates and their licensors or suppliers.
7. Confidentiality.  
As used in this Agreement, "Confidential Information" means any and all information and material that:  (i) gives of Tenable some competitive business advantage or the opportunity of obtaining such advantage or is otherwise confidential or a trade secret; (ii) is marked "Confidential," "Restricted," or "Confidential Information" or other similar marking; (iii) is known by You to be confidential or proprietary; or (iv) from all the relevant circumstances, should reasonably be assumed by You to be confidential or proprietary.  Confidential Information includes the Software.  Confidential Information does not include any information that You can prove: (a) was already known to You without restrictions at the time of its disclosure by Tenable; (b) after its disclosure by Tenable, is made known to You without restrictions by a third party having the right to do so; (c) is or becomes publicly known without violation of this Agreement; or (d) is independently developed by You without reference to the Confidential Information.  Confidential Information will remain the property of Tenable, and You will not be deemed by virtue of this Agreement or any access to the Confidential Information to have acquired any right, title or interest in or to the Confidential Information.  You may not copy any Confidential Information without Tenable's prior written permission.  You may not remove any copyright, trademark, proprietary rights or other notices included in or affixed to any Confidential Information.  You may not use the Confidential Information for Your or a third party's benefit, competitive development or any other purpose.  You agree: (I) to hold the Confidential Information in strict confidence; (II) to limit disclosure of the Confidential Information to Your own employees having a need to know the Confidential Information for the purposes of this Agreement; (III) not to disclose any Confidential Information to any third party; (IV) to use the Confidential Information solely and exclusively in accordance with the terms of this Agreement in order to carry out Your obligations and exercise Your rights under this Agreement; (V) to afford the Confidential Information at least the same level of protection against unauthorized disclosure or use as You normally uses to protect Your own information of a similar character, but in no event less than reasonable care; and (VI) to notify Tenable promptly of any unauthorized use or disclosure of the Confidential Information and to cooperate with and assist Tenable in every reasonable way to stop or minimize such unauthorized use or disclosure.  You agree that if a court of competent jurisdiction determines that You have breached, or attempted or threatened to breach, Your confidentiality obligations to Tenable or Tenable's proprietary rights, money damages, Tenable will suffer irreparable harm and that monetary damages will be inadequate to compensate Tenable for such breach.  Accordingly, Tenable, in addition to and not in lieu of any other rights, remedies or damages available to it at law or in equity, shall be entitled to seek appropriate injunctive relief and other measures restraining further attempted or threatened breaches of such obligations without requirement to post any bond. 
8. Warranty and Disclaimer.  
(a) Software.  Tenable warrants that, for a period of thirty (30) days from the Effective Date (the "Warranty Period"), the unmodified Software will, under normal use, substantially perform the functions described in its technical documentation.  If there has been a breach of this warranty, then Tenable's sole obligation, and Your exclusive remedy, will be for Tenable, at its option, to correct the performance of the Software at no charge so that it substantially performs the functions described in its technical documentation or to replace the Software.  You acknowledge that, because the license for the Software is at no charge, the remedies described in the preceding sentence are sufficient and can not fail of their essential purpose.  
(b) Disclaimer.  EXCEPT AS SPECIFICALLY SET FORTH IN  SECTION 8(a), TENABLE DOES NOT MAKE  ANY WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, INTEGRATION, PERFORMANCE AND ACCURACY, AND ANY IMPLIED WARRANTIES ARISING FROM STATUTE, COURSE OF DEALING, COURSE OF PERFORMANCE OR USAGE OF TRADE, OTHER THAN THOSE WARRANTIES WHICH ARE IMPLIED BY AND INCAPABLE OF EXCLUSION, RESTRICTION, OR MODIFICATION UNDER APPLICABLE LAW.  TENABLE MAKES NO WARRANTY THAT THE SOFTWARE WILL OPERATE ERROR-FREE, FREE OF ANY SECURITY DEFECTS OR IN AN UNINTERRUPTED MANNER. 
9. Exclusion Damages. 
UNDER NO CIRCUMSTANCES WILL TENABLE BE LIABLE TO YOU OR ANY OTHER PERSON OR ENTITY FOR DIRECT (INCLUDING FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF CONTRACT, MISREPRESENTATION AND OTHER CONTRACT OR TORT CLAIMS), INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, EXEMPLARY OR PUNITIVE DAMAGES (INCLUDING NEGLIGENCE, STRICT LIABILITY, BREACH OF CONTRACT, MISREPRESENTATION AND OTHER CONTRACT OR TORT CLAIMS; LOST PROFITS; OR ANY DAMAGES RESULTING FROM LOSS OF DATA, SECURITY BREACH, PROPERTY DAMAGE, LOSS OF REVENUE, LOSS OF BUSINESS OR LOST SAVINGS), ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, THE PERFORMANCE OF THE SOFTWARE OR OF ANY OTHER OBLIGATIONS RELATING TO THIS AGREEMENT, WHETHER OR NOT TENABLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  YOU ARE SOLELY RESPONSIBLE AND LIABLE FOR VERIFYING THE SECURITY, ACCURACY AND ADEQUACY OF ANY OUTPUT FROM THE SOFTWARE, AND FOR ANY RELIANCE THEREON. 
10. Additional Provisions Regarding Liability.  
The parties agree that the foregoing limitations will not be read so as to limit any liability to an extent that would not be permitted under applicable law and specifically will not limit any liability for gross negligence, intentional tortious or unlawful conduct or damages for strict liability that may not be limited by law.
11. Indemnification.  
Each of the parties acknowledges and agrees that by entering into and performing its obligations under this Agreement, Tenable will not assume and should not be exposed to the business and operational risks associated with Your business.  You acknowledge that Your use of the Software is only a portion of Your overall security solution and that Tenable is not responsible for Your overall security solution.  As between You and Tenable, You are (and Tenable is not) responsible for the success or failure of such security solution.  Accordingly, You agree that you will, at your expense, indemnify, defend and hold Tenable harmless in all claims and actions that seek compensation of any kind for injury or death to persons and/or for damage to property, and that arise out of or relate to Your security solutions or Your use of the Software  or the solutions You provide to a third party through Your use of the Software.  You also agree to pay all settlements, costs, damages, legal fees and expenses finally awarded in all such claims and actions. 
12. Legal Compliance; Restricted Rights.  
The Software are provided solely for lawful purposes and use.  You are solely responsible for, and agree to perform your obligations in a manner that complies with all applicable national, regional and local laws, statutes, ordinances, regulations, codes and other types of government authority (including those governing export control, unfair competition, anti-discrimination, false advertising, privacy and data protection, and publicity and those identifying and procuring required permits, licenses, approvals, and other consents) ("Laws").  If a charge is made that You are not complying with any such Laws, You will promptly notify Tenable of such charges in writing.  Without limiting the foregoing, You agree to comply with all U.S. export Laws and applicable export Laws of Your locality (if You are not in the United States), to ensure that no information or technical data provided pursuant to this Agreement is exported or re-exported directly or indirectly in violation of Law or without first obtaining all required authorizations or licenses.  You will, at Your sole cost and expense, obtain and maintain in effect all permits, licenses, approvals and other consents related to Your obligations under this Agreement.  You agree, at Your expense, to comply with all foreign exchange and other Laws applicable to You.  The Software is licensed subject to Tenable's standard commercial agreement; Software licensed for use by the United States government is provided with "Restricted Rights" only as defined in 48 C.F.R. _52.227-14 and 48 C.F.R. _252.227-7014 if the commercial terms are deemed not to apply. 
13. Termination.
(a) You may terminate this Agreement at any time by destroying or returning to Tenable the Software, together with all copies, modifications and merged portions of the Software in any form.
(b) This Agreement and Your License to use the Software shall terminate automatically if You fail to comply with any term or condition of this Agreement. Immediately after termination of this Agreement, You shall destroy or return to Tenable the Software, together with all copies, modifications and merged portions of the Software in any form, and shall certify to Tenable in writing that through Your best efforts and to the best of your knowledge all such materials have been destroyed or returned to Tenable and removed from host computers on which Software resided.
14. Governing Law.  
This Agreement shall be governed in all respects by the laws of the State of Maryland, USA, without regard to choice-of-law rules or principles.  You expressly agree with Tenable that this Agreement shall not be governed by the U.N. Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded. 
15. Dispute Resolution.  
You and Tenable submit to the exclusive jurisdiction of the courts of Howard County, Maryland and the United States District Court for Maryland, Baltimore Division, for any question or dispute arising out of or relating to this Agreement.  Due to the high costs and time involved in commercial litigation before a jury, the parties waive all right to a jury trial with respect to any and all issues in any action or proceeding arising out of or related to this Agreement.  
16. Notices.  
Any notices or other communication required or permitted to be made or given by either Party pursuant to this Agreement will be in writing, in English, and will be deemed to have been duly given when delivered if delivered personally or sent by recognized overnight express courier, to the address specified herein or such other address as Tenable may specify in writing.  All notices to Tenable shall be sent to the attention of the Legal Department (unless otherwise specified by Tenable). 
All notices shall be sent to:
Tenable Network Security
8830 Stanford Boulevard, Suite 312
Columbia, MD 21045
Attn: Legal Department
17. Transfer and Assignment. 
You may not rent, lease, lend, sublicense or otherwise provide the Software to any third party. You may not assign or otherwise transfer this Agreement without Tenable's prior written consent.  You may use the Software to provide services to third parties as expressly provided in this Agreement.
18. Publicity.
You will not use Tenable's company name or any trademarks, logos, service marks or other intellectual property, or refer to Tenable or any of its employees, in any form of advertising, publicity or release without the prior written approval of Tenable, which Tenable may withhold in its sole discretion. 
19. Language.  
The language of this Agreement is English and all notices given under this Agreement must be in English to be effective.  No translation, if any, of this Agreement or any notice will be of any effect in the interpretation of this Agreement or in determining the intent of the parties.  The parties have expressly agreed that all invoices and related documents be drafted in English. 
20. Third Parties.  
This Agreement is not intended nor will it be interpreted to confer any benefit, right or privilege in any person or entity not a party to this Agreement.  Any party who is not a party to this Agreement has no right under any Law to enforce any term of this Agreement.
21. Trademarks. 
Nessus is a trademark of Tenable.  Tenable does not grant to You, either expressly or by implication, any license or permission under this Agreement to use any of the Tenable marks (including trademarks, service marks, trade names, trade dress, symbols, logos, designs, domain names, slogans and other source identifiers) (collectively, the "Marks"). 
22. General.  
This Agreement constitutes the entire agreement between the parties, and supersedes all other prior or contemporaneous communications between the parties (whether written or oral) relating to the subject matter of this Agreement. No supplement, modification or amendment of this Agreement shall be binding, unless executed in writing by a duly authorized representative of each party to this Agreement.  The provisions of this Agreement will be deemed severable, and the unenforceability of any one or more provisions will not affect the enforceability of any other provisions.  In addition, if any provision of this Agreement, for any reason, is declared to be unenforceable, the parties will substitute an enforceable provision that, to the maximum extent possible under applicable law, preserves the original intentions and economic positions of the parties.  No failure or delay by a party in exercising any right, power or remedy will operate as a waiver of that right, power or remedy, and no waiver will be effective unless it is in writing and signed by the waiving party.  If a party waives any right, power or remedy, the waiver will not waive any successive or other right, power or remedy the party may have under this Agreement.  Any provision of this Agreement that imposes or contemplates continuing obligations on a party will survive the expiration or termination of this Agreement.  "Including" and its derivatives (such as "include" and "includes") mean including without limitation; this term is as defined, whether or not capitalized in this Agreement.
EXHIBIT A
TENABLE NETWORK SECURITY, INC.
SUBSCRIPTION AGREEMENT

This is a legal agreement ("Subscription Agreement") between Tenable Network Security, Inc., a Delaware corporation having offices at 8830 Stanford Boulevard, Suite 312, Columbia, MD 21045 ("Tenable"), and you, the party downloading the Plugins as defined below ("You"), through Tenable's Subscription service as defined below.  This Subscription Agreement covers your permitted use of the Plugins.  BY CLICKING BELOW YOU INDICATE YOUR ACCEPTANCE OF THIS SUBSCRIPTION AGREEMENT AND YOU ACKNOWLEDGE THAT YOU HAVE READ ALL OF THE TERMS AND CONDITIONS OF THIS SUBSCRIPTION AGREEMENT, UNDERSTAND THEM, AND AGREE TO BE LEGALLY BOUND BY THEM.  If You do not agree with the terms of this Subscription Agreement, You may not use the Plugins as defined below.  The Plugins can only be provided to You by Tenable.   

1) Grant of Plugins License.  
i) Grant.  Subject to the terms and conditions, and your acceptance, of this Subscription Agreement, Tenable grants to You a perpetual, non-exclusive, non-transferable license (the "License") in object code form only to use the Plugins (a) solely for Your internal operations and internal security purposes to seek and assess information technology vulnerabilities events for Your own networks; and (b) to provide services to third parties to seek and assess information technology vulnerabilities events on the third party's network.  Any rights in the Plugins not granted in this Subscription Agreement are expressly reserved by Tenable. 
ii) Definition of Plugins.  The term "Plugins" means (i) any plugins (and related updates) that are marked as copyrighted by Tenable.   Any plugins or components that are not marked as copyrighted by Tenable are not Plugins as defined under this Subscription Agreement and are subject to other license terms. 
iii) Use.  You agree to use the Plugins only in conjunction with Nessus or NeWT vulnerability scanner programs obtained directly from www.nessus.org or www.tenablesecurity.com and registered with Tenable ("Registered Scanners") and for which You have paid the applicable fee, if any.  Your use of the Plugins will be in accordance with one of the Subscriptions described in Section 2 below.
2) Subscriptions.  
i) General.  The Registered Feed Subscription and Direct Feed Subscription include vulnerability detection programs not developed by Tenable or its licensors, which are licensed to You under separate agreements.  The terms and conditions of this Subscription Agreement do not apply to such vulnerability detection programs.
ii) Registered Feed Subscription.  The Registered Feed Subscription permits You to use the Plugins in conjunction with Registered Scanners to detect vulnerabilities only on your system or network or on the system or network of a third party for which you perform scanning services, auditing services, incident response services, vulnerability assessment services or other security consulting services.  
iii) Direct Feed Subscription.  The Direct Feed Subscription permits You to use the Plugins in conjunction with Registered Scanners to detect vulnerabilities only on your system or network or on the system or network of a third party for which you perform scanning services, auditing services, incident response services, vulnerability assessment services or other security consulting services; provided that You have paid the applicable annual subscription fee for each Registered Scanner in conjunction with which You will use the Plugins. You will receive the Direct Feed Subscription and email support if you use this Direct Feed Subscription with the Supported commercial version of Nessus (for clarification, a commercial version of Nessus means Nessus version 3 or better which was developed, copyrighted and distributed by Tenable and not released as open source or licensed under the GPL).  The term "Supported" means the list of Operating System distribution(s) included in the Plugin FAQ or Nessus FAQ found on any Tenable website, including www.nessus.org.  For the Direct Feed Subscription, You agree to pay a subscription fee to Tenable for each system on which you have installed a Registered Scanner.
3) Term.
This Subscription Agreement commences on the date on which You execute this Subscription Agreement or download, install or use the Plugins (whichever occurs first) (the "Effective Date") and continues until it is terminated according to the terms of this Subscription Agreement.
4) Intellectual Property.  
This Subscription Agreement does not transfer to You any title to or any ownership right or interest in the Plugins.  You acknowledge that Tenable owns and retains all right, title and interest in and to the Plugins.  All enhancements, modifications and derivative works that Tenable makes to the Plugins or accompanying documentation, and all intellectual property rights therein, will be the property of Tenable.  Your rights with respect to the Plugins are limited to the right to use the Plugins pursuant to the terms and conditions in this Subscription Agreement.    
5) No Reverse Engineering, Other Restrictions.  
You may not directly or indirectly: (i) sell, lease, redistribute or transfer any of the Plugins on a stand-alone basis; (ii) decompile, disassemble, reverse engineer, or otherwise attempt to derive, obtain or modify the source code of the Plugins; (iii) reproduce, modify, translate or create derivative works of all or part any of the Plugins; (iv) rent, lease or loan the Plugins in any form to any third party or otherwise allow a third party to use the Plugins; or (v) remove, alter or obscure any proprietary notice, labels, or marks on the Plugins.  You may not sublicense any of the rights granted to You in this Subscription Agreement.  You may not distribute or otherwise provide Plugins to third parties.  You are responsible for all use of the Plugins and for compliance with this Subscription Agreement; any breach by You or any user using the Plugins on Your behalf shall be deemed to have been made by You.  
6) Restrictions on Third Party Use and Access.
	You agree not to deliver or otherwise make available the Plugins, in whole or in part, to any party other than Tenable, except for purposes specifically related to Your use of the Plugins without Tenable's prior written consent. You agree to use Your best efforts and to take all reasonable steps to ensure that no unauthorized parties have access to the Plugins and that no unauthorized copy, publication, disclosure or distribution of the Plugins, in whole or in part, in any form is made by You or any third party.  You agree to notify Tenable of any unauthorized access to, or use, copying, publication, disclosure or distribution of the Plugins.  You acknowledge that the Plugins contains valuable confidential information and trade secrets of Tenable or its affiliates and their licensors or suppliers, and that unauthorized access to, or use, copying, publication, disclosure or distribution of the Plugins is harmful to Tenable or its affiliates and their licensors or suppliers.
7) Confidentiality.  
As used in this Subscription Agreement, "Confidential Information" means any and all information and material that: (i) gives of Tenable some competitive business advantage or the opportunity of obtaining such advantage or is otherwise confidential or a trade secret; (ii) is marked "Confidential," "Restricted," or "Confidential Information" or other similar marking; (iii) is known by You to be confidential or proprietary; or (iv) from all the relevant circumstances, should reasonably be assumed by You to be confidential or proprietary.  Confidential Information includes the Plugins and Subscriptions.  Confidential Information does not include any information that You can prove: (a) was already known to You without restrictions at the time of its disclosure by Tenable; (b) after its disclosure by Tenable, is made known to You without restrictions by a third party having the right to do so; (c) is or becomes publicly known without violation of this Subscription Agreement; or (d) is independently developed by You without reference to the Confidential Information.  Confidential Information will remain the property of Tenable, and You will not be deemed by virtue of this Subscription Agreement or any access to the Confidential Information to have acquired any right, title or interest in or to the Confidential Information.  You may not copy any Confidential Information without Tenable's prior written permission.  You may not remove any copyright, trademark, proprietary rights or other notices included in or affixed to any Confidential Information.  You may not use the Confidential Information for Your or a third party's benefit, competitive development or any other purpose.  You agree: (I) to hold the Confidential Information in strict confidence; (II) to limit disclosure of the Confidential Information to Your own employees having a need to know the Confidential Information for the purposes of this Subscription Agreement; (III) not to disclose any Confidential Information to any third party; (IV) to use the Confidential Information solely and exclusively in accordance with the terms of this Subscription Agreement in order to carry out Your obligations and exercise Your rights under this Subscription Agreement; (V) to afford the Confidential Information at least the same level of protection against unauthorized disclosure or use as You normally uses to protect Your own information of a similar character, but in no event less than reasonable care; and (VI) to notify Tenable promptly of any unauthorized use or disclosure of the Confidential Information and to cooperate with and assist Tenable in every reasonable way to stop or minimize such unauthorized use or disclosure.  You agree that if a court of competent jurisdiction determines that You have breached, or attempted or threatened to breach, Your confidentiality obligations to Tenable or Tenable's proprietary rights, money damages, Tenable will suffer irreparable harm and that monetary damages will be inadequate to compensate Tenable for such breach.  Accordingly, Tenable, in addition to and not in lieu of any other rights, remedies or damages available to it at law or in equity, shall be entitled to seek appropriate injunctive relief and other measures restraining further attempted or threatened breaches of such obligations without requirement to post any bond. 
8) Disclaimer of Warranties.  
	YOU EXPRESSLY AGREE THAT USE OF THE PLUGINS AND THE SUBSCRIPTIONS ARE AT YOUR SOLE RISK.  THE SUBSCRIPTONS ARE AVAILABLE STRICTLY ON AN "AS IS" AND "AS AVAILABLE" BASIS.  TENABLE DOES NOT MAKE ANY WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, INTEGRATION, PERFORMANCE AND ACCURACY, AND ANY IMPLIED WARRANTIES ARISING FROM STATUTE, COURSE OF DEALING, COURSE OF PERFORMANCE OR USAGE OF TRADE, OTHER THAN THOSE WARRANTIES WHICH ARE IMPLIED BY AND INCAPABLE OF EXCLUSION, RESTRICTION, OR MODIFICATION UNDER APPLICABLE LAW.  TENABLE MAKES NO WARRANTY THAT THE PLUGINS OR SUBSCRIPTIONS WILL OPERATE ERROR-FREE, FREE OF ANY SECURITY DEFECTS OR IN AN UNINTERRUPTED MANNER. 
9) Limitation of Liability.
IF YOU SHOULD BECOME ENTITLED TO CLAIM DAMAGES FROM TENABLE (INCLUDING FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF CONTRACT, MISREPRESENTATION AND OTHER CONTRACT OR TORT CLAIMS) TENABLE WILL BE LIABLE ONLY FOR THE AMOUNT OF YOUR ACTUAL DIRECT DAMAGES, NOT TO EXCEED (IN THE AGGREGATE FOR ALL CLAIMS) THE FEES, IF ANY, YOU PAID TO TENABLE
10) Exclusion of Other Damages. 
	UNDER NO CIRCUMSTANCES WILL TENABLE BE LIABLE TO YOU OR ANY OTHER PERSON OR ENTITY FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, EXEMPLARY OR PUNITIVE DAMAGES (INCLUDING NEGLIGENCE, STRICT LIABILITY, BREACH OF CONTRACT, MISREPRESENTATION AND OTHER CONTRACT OR TORT CLAIMS; LOST PROFITS; OR ANY DAMAGES RESULTING FROM LOSS OF DATA, SECURITY BREACH, PROPERTY DAMAGE, LOSS OF REVENUE, LOSS OF BUSINESS OR LOST SAVINGS), ARISING OUT OF OR IN CONNECTION WITH THIS SUBSCRIPTION AGREEMENT, THE PERFORMANCE OF THE PLUGINS OR SUBSCRIPTIONS OR OF ANY OTHER OBLIGATIONS RELATING TO THIS SUBSCRIPTION AGREEMENT, WHETHER OR NOT TENABLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  YOU ARE SOLELY RESPONSIBLE AND LIABLE FOR VERIFYING THE SECURITY, ACCURACY AND ADEQUACY OF ANY OUTPUT FROM THE PLUGINS AND SUBSCRIPTIONS, AND FOR ANY RELIANCE THEREON. 
11) Additional Provisions Regarding Liability.  
The parties agree that the foregoing limitations will not be read so as to limit any liability to an extent that would not be permitted under applicable law and specifically will not limit any liability for gross negligence, intentional tortious or unlawful conduct or damages for strict liability that may not be limited by law.
12) Indemnification.  
Each of the parties acknowledges and agrees that by entering into and performing its obligations under this Subscription Agreement, Tenable will not assume and should not be exposed to the business and operational risks associated with Your business.  You acknowledge that Your use of the Plugins and Subscriptions is only a portion of Your overall security solution and that Tenable is not responsible for Your overall security solution.  As between You and Tenable, You are (and Tenable is not) responsible for the success or failure of such security solution.  Accordingly, You agree that you will, at your expense, indemnify, defend and hold Tenable harmless in all claims and actions that seek compensation of any kind for injury or death to persons and/or for damage to property, and that arise out of or relate to Your security solutions or Your use of the Plugins and Subscriptions, or the solutions You provide to a third party through Your use of the Plugins and Subscriptions.  You also agree to pay all settlements, costs, damages, legal fees and expenses finally awarded in all such claims and actions. 
13) Your Payment Obligations.
If You obtain a Direct Feed Subscription, You agree to pay any and all amounts due or incurred by You as specified in the invoice provided by Tenable in consideration for Your obtaining such Direct Feed Subscription (the "Fees").  Payment is due within thirty (30) days of the date of invoice.  You agree to pay directly or reimburse Tenable for any taxes (including, sales or excise taxes, value added taxes, landing fees, import duties and the like), however designated and whether foreign or domestic, arising out of this Agreement, imposed on the Plugins or the use thereof, or Tenable's performance under this Agreement.  You agree to pay Tenable's invoices without deducting any present or future taxes, withholdings or other charges except those deductions it is legally required to make.  If You are legally required to make any deductions, You agree to pay Tenable such amounts as are necessary to make the net amounts remaining after such deductions equal to the stated amount due under this Agreement.  The payments or reimbursements will be in such amounts as are sufficient to relieve Tenable from owing any further taxes, either directly or on the basis of the payments made under this Agreement.  Notwithstanding the foregoing, Tenable will be solely responsible for its income tax obligations and all employer reporting and payment obligations with respect to its personnel.  You agree to pay any interest and penalties imposed by any taxing authorities to the extent such interest and penalties are applicable to taxes not paid at Your request or as a result of reliance by Tenable on Your representations.  If a certificate of exemption or similar document or proceeding is necessary in order to exempt any transaction from a tax, You will obtain such certificate or document.  
14) Legal Compliance; Restricted Rights.  
The Plugins and Subscriptions are provided solely for lawful purposes and use.  You are solely responsible for, and agree to perform your obligations in a manner that complies with all applicable national, regional and local laws, statutes, ordinances, regulations, codes and other types of government authority (including those governing export control, unfair competition, anti-discrimination, false advertising, privacy and data protection, and publicity and those identifying and procuring required permits, licenses, approvals, and other consents) ("Laws").  If a charge is made that You are not complying with any such Laws, You will promptly notify Tenable of such charges in writing.  Without limiting the foregoing, You agree to comply with all U.S. export Laws and applicable export Laws of Your locality (if You are not in the United States), to ensure that no information or technical data provided pursuant to this Subscription Agreement is exported or re-exported directly or indirectly in violation of Law or without first obtaining all required authorizations or licenses.  You will, at Your sole cost and expense, obtain and maintain in effect all permits, licenses, approvals and other consents related to Your obligations under this Subscription Agreement.  You agree, at Your expense, to comply with all foreign exchange and other Laws applicable to You.  The Plugins is licensed subject to Tenable's standard commercial agreement; Plugins licensed for use by the United States government is provided with "Restricted Rights" only as defined in 48 C.F.R. _52.227-14 and 48 C.F.R. _252.227-7014 if the commercial terms are deemed not to apply. 
15) Termination.
i) You may terminate this Subscription Agreement at any time by destroying or returning to Tenable the Plugins, together with all copies, modifications and merged portions of the Plugins in any form.
ii) This Subscription Agreement and Your License to use the Plugins and Subscriptions shall terminate automatically if You fail to comply with any term or condition of this Subscription Agreement or if the Nessus Software License Agreement between You and Tenable terminates. Immediately after termination of this Subscription Agreement, You shall destroy or return to Tenable the Plugins, together with all copies, modifications and merged portions of the Plugins in any form, and shall certify to Tenable in writing that through Your best efforts and to the best of your knowledge all such materials have been destroyed or returned to Tenable and removed from host computers on which Plugins resided. 
16) Governing Law.  
This Subscription Agreement shall be governed in all respects by the laws of the State of Maryland, USA, without regard to choice-of-law rules or principles.  You expressly agree with Tenable that this Subscription Agreement shall not be governed by the U.N. Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded. 
17) Dispute Resolution.  
You and Tenable submit to the exclusive jurisdiction of the courts of Howard County, Maryland and the United States District Court for Maryland, Baltimore Division, for any question or dispute arising out of or relating to this Subscription Agreement.  Due to the high costs and time involved in commercial litigation before a jury, the parties waive all right to a jury trial with respect to any and all issues in any action or proceeding arising out of or related to this Subscription Agreement.  
18) Notices.  
Any notices or other communication required or permitted to be made or given by either Party pursuant to this Subscription Agreement will be in writing, in English, and will be deemed to have been duly given when delivered if delivered personally or sent by recognized overnight express courier, to the address specified herein or such other address as Tenable may specify in writing.  All notices to Tenable shall be sent to the attention of the Legal Department (unless otherwise specified by Tenable). 
All notices shall be sent to:
Tenable Network Security
8830 Stanford Boulevard, Suite 312
Columbia, MD 21045
Attn: Legal Department
19) Transfer and Assignment. 
You may not rent, lease, lend, sublicense or otherwise provide the Plugins to any third party. You may not assign or otherwise transfer this Subscription Agreement without Tenable's prior written consent.  You may use the Plugins and Subscriptions to provide services to third parties as expressly provided in this Subscription Agreement.
20) Publicity.
You will not use Tenable's company name or any trademarks, logos, service marks or other intellectual property, or refer to Tenable or any of its employees, in any form of advertising, publicity or release without the prior written approval of Tenable, which Tenable may withhold in its sole discretion.  
21) Language.  
The language of this Subscription Agreement is English and all notices given under this Subscription Agreement must be in English to be effective.  No translation, if any, of this Subscription Agreement or any notice will be of any effect in the interpretation of this Subscription Agreement or in determining the intent of the parties.  The parties have expressly agreed that all invoices and related documents be drafted in English. 
22) Third Parties.  
This Subscription Agreement is not intended nor will it be interpreted to confer any benefit, right or privilege in any person or entity not a party to this Subscription Agreement.  Any party who is not a party to this Subscription Agreement has no right under any Law to enforce any term of this Subscription Agreement.
23) Trademarks. 
Nessus is a trademark of Tenable.  Tenable does not grant to You, either expressly or by implication, any license or permission under this Subscription Agreement to use any of the Tenable marks (including trademarks, service marks, trade names, trade dress, symbols, logos, designs, domain names, slogans and other source identifiers) (collectively, the "Marks"). 
24) General.  
This Subscription Agreement constitutes the entire agreement between the parties, and supersedes all other prior or contemporaneous communications between the parties (whether written or oral) relating to the subject matter of this Subscription Agreement. No supplement, modification or amendment of this Subscription Agreement shall be binding, unless executed in writing by a duly authorized representative of each party to this Subscription Agreement.  The provisions of this Subscription Agreement will be deemed severable, and the unenforceability of any one or more provisions will not affect the enforceability of any other provisions.  In addition, if any provision of this Subscription Agreement, for any reason, is declared to be unenforceable, the parties will substitute an enforceable provision that, to the maximum extent possible under applicable law, preserves the original intentions and economic positions of the parties.  No failure or delay by a party in exercising any right, power or remedy will operate as a waiver of that right, power or remedy, and no waiver will be effective unless it is in writing and signed by the waiving party.  If a party waives any right, power or remedy, the waiver will not waive any successive or other right, power or remedy the party may have under this Subscription Agreement.  Any provision of this Subscription Agreement that imposes or contemplates continuing obligations on a party will survive the expiration or termination of this Subscription Agreement.  "Including" and its derivatives (such as "include" and "includes") mean including without limitation; this term is as defined, whether or not capitalized in this Subscription Agreement.


