Helix DNA Technology Binary Research Use License

REDISTRIBUTION NOT PERMITTED

This Helix DNA Technology Binary Research
Use License ("License") is a legal agreement
between You and RealNetworks, Inc. and
its suppliers and licensors (collectively,
"RealNetworks") for the binary versions of
the Helix DNA Compiled Binaries distributed
under this License ("Software"), which are
made available from the "Helix DNA Compiled
Binaries" section of the www.helixcommunity.org
<http://www.helixcommunity.org/> Web site.  "You"
means an individual, or a legal entity acting
by and through an individual or individuals,
exercising rights either under this License.
For legal entities, "You" includes any entity
that by majority voting interest controls, is
controlled by, or is under common control with
You. The terms and conditions for this License
are as follows:

By clicking on or accepting the "ACCEPT" option
below, or by installing, copying or otherwise
using the Software, you agree to be bound by the
terms of this License Agreement. IF YOU DO NOT
AGREE TO THE TERMS OF THIS LICENSE AGREEMENT,
CLICK THE "ACCEPT" BUTTON AND/OR DO NOT INSTALL
THE SOFTWARE.

YOU AGREE THAT YOUR USE OF THE SOFTWARE
ACKNOWLEDGES THAT YOU HAVE READ THIS LICENSE,
UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS
TERMS AND CONDITIONS.

1. GRANT OF LICENSE FOR INTERNAL RESEARCH AND
DEVELOPMENT WORK.  Subject to the restrictions
set forth herein, RealNetworks hereby grants
to You a non-exclusive, non-sublicensable,
personal license to use the Software in
object code and any accompanying documentation
("Documentation") solely for Your internal,
non-commercial evaluation and research use,
provided that You may only install and use a
reasonable number of copies of the Software on
computers owned or controlled by You and located
on Your premises. As part of such use You may
combine the Software with other Helix software
properly licensed to You under the terms of
the RealNetworks Community Source License
Agreement or the RealNetworks Public Source
License Agreement, but You may not otherwise
create derivative works of the Software or
Documentation.

2. LICENSE RESTRICTIONS.

a) You may not: (i) permit other individuals to
use the Software except under the terms listed
above; (ii) modify, translate, reverse engineer,
decompile, disassemble or use any other method
(including "clean room" development) to learn the
source code of the Software (except to the extent
that this restriction is expressly prohibited by
law); (iii) rent, lease, transfer, or otherwise
transfer rights to the Software or Documentation;
(iv) remove any proprietary notices or labels
on the Software or Documentation; (v) use
the Software to encode, reproduce or copy any
material or intellectual property You do not have
the right to encode, reproduce, or copy; (vi)
use the Software to develop any application that
has the capability of transcoding or converting
RealAudio or RealVideo Files into any other
file format ("Transcode" means to alter the
current encoding or form of media files that was
decoded from its original form, including by way
of example but not limited to by way of example
but not limited to: decompression of an audio or
video stream and recompression using a different
compression algorithm); or (vii) make available
to any third party the results of any evaluation
or testing of the Software by You under this
License. Any such forbidden use shall immediately
terminate Your license to the Software.

b) You agree that You shall only use the Software
and Documentation in a manner that complies with
all applicable laws in the jurisdictions in
which You use the Software and Documentation,
including, but not limited to, applicable
restrictions concerning copyright and other
intellectual property rights.

c) You may not use the Software in an attempt to,
or in conjunction with, any device, program or
service designed to circumvent technological
measures employed to control access to, or
the rights in, a digital media content file or
other work protected by the copyright laws of
any jurisdiction.

d) Certain components of the Software may embody
a serial copying management system required
by the laws of the United States. You may not
circumvent or attempt to circumvent this system
by any means.

3. COPIES OF SOFTWARE AND ENHANCEMENTS. This
license does not grant You any right to any
enhancement or update.

4. TITLE. Title, ownership, rights, and
intellectual property rights in and to the
Software and Documentation shall remain
in RealNetworks.  The Software is protected
by the copyright laws of the United States
and international copyright treaties. Title,
ownership rights and intellectual property
rights in and to the content accessed through
the Software including the content contained in
the Software media demonstration files shall
be retained by the applicable content owner
and may be protected by applicable copyright or
other law. This license gives You no rights to
such content.

5. DISCLAIMER OF WARRANTY & LIMIT OF
LIABILITY. THE SOFTWARE AND DOCUMENTATION
ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY
APPLICABLE LAW, REALNETWORKS FURTHER DISCLAIMS
ALL WARRANTIES, INCLUDING WITHOUT LIMITATION
ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, AND
NONINFRINGEMENT. THE ENTIRE RISK ARISING OUT
OF THE USE OR PERFORMANCE OF THE SOFTWARE AND
DOCUMENTATION REMAINS WITH YOU. TO THE MAXIMUM
EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT
SHALL REALNETWORKS OR ITS SUPPLIERS BE LIABLE FOR
ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, SPECIAL,
PUNITIVE, OR OTHER DAMAGES WHATSOEVER (INCLUDING,
WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
INFORMATION, OR OTHER PECUNIARY LOSS) ARISING
OUT OF THIS LICENSE OR THE USE OF OR INABILITY
TO USE THE PRODUCT, EVEN IF REALNETWORKS
HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.  REALNETWORKS' TOTAL LIABLITY FOR ANY
DIRECT DAMAGES SHALL NOT EXCEED FIVE DOLLARS
($5.00). BECAUSE SOME STATES/JURISDICTIONS DO NOT
ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY
FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE
ABOVE LIMITATION MAY NOT APPLY TO YOU.

