INTEL MOBILE COMPUTING PLATFORM SOFTWARE
LIMITED LICENSE AGREEMENT

(OEM / ODM / IHV / ISV Distribution & End User)

IMPORTANT -- PLEASE READ BEFORE DOWNLOADING, INSTALLING OR USING

DO NOT download, install, access, copy, or otherwise use the Software (as
defined below), in whole or in part,  until you have carefully read and unless
you accept the following terms and conditions.  By downloading, installing,
copying, accessing, or otherwise using the Software, you or your employer or
other entity for whose benefit you act ("Licensee") agrees to be legally bound
by the terms and conditions of this Agreement (as defined below), including any
Exhibits hereto. If Licensee does not agree to these terms and conditions,
please do not continue to download, install, copy, access or otherwise use the
Software, and destroy any copies of the Software already downloaded.

Please Also Note:
  * The license rights granted under this Agreement are limited to the Software
    provided, or otherwise made available, to Licensee through a web portal or
    otherwise, for use in or with an associated Intel-based Device for which the
    Software was designed.  This Agreement and the licenses granted hereunder
    are not intended to and do not extend or expand the scope of any other
    license or right in or to any other Intel hardware or Intel software that
    Licensee may have or receive, even if such other Intel hardware or Intel
    software is used in or with the Intel-based Device associated with the
    Software licensed hereunder.
  * Notwithstanding anything to the contrary herein, Licensee acknowledges that
    Intel is not obligated to provide a current or prospective licensee with any
    Software, or to provide any update or upgrade to any Software previously
    provided.
  * NOTE that certain third party software provided with or within the Software
    may only be used (a) upon securing a commercial license directly from the
    owner of the software, or (b) in combination with silicon purchased from
    such third party.  A listing of any such third party limitations is
    provided in one or more text files accompanying the Software.

PREAMBLE. This Intel Mobile Computing Platform Software Limited License
Agreement (the "Agreement") is offered by Intel Corporation ("Intel") to
Licensee contingent upon and subject to Licensee's acceptance of and adherence
to the terms and conditions of this Agreement and any amendment, exhibit or
addendum thereto.  By merely downloading, installing, accessing, copying or
otherwise using the Software, Licensee agrees to be legally bound by the terms
and conditions of this Agreement.  Should you have any questions, concerns or
otherwise do not wish to be legally bound by this Agreement, you must not
download, install, access, copy or otherwise use the Software.

Accordingly, for good and valuable consideration the sufficiency of which is
acknowledged by the parties, and intending to be legally bound, the parties
agree to the following terms, conditions and limitations:

DEFINITIONS.  The following definitions are used throughout this Agreement:
"Android" means the open source software stack developed by Google and members
of the Open Handset Alliance and other third parties, as may be distributed by
Google and/or the Open Handset Alliance from time to time.

"Authorized Derivative" means a derivative work of any Source Code provided or
otherwise made available by Intel under this Agreement, or any addition,
deletion or other modification to any such Source Code, within the scope of 17
U.S.C. Section 101 and that is approved by Intel prior to creating any such
derivative work or performing any such addition, deletion or other
modification.

"Binary Code" means the executable, binary code derived from Source Code or an
Authorized Derivative.

"End User" means a purchaser, recipient or any other user of Licensee's
Intel-based Device who does not resell the device.

