http://www.adobe.com/products/eulas/pdfs/PlatformClients_PC_WWEULA-MULTI-20110809_1357.pdf

ADOBE
Personal Computer Software License Agreement

1. WARRANTY DISCLAIMER, BINDING AGREEMENT AND ADDITIONAL TERMS AND AGREEMENTS.

1.1 WARRANTY DISCLAIMER. THE SOFTWARE AND OTHER INFORMATION IS DELIVERED TO YOU
“AS IS” AND WITH ALL FAULTS. ADOBE, ITS SUPPLIERS AND CERTIFICATION AUTHORITIES DO NOT
AND CANNOT WARRANT THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING THE
SOFTWARE, CERTIFICATE AUTHORITY SERVICES OR OTHER THIRD PARTY OFFERINGS. EXCEPT TO
THE EXTENT ANY WARRANTY, CONDITION, REPRESENTATION, OR TERM CANNOT OR MAY NOT BE
EXCLUDED OR LIMITED BY LAW APPLICABLE TO YOU IN YOUR JURISDICTION, ADOBE AND ITS
SUPPLIERS AND CERTIFICATION AUTHORITIES 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 SECTIONS 1.1 AND 10
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.

1.2 BINDING AGREEMENT: By using, copying or distributing all or any portion of the Adobe
Software, you accept all the terms and conditions of this agreement, including, in particular, the
provisions on:

- Use (Section 3);
- Transferability (Section 5);
- Connectivity and Privacy (Section 7), including:
     - Updating,
     - Local Storage,
     - Settings Manager,
     - Peer Assisted Networking Technology,
     - Content Protection Technology, and
     - Use of Adobe Online Services;
- Warranty Disclaimer (Section 1.1), and;
- Liability Limitations (Sections 10 and 17).

Upon acceptance, this agreement is enforceable against you and any entity that obtained the
Software and on whose behalf it is used. If you do not agree, do not Use the Software.

1.3 ADDITIONAL TERMS AND AGREEMENTS. 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 http://www.adobe.com/go/thirdparty. Such other
terms and conditions will supersede all or portions of this agreement in the event of a conflict with
the terms and conditions of this agreement.

2. Definitions.
“Adobe” means Adobe Systems Incorporated, a Delaware corporation, 345 Park Avenue, San Jose,
California 95110, if subsection 12(a) of this agreement applies; otherwise it means Adobe Systems
Software Ireland Limited, 4-6 Riverwalk, Citywest Business Campus, Dublin 24, Ireland, a company
organized under the laws of Ireland and an affiliate and licensee of Adobe Systems Incorporated.

“Compatible Computer” means a Computer that conforms to the system requirements of the Software
as specified in the Documentation.

“Computer” means a virtual machine or physical personal electronic device that accepts information in
digital or similar form and manipulates it for a specific result based on a sequence of instructions.
“Personal Computer” or “PC” shall mean a hardware product which is designed and marketed with the
primary purpose of operating a wide variety of productivity, entertainment, and other software
applications provided by unrelated third party software vendors, which operates depending upon the
use of a full function and full feature set computer operating system of the type(s) then in widespread
use with hardware to operate general purpose laptop, desktop, server, and large format tablet
microprocessor based computers. This definition of Personal Computer shall exclude hardware
products that are designed and/or marketed to have as their primary purpose any number of the
following: television, television receiver, portable media player, audio/video receiver, radio, audio
headphone, audio speaker, personal digital assistant (“PDA”), telephone or similar telephony based
device, game console, personal video recorder (“PVR”), player for digital versatile disc (“DVD”) or other
optical media, video camera, still camera, camcorder, video editing and format conversion device, video
image projection device, and shall further exclude any similar type of consumer, professional or
industrial device.