6. INDEMNIFICATION. This Software is intended
for use only with properly licensed media,
content and content creation tools. It is
Your responsibility to ascertain whether any
copyright, patent or other licenses are necessary
and to obtain any licenses to such media and
content. You agree to use only those materials
for which You have the necessary patent,
copyright and other permissions, licenses, and/or
clearances. You agree to hold harmless, indemnify
and defend RealNetworks, its officers, directors
and employees, from and against any losses,
damages, fines and expenses (including attorneys'
fees and costs) arising out of or relating to any
claims that You have encoded, copied, compressed,
enabled the "Allow Recording" feature, enabled
the "Allow Download" feature, or copied, used,
published, displayed, or transmitted any content
or materials (other than materials provided
by RealNetworks specifically for Your use)
in connection with the Software in violation
of another party's rights If You are importing
the Software from the United States, You shall
indemnify and hold RealNetworks harmless from
and against any import and export duties or
other claims arising from such importation.

7. TERMINATION. This License and Your right to
use this Software automatically terminate if
You fail to comply with any material provision
of this License. RealNetworks may terminate
this License at any time by delivering notice
to You and You may terminate this License at
any time by destroying or erasing Your copy of
the Software. Upon termination of this License,
You agree to destroy or erase the Software.

8. NO ASSIGNMENT. This License is personal
to You, and may not be assigned without
RealNetworks' express written consent.

9. U.S. GOVERNMENT RESTRICTED
RIGHTS. U.S. GOVERNMENT RESTRICTED RIGHTS:
This Software and documentation are provided
with RESTRICTED RIGHTS. Use, duplication
or disclosure by the Government is subject
to restrictions set forth in subparagraphs
(a) through (d) of the Commercial Computer
Software--Restricted Rights at FAR 52.227-19
when applicable, or in subparagraph (c)(1)(ii)
of the Rights in Technical Data and Computer
Software clause at DFARS 252.227-7013, and in
similar clauses in the NASA FAR supplement,
as applicable. Manufacturer is RealNetworks,
Inc./2601 Elliott, Suite 1000/Seattle,
Washington 98121.  You are responsible for
complying with all trade regulations and laws
both foreign and domestic. You acknowledge that
none of the Software or underlying information
or technology may be downloaded or otherwise
exported or re-exported (i) into (or to a
national or resident of) Cuba, Iraq, Libya,
Sudan, North Korea, Iran, Syria or any other
country subject to a U.S. embargo; or (ii)
to anyone on the U.S. Treasury Department's
list of Specially Designated Nationals or the
U.S. Commerce Department's Denied Parties List
or Entity List. By using the Software You are
agreeing to the foregoing and are representing
and warranting that (i) no U.S. federal agency
has suspended, revoked, or denied You export
privileges, (ii) You are not located in or
under the control of a national or resident of
any such country or on any such list, and (iii)
You will not export or re-export the Software
to any prohibited county, or to any prohibited
person, entity, or end-user as specified by U.S.
export controls.

10. MISCELLANEOUS. This License Agreement
shall constitute the complete and exclusive
agreement between us. A separate written
agreement with respect to the subject matter
hereof shall supersede this instrument to the
extent indicated in such separate agreement. This
License Agreement may not be modified except
in a writing duly signed by an authorized
representative of RealNetworks and You. If any
provision of this License Agreement is held to
be unenforceable for any reason, such provision
shall be reformed only to the extent necessary
to make it enforceable, and such decision shall
not affect the enforceability of such provision
under other circumstances, or of the remaining
provisions hereof under all circumstances. This
License Agreement shall be governed by the laws
of the State of Washington without regard to
conflicts of law provisions and You consent
to the exclusive jurisdiction of the state
and federal courts sitting in the State of
Washington. This License Agreement will not be
governed by the United Nations Convention of
Contracts for the International Sale of Goods,
the application of which is hereby expressly
excluded.

Copyright (C)1995-2004 RealNetworks, Inc. and/or
its suppliers. 2601 Elliott Avenue, Suite 1000,
Seattle, Washington 98121 U.S.A. The Software may
incorporate one or more of the following patents:
U.S.  Patent #5,917,835; U.S. Patent # 5,854,858;
U.S. Patent # 5,917,954.  Other U.S. patents
pending. All rights reserved. RealNetworks,
Helix, RealAudio, and RealVideo are trademarks
or registered trademarks of RealNetworks, Inc.

By Clicking the "ACCEPT" button below you are
agreeing to the Helix DNA Technology Binary
Research Use License