"Intel-based Device" means a mobile computing device such as, for example, a
smartphone, tablet or wearable that includes: (a) one or more Intel(R) Atom(TM)
processor(s) as the primary application processor(s) for the device; and (b) if
the device contains or is designed to execute Android, for each applicable
version of the Android platform, the device (i) complies with the Android
Compatibility Definition Document, which can be found at the Android
compatibility website (http://source.android.com/compatibility) and which may
be updated from time to time, and (ii) successfully passes the Android
Compatibility Test Suite (CTS).

"Licensed Patent Claims" means the claims of Intel's patents that are
necessarily and directly infringed by the reproduction and distribution of the
Software that is authorized in the Limited License, when that Software is in
its unmodified form as delivered by Intel to Licensee and not modified or
combined with anything else.  Licensed Patent Claims are only those claims that
Intel can license without paying, or getting the consent of, a third party.

"Open Source Software" means any software that requires as a condition of use,
modification and/or distribution of such software that such software or other
software incorporated into, derived from or distributed with such software: (a)
be disclosed or distributed in Source Code form; (b) be licensed for the
purpose of making derivative works; or (c) be redistributable at no charge.
Open Source Software includes, without limitation, software licensed or
distributed under any of the following licenses or distribution models, or
licenses or distribution models similar to any of the following: (i) GNU's
General Public License (GPL) or Lesser/Library GPL (LGPL); (ii) the Artistic
License (e.g., PERL); (iii) the Mozilla Public License; (iv) the Netscape
Public License; (v) the Sun Community Source License (SCSL); (vi) the Sun
Industry Source License (SISL); (vii) the Apache Software license; and (viii)
the Common Public License (CPL).  The Open Source Software components
associated with the Software and their corresponding license terms may be found
in one or more of: (A) text files associated with the Software; (B) within the
Source Code of the Software; or (C) within the Source Code of the Open Source
Software that is provided with the Software.

"Software" means any computer programing code, in Binary Code or Source Code as
may be provided or otherwise made available by Intel to Licensee, and any
updated or improved version of the programming code that Intel provides under
this Agreement, if any, but does not include Open Source Software or any
computer programming code that is subject to an agreement, obligation or
license (whether or not accompanying the computer programming code) intended to
supersede this Agreement.

"Source Code" means a form in which computer programming code logic is easily
deduced by a human being with skill in the art, such as a printed listing of
the computer programming code or a form from which a printed listing can be
recognized.

LIMITED LICENSE. Subject to the terms and conditions of this Agreement, Intel
grants to Licensee a limited, nonexclusive, nontransferable, revocable,
worldwide, fully paid-up license during the term of this Agreement, without the
right to sublicense:
  (A) under Intel's copyrights and (subject to the third party licensing
      requirements reflected herein, if any) Intel's suppliers' copyrights, to:
    (1) internally reproduce and modify Source Code of the Software if provided
        or otherwise made available by Intel to Licensee to internally create
        and internally reproduce Authorized Derivative(s), and internally
        reproduce Binary Code of the Software, in each case only for Licensee's
        own internal evaluation, testing and development of Intel-based Devices
        and any associated maintenance thereof;
    (2) reproduce and publicly perform a Binary Code representation of the
        Software provided or otherwise made available by Intel to Licensee, or
        any Authorized Derivative, only when integrated with and executed by an
        Intel-based Device, subject to the third party licensing requirements
        reflected herein, if any;
    (3) distribute a Binary Code representation of the Software provided or
        otherwise made available by Intel to Licensee, or any Authorized
        Derivative, in combination with and solely for execution by an
        Intel-based Device subject to the third party licensing requirements
        reflected herein, if any, and if to an End User, pursuant to a license
        agreement with terms and conditions at least as restrictive as those
        contained in the Intel End User Software License Agreement attached as
        Exhibit A; and
    (4) modify, reproduce and distribute any end-user documentation that may
        accompany the Software and that is not subject to obligations of
        confidentiality, but only in association with the Software.
  (B) under Intel's Licensed Patent Claims to the Software in the form provided
      by Intel, to:
    (1) reproduce the Software internally only;
    (2) use the Software internally only;
    (3) offer to distribute, and distribute, but not sell, the Software under
        the license under Intel's copyrights granted in Section (A) above, but
        only under the terms and conditions of that license under Intel's
        copyrights and not as a sale;
      (a) provided, however, that Licensee may only distribute the Software
          under an agreement having terms and conditions at least as
          restrictive as those contained in Intel's End User Software License
          Agreement attached as Exhibit A, and only for use in or with
          Intel-based Devices; and
      (b) provided, further, that the license under the Licensed Patent Claims
          does not and will not apply to any modifications to, or derivative
          works (including without limitation Authorized Derivatives) of, the
          Software, whether made by or on behalf of Licensee, any of Licensee's
          customers (which, for all purposes under this Agreement, will mean
          either a customer or a distributor), or any other third party even if
          the modifications and derivative works are permitted under Section
          (A)(1) above.