“Software” means (a) all of the contents of the files (delivered electronically or on physical media), or
disk(s) or other media with which this agreement is provided, which may include (i) Adobe or third
party computer information or software, including Adobe Reader® (“Adobe Reader”), Adobe® AIR®
(“Adobe AIR”), Adobe Flash® Player, Shockwave® Player and Authorware® Player (collectively, Adobe AIR
and the Flash, Shockwave and Authorware players are the “Adobe Runtimes”); (ii) related explanatory
written materials or files (“Documentation”); and (iii) fonts; and (b) upgrades, modified versions,
updates, additions, and copies of the foregoing, provided to you by Adobe at any time (collectively,
“Updates”).

“Use” means to access, install, download, copy, or otherwise benefit from using the functionality of the
Software.

3. 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, including the restrictions in Section 4, Adobe grants to
you a non-exclusive license to Use the Software in the manner and for the purposes described in the
Documentation as follows:

3.1 General Use. You may install and Use one copy of the Software on your Compatible Computer. See
Section 4 for important restrictions on the Use of the Software.

3.2 Server Use. This agreement does not permit you to install or Use the Software on a computer file
server. For information on Use of Software on a computer file server please refer to
http://www.adobe.com/go/acrobat_distribute for information about Adobe Reader; or
http://www.adobe.com/go/licensing for information about the Adobe Runtimes.

3.3 Distribution. This license does not grant you the right to sublicense or distribute the Software. For
information about obtaining the right to distribute the Software on tangible media or through an
internal network or with your product or service please refer to
http://www.adobe.com/go/acrobat_distribute for information about Adobe Reader; or
http://www.adobe.com/go/licensing for information about the Adobe Runtimes.

3.4 Backup Copy. You may make one backup copy of the Software, provided your backup copy is not
installed or used other than for archival purposes. You may not transfer the rights to a backup copy
unless you transfer all rights in the Software as provided under Section 5.

4. Obligations and Restrictions.

4.1 Adobe Runtime Restrictions. You will not Use any Adobe Runtime 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 an Adobe Runtime on any (a) mobile device, set top box (STB), handheld, phone,
game console, TV, DVD player, media center (other than with Windows XP Media Center Edition and its
successors), electronic billboard or other digital signage, Internet appliance or other Internet-connected
device, PDA, medical device, ATM, telematic device, gaming machine, home automation system, kiosk,
remote control device, or any other consumer electronics device, (b) operator-based mobile, cable,
satellite, or television system or (c) other closed system device. No right or license to Use any Adobe
Runtime is granted for such prohibited uses. For information on Software license terms for non-PC
versions of Adobe Runtimes please visit http://www.adobe.com/go/runtime_mobile_EULA. For
information on licensing Adobe Runtimes for distribution on such systems please visit
http://www.adobe.com/go/licensing.

4.1.1 AVC Video Restrictions. The Software may contain H.264/AVC video technology, the use of which
requires the following notice from MPEG-LA, L.L.C.:
THIS SOFTWARE IS LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR THE PERSONAL
AND NON-COMMERCIAL USE OF A CONSUMER TO (I) ENCODE VIDEO IN COMPLIANCE WITH THE
AVC STANDARD (“AVC VIDEO”) AND/OR (II) DECODE AVC VIDEO THAT WAS ENCODED BY A
CONSUMER ENGAGED IN A PERSONAL AND NON-COMMERCIAL ACTIVITY AND/OR WAS OBTAINED
FROM A VIDEO PROVIDER LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR SHALL
BE IMPLIED FOR ANY OTHER USE. ADDITIONAL INFORMATION MAY BE OBTAINED FROM MPEG LA,
L.L.C. SEE http://www.adobe.com/go/mpegla.

4.1.2 H.264/AVC Software Encoding. The H.264/AVC software encoding functionality available in the
Adobe Runtimes is licensed solely for personal, non-commercial use. For more information on
obtaining the right to use the H.264/AVC software encoding functionality for commercial purposes,
please refer to http://www.adobe.com/go/licensing.

4.2 Adobe Flash Player Restrictions. You will not use Adobe Flash Player with any application or device
that circumvents technological measures for the protection of video, audio, and/or data content,
including any of Adobe’s secure RTMP measures. No right or license to use Adobe Flash Player is
granted for such prohibited uses.

