
Vidyo End User License Agreement including Limited Warranty, and Disclaimer of Warranty

End User License Agreement

VIDYO, Inc. is a Delaware corporation with a principal place of business 433 Hackensack Ave., 6th floor, Hackensack, NJ 07601 (Vidyo).

IMPORTANT: PLEASE READ THIS END USER LICENSE AGREEMENT CAREFULLY. DOWNLOADING, INSTALLING OR USING VIDYO OR VIDYO-SUPPLIED SOFTWARE CONSTITUTES ACCEPTANCE OF THIS AGREEMENT. 
THIS LICENSE OF THE SOFTWARE IS VALID ONLY UPON THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS LICENSE AGREEMENT. YOUR ACCEPTANCE WILL BE BY INSTALLING OR DOWNLOADING THE SOFTWARE, OR USING THE EQUIPMENT THAT CONTAINS THIS SOFTWARE.  YOU ARE BINDING YOURSELF AND THE BUSINESS ENTITY THAT YOU REPRESENT (COLLECTIVELY, "CUSTOMER") TO THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THEN VIDYO IS UNWILLING TO LICENSE THE SOFTWARE TO YOU AND (A) DO NOT DOWNLOAD, INSTALL OR USE THE SOFTWARE,  (B) YOU MAY RETURN THE SOFTWARE FOR A FULL REFUND,  OR, IF THE SOFTWARE IS SUPPLIED AS PART OF ANOTHER VIDYO PRODUCT, YOU MAY RETURN THE ENTIRE PRODUCT  FOR A FULL REFUND. YOUR RIGHT TO RETURN AND REFUND EXPIRES 30 DAYS AFTER YOUR RECEIPT OF THE SOFTWARE FROM VIDYO OR AN AUTHORIZED VIDYO RESELLER, AND APPLIES ONLY IF YOU ARE THE ORIGINAL END USER PURCHASER.

Vidyo's technology is covered by U.S Pat. Nos. 7,593,032 B3 and 7,643,560, as well as additional International patents or pending U.S. or International patent applications owned by Vidyo, Inc.

Conditioned upon compliance with the terms and conditions of this Agreement, Vidyo grants to Customer a nonexclusive and nontransferable license to use for Customer's internal business purposes the Software and the Documentation for which Customer has paid the required license fees. "Documentation" means written information (whether contained in user or technical manuals, training materials, specifications or otherwise) specifically pertaining to the Software and made available by Vidyo with the Software in any manner (including on CD-Rom, or on-line). Customer's license to use the Software shall be limited to, and Customer shall not use the Software in excess of, a single Vidyo Product as set forth in the applicable Purchase Order which has been accepted by Vidyo and for which Vidyo has been paid the required license fee.  Unless otherwise expressly provided in the Documentation, Customer shall use the Software solely as embedded in, for execution on, or (where the applicable documentation permits installation on non-Vidyo equipment) for communication with Vidyo equipment owned or leased by Customer and used for Customer's internal business purposes. No other uses of the Software are authorized by this Agreement and any unauthorized use of the Software shall be a violation of the terms of this license and Agreement.

Note For evaluation or beta copies for which Vidyo does not charge a license fee, the above requirement to pay license fees does not apply. 

Use of Products.  Products are not authorized for use in critical safety or other applications where any failure may reasonably be anticipated to result in bodily injury, loss of life, or catastrophic damage to property.  If Customer uses or sells the Products for use in any such applications, Customer acknowledges that such sale or use is at Customer's sole risk.   Customer will indemnify, defend and hold Vidyo and its suppliers harmless from and against any and all liabilities and costs arising out of or in connection with such sale or use.

Limited Warranty 

Express Warranty : Vidyo warrants that for a period of one (1) year following shipment of the Product (i) the Product hardware shall be free from defects in materials and workmanship and (ii) the Licensed Software substantially conforms to its published specification.  For instructions to make and process claims under this warranty, please contact the Vidyo authorized reseller from whom you acquired the Product