LICENSE LIMITATIONS.
  (A) All right, title and interest in and to the Software and associated
      documentation are and will remain the exclusive property of Intel and its
      suppliers, as applicable.  Unless expressly permitted under the Limited
      License, above, Licensee will not, and will not allow any third party to:
    (1) use, copy or distribute the Software or associated documentation;
    (2) modify, adapt, enhance, disassemble, decompile, reverse engineer, change
        or create derivative works from the Software; or
    (3) use or make the Software available for the use or benefit of third
        parties.
  (B) The consideration under this Agreement is only for the licenses that
      Intel expressly grants above.  Any other rights including, but not
      limited to, additional patent rights, will require an additional license
      and additional consideration.  Nothing in this Agreement requires or will
      be treated to require Intel to grant any additional license.  Licensee
      acknowledges that an essential basis of the bargain in this Agreement is
      that Intel grants Licensee no licenses or other rights including, but not
      limited to, patent, copyright, trade secret, trademark, trade name,
      service mark or other intellectual property licenses or rights with
      respect to the Software and associated documentation, by implication,
      estoppel or otherwise, except for the licenses expressly granted above.
      Specifically, except for the licenses that Intel expressly grants above,
      Intel grants no licenses or other rights, expressly or by implication,
      estoppel or otherwise, to:
    (1) make, use, sell, offer for sale, or import modifications or derivative
        works of the Software;
    (2) sell or offer to sell the Software;
    (3) combine the Software or modified versions or derivative works of the
        Software with other items or to use any such combination; or
    (4)	any claims of any patents, patent applications, or other patent rights
        of Intel other than the Licensed Patent Claims.
  (C) Licensee acknowledges that there are significant uses of the Software in
      its original, unmodified and uncombined form.  The consideration for the
      licenses in this Agreement reflects Intel's continuing right to assert
      patent claims against any modifications or derivative works (including,
      without limitation, error corrections and bug fixes) of, or combinations
      with, the Software that Licensee or third parties make that infringe any
      Intel patent claim.
  (D) Except as expressly permitted under the license grant above, Licensee
      will not allow the Software or associated documentation to be accessed or
      used by third parties. Notwithstanding the foregoing, Licensee's
      authorized consultants and subcontractors may access the Software and
      associated documentation where the access is necessary to their
      performing services on Licensee's behalf consistent with the licenses
      granted to Licensee under this Agreement, provided:
    (1) Licensee first requires those consultants and subcontractors to sign
        written agreements obligating them to observe the same restrictions
        concerning the Software and associated documentation as are contained
        in this Agreement; and
    (2) Licensee remains fully liable to Intel for the actions and inactions of
        those consultants and subcontractors.

LICENSE TO FEEDBACK AND MODIFICATIONS.  To ensure Intel's freedom to operate
and to continue to develop the Software licensed hereunder, Licensee agrees to
grant and does hereby grant to Intel and its affiliates a non-exclusive,
perpetual, irrevocable, worldwide, royalty-free, fully paid-up and transferable
license, with the right of sublicense, to and under any copyrights, trade
secrets, patents and any other Licensee intellectual property rights, whether
perfected or not, to publicly perform, publically display, reproduce, use,
make, have made, sell, offer for sale, distribute, import, create derivative
works of and otherwise exploit: (a) any comments, suggestions, descriptions,
ideas or any other feedback provided by or on behalf of Licensee on Intel
Software; and (b) to any derivative works, including Authorized Derivatives,
created from or otherwise including the Software.