4.3 Adobe Reader Restrictions.

4.3.1 Conversion Restrictions. You will not integrate or use Adobe Reader with any other software, plug-
in or enhancement that uses or relies upon Adobe Reader when converting or transforming PDF files
into a different format (e.g., a PDF file into a TIFF, JPEG, or SVG file).

4.3.2 Plug-in Restrictions. You will not integrate or use Adobe Reader with any plug-in software not
developed in accordance with the Adobe Integration Key License Agreement, more information can be
found at http://www.adobe.com/go/rikla_program.

4.3.3 Disabled Features. Adobe Reader may contain features or functionalities that are hidden or appear
disabled or “grayed out” (the “Disabled Features”). Disabled Features will activate only when opening a
PDF document that was created using enabling technology available only from Adobe. You will not
access, or attempt to access, any Disabled Features other than through the use of such enabling
technologies, nor will you rely on Adobe Reader to create a feature substantially similar to any Disabled
Feature or otherwise circumvent the technology that controls activation of any such feature. For more
information on disabled features, please refer to http://www.adobe.com/go/readerextensions.

4.4 Notices. You shall not alter or remove any copyright or other proprietary notice that appears on or
in the Software.

4.5 No Modification or Reverse Engineering. You shall not modify, adapt, translate, or create derivative
works based upon the Software. You shall not reverse engineer, decompile, disassemble, or otherwise
attempt to discover the source code of the Software. If you are located in the European Union, please
refer to the additional terms at the end of this agreement under the header “European Union
Provisions,” in Section 16.

5. 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 by this agreement. 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 obtained a valid license to the Software.
Notwithstanding the foregoing, you may not transfer education, pre-release, or not for resale copies of
the Software.

6. Intellectual Property Ownership, Reservation of Rights.

The Software and any authorized copies that you make are the intellectual property of Adobe and its
suppliers. The structure, organization, and code of the Software are the valuable intellectually property
(e.g. trade secrets and confidential information) of Adobe 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.

7. Connectivity and Privacy. You acknowledge and agree to the following:

7.1 Use of PDF Files. When you Use the Software to open a PDF file that has been enabled to display
ads, your Computer may connect to a website operated by Adobe, an advertiser, or other third party.
Your Internet Protocol address (“IP Address”) is sent when this happens. The party hosting the site may
use technology to send (or “serve”) advertising or other electronic content that appears in or near the
opened PDF file. The website operator may also use JavaScript, web beacons (also known as action tags
or single-pixel gifs), and other technologies to increase and measure the effectiveness of advertisements
and to personalize advertising content. Your communication with Adobe websites is governed by the
Adobe Online Privacy Policy found at http://www.adobe.com/go/privacy (“Adobe Online Privacy
Policy”). Adobe may not have access to or control over features that a third party may use, and the
information practices of third party websites are not covered by the Adobe Online Privacy Policy.

7.2 Updating. If your Computer is connected to the Internet, the Software may, without additional
notice, check for Updates that are available for automatic download and installation to your Computer
and let Adobe know the Software is successfully installed. For Reader, Updates may be automatically
downloaded but not installed without additional notice unless you change your preferences to accept
automatic installation. Only non-personally identifying information is transmitted to Adobe when this
happens, except to the extent that IP Addresses may be considered personally identifiable in some
jurisdictions. The use of such information, including your IP Address, as provided by the auto update
process is governed by the Adobe Online Privacy Policy. Please consult the Documentation for
information about changing default update settings at http://www.adobe.com/go/settingsmanager for
Flash Player, http://www.adobe.com/go/update_details_url (or successor website) for Reader, and
http://www.adobe.com/go/air_update_details for Adobe AIR.

7.3 Local Storage. Flash Player and Adobe AIR may allow third parties to store certain information on
your Computer in a local data file known as a local shared object. The type and amount of information
that the third party application requests to be stored in a local shared object can vary by application and
such requests are controlled by the third party. To find more information on local shared objects and
learn how to limit or control the storage of local shared objects on your Computer, please visit
http://www.adobe.com/go/flashplayer_security.

