From: http://www.adobe.com/products/eulas/players/flash/
On Jan 17th 2007

End User License Agreement
ADOBE® SOFTWARE LICENSE AGREEMENT

NOTICE TO USER: PLEASE READ THIS CONTRACT CAREFULLY. BY USING, COPYING OR DISTRIBUTING ALL OR ANY PORTION OF THE ADOBE SOFTWARE ("SOFTWARE") YOU ACCEPT ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT, INCLUDING, IN PARTICULAR THE LIMITATIONS ON: USE CONTAINED IN SECTION 2; TRANSFERABILITY IN SECTION 4; WARRANTY IN SECTION 7; AND LIABILITY IN SECTION 8. YOU AGREE THAT THIS AGREEMENT IS ENFORCEABLE LIKE ANY WRITTEN NEGOTIATED AGREEMENT SIGNED BY YOU. THIS AGREEMENT IS ENFORCEABLE AGAINST YOU AND ANY LEGAL ENTITY THAT OBTAINED THE SOFTWARE AND ON WHOSE BEHALF IT IS USED. IF YOU DO NOT AGREE, DO NOT USE THIS SOFTWARE.

Adobe and its suppliers own all intellectual property in the Software. Adobe permits you to Use the Software only in accordance with the terms of this Agreement. Use of some third party materials included in the Software may be subject to other terms and conditions typically found in a separate license agreement, a “Read Me” file located near such materials or in the “Third Party Software Notices and/or Additional Terms and Conditions” found at www.adobe.com/go/thirdparty/

   1. Definitions. "Software" means (a) all of the contents of the files (provided either by electronic download, on physical media or any other method of distribution), disk(s), CD-ROM(s) or other media with which this Agreement is provided, including but not limited to (i) Adobe or third party computer information or software, including the Adobe Reader® ("Adobe Reader"), Adobe Flash® Player, Shockwave® Player and Authorware® Player (collectively, the Flash, Shockwave and Authorware players, are the "Web Players"); (ii) related explanatory written materials or files ("Documentation"); and (iii) fonts; and (b) upgrades, modified versions, updates, additions, and copies of the Software, if any, licensed to you by Adobe (collectively, "Updates"). "Use" or "Using" means to access, install, download, copy, or otherwise benefit from using the functionality of the Software in accordance with the Documentation. "Permitted Number" means one (1) unless otherwise indicated under a valid license (e.g., volume license) granted by Adobe. "Computer" means an electronic device that accepts information in digital or similar form and manipulates it for a specific result based on a sequence of instructions. "Adobe" means Adobe Systems Incorporated, a Delaware corporation, 345 Park Avenue, San Jose, California 95110, if subsection 9(a) of this Agreement applies; otherwise it means Adobe Systems Software Ireland Limited, Unit 3100, Lake Drive, City West Campus, Saggart D24, Republic of Ireland, a company organized under the laws of Ireland and an affiliate and licensee of Adobe Systems Incorporated.
   2. Software License. If you obtained the Software from Adobe or one of its authorized licensees, and subject to your compliance with the terms of this agreement (this "Agreement"), including the restrictions in Setion 3, Adobe grants to you a non-exclusive license to Use the Software for the purposes described in the Documentation as follows.

      2.1  General Use. You may install and Use a copy of the Software on your compatible Computer, up to the Permitted Number of computers. The Software may not be shared, installed or used concurrently on different computers. See Section 3 for important restrictions on the Use of Adobe Reader and Web Players.

      2.2  Server Use and Distribution.

      2.2.1  You may install one copy of the Adobe Reader on a computer file server within your internal network for the sole and exclusive purpose of (a) using the Software (from an unlimited number of client computers on your internal network) via (i) the Network File System (NFS) for UNIX versions of the Software or (ii) Windows Terminal Services and (b) allowing for printing within your internal network. Unless otherwise expressly permitted hereunder, no other server or network use of the Software is permitted, including but not limited to use of the Software (i) either directly or through commands, data or instructions from or to another computer or (ii) for internal network, internet or web hosting services.

      2.2.2  For information on how to distribute the Software on tangible media or through an internal network please refer to the sections entitled "How to Distribute Adobe Reader" at http://www.adobe.com/products/acrobat/distribute.html; or "Distribute Macromedia Web Players" at http://www.adobe.com/licensing.

      2.3  Backup Copy. You may make one backup copy of the Software, provided your backup copy is not installed or used on any Computer. You may not transfer the rights to a backup copy unless you transfer all rights in the Software as provided under Section 4.

      2.4  Portable or Home Computer Use. If and only if the Software is Adobe Reader, in addition to the single copy permitted under Sections 2.1 and 2.2, the primary user of the Computer on which the Software is installed may make a second copy of the Software for his or her exclusive Use on either a portable Computer or a Computer located at his or her home, provided the Software on the portable or home Computer is not used at the same time as the Software on the primary computer.

      2.5  No Modification.

      2.5.1  You may not modify, adapt, translate or create derivative works based upon the Software. You may not reverse engineer, decompile, disassemble or otherwise attempt to discover the source code of the Software except to the extent you may be expressly permitted to decompile under applicable law, it is essential to do so in order to achieve operability of the Software with another software program, and you have first requested Adobe to provide the information necessary to achieve such operability and Adobe has not made such information available. Adobe has the right to impose reasonable conditions and to request a reasonable fee before providing such information. Any such information supplied by Adobe and any information obtained by you by such permitted decompilation may only be used by you for the purpose described herein and may not be disclosed to any third party or used to create any software which is substantially similar to the expression of the Software. Requests for information should be directed to the Adobe Customer Support Department.

      2.5.2  As an exception to the above, you may customize or extend the functionality of the installer for the Adobe Reader as specifically allowed by instructions found at http://www.adobe.com/support/main.html or http://partners.adobe.com (e.g., installation of additional plug-in and help files). You may not otherwise alter or modify the Software or create a new installer for the Software. The Adobe Reader is licensed and distributed by Adobe for viewing, distributing and sharing PDF files.

      2.6  Third Party Website Access. The Software may allow you to access third party websites ("Third Party Sites"). Your access to and use of any Third Party Sites, including any goods, services or information made available from such sites, is governed by the terms and conditions found at each Third Party Site, if any. Third Party Sites are not owned or operated by Adobe. YOUR USE OF THIRD PARTY SITES IS AT YOUR OWN RISK. ADOBE MAKES NO WARRANTIES, CONDITIONS, INDEMNITIES, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, WHETHER BY STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE AS TO ANY OTHER MATTERS, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT OF THIRD PARTY RIGHTS, TITLE, INTEGRATION, ACCURACY, SECURITY, AVAILABILITY, SATISFACTORY QUALITY, MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE WITH RESPECT TO THE THIRD PARTY SITES.

      2.7  Certified Documents.

      2.7.1  Certified Documents and CD Services. The Software may allow you to validate Certified Documents. A "Certified Document" or “CD” is a PDF file that has been digitally signed using (a) a certificate and (b) a “private” encryption key that corresponds to the “public” key in the certificate. Validation of a CD requires CD Services from the CD Service Provider that issued the certificate. “CD Service Provider” is an independent third party service vendor listed at http://www.adobe.com/security/partners_cds.html. “CD Services” are services provided by CD Service Providers, including without limitation (i) certificates issued by such CD Service Provider for use with the Software's CD feature set, (ii) services related to issuance of certificates, and (iii) other services related to certificates, including without limitation verification services.

      2.7.2  CD Service Providers. Although the Software may provide validation features, Adobe does not supply the necessary CD Services required to use these features. Purchasing, availability and responsibility for the CD Services are between you and the CD Service Provider. Before you rely upon any CD, any digital signature applied thereto, and/or any related CD Services, you must first review and agree to the applicable Issuer Statement and this Agreement. “Issuer Statement” means the terms and conditions under which each CD Service Provider offers CD Services (see the links on http://www.adobe.com/security/partners_cds.html), including for example any subscriber agreements, relying party agreements, certificate policies and practice statements, and Section 2.7 of this Agreement. By validating a CD using CD Services, you acknowledge and agree that (a) the certificate used to digitally sign a CD may be revoked at the time of verification, making the digital signature on the CD appear valid when in fact it is not, (b) the security or integrity of a CD may be compromised due to an act or omission by the signer of the CD, the applicable CD Service Provider, or any other third party and (c) you must read, understand, and be bound by the applicable Issuer Statement.

      2.7.3  Warranty Disclaimer. CD Service Providers offer CD Services solely in accordance with the applicable Issuer Statement. ACCESS TO THE CD SERVICES THROUGH THE USE OF THE SOFTWARE IS MADE AVAILABLE ON AN “AS IS” BASIS ONLY AND WITHOUT ANY WARRANTY OR INDEMNITY OF ANY KIND (EXCEPT AS SUPPLIED BY A CD SERVICES PROVIDER IN ITS ISSUER STATEMENT). ADOBE AND EACH CD SERVICE PROVIDER (EXCEPT AS EXPRESSLY PROVIDED IN ITS ISSUER STATEMENT) MAKE NO WARRANTIES, CONDITIONS, INDEMNITIES, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, WHETHER BY STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE AS TO ANY OTHER MATTERS, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT OF THIRD PARTY RIGHTS, TITLE, INTEGRATION, ACCURACY, SECURITY, AVAILABILITY, SATISFACTORY QUALITY, MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE WITH RESPECT TO THE CD SERVICES.

      2.7.4  Indemnity. You agree to hold Adobe and any applicable CD Service Provider (except as expressly provided in its Issuer Statement) harmless from any and all liabilities, losses, actions, damages, or claims (including all reasonable expenses, costs, and attorneys fees) arising out of or relating to any use of, or reliance on, any CD Service, including, without limitation (a) reliance on an expired or revoked certificate, (b) improper verification of a certificate, (c) use of a certificate other than as permitted by any applicable Issuer Statement, this Agreement or applicable law; (d) failure to exercise reasonable judgment under the circumstances in relying on the CD Services or (e) failure to perform any of the obligations as required in an applicable Issuer Statement.

      2.7.5  Limit of Liability. UNDER NO CIRCUMSTANCES WILL ADOBE OR ANY CD SERVICE PROVIDER (EXCEPT AS EXPRESSLY SET FORTH IN ITS ISSUER STATEMENT) BE LIABLE TO YOU, OR ANY OTHER PERSON OR ENTITY, FOR ANY LOSS OF USE, REVENUE OR PROFIT, LOST OR DAMAGED DATA, OR OTHER COMMERCIAL OR ECONOMIC LOSS OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, STATUTORY, PUNITIVE, EXEMPLARY OR CONSEQUENTIAL DAMAGES WHATSOEVER RELATED TO YOUR USE OR RELIANCE UPON CD SERVICES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR IF SUCH DAMAGES ARE FORESEEABLE. THIS LIMITATION SHALL APPLY EVEN IN THE EVENT OF A FUNDAMENTAL OR MATERIAL BREACH OR A BREACH OF THE FUNDAMENTAL OR MATERIALTERMS OF THIS AGREEMENT.

      2.7.6  Third Party Beneficiaries. You agree that any CD Service Provider you utilize shall be a third party beneficiary with respect to this Section 2.7 of this Agreement, and that such CD Service Provider shall have the right to enforce such provisions in its own name as if the CD Service Provider were Adobe.
   3. Restrictions.

      3.1  Web Player Prohibited Devices. You may not Use any Web Player on any non-PC device or with any embedded or device version of any operating system. For the avoidance of doubt, and by example only, you may not use a Web Player on any (a) mobile devices, set top boxes (STB), handhelds, phones, web pads, tablets and Tablet PCs that are not running Windows XP Tablet PC Edition, game consoles, TVs, DVD players, media centers (excluding Windows XP Media Center Edition and its successors), electronic billboards or other digital signage, internet appliances or other internet-connected devices, PDAs, medical devices, ATMs, telematic devices, gaming machines, home automation systems, kiosks, remote control devices, or any other consumer electronics device, (b) operator-based mobile, cable, satellite, or television systems or (c) other closed system devices.

      3.2  Notices. You shall not copy the Software except as set forth in Section 2. Any copy of the Software that you make must contain the same copyright and other proprietary notices that appear on or in the Software.

      3.3  Document Features. The Software may contain features and functionality (the “Document Features”) that appear disabled or “grayed out.” These Document Features will only activate when opening a PDF document that was created using corresponding enabling technology available only from Adobe (“Keys”). You agree not to access, or attempt to access, disabled Document Features or otherwise circumvent the permissions that control activation of such Document Features. You may only use the Document Features with PDF documents that have been enabled using Keys obtained under a valid license from Adobe. No other use is permitted.

      3.4  Adobe Reader Restrictions. You are not authorized to integrate or use the Adobe Reader with any other software, plug-in or enhancement that uses or relies upon the the Adobe Reader when converting or transforming PDF files into other file formats (e.g., a PDF file into a TIFF, JPEG, or SVG file). You are not authorized to integrate or use the Adobe Reader with any plug-in software not developed in accordance with the Adobe Integration Key License Agreement. Further, you are not permitted to integrate or use the Adobe Reader with other software, or access PDF files that contain instructions (e.g., JavaScript), in order to (a) save data locally (on the same Computer), (b) create a file that contains data (e.g., an XML or comments file) or (c) save modifications to a PDF file, except when such saving or creation is allowed through the use of Document Feature(s) enabled by Adobe.
   4. Transfer. You may not rent, lease, sublicense, assign or transfer your rights in the Software, or authorize all or any portion of the Software to be copied onto another user's Computer except as may be expressly permitted herein. You may, however, transfer all your rights to Use the Software to another person or legal entity provided that: (a) you also transfer (i) this Agreement, and (ii) the Software and all other software or hardware bundled or pre-installed with the Software, including all copies, Updates and prior versions, to such person or entity, (b) you retain no copies, including backups and copies stored on a Computer, and (c) the receiving party accepts the terms and conditions of this Agreement and any other terms and conditions upon which you legally purchased a license to the Software. Notwithstanding the foregoing, you may not transfer education, pre-release, or not for resale copies of the Software.
   5. Intellectual Property Ownership, Copyright Protection. The Software and any authorized copies that you make are the intellectual property of and are owned by Adobe Systems Incorporated and its suppliers. The structure, organization and code of the Software are the valuable trade secrets and confidential information of Adobe Systems Incorporated and its suppliers. The Software is protected by law, including without limitation the copyright laws of the United States and other countries, and by international treaty provisions. Except as expressly stated herein, this Agreement does not grant you any intellectual property rights in the Software and all rights not expressly granted are reserved by Adobe and its suppliers.
   6. Updates. If the Software is an Update to a previous version of the Software, you must possess a valid license to such previous version in order to Use such Update. All Updates are provided to you on a license exchange basis. You agree that by Using an Update you voluntarily terminate your right to use any previous version of the Software. As an exception, you may continue to Use previous versions of the Software on your Computer after you Use the Update but only to assist you in the transition to the Update, provided that: (a) the Update and the previous versions are installed on the same computer; (b) the previous versions or copies thereof are not transferred to another party or Computer unless all copies of the Update are also transferred to such party or Computer; and (c) you acknowledge that any obligation Adobe may have to support the previous versions of the Software may be ended upon availability of the Update.
   7. NO WARRANTY. The Software is being delivered to you "AS IS" and Adobe makes no warranty as to its use or performance. Adobe provides no technical support, warranties or remedies for the Software. ADOBE AND ITS SUPPLIERS DO NOT AND CANNOT WARRANT THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING THE SOFTWARE. EXCEPT FOR ANY WARRANTY, CONDITION, REPRESENTATION OR TERM TO THE EXTENT TO WHICH THE SAME CANNOT OR MAY NOT BE EXCLUDED OR LIMITED BY LAW APPLICABLE TO YOU IN YOUR JURISDICTION, ADOBE AND ITS SUPPLIERS MAKE NO WARRANTIES CONDITIONS, REPRESENTATIONS, OR TERMS (EXPRESS OR IMPLIED WHETHER BY STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE) AS TO ANY MATTER INCLUDING WITHOUT LIMITATION NONINFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY, INTEGRATION, SATISFACTORY QUALITY, OR FITNESS FOR ANY PARTICULAR PURPOSE. The provisions of Section 7 and Section 8 shall survive the termination of this Agreement, howsoever caused, but this shall not imply or create any continued right to Use the Software after termination of this Agreement.
   8. LIMITATION OF LIABILITY. IN NO EVENT WILL ADOBE OR ITS SUPPLIERS BE LIABLE TO YOU FOR ANY DAMAGES, CLAIMS OR COSTS WHATSOEVER OR ANY CONSEQUENTIAL, INDIRECT, INCIDENTAL DAMAGES, OR ANY LOST PROFITS OR LOST SAVINGS, EVEN IF AN ADOBE REPRESENTATIVE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS OR FOR ANY CLAIM BY ANY THIRD PARTY. THE FOREGOING LIMITATIONS AND EXCLUSIONS APPLY TO THE EXTENT PERMITTED BY APPLICABLE LAW IN YOUR JURISDICTION. ADOBE'S AGGREGATE LIABILITY AND THAT OF ITS SUPPLIERS UNDER OR IN CONNECTION WITH THIS AGREEMENT SHALL BE LIMITED TO THE AMOUNT PAID FOR THE SOFTWARE, IF ANY. Nothing contained in this Agreement limits Adobe's liability to you in the event of death or personal injury resulting from Adobe's negligence or for the tort of deceit (fraud). Adobe is acting on behalf of its suppliers for the purpose of disclaiming, excluding and/or limiting obligations, warranties and liability as provided in this Agreement, but in no other respects and for no other purpose. For further information, please see the jurisdiction specific information at the end of this Agreement, if any, or contact Adobe's Customer Support Department.
   9. Export Rules. You agree that the Software will not be shipped, transferred or exported into any country or used in any manner prohibited by the United States Export Administration Act or any other export laws, restrictions or regulations (collectively the "Export Laws"). In addition, if the Software is identified as export controlled items under the Export Laws, you represent and warrant that you are not a citizen, or otherwise located within, an embargoed nation (including without limitation Iran, Syria, Sudan, Libya, Cuba, and North Korea) and that you are not otherwise prohibited under the Export Laws from receiving the Software. All rights to Use the Software are granted on condition that such rights are forfeited if you fail to comply with the terms of this Agreement.
  10. Governing Law. This Agreement will be governed by and construed in accordance with the substantive laws in force: (a) in the State of California, if a license to the Software is obtained when you are in the United States, Canada, or Mexico; or (b) in Japan, if a license to the Software is obtained when you are in Japan, China, Korea, or other Southeast Asian country where all official languages are written in either an ideographic script (e.g., hanzi, kanji, or hanja), and/or other script based upon or similar in structure to an ideographic script, such as hangul or kana; or (c) England, if a license to the Software is purchased when you are in any other jurisdiction not described above. The respective courts of Santa Clara County, California when California law applies, Tokyo District Court in Japan, when Japanese law applies, and the competent courts of England, when the law of England applies, shall each have non-exclusive jurisdiction over all disputes relating to this Agreement. This Agreement will not be governed by the conflict of law rules of any jurisdiction or the United Nations Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded.
  11. General Provisions. If any part of this Agreement is found void and unenforceable, it will not affect the validity of the balance of this Agreement, which shall remain valid and enforceable according to its terms. This Agreement shall not prejudice the statutory rights of any party dealing as a consumer. This Agreement may only be modified by a writing signed by an authorized officer of Adobe. Updates may be licensed to you by Adobe with additional or different terms. This is the entire agreement between Adobe and you relating to the Software and it supersedes any prior representations, discussions, undertakings, communications or advertising relating to the Software.
  12. Notice to U.S. Government End Users. The Software and Documentation are "Commercial Items," as that term is defined at 48 C.F.R. §2.101, consisting of "Commercial Computer Software" and "Commercial Computer Software Documentation," as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all applicable equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60, 60-250, and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference in this Agreement.
  13. Compliance with Licenses. If you are a business or organization, you agree that upon request from Adobe or Adobe's authorized representative, you will within thirty (30) days fully document and certify that use of any and all Software at the time of the request is in conformity with your valid licenses from Adobe.
  14. Specific Provisions and Exceptions.

      14.1  Limited Warranty for Users Residing in Germany or Austria. If you obtained the Software in Germany or Austria, and you usually reside in such country, then Section 7 does not apply, instead, Adobe warrants that the Software provides the functionalities set forth in the Documentation (the "agreed upon functionalities") for the limited warranty period following receipt of the Software when used on the recommended hardware configuration. As used in this Section, "limited warranty period" means one (1) year if you are a business user and two (2) years if you are not a business user. Non-substantial variation from the agreed upon functionalities shall not be considered and does not establish any warranty rights. THIS LIMITED WARRANTY DOES NOT APPLY TO SOFTWARE PROVIDED TO YOU FREE OF CHARGE, FOR EXAMPLE, UPDATES, PRE-RELEASE, TRYOUT, PRODUCT SAMPLER, NOT FOR RESALE (NFR) COPIES OF SOFTWARE, OR SOFTWARE THAT HAS BEEN ALTERED BY YOU, TO THE EXTENT SUCH ALTERATIONS CAUSED A DEFECT. To make a warranty claim, during the limited warranty period you must return, at our expense, the Software and proof of purchase to the location where you obtained it. If the functionalities of the Software vary substantially from the agreed upon functionalities, Adobe is entitled -- by way of re-performance and at its own discretion -- to repair or replace the Software. If this fails, you are entitled to a reduction of the purchase price (reduction) or to cancel the purchase agreement (rescission). For further warranty information, please contact Adobe's Customer Support Department

      14.2  Limitation of Liability for Users Residing in Germany and Austria.

      14.2.1  If you obtained the Software in Germany or Austria, and you usually reside in such country, then Section 8 does not apply, Instead, subject to the provisions in Section 14.2.2, Adobe's statutory liability for damages shall be limited as follows: (i) Adobe shall be liable only up to the amount of damages as typically foreseeable at the time of entering into the purchase agreement in respect of damages caused by a slightly negligent breach of a material contractual obligation and (ii) Adobe shall not be liable for damages caused by a slightly negligent breach of a non-material contractual obligation.

      14.2.2  The aforesaid limitation of liability shall not apply to any mandatory statutory liability, in particular, to liability under the German Product Liability Act, liability for assuming a specific guarantee or liability for culpably caused personal injuries.

      14.2.3  You are required to take all reasonable measures to avoid and reduce damages, in particular to make back-up copies of the Software and your computer data subject to the provisions of this Agreement.

      14.3  Pre-release Product Additional Terms. If the product you have received with this license is pre-commercial release or beta Software ("Pre-release Software"), then the following Section applies. To the extent that any provision in this Section is in conflict with any other term or condition in this Agreement, this Section shall supercede such other term(s) and condition(s) with respect to the Pre-release Software, but only to the extent necessary to resolve the conflict. You acknowledge that the Software is a pre-release version, does not represent final product from Adobe, and may contain bugs, errors and other problems that could cause system or other failures and data loss. Consequently, the Pre-release Software is provided to you "AS-IS", and Adobe disclaims any warranty or liability obligations to you of any kind. WHERE LIABILITY CANNOT BE EXCLUDED FOR PRE-RELEASE SOFTWARE, BUT IT MAY BE LIMITED, ADOBE'S LIABILITY AND THAT OF ITS SUPPLIERS SHALL BE LIMITED TO THE SUM OF FIFTY DOLLARS (U.S. $50) IN TOTAL. You acknowledge that Adobe has not promised or guaranteed to you that Pre-release Software will be announced or made available to anyone in the future, Adobe has no express or implied obligation to you to announce or introduce the Pre-release Software and that Adobe may not introduce a product similar to or compatible with the Pre-release Software. Accordingly, you acknowledge that any research or development that you perform regarding the Pre-release Software or any product associated with the Pre-release Software is done entirely at your own risk. During the term of this Agreement, if requested by Adobe, you will provide feedback to Adobe regarding testing and use of the Pre-release Software, including error or bug reports. If you have been provided the Pre-release Software pursuant to a separate written agreement, such as the Adobe Systems Incorporated Serial Agreement for Unreleased Products, your use of the Software is also governed by such agreement. You agree that you may not and certify that you will not sublicense, lease, loan, rent, assign or transfer the Pre-release Software. Upon receipt of a later unreleased version of the Pre-release Software or release by Adobe of a publicly released commercial version of the Software, whether as a stand-alone product or as part of a larger product, you agree to return or destroy all earlier Pre-release Software received from Adobe and to abide by the terms of the license agreement for any such later versions of the Pre-release Software. Notwithstanding anything in this Section to the contrary, if you are located outside the United States of America, you agree that you will return or destroy all unreleased versions of the Pre-release Software within thirty (30) days of the completion of your testing of the Software when such date is earlier than the date for Adobe's first commercial shipment of the publicly released (commercial) Software.

      14.4  Settings Manager. Use of the Web Players, specifically the Flash Player, will enable the Software to store certain user settings as a local shared object on a your Computer. These settings are not associated with you, but allow you to configure certain settings within the Flash Player. You can find more information on local shared objects at http://www.adobe.com/software/flashplayer/security/ and more information on the Settings Manager at www.adobe.com/go/settingsmanager.

If you have any questions regarding this Agreement or if you wish to request any information from Adobe please use the address and contact information included with this product or via the web at www.adobe.com to contact the Adobe office serving your jurisdiction

Adobe, Authorware, Flash, Reader, and Shockwave are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.

 

Reader-PlayerWWEULA-en_US-20060607_2230