NO OTHER RIGHTS.  Except as otherwise expressly provided above, Intel grants no
express or implied rights under Intel patents, copyrights, trade secrets,
trademarks, or other intellectual property rights. Except as expressly stated
in this Agreement, no license or right is granted to Licensee directly or by
implication, inducement, estoppel or otherwise. Intel has the right to inspect
or have an independent auditor inspect Licensee's relevant records to verify
Licensee's compliance with the terms and conditions of this Agreement.

OPEN SOURCE STATEMENT.  The Software includes Open Source Software that is
licensed pursuant to the applicable Open Source Software license agreement(s)
identified in the Open Source Software comments in the applicable source code
file(s) and/or file header(s) provided with or otherwise associated with the
Software.  Additional detail may be provided (where applicable) in the
accompanying on-line documentation, or within the user interface of the device,
if any. With respect to Open Source Software, nothing in this Agreement limits
any rights under, or grants rights that supersede, the terms of any applicable
Open Source Software license agreement.  Neither Licensee nor any OEM, ODM,
customer, or distributor, shall subject the Software or associated
documentation, in whole or in part, to any license obligations associated with
Open Source Software including combining or distributing the Software and/or
documentation with Open Source Software in a manner that subjects Intel or any
portion of the Software to any license obligations of such Open Source
Software.

MICROSOFT SOFTWARE.  The Software may contain certain software or codec
technology that is owned and exclusively licensed for commercial use and
distribution by Microsoft Corporation.  This Microsoft software or codec
technology, if provided within or for use with the Software, may not be used or
further distributed without a license from Microsoft Corporation or a Microsoft
Corporation affiliate.

CONFIDENTIALITY.  If Licensee would like to have a third party consultant or
subcontractor ("Contractor") perform work on Licensee's behalf that involves
access to or use of Software, Licensee shall obtain a written confidentiality
agreement from the Contractor which contains terms and conditions with respect
to access to or use of Software no less restrictive than those set forth in
this Agreement and excluding any distribution rights and use for any other
purpose, and Licensee will remain fully liable to Intel for the actions and
inactions of those Contractors. Otherwise, Licensee must not disclose the terms
or existence of this Agreement, and must not use Intel's name in any
publications, advertisements, or other announcements without Intel's prior
written consent. Licensee does not have any right to use any Intel trademarks
or logos.

OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Title to all copies of the Software
remains with Intel or its suppliers, as applicable. The Software is copyrighted
and protected by the laws of the United States and other countries, and
international treaty provisions. Licensee may not remove any copyright notices
from the Software.

SUPPORT. Intel may make changes to the Software, or to items referenced
therein, at any time without notice, but is not obligated to support, update or
provide training for the Software. Intel may in its sole discretion offer such
services under separate terms at Intel's then-current rates. Licensee may
request additional information on Intel's service offerings from an Intel sales
representative. Licensee agrees to be solely responsible to Licensee's End
Users for any update or support obligation or other liability which may arise
from the distribution of the Software.

EXCLUSION OF WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY EXPRESS
OR IMPLIED WARRANTY OF ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY,
NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Intel does not warrant or
assume responsibility for the accuracy or completeness of any information,
text, graphics, links or other items contained within the Software.