7.4 Settings Manager. Flash Player and third-party programs using Adobe AIR may save certain user
settings by storing them on your Computer as a local shared object. These settings do not contain
personally identifiable information associated with you. They are associated with the instance of Flash
Player or the third-party program using Adobe AIR on your Computer, allowing you to customize
runtime features. The Flash Player Settings Manager permits you to modify such settings, including the
ability to limit third parties from storing local shared objects or grant third party content the right to
access your computer’s microphone and camera. You can find more information on how to configure
settings in your version of Flash Player, including information on how to disable local shared objects
using the Flash Player Settings Manager, at http://www.adobe.com/go/settingsmanager. You can
remove equivalent settings for third-party programs using Adobe AIR by uninstalling the third-party
program.

7.5 Peer Assisted Networking Technology. Adobe Flash Player and Adobe AIR runtimes provide the
ability for applications built by third parties to connect to an Adobe Server or Service and permit direct
communication between two Adobe Runtime clients or to connect an Adobe Runtime client as part of a
peer or distributed network that allows a portion of your resources, such as network bandwidth, to be
made directly available to other participants. Prior to joining such peer or distributed network, you will
be provided with the opportunity to accept such connectivity. You can manage Peer Assisted
Networking settings using the Flash Player Settings Manager. Learn more about using the Settings
Manager at http://www.adobe.com/go/settingsmanager. You can find more information on Peer
Assisted Networking at http://www.adobe.com/go/RTMFP.

7.6 Content Protection Technology. If you Use the Adobe Runtimes to access content that has been
protected with Adobe Flash Media Rights Management Server or Flash Access software (“Content
Protection”), in order to let you play the protected content, the Software may automatically request
media usage rights and individualization from a server on the Internet, and may download and install
required components of the Software, including any available Content Protection Updates. You can
clear the content license information using the Flash Player Settings Manager. Learn more about using
the Settings Manager at http://www.adobe.com/go/settingsmanager. You can find more information on
Content Protection at http://www.adobe.com/go/protected_content.

