License Agreement

The Bitstream Product provided to you herewith is a free product release of Bitstream's Cyberbit font for one user only.

By installing the Bitstream Product on your system, you (or you on behalf of your employer) are agreeing to be bound by the terms of this Agreement.

This Agreement constitutes the complete agreement between you and Bitstream. If you do not agree to its terms, do not install the License Product on your system or, if you have already installed it, delete it from your system, and return the uninstalled disk package that comprises this Bitstream Product together immediately.

1. License Grant
One User Only. In consideration for your agreeing to accept a free release of the Bitstream Product, BITSTREAM grants to you only, the Licensee, the non-exclusive, nontransferable right to use and display the Bitstream Product provided herewith on a single system only. If you are using this product for your work, this agreement applies to your employer. Please express all comments regarding the Bitstream Product to Bitstream's Technical Support Department (e-mail: support@bitstream.com).

Other Uses. To purchase a license to use this Bitstream Product on more than one system, or a right to distribute the Bitstream Product to other users, please contact Bitstream's Sales Department (e-mail: info@bitstream.com). 

Third Parties. You may send a copy of the Bitstream Product along with your documents to a commercial printer or other service bureau to enable the editing or printing of your document, provided that such party has informed you that it owns a valid license to use that particular font software.

You may also embed PC TrueType format fonts within your documents for the viewing, editing, and printing of those documents.

Portable Documents. You may send along with your documents a Portable Font Resource (“PFR”) created by Bitstream’s TrueDoc® (patented), for the purpose of allowing any third party to view, edit or print the document remotely but with the express understanding that such party may not use such PFR to edit or print any other document unless independently licensed to do so.

No Modifications. You may not modify, adapt, translate, reverse engineer, decompile, disassemble, or create derivative works based on the Bitstream Product without BITSTREAM’s prior written consent.

Rights Reservation. BITSTREAM reserves all rights not specifically granted to Licensee.

2. Copyright
The Bitstream Product and the accompanying materials are copyrighted and contain proprietary information and trade secrets of BITSTREAM. Unauthorized copying of the Bitstream product even if modified, merged, or included with other software, or of the written materials, is expressly forbidden. You may be held legally responsible for any infringement of BITSTREAM’s intellectual property rights that is caused or encouraged by your failure to abide by the terms of this Agreement. You may make one (1) copy of the Bitstream Product solely for backup purposes provided the copyright and trademark notices are reproduced in their entirety on the backup copy.

3. Termination
This Agreement is effective until terminated. This Agreement will terminate automatically without notice from BITSTREAM if you fail to comply with any provision contained herein. Upon termination, you must destroy the written materials, the Bitstream Product, and all copies of them, in part and in whole, including modified copies, if any.

4. Disclaimer and Limited Warranty
No Warranty. As a free release of the Bitstream Product is provided herewith only, BITSTREAM provides no warranty that the Bitstream Product will operate effectively, will not damage your system, or otherwise be free from any defects whatsoever. 

THE BITSTREAM PRODUCT is PROVIDED “AS IS”. BITSTREAM DOES NOT MAKE ANY WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

The entire risk as to the quality and performance of the Bitstream Product, rests upon you. BITSTREAM does not warrant that the functions contained in the Bitstream Product will meet your requirements or that the operation of the software will be uninterrupted or error free.

BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, OR INCIDENTAL DAMAGES (INCLUDING DAMAGES FROM LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, AND THE LIKE) ARISING OUT OF THE USE OF OR INABILITY TO USE THE BITSTREAM PRODUCT EVEN IF BITSTREAM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Because some states do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.

5. U.S. Government Restricted Rights
The software product referred to as the Bitstream Product and its related documentation are provided with RESTRICTED RIGHTS. Use, duplication or disclosure by the Government is subject to restrictions as set forth in FAR 52.227-19(c)(2) (May, 1987) when applicable or the applicable provisions of the DOD FAR supplement 252.227-7013 subdivision (a)(15)(April, 1988) or subdivision (a)(17)(April, 1988). Contractor/manufacturer is Bitstream Inc./215 First Street/Cambridge, MA 02142.

Export (Domestic Versions): Regardless of any disclosure made by LICENSEE to BITSTREAM of an ultimate destination of the Bitstream Product, LICENSEE shall not reexport or transfer, whether directly or indirectly, the Bitstream Product to anyone outside the United States of America without first obtaining a license from the United States Department of Commerce or any other agency or department of the United States Government, as required.

Should you have any questions concerning this Agreement, or if you desire to contact BITSTREAM for any reason, please make contact in writing.

6. GOVERNING Law  
This agreement is governed by the laws of the United States of America and the Commonwealth of Massachusetts.