LIMITATION OF LIABILITY. IN NO EVENT WILL INTEL OR ITS AFFILIATES OR SUPPLIERS
(INCLUDING THEIR RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AND AGENTS) BE
LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS,
BUSINESS INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF OR IN RELATION TO
THIS AGREEMENT, INCUDING THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF
INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS
PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES OR
CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE LIMITATION MAY IN PART NOT
APPLY TO LICENSEE. LICENSEE MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY FROM
JURISDICTION TO JURISDICTION. THE SOFTWARE LICENSED HEREUNDER IS NOT DESIGNED
OR INTENDED FOR USE IN ANY MEDICAL, LIFE SAVING OR LIFE SUSTAINING SYSTEMS,
TRANSPORTATION SYSTEMS, NUCLEAR SYSTEMS, OR FOR ANY OTHER MISSION CRITICAL
APPLICATION IN WHICH THE FAILURE OF THE SOFTWARE COULD LEAD TO PERSONAL INJURY
OR DEATH. LICENSEE WILL INDEMNIFY AND HOLD INTEL AND ITS AFFILIATES AND
SUPPLIERS (INCLUDING THEIR RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AND
AGENTS) HARMLESS AGAINST ALL CLAIMS, LIABILITIES, LOSSES, COSTS, DAMAGES, AND
EXPENSES (INCLUDING REASONABLE ATTORNEY FEES), ARISING OUT OF, DIRECTLY OR
INDIRECTLY, THE DISTRIBUTION OF THE SOFTWARE AND ANY CLAIM OF PRODUCT
LIABILITY, PERSONAL INJURY OR DEATH ASSOCIATED WITH ANY UNINTENDED USE, EVEN IF
SUCH CLAIM ALLEGES THAT INTEL OR AN INTEL AFFILIATE OR SUPPLIER WAS NEGLIGENT
REGARDING THE DESIGN OR MANUFACTURE OF THE SOFTWARE. THE LIMITED REMEDIES,
WARRANTY DISCLAIMER AND LIMITED LIABILITY ARE FUNDAMENTAL ELEMENTS OF THE BASIS
OF THE BARGAIN BETWEEN INTEL AND LICENSEE. AND INTEL WOULD NOT BE ABLE TO
PROVIDE THE SOFTWARE WITHOUT SUCH LIMITATIONS.

INDEMNIFICATION.  Licensee represents and warrants that it is and will remain
in compliance with the terms and conditions of use associated with
commercialization of Google Android or the Google mobile applications
including, for example, certification of the Intel-based Device pursuant to the
Google Compatibility Test Suite (CTS).  Licensee will settle, hold harmless
and, at its election, defend, any third party claim, suit or proceeding that
may be brought against Intel or its affiliates or suppliers (including their
respective employees, agents, officers and directors) based on an allegation
arising out of Licensee's failure to adhere to the terms and conditions of use
associated with commercialization of Google Android and the Google mobile
applications.  Licensee will pay any and all damages and costs finally awarded
against Intel or its affiliates or suppliers by a court of competent
jurisdiction for such third party claim, provided that: (i) Intel notifies
Licensee promptly in writing of the claim; and (ii) if Licensee elects to
defend, Licensee may control and conduct the defense and settlement of the
claim, subject to Intel's approval of any defense strategy and settlement.
Licensee will not be responsible for any costs, expenses or compromise incurred
or made by Intel without Licensee's prior written consent.

TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement immediately,
upon notice from Intel, if Licensee violates any of its terms or conditions.
Upon termination, Licensee will immediately destroy the Software (including
providing certification of such destruction back to Intel) or return all copies
of the Software to Intel. In the event of termination of this Agreement, all
licenses granted to Licensee hereunder shall immediately terminate.

APPLICABLE LAWS. All matters arising out of or related to this Agreement,
including without limitation all matters connected with its performance, shall
be construed, interpreted, applied and governed in all respects in accordance
with the laws of the United States of America and the State of Delaware,
without reference to conflict of laws principles.  All disputes and litigation
arising out of or related to this Agreement, including without limitation
matters connected with its performance, shall be subject to the exclusive
jurisdiction of the courts of the State of Delaware or of the Federal courts
sitting therein. Each party hereby irrevocably submits to the personal
jurisdiction of such courts and irrevocably waives all objections to such
venue. The parties agree that the United Nations Convention on Contracts for
the International Sale of Goods is specifically excluded from application to
this Agreement.