7.7 Use of Adobe Online Services. If your Computer is connected to the Internet, the Software may,
without additional notice and on an intermittent or regular basis, facilitate your access to content and
services that are hosted on websites maintained by Adobe or its affiliates (“Adobe Online Services”).
Examples of such Adobe Online Services might include, but are not limited to: Acrobat.com. In some
cases an Adobe Online Service might appear as a feature or extension within the Software even though
it is hosted on a website. In some cases, access to an Adobe Online Service might require a separate
subscription or other fee in order to access it, and/or your assent to additional terms of use. Adobe
Online Services might not be available in all languages or to residents of all countries and Adobe may, at
any time and for any reason, modify or discontinue the availability of any Adobe Online Service. Adobe
also reserves the right to begin charging a fee for access to or use of an Adobe Online Service that was
previously offered at no charge. If your Computer is connected to the Internet, the Software may,
without additional notice, update downloadable materials from these Adobe Online Services so as to
provide immediate availability of these Adobe Online Services even when you are offline. When the
Software connects to the Internet as a function of an Adobe Online Service, your IP Address, user name,
and password may be sent to Adobe’s servers and stored by Adobe in accordance with the Additional
Terms of Use or the “help” menu in the Software. This information may be used by Adobe to send you
transactional messages to facilitate the Adobe Online Service. Adobe may display in-product marketing
to provide information about the Software and other Adobe products and Services, including but not
limited to Adobe Online Services, based on certain Software specific features including but not limited
to, the version of the Software, including without limitation, platform version, version of the Software,
and language. For further information about in-product marketing, please see the “help” menu in the
Software. Whenever the Software makes an Internet connection and communicates with an Adobe
website, whether automatically or due to explicit user request, the Adobe Online Privacy Policy shall
apply. Additionally, unless you are provided with separate terms of use at that time, the Adobe.com
Terms of Use (http://www.adobe.com/go/terms) shall apply. Please note that the Adobe Privacy Policy
allows tracking of website visits and it addresses in detail the topic of tracking and use of cookies, web
beacons, and similar devices.

8. Third Party Offerings. You acknowledge and agree to the following:

8.1 Third Party Offerings. The Software may allow you to access and interoperate with third party
content, software applications, and data services, including rich Internet applications (“Third Party
Offerings”). Your access to and use of any Third Party Offering, including any goods, services, or
information, is governed by the terms and conditions respecting such offerings and copyright laws of the
United States and other countries. Third Party Offerings are not owned or provided by Adobe. You agree
that you will not use any of such Third Party Offerings in violation of copyright laws of the United States
or other countries. Adobe or the third party may at any time, for any reason, modify or discontinue the
availability of any Third Party Offerings. Adobe does not control, endorse, or accept responsibility for
Third Party Offerings. Any dealings between you and any third party in connection with a Third Party
Offerings, including such party’s privacy policies and use of your personal information, delivery of and
payment for goods and services, and any other terms, conditions, warranties, or representations
associated with such dealings, are solely between you and such third party. Third Party Offerings might
not be available in all languages or to residents of all countries and Adobe or the third party may, at any
time and for any reason, modify or discontinue the availability of any Third Party Offerings.

8.2 EXCEPT AS EXPRESSLY AGREED BY ADOBE OR ITS AFFILIATES OR A THIRD PARTY IN A SEPARATE
AGREEMENT, YOUR USE OF ADOBE AND THIRD PARTY OFFERINGS IS AT YOUR OWN RISK UNDER
THE WARRANTY AND LIABILITY LIMITATIONS OF SECTIONS 1.1 AND 10.

9. Digital Certificates. You acknowledge and agree to the following:

9.1 Use. Adobe AIR uses digital certificates to help you identify the publisher of Adobe AIR applications
created by third parties. Additionally, Adobe AIR uses digital certificates to establish the identity of
servers accessed via the Transport Layer Security (TLS) protocol, including access via HTTPS. Adobe
Reader uses digital certificates to sign and validate signatures within PDF documents and to validate
certified PDF documents. Adobe Runtimes use digital certificates to secure protected content from
unauthorized usage. Your Computer may connect to the Internet at the time of validation of a digital
certificate in order to download current certificate revocation lists (CRLs) or to update the list of digital
certificates. This access may be made both by the Software and by applications based on the Software.
Digital certificates are issued by third party certificate authorities, including Adobe Certified Document
Services (CDS) vendors listed at http://www.adobe.com/go/partners_cds and Adobe Approved Trust
List (AATL) vendors listed at http://www.adobe.com/go/aatl, and individualization vendors found at
http://www.adobe.com/go/protected_content (collectively “Certification Authorities”), or can be self-
signed.

9.2 Terms and Conditions. Purchase, use and reliance upon digital certificates are the responsibility of
you and a Certification Authority. Before you rely upon any certified document, digital signature, or
Certification Authority services, you should review the applicable terms and conditions under which the
relevant Certification Authority provides services, including, for example, any subscriber agreements,
relying party agreements, certificate policies, and practice statements. See the links on
http://www.adobe.com/go/partners_cds for information about Adobe’s CDS vendors and
http://www.adobe.com/go/aatl for information about Adobe’s AATL vendors.

9.3 Acknowledgement. You agree that (a) a digital certificate may have been revoked prior to the time
of verification, making the digital signature or certificate appear valid when in fact it is not, (b) the
security or integrity of a digital certificate may be compromised due to an act or omission by the signer
of the document, the applicable Certification Authority, or any other third party, and (c) a certificate may
be a self-signed certificate not provided by a Certification Authority. YOU ARE SOLELY RESPONSIBLE
FOR DECIDING WHETHER OR NOT TO RELY ON A CERTIFICATE. UNLESS A SEPARATE WRITTEN
WARRANTY IS PROVIDED TO YOU BY A CERTIFICATION AUTHORITY, YOU USE DIGITAL
CERTIFICATES AT YOUR SOLE RISK.

9.4 Third Party Beneficiaries. You agree that any Certification Authority you rely upon is a third party
beneficiary of this agreement and shall have the right to enforce this agreement in its own name as if it
were Adobe.

9.5 Indemnity. You agree to hold Adobe and any applicable Certification Authority (except as expressly
provided in its terms and conditions) 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, by you or any third party that receives a document from you with a digital certificate,
any service of such authority, 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 terms and conditions, this agreement, or applicable law; (d) failure to exercise reasonable
judgment under the circumstances in relying on issuer services or certificates, or (e) failure to perform
any of the obligations as required in the terms and conditions related to the services.

10. Limitation of Liability.

IN NO EVENT WILL ADOBE, ITS SUPPLIERS, OR CERTIFICATION AUTHORITIES BE LIABLE TO YOU FOR
ANY DAMAGES, CLAIMS OR COSTS WHATSOEVER INCLUDING 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, OR CLAIMS.
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 AND
CERTIFICATION AUTHORITIES 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 and Certification Authorities 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.

11. 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, 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.

12. Governing Law.

If you are a consumer who uses the Software for only personal non-business purposes, then this
agreement will be governed by the laws of the state in which you purchased the license to use the
Software. If you are not such a consumer, this agreement will be governed by and construed in
accordance with the substantive laws in force in: (a) the State of California, if a license to the Software is
obtained when you are in the United States, Canada, or Mexico; or (b) Japan, if a license to the Software
is obtained when you are in Japan; or (c) Singapore, if a license to the Software is obtained when you
are in a member state of the Association of Southeast Asian Nations, the People’s Republic of China
(including Hong Kong S.A.R. and Macau S.A.R.), Taiwan, or the Republic of Korea; or (d) England, if a
license to the Software is obtained when you are in any 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 London, England, when the law of England applies,
shall each have non-exclusive jurisdiction over all disputes relating to this agreement. When Singapore
law applies, any dispute arising out of or in connection with this agreement, including any question
regarding its existence, validity, or termination, shall be referred to and finally resolved by arbitration in
Singapore in accordance with the Arbitration Rules of the Singapore International Arbitration Centre
(“SIAC”) for the time being in force, which rules are deemed to be incorporated by reference in this
section. There shall be one arbitrator, selected jointly by the parties. If the arbitrator is not selected
within thirty (30) days of the written demand by a party to submit to arbitration, the Chairman of the
SIAC shall make the selection. The language of the arbitration shall be English. Notwithstanding any
provision in this agreement, Adobe or you may request any judicial, administrative, or other authority to
order any provisional or conservatory measure, including injunctive relief, specific performance, or other
equitable relief, prior to the institution of legal or arbitration proceedings, or during the proceedings, for
the preservation of its rights and interests or to enforce specific terms that are suitable for provisional
remedies. The English version of this agreement will be the version used when interpreting or
construing 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.

13. 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.

14. Notice to U.S. Government End Users.

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.

15. 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.

16. European Union Provisions.

Nothing included in this agreement (including Section 4.5) shall limit any non-waivable right to
decompile the Software that you may enjoy under mandatory law. For example, if you are located in the
European Union (EU), you may have the right upon certain conditions specified in the applicable law to
decompile the Software if it is necessary to do so in order to achieve interoperability of the Software
with another software program, and you have first asked Adobe in writing to provide the information
necessary to achieve such interoperability and Adobe has not made such information available. In
addition, such decompilation may only be done by you or someone else entitled to use a copy of the
Software on your behalf. Adobe has the right to impose reasonable conditions before providing such
information. Any information supplied by Adobe or obtained by you, as permitted hereunder, 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 or used for any other
act which infringes Adobe or its licensors’ copyright.

17. Specific Provisions and Exceptions.

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

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

17.1.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.

17.1.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.

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
http://www.adobe.com to contact the Adobe office serving your jurisdiction.

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

PlatformClients_PC_WWEULA-en_US-20110809_1357