Except for the foregoing, the Software is provided AS IS. This limited warranty extends only to the Customer who is the original licensee. Customer's sole and exclusive remedy and the entire liability of Vidyo and its suppliers and licensors under this limited warranty will be, at Vidyo's option, repair, replacement, or refund of the Product if reported (or, upon request, returned) to Vidyo or the party supplying the Product to Customer. In no event does Vidyo warrant that the Software is error free or that Customer will be able to operate the Software without problems or interruptions. In addition, due to the continual development of new techniques for intruding upon and attacking networks, Vidyo does not warrant that the Software or any equipment, system or network on which the Software is used will be free of vulnerability to intrusion or attack. 

Restrictions. This warranty does not apply if the Software, Product or any other equipment upon which the Software is authorized to be used (a) has been altered, except by Vidyo or its authorized representative, (b) has not been installed, operated, repaired, or maintained in accordance with instructions supplied by Vidyo, (c) has been subjected to abnormal physical or electrical stress, misuse, negligence, or accident; or (d) is licensed, for beta, evaluation, testing or demonstration purposes. This warranty also does not apply to (e) any temporary Soft-ware modules; (f) any Software for which Vidyo does not receive a license fee. 
          
DISCLAIMER OF WARRANTY 

EXCEPT AS SPECIFIED IN THIS WARRANTY, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS, AND WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OR CONDITION OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, SATISFACTORY QUALITY, NON-INTERFERENCE, ACCURACY OF INFOR-MATIONAL CONTENT, OR ARISING FROM A COURSE OF DEALING, LAW, USAGE, OR TRADE PRACTICE, ARE HEREBY EXCLUDED TO THE EXTENT ALLOWED BY APPLICABLE LAW AND ARE EXPRESSLY DISCLAIMED BY VIDYO, ITS SUPPLIERS AND LICENSORS.TO THE EXTENT AN IMPLIED WARRANTY CANNOT BE EXCLUDED, SUCH WARRANTY IS LIMITED IN DURATION TO THE EXPRESS WARRANTY PERIOD. BECAUSE SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, THE ABOVE LIMITATION MAY NOT APPLY. THIS WARRANTY GIVES CUSTOMER SPECIFIC LEGAL RIGHTS, AND CUSTOMER MAY ALSO HAVE OTHER RIGHTS WHICH VARY FROM JURISDICTION TO JURISDICTION. This disclaimer and exclusion shall apply even if the express warranty set forth above fails of its essential purpose. 
 
General Limitations. 
This is a license, not a transfer of title, to the Software and Documentation, and Vidyo and/or its licensor(s), retain(s) ownership of all copies of the Software and Documentation and intellectual property rights of the Product and Software. Customer acknowledges that the Products, Software and Documentation contain intellectual property rights (such as international and united states trade secrets, copyrights, patents, and patents pending) of Vidyo, its suppliers or licensors including but not limited to the specific internal design and structure of individual programs and associated interface information. Accordingly, except as otherwise expressly provided under this Agreement, Customer shall have no right and Customer specifically agrees not to: (i) transfer, assign or sublicense its license rights to any other person or entity, or use the Software on unauthorized or secondhand Vidyo equipment, and Customer acknowledges that any attempted transfer, assignment, sublicense or use shall be void; (ii) make error corrections to or otherwise modify or adapt the Product, Software or create derivative works based upon the Software, or permit third parties to do the same;(iii) reverse engineer or decompile, decrypt, disassemble or otherwise reduce the Software to human-readable form, except to the extent otherwise expressly permitted under applicable law notwithstanding this restriction; (iv) use or permit the Software to be used to perform services for third parties, whether on a service bureau or time sharing basis or otherwise, without the express written authorization of Vidyo; or (v) disclose, provide, or otherwise make available trade secrets contained within the Products, Software and Document-ation in any form to any third party without the prior written consent of Vidyo. Customer shall implement reasonable security measures to protect such trade secrets. To the extent required by law, and at Customer's written request, Vidyo shall provide Customer with the interface information needed to achieve interoperability between the Software and another independently created program, on payment of Vidyo's applicable fee, if any. Customer shall observe strict obligations of confidentiality with respect to such information and shall use such information in compliance with any applicable terms and conditions upon which Vidyo makes such information available. 