EXPORT REGULATIONS/EXPORT CONTROL. Licensee shall not export, either directly
or indirectly, any product, service or technical data or system incorporating
such items without first obtaining any required license or other approval from
the U. S. Department of Commerce or any other agency or department of the
United States Government. In the event any product is exported from the United
States or re-exported from a foreign destination by Licensee, Licensee shall
ensure that the distribution and export/re-export or import of the product is
in compliance with all laws, regulations, orders, or other restrictions of the
U.S. Export Administration Regulations and the appropriate foreign government.
Licensee agrees that neither Licensee nor any Licensee subsidiaries will
export/re-export any technical data, process, product, or service, directly or
indirectly, to any country for which the United States government or any agency
thereof or the foreign government from where it is shipping requires an export
license, or other governmental approval, without first obtaining such license
or approval.

GOVERNMENT RESTRICTED RIGHTS. The Software is a "commercial item" as that term
is defined in 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. Consistent with 48 C.F.R. 12.212 and 48 C.F.R 227.7202-1 through
227.7202-4, Licensee will provide the Software to the U.S. Government as an End
User only pursuant to the terms and conditions therein. Contractor or
Manufacturer is Intel Corporation, 2200 Mission College Blvd., Santa Clara, CA
95054.

ASSIGNMENT. Licensee may not delegate, assign or transfer this Agreement, the
license(s) granted or any of Licensee's rights or duties hereunder, expressly,
by implication, by operation of law, by way of merger (regardless of whether
Licensee is the surviving entity) or acquisition, or otherwise and any attempt
to do so, without Intel's express prior written consent, shall be null and
void. Intel may assign, delegate and transfer this Agreement, and its rights
and obligations hereunder, in its sole discretion.

ENTIRE AGREEMENT. The terms and conditions of this Agreement constitute the
entire agreement between the parties with respect to the subject matter hereof,
and merge and supersede all prior, contemporaneous agreements, understandings,
negotiations and discussions. Neither of the parties hereto shall be bound by
any terms, conditions, definitions, warranties, understandings or
representations with respect to the subject matter hereof other than as
expressly provided for herein. Intel is not obligated under any other
agreements unless they are in writing and signed by an authorized
representative of Intel. Without limiting the foregoing, terms and conditions
on any purchase orders or similar materials submitted by Licensee to Intel, and
any terms contained in Intel's standard acknowledgment form that are in
conflict with these terms, shall be of no force or effect.

ATTORNEY'S FEES. In the event any proceeding or lawsuit is brought by Intel or
Licensee in connection with this Agreement, the prevailing party in such
proceeding shall be entitled to receive its costs, expert witness fees and
reasonable attorneys' fees, including costs and fees on appeal.

RELATIONSHIP OF THE PARTIES -- NO AGENCY. Nothing contained herein shall be
construed as creating any agency, employment relationship, partnership,
principal-agent or other form of joint enterprise between the parties.

SEVERABILITY. In the event that any provision of this Agreement shall be
unenforceable or invalid under any applicable law or be so held by applicable
court decision, such unenforceability or invalidity shall not render this
Agreement unenforceable or invalid as a whole, and, in such event, such
provision shall be changed and interpreted so as to best accomplish the
objectives of such unenforceable or invalid provision within the limits of
applicable law or applicable court decisions.

WAIVER. The failure of either party to require performance by the other party
of any provision hereof shall not affect the full right to require such
performance at any time thereafter; nor shall the waiver by either party of a
breach of any provision hereof be taken or held to be a waiver of the provision
itself.

LANGUAGE. This Agreement is in the English language only, which language shall
be controlling in all respects, and all versions of this Agreement in any other
language shall be for accommodation only and shall not be binding on Licensee
or Intel. All communications and notices made or given pursuant to this
Agreement, and all documentation and support to be provided, unless otherwise
noted, shall be in the English language.

EXHIBIT A

INTEL END USER SOFTWARE LICENSE AGREEMENT

IMPORTANT -- READ BEFORE COPYING, INSTALLING OR USING.