Unless otherwise expressly specified all taxes and duties relating to this Agreement, the Products, or Software are excluded and shall be Customer's responsibility.
 
Software, Upgrades and Additional Copies. 

For purposes of this Agreement, "Software" shall include (and the terms and conditions of this Agreement shall apply to) computer programs, including firmware, as provided to Customer by Vidyo or an authorized Vidyo reseller, and any upgrades, updates, bug fixes or modified versions thereto (collectively, "Upgrades") or backup copies of the Software licensed or provided to Customer by Vidyo or an authorized Vidyo reseller. NOTWITHSTANDING ANY OTHER PROVISION OF THIS AGREEMENT: (1) CUSTOMER HAS NO LICENSE OR RIGHT TO USE ANY ADDITIONAL COPIES OR UPGRADES UNLESS CUSTOMER, AT THE TIME OF ACQUIRING SUCH COPY OR UPGRADE, ALREADY HOLDS A VALID LICENSE TO THE ORIGINAL SOFTWARE AND HAS PAID THE APPLICABLE FEE FOR THE UPGRADE OR ADDITIONAL COPIES; (2) USE OF UPGRADES IS LIMITED TO VIDYO EQUIPMENT FOR WHICH CUSTOMER IS THE ORIGINAL END USER PURCHASER OR LESSEE OR WHO OTHERWISE HOLDS A VALID LICENSE TO USE THE SOFTWARE WHICH IS BEING UPGRADED; AND (3) THE MAKING AND USE OF ADDITIONAL COPIES IS LIMITED TO NECESSARY BACKUP PURPOSES ONLY. 

Proprietary Notices. Customer agrees to maintain and reproduce all copyright and other proprietary notices on all copies, in any form, of the Software in the same form and manner that such copyright and other proprietary notices are included on the Software. Except as expressly authorized in this Agreement, Customer shall not make any copies or duplicates of any Software without the prior written permission of Vidyo.
 
Term and Termination. This Agreement and the license granted herein shall remain effective until terminated as specified in the related order or under this section. Customer may terminate this Agreement and the license any time by destroying all copies of Software and any Documentation. Customer's rights under this Agreement will terminate immediately without notice from Vidyo if Customer fails to comply with any provision of this Agreement. Upon termination, Customer shall destroy all copies of Software and Documentation in its possession or control. All confidentiality obligations of Customer and all limitations of liability and disclaimers and restrictions of warranty shall survive termination of this Agreement. In addition, the provisions of the sections titled " United States Government Restricted Rights." and "General Terms Applicable to the Limited Warranty Statement and End User License" shall survive termination of this Agreement. Any other clauses which by their terms are required for the enforcement of this Agreement shall survive termination. 

Export. Products, Software and Documentation, including technical data, may be subject to U.S. export control laws, including the U.S. Export Administration Act and its associated regulations, and may be subject to export or import regulations in other countries. Customer agrees to comply strictly with all such regulations and acknowledges that it has the responsibility to obtain licenses to export, re-export, or import Products, Software and Documentation.

United States Government Restricted Rights.
The Software and Documentation are provided with Restricted Rights and qualify as `commercial items' consisting of `commercial computer software' and`computer software documentation' as such terms are defined and used at FAR (48 C.F.R.) 2.101 and FAR 12.212 . Use, duplication, or disclosure by the government is subject to restrictions as set forth in subparagraph (c)(f)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the Commercial Computer Software-Restricted Rights at 48 C.F.R. S:52.227-19, as applicable.
            