THE FOLLOWING NOTICE MUST APPEAR IN THE DOCUMENTATION ASSOCIATED WITH THE
MOBILE COMPUTING PLATFORM INTO WHICH THE SOFTWARE IS INSTALLED.  MINIMALLY,
SUCH NOTICE MUST APPEAR IN THE USER GUIDE FOR THE DEVICE.

LIMITED COPYRIGHT LICENSE. This device may include copyrighted Intel and third
party software stored in semiconductor memories or other media.  Laws in the
United States and other countries preserve for Intel and such third party
software providers certain exclusive rights in their copyrighted software, such
as the exclusive rights to distribute or reproduce the copyrighted software.
Accordingly, any copyrighted software contained in this product may not be
modified, reverse-engineered, decompiled, analyzed, distributed,  reproduced or
otherwise used in any manner without the express, written consent of the
copyright owner.  The purchase of this product shall NOT be deemed to grant
either directly or indirectly, or by implication, estoppel, or otherwise, any
license under the copyrights, patents or patent applications, trademarks or
trademark applications, or other intellectual property rights of Intel or any
third party software provider, except for the normal, non-exclusive,
royalty-free license to use this device that arises by operation of law in the
sale of the product.  All other rights are expressly reserved.

DISCLAIMER & LIMITATION OF LIABILITY

All content and services accessible through this device belong to third parties
and may be protected by copyright, patents, trademarks and/or other
intellectual property laws. The content and services are provided solely for
your personal use and not for commercial use. Licensee may not use them without
the express, written permission of the content owner or the service provider.
Unless otherwise licensed to do so, you may not alter, copy, republish, upload,
post, transmit, translate, sell, create derivatives, distribute or exploit in
any manner or medium any content or services accessible through or displayed by
this device.

THE CONTENT AND SERVICES OF THIRD PARTIES ARE PROVIDED "AS IS". TO THE FULLEST
EXTENT PERMITTED BY LOCAL LAW, INTEL DOES NOT WARRANT THE CONTENT OR SERVICES
PROVIDED, EITHER EPRESSED OR IMPLIED, FOR ANY PURPOSE. INTEL EXPRESSLY
DISCLAIMS ANY IMPLIED WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. INTEL DOES NOT
GUARANTEE THE ACCURACY, VALIDITY, TIMELINESS, LEGALITY, OR COMPLETENESS OF THE
CONTENT OR SERVICES PROVIDED THROUGH THIS DEVICE AND UNDER NO CIRCUMSTANCES
SHALL INTEL BE LIABLE, WHETHER UNDER CONTRACT OR TORT OR UNDER ANY OTHER BASIS,
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING
FROM, OR IN CONNECTION WITH, THE INFORMATION CONTAINED IN, OR AS A RESULT OF
THE USE OF ANY CONTENT OR SERVICE BY YOU OR ANY THIRD PARTY, EVEN IF INTEL HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. TO THE EXTENT SOME
JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES OR THE
LIMITATION OF LEGAL RIGHTS OF THE CONSUMER, IT IS POSSIBLE THAT THESE
EXCLUSIONS AND LIMITATIONS MAY NOT APPLY IN SUCH JURISDICTIONS.

In addition to the foregoing, please note that the content or services of third
parties may be suspended or discontinued at any time, and Intel does not
guarantee that any content or service will remain available for any period of
time. The content and services are provided by others, and may utilize networks
and transmission equipment outside the control of Intel.  Without limiting the
generality of this section, Intel expressly disclaims any and all liability for
any interruption or suspension of the content or service provided through this
device.  Intel is not responsible for customer service related to the content
and services of third parties.  Any question or request for service on such
content or services must be addressed directly to the respective content and
service providers. Please note that downloading content without the permission
of the content owner may infringe the intellectual property rights of the
owner. Intel expressly disclaims any and all liability associated with the
downloading of content by the user including, for example, infringement of
third party intellectual property rights, or any damage done to the device or
other devices due to the download of malicious content using the device.