General Terms Applicable to the End User License, Limited Warrant Statement and Disclaimer of Liabilities. REGARDLESS WHETHER ANY REMEDY SET FORTH HEREIN FAILS OF ITS ESSENTIAL PURPOSE OR OTHERWISE, IN NO EVENT WILL VIDYO OR ITS SUPPLIERS BE LIABLE FOR ANY LOST REVENUE, PROFIT, OR LOST OR DAMAGED DATA, BUSINESS INTERRUPTION, LOSS OF CAPITAL, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL, OR PUNITIVE DAMAGES HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY OR WHETHER ARISING OUT OF THE USE OF OR INABILITYTO USE SOFTWARE OR OTHERWISE AND EVEN IF VIDYO OR ITS SUPPLIERS OR LICENSORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event shall Vidyo's or its suppliers' or licensors' liability to Customer, whether in contract, tort (including negligence), breach of warranty,or otherwise, exceed the price paid by Customer for the Software that gave rise to the claim or if the Software is part of another Vidyo Product, the price paid for such other Vidyo Product. BECAUSE SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATION OR EXCLUSION OF CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.

Customer agrees that the limitations of liability and disclaimers set forth herein will apply regardless of whether Customer has accepted the Software or any other product or service delivered by Vidyo. Customer acknowledges and agrees that Vidyo has set its prices to end users and to Vidyo's authorized resellers and entered into this Agreement in reliance upon the disclaimers of warranty and the limitations of liability set forth herein, that the same reflect an allocation of risk between the parties (including the risk that a contract remedy may fail of its essential purpose and cause consequential loss), and that the same form an essential basis of the bargain between the parties. The validity, construction and performance of this Agreement shall be governed by and construed in accordance with the laws of the State of New Jersey, United States, without reference to or application of choice of law rules or principles. The exclusive venue for any dispute arising under this Agreement shall be within the competent courts in the State of New Jersey, USA. The United Nations Convention on the International Sale of Goods shall not apply. If any portion hereof is found to be void or unenforceable, the remaining provisions of the Agreement shall remain in full force and effect. Except as expressly provided herein, this Agreement constitutes the entire agreement between the parties with respect to the terms herein and Documentation and supersedes any conflicting or additional terms contained in any purchase order or elsewhere, all of which terms are excluded. This Agreement has been written in the English language, and the parties agree that the English version will govern. 

Infringement Indemnification.(a) Vidyo will defend or settle, at its expense, any action brought against Customer based upon the claim that the Software or Product, if used within the scope of the License granted under this Agreement, directly infringe a registered United States, European Union or Commonwealth patent or copyright; provided, however, that: (i) Customer shall notify Vidyo promptly in writing of any such claim; (ii) Customer shall not enter into any settlement or compromise any claim without Vidyo's prior written consent; (iii) Vidyo shall have sole control of any such action and settlement negotiations; and (iv) Customer shall provide Vidyo with information and assistance, at Vidyo's request, necessary to settle or defend such claim. Vidyo agrees to pay all damages and costs finally awarded against Customer attributable to such claim. The foregoing states the sole liability of Vidyo and the exclusive remedy of Customer for any infringement of intellectual property rights by the Product or any other items provided by Vidyo hereunder.(b) If the Product or Software becomes, or in the opinion of Vidyo may become, the subject of a claim of infringement of any third party right, Vidyo may, at its option and in its discretion: (i) procure for Customer the right to use the Product free of any liability; (ii) replace or modify the Product to make it non-infringing; or (iii) repurchase the applicable licenses or Products. (c) Customer will defend or settle, at its expense, any action brought against Vidyo based upon the claim that any modifications to the Product or combination of the Product with products infringes or violates any third party right; provided, however, that: (i) Vidyo shall notify Customer promptly in writing of any such claim; (ii) Vidyo shall not enter into any settlement or compromise any such claim without Customer's prior written consent; iii) Customer shall have sole control of any such action and settlement negotiations; and (iv) Vidyo shall provide Customer with information and assistance, at Customer's request and expense, necessary to settle or defend such claim. Customer agrees to pay all damages and costs finally awarded against Vidyo attributable to such claim.(d) Notwithstanding Subsection (a) above, Vidyo assumes no liability hereunder for, and shall have no obligation to defend Customer or to pay costs, damages or attorney's fees for, any claim based upon any modifications to the Product not provided by Vidyo or combination of the Product with other products.
