-Maxim Integrated Products, Inc., 2020----------------------------------------------------------------------------------
The Software you have received is provided pursuant to these Software License Terms and Conditions ("Agreement"). By acc
epting this software, you are entering into, agreeing to, and consenting to be bound by all of the terms of this Agreeme
nt, which is between you and Maxim Integrated Products, Inc. on behalf of itself and its affiliates and subsidiaries (co
llectively, "Maxim"). This Agreement is effective as of the date that you received the software (the "Effective Date").
You represent and warrant that you are at least eighteen (18) years of age if you are a resident of the United States, o
r the age of majority in the jurisdiction of your residence. If you are accepting these terms on behalf of your employer
 ("Company"), you represent and warrant that you have full authority to bind the Company to these terms. You and, if app
licable, the Company may hereinafter be collectively referenced in this Agreement as the "Customer."
Recitals

A. Maxim, among other things, develops, manufactures, and sells semiconductor products and offers software consisting of
 certain software development tools, operating systems, driver software, firmware, and example application code. The pro
vided software contains software or features representative or illustrative of those that can be used with Maxim ICs and
 can be used for development of software application programs to operate with Maxim ICs or products containing Maxim ICs
.

B. Customer desires to license the software from Maxim, under the terms and conditions of this Agreement.

C. This Agreement permits Customer to license the software from Maxim or its distributors, representatives, or other par
tners who are duly authorized by Maxim to offer such licenses and sets forth the basic terms and conditions under which
the software will be delivered.

1. Definitions.

1.1. "Affiliate" means any entity under the Control of a party where "Control" means ownership of or the right to contro
l greater than 50% of the voting securities of such entity.

1.2. "Customer Program" means a software program designed to operate with Maxim ICs and developed by Customer using the
Software.

1.3. "Documentation" means all manuals, documentation, and other written materials that Maxim includes or otherwise prov
ides as related to the Software or Maxim ICs, whether in printed or electronic form, including without limitation, custo
mer reference and installation manuals, user's guides, and programmers guide.

1.4. "Executable Code" means software in a machine-readable and executable form which is not generally readable by human
s without reverse assembly, reverse compiling, or reverse engineering, but which can be combined in an unmodified form w
ith Source Code and which can be compiled to make a Customer Program.

1.5. "Maxim ICs" means integrated circuits that are separately purchased or obtained by Customer directly from Maxim or
indirectly from Maxim's distributors, representatives, or other partners who are duly authorized by Maxim to sell such i
ntegrated circuits.

1.6. "Maxim-Enabled Products" means any product made by or for Customer that incorporates a Maxim IC.

1.7. "Maxim Proprietary Software" means the software provided by Maxim to Customer under and upon Customer's acceptance
of this Agreement, all permitted copies, modifications, or derivative works thereof made by Customer, and all basic or r
elated materials pertinent thereto, including without limitation any documentation provided, either in hardcopy form or
electronic form. Maxim Proprietary Software excludes Open Source Software and Third Party Technology.

1.8. "Object Code" means software in machine-readable and executable form resulting from compilation or assembly of Sour
ce Code and that is not generally readable by humans without reverse assembly, reverse compiling, or reverse engineering
.

1.9. "Open Source Software" means any open source, community, or other free software code or libraries of any type, incl
uding, without limitation, any code that (a) is made generally available for free or that meets
the definition of "open source" or "free" as defined by the Open Source Initiative or Free Software Foundation or (b) is
 licensed under any license agreement approved by either such entity (such as, for example purposes only, the GNU GPL, G
NU LGPL, Mozilla, or Apache license).

1.10. "Site(s)" means the Customer's premises.

1.11. "Software" means the Maxim Proprietary Software, any Third Party Technology, and any Open Source Software delivere
d to Customer under the terms of this Agreement. Unless otherwise noted, the Software and Documentation are referred to
collectively herein as "Software".

1.12. "Source Code" means software in human-readable, high-level language form, which can be compiled or assembled into
Object Code, machine code, or another executable form of code.

1.13. "Third Party Technology" means any software, feature or functionality that requires a license grant and/or payment
s by Customer to third parties for commercial activities related to Customer Programs and/or Maxim-Enabled Products.
2. Software Licenses. The Maxim Proprietary Software is licensed to Customer under the license grant set forth in Sectio
n 3 (Maxim Proprietary Software License Grant) below. Any Open Source Software delivered to Customer is licensed to Cust
omer under the license specified in such Open Source Software and as further restricted by Section 4. For purposes of cl
arity, the provisions of this Agreement applying to Source Code shall only apply if Source Code is being provided to Cus
tomer.

3. Maxim Proprietary Software License Grant.

3.1. License Grant to Maxim Proprietary Software. Subject to the terms of this Agreement, Maxim hereby grants to Custome
r during the Term a personal, non-exclusive, non-transferable, non-assignable, non-sublicensable (except as expressly gr
anted herein) license to do the following:

(a) use Object Code versions of Maxim Proprietary Software, internally and only at the Site(s) for the sole purpose of c
reating Customer Programs;

(b) load, install, run, execute, test, and debug Object Code versions of Maxim Proprietary Software, as incorporated wit
hin a Customer Program, in a Maxim-Enabled Product internally and only at the Site(s) and only for the purpose of enabli
ng Maxim ICs in the Maxim-Enabled Product;

(c) grant a personal, non-exclusive, non-transferable, non-assignable, non-sublicensable sublicense to third parties: (i
) to install, run, load, and execute Object Code versions of Maxim Proprietary Software, as incorporated within a Custom
er Program, on Maxim-Enabled Products, and (ii) to distribute Object Code versions of Maxim Proprietary Software, as inc
orporated within a Customer Program, embedded in a Maxim-Enabled Product to such third parties solely for the purpose of
 and only to the extent needed to carry out such sublicense. The sublicense will subject the third party to the restrict
ions and obligations of Sections 3.4 (License Restrictions on Maxim Proprietary Software) and 14 (Confidential Informati
on) as if the third party were in the place of Customer. Customer will be fully responsible for the compliance with and
liable for the breach of the sublicense by the third party. Upon becoming aware of any breach or suspected breach of the
 sublicense by the third party, Customer will promptly report such breach or suspected breach to Maxim; and

(d) use unmodified versions of Executable Code of Maxim Proprietary Software, to incorporate such Executable Code within
 Customer Programs, and to create an Object Code version of Customer Programs.
In all cases, the rights granted herein shall be exercised in accordance with (i) the Documentation, and (ii) this
Agreement.

3.2. Source Code License. To the extent that the Maxim Proprietary Software includes any Source Code, subject to the ter
ms and conditions of this Agreement, Maxim grants to Customer a non-sublicensable, non-exclusive, non-transferable, non-
assignable license during the Term to use, modify, and compile the Source Code internally and only at the Site(s) solely
 to the extent necessary to support the development of a Customer Program as permitted under Section 3.1 (License Grant
to Maxim Proprietary Software) above. Customer will keep track of all Customer employees who have had access to Source C
ode versions of Maxim Proprietary Software, and will provide a list of such employees to Maxim upon request.

3.3. Copies. Except for purposes of exercising the license granted in this Section 3 (Maxim Proprietary
Software License Grant) and for back-up purposes, Customer may not copy the Maxim Proprietary Software. Customer agrees
to reproduce and include Maxim's copyright notice on any copies of the Maxim Proprietary Software, which copies it makes
 in any form, including partial copies of the Maxim Proprietary Software.

3.4. License Restrictions on Maxim Proprietary Software. Except for the rights expressly granted in this Section 3, Maxi
m grants no rights in the Maxim Proprietary Software to Customer, whether by implication, estoppel, or otherwise. Subjec
t to the rights expressly granted in this Section 3, Customer shall not and shall not encourage, allow, or facilitate an
y third party to:

a.modify, translate, adapt, reverse engineer, decompile, disassemble, or otherwise translate or create derivative works
based on the Maxim Proprietary Software, except solely to the extent (i) expressly permitted in Section 3.1 (License Gra
nt to Maxim Proprietary Software) above or (ii) by applicable law and then only with advance written notice of such acti
vity to Maxim;

b.review, analyze, or evaluate Maxim Proprietary Software for the purpose of determining the infringement, validity, or
enforceability of any intellectual property, or compare Maxim Proprietary Software to intellectual property in any way;

c.examine, review, evaluate, or otherwise use the Maxim Proprietary Software for the purpose of developing or enabling a
 product or technology that competes with Maxim;

d.rent, lease, or sublicense the Maxim Proprietary Software to a third party, except as expressly permitted in Section 3
.1 (License Grant to Maxim Proprietary Software);

e.remove any product identification, proprietary, copyright or other notices contained in the Maxim Proprietary Software
;

f.disclose or distribute to any third party (i) benchmarks or other comparisons relating to the Maxim Proprietary Softwa
re or (ii) any information (A) relating to the results of Customer's evaluation of the Maxim Proprietary Software (inclu
ding relating to performance, function, or deficiencies of the Maxim Proprietary Software) or (B) contained in any docum
entation, report, or questionnaire of Maxim that constitutes Maxim Confidential Information;
g.distribute or sell the Maxim Proprietary Software in standalone form or in any manner other than as permitted under Se
ction 3.1 (License Grant to Maxim Proprietary Software) above; or
h.USE OR DISTRIBUTE THE MAXIM PROPRIETARY SOFTWARE FOR MEDICAL OR LIFE CRITICAL APPLICATIONS.

3.5. Authorized Users. Customer's consultants and contractors, who are not direct competitors of Maxim and who are under
 written agreements to provide services to Customer ("Authorized Users"), may use the Maxim Proprietary Software in acco
rdance with the licenses granted to Customer under this Agreement, provided that:

a.such Authorized Users agree to be bound by terms as protective of Maxim and Maxim Confidential Information as the term
s set forth in this Agreement,

b.Customer shall remain responsible for the Authorized User's compliance with such confidentiality terms and the applica
ble terms of this Agreement,

c.if Source Code is licensed under Section 3.2 (Source Code License), Customer keeps track of all Authorized Users who h
ave had access to Source Code, and provides a list of such Authorized Users to Maxim upon request; and

d.each Authorized User's use of the Maxim Proprietary Software is only for Customer's benefit in accordance with this Ag
reement.

3.6. No Right to Manufacture. Customer acknowledges and agrees that the license to the Maxim Proprietary Software grante
d in Section 3.1 (License Grant to Maxim Proprietary Software) does not include any license to any of Maxim's other tech
nology or intellectual property and that, consequently, it shall not have the right under this Agreement to develop, man
ufacture, or have manufactured any integrated circuits that incorporate any Maxim technology, and that Customer is requi
red to separately purchase or obtain Maxim ICs from Maxim or a Maxim certified distributor.

3.7. Form of Delivery. Maxim will provide the Software licensed hereunder to Customer by electronic medium or other form
 as mutually agreed upon, in the condition as it exists on the Effective Date or date of delivery, if different, without
 special reformatting.

4. Open Source Licenses. Customer understands and acknowledges that Open Source Software may be delivered pursuant to th
is Agreement and subject to an Open Source Software license, that each Open Source Software license is a separate agreem
ent between Customer and the copyright holder of such Open Source Software and that Maxim is not a party to any such Ope
n Source Software license. The terms and conditions governing Customer's use of the Open Source Software are set forth i
n the license agreement indicated in the Open Source Software and not in this Agreement. Customer's use of all Open Sour
ce Software must comply with the terms of each applicable Open Source Software license. This Agreement does not limit Cu
stomer's rights under, or grant Customer rights that supersede, the license terms of any particular Open Source Software
 license.

5. Third Party Technology. Customer acknowledges and agrees that Customer Programs and Maxim-Enabled Products, as well a
s any products based on Maxim Proprietary Software or other Maxim technology, may require certain licenses from certain
standards bodies and/or other third parties holding intellectual property rights ("IPR") that may cover one or more of a
forementioned items. Customer acknowledges and agrees that Maxim is not granting a sublicense to IPR of Third Party Tech
nology, and Customer is solely responsible for procuring such license in connection with any use of such Third Party Tec
hnology.

6. Representations and Warranties of Customer.

6.1. General. Customer represents and warrants that:

a. Customer's business and its performance under this Agreement are in compliance with all applicable federal, state and
 local laws and government rules and regulations;

b. None of the Customer Programs, Maxim-Enabled Products, or any portion thereof, excluding any Maxim Proprietary Softwa
re contained therein, constitutes or may give rise to a claim of infringement of any patent, copyright, trade secret or
other intellectual property right of a third party anywhere in the world; and

c. No portion of any Customer Program (including any libraries), or any Maxim-Enabled Product, contains or will contain
any "viral" Open Source Software, or any other software or code which could compromise or interfere in any way with Maxi
m's rights, including IPR, in or to the Maxim Proprietary Software or other Maxim materials that may come into contact w
ith such Customer Programs or Maxim-Enabled Products, or require Maxim or Customer to disclose any Source Code to any su
ch Maxim Proprietary Software integrated in or distributed with any Customer Program or Maxim-Enabled Product.

6.2. Maxim Proprietary Software. Customer on behalf of itself and its Affiliates hereby covenants not to bring suit or o
therwise assert any intellectual property right against Maxim or any user, distributor, or manufacturer of the Maxim Pro
prietary Software for the manufacture, use, import, offer for sale, or sale of any products or services based on the Max
im Proprietary Software.

7. Ownership. Notwithstanding anything to the contrary contained herein and except for the limited license rights expres
sly provided herein, Maxim and its suppliers have and will retain all rights, title, and interest in and to the Maxim Pr
oprietary Software (including, without limitation, all patent, copyright, trademark, trade secret, and other intellectua
l property rights) and all copies, modifications, and derivative works thereof. Customer agrees to assign to Maxim all r
ights, title, and interest, including but not limited to intellectual property rights, that Customer may now or in the f
uture have in or to any modifications, improvements, or enhancements to the Maxim Proprietary Software. Customer acknowl
edges that it is obtaining only a limited license right to the Maxim Proprietary Software and that irrespective of any u
se of the words "purchase", "sale," or like terms hereunder, no ownership rights are being conveyed to Customer under th
is Agreement or otherwise. For the avoidance of doubt, as between Maxim and Customer, Customer shall have and retain all
rights, title, and interest in and to any Customer Programs except to the extent that any Software is incorporated
therein.

8. Term and Termination.

8.1. Term. This Agreement is effective as of the Effective Date, will continue for three (3) years (the "License
Term"), and expire when the License Term has elapsed, unless earlier terminated in accordance with this Section (the "Te
rm").

8.2. Termination. This Agreement (and all licenses and sublicenses granted hereunder) shall terminate on the earlier of:

a.immediately upon Customer's material breach of any term of this Agreement,

b.Maxim's notice of termination, which may be for any reason, to Customer

c.the date upon which Customer discontinues the development, sale or distribution of Customer Programs or Maxim-Enabled
Products;

d.the date that Customer becomes insolvent, makes a general assignment for the benefit of creditors, suffers or permits
the appointment of a receiver, becomes subject to any proceeding under any bankruptcy or insolvency law whether domestic
 or foreign, voluntary or involuntary; or e.Expiration of the Term pursuant to Section 8.1 (Term).
Upon expiration or termination of this Agreement or upon written request from Maxim, Customer shall certify to Maxim in
writing that Customer has returned (or, with the consent of Maxim, destroyed) all copies of the Maxim Proprietary Softwa
re and any other material provided by Maxim (excluding Open Source Software). 8.3. Survival. Sections 3.3 (Copies), 3.4
(License Restrictions on Maxim Proprietary Software), 3.6 (No Right to Manufacture), 4 (Open Source Licenses), 5 (Third
Party Technology), 6 (Representations and Warranties of Customer), 7 (Ownership), 8 (Term and Termination), 9 (Warranty
Disclaimer), 11 (Taxes), 12 (Limitation of Remedies and Damages), 13 (Indemnification by Customer), 14 (Confidential Inf
ormation) and 15 (General) shall survive any termination or expiration of this Agreement.

8.4. Limited Survival of License. Notwithstanding anything contained herein, unless this Agreement is terminated pursuan
t to Sections 8.2.a or 8.2.d, Customer shall, after termination or expiration of this Agreement, retain a limited licens
e to the Maxim Proprietary Software, to use any Maxim-provided Source Code and Object Code versions of Maxim Proprietary
 Software internally and only at the Site(s) for the sole purpose of maintaining or supporting a Maxim-Enabled Product t
hat was shipped in conjunction with an Object Code version of a Customer Program during the Term of this Agreement .

9. Warranty Disclaimer.
TO THE EXTENT PERMITTED BY LAW, THE SOFTWARE AND ALL SERVICES ARE PROVIDED "AS IS" AND "WITH ALL FAULTS." NEITHER MAXIM
NOR ITS SUPPLIERS MAKES ANY WARRANTIES, EXPRESS OR IMPLIED, STATUTORY OR OTHERWISE, INCLUDING BUT NOT LIMITED TO WARRANT
IES OF MERCHANTABILITY, TITLE, FITNESS FOR A PARTICULAR PURPOSE, OR NONINFRINGEMENT. CUSTOMER MAY HAVE OTHER STATUTORY R
IGHTS. HOWEVER, TO THE FULL EXTENT PERMITTED BY LAW, THE DURATION OF STATUTORILY REQUIRED WARRANTIES, IF ANY, SHALL BE L
IMITED TO THE LIMITED WARRANTY PERIOD.

10. Support & Maintenance. The Software is provided to Customer without any maintenance or support services. Ongoing mai
ntenance and customer support for Customer's software that is based upon or includes portions of the Maxim Proprietary S
oftware is the responsibility of the Customer. Maxim may provide to Customer, in Maxim's sole discretion, updates to the
 Software from time to time. Upon delivery, such updates to the Software are subject to the terms and conditions herein.

11. Taxes. Customer agrees to pay any sales, value-added, withholding or other similar taxes and assessments imposed by
applicable law that Maxim is required to pay based on the licenses Customer ordered, except for taxes based on Maxim's i
ncome.

12. Limitation of Remedies and Damages.

12.1. NEITHER PARTY IS LIABLE FOR ANY LOSS OF USE, LOST DATA, FAILURE OF SECURITY MECHANISMS, INTERRUPTION OF BUSINESS,
OR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY KIND (INCLUDING LOST PROFITS), REGARDLESS OF THE F
ORM OF ACTION, WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, OR OTHERWISE,
EVEN IF INFORMED OF THE POSSIBILITY OF SUCH DAMAGES IN ADVANCE.

12.2. NOTWITHSTANDING ANY OTHER PROVISION OF THIS AGREEMENT, MAXIM'S AND ITS LICENSORS' AND SUPPLIERS' ENTIRE CUMULATIVE
 LIABILITY UNDER THIS AGREEMENT TO CUSTOMER SHALL NOT EXCEED TEN U.S. DOLLARS ($10.00). 12.3. THIS SECTION 12 DOES NOT A
PPLY TO CUSTOMER WITH RESPECT TO ANY CLAIM ARISING UNDER SECTION 3 (MAXIM PROPRIETARY SOFTWARE LICENSE GRANT), SECTION 6
 (REPRESENTATIONS AND WARRANTIES OF CUSTOMER), SECTION 13 (INDEMNIFICATION BY CUSTOMER) OR SECTION 14 (CONFIDENTIAL INFO
RMATION). 12.4. The parties agree that the limitations specified in this Section 12 will survive and apply even if any l
imited remedy specified in this Agreement is found to have failed of its essential purpose.

13. Indemnification by Customer. Customer shall indemnify, defend, and hold Maxim and its Affiliates harmless from any a
nd all claims, liabilities, damages, expenses (including reasonable attorney's fees and court, arbitration, and mediatio
n costs), or associated proceedings ("Claims") in connection with, relating to, or which result from:

a.any allegation of infringement of a third party's intellectual property rights with respect to any Customer Program or
 Maxim-Enabled Product, but excluding any such claim in either case to the extent based on the Software on a stand-alone
 basis,

b.the sale, marketing, distribution, or manufacture of any Maxim-Enabled Product, but excluding any such claim to the ex
tent based on the Software on a stand-alone basis, or c.Customer's breach of any provisions of Section 6 (Representation
s and Warranties of Customer).
Maxim shall give Customer prompt notice in writing of any such Claims and the authority, information, and reasonable ass
istance (at Customer's expense) necessary to defend and settle such Claims, except that Maxim's failure to provide promp
t notice will not relieve Customer of its indemnity obligations under this Section unless such failure materially prejud
ices the defense of the Claim, and Customer will not enter into a settlement of the Claim without Maxim's prior written
consent. If Customer does not diligently pursue resolution of the Claim or provide Maxim with reasonable assurance that
it will diligently pursue resolution, then Maxim may, without in any way limiting its other rights or remedies, defend o
r settle the Claim. Nothing herein shall limit or restrict Maxim's, its Affiliates', or its suppliers' rights to defend
and protect their ownership and intellectual property rights in and to the Maxim Proprietary Software, in whole or in pa
rt, in connection with any Claim. Each party agrees to provide reasonable cooperation to the other party in the defense
or settlement of any such Claims, upon the reasonable request of the other party.

14. Confidential Information. Each party agrees that all code, inventions, know-how, business, technical and financial i
nformation it ("Receiving Party") obtains from the disclosing party ("Disclosing Party") constitute the confidential pro
perty of the Disclosing Party ("Confidential Information"), provided that it is identified as confidential at the time o
f disclosure or should be reasonably known by the Receiving Party to be Confidential Information due to the nature of th
e information disclosed and the circumstances surrounding the disclosure. Any software, documentation, or technical info
rmation provided by Maxim (or its agents)(excluding Open Source Software), performance information relating to the Maxim
 Proprietary Software, and the terms of this Agreement are deemed Confidential Information of Maxim without any marking
or further designation. Except as expressly authorized herein, the Receiving Party will hold in confidence and not use o
r disclose any Confidential Information. The Receiving Party's nondisclosure obligation does not apply to information th
at the Receiving Party can document:

a. was rightfully in its possession or known to it without the breach of any confidentiality obligations prior to receip
t of the Confidential Information;

b. is or has become public knowledge through no fault of the Receiving Party;
c. is rightfully obtained by the Receiving Party from a third party without breach of any confidentiality obligation;
d. is independently developed by employees of the Receiving Party who had no access to such information; or
e. is required to be disclosed pursuant to a regulation, law, or court order (but only to the minimum extent required to
 comply with such regulation or order and with advance written notice to the Disclosing Party).

15. General.

15.1. Assignment and Delegation. Customer may not assign its rights or delegate its obligations ("Assign" or "Assignment
") under this Agreement without the prior written consent of Maxim, and any purported Assignment without such consent sh
all have no force or effect. In the event, Customer desires to Assign this Agreement to a successor in interest by merge
r or acquisition of its entire business, Customer shall obtain Maxim's prior written approval, which shall be rendered b
y Maxim in its sole discretion. Subject to the foregoing, this Agreement shall bind and inure to the benefit of the resp
ective parties hereto and their permitted successors and assigns. In the event of an Assignment or attempted Assignment
by Customer without Maxim's prior written approval, Maxim may, in its sole discretion, immediately terminate this Agreem
ent.

15.2. Severability. If any provision of this Agreement is adjudged by any court of competent jurisdiction to be unenforc
eable or invalid, that provision is limited to the minimum extent necessary so that this Agreement shall otherwise remai
n in effect.

15.3. Governing Law; Jurisdiction and Venue. This Agreement is governed by the laws of the State of California and the U
nited States without regard to conflicts of laws provisions thereof, and without regard to the United Nations Convention
 on the International Sale of Goods. The parties agree to submit any claim or actions arising from and/or related to thi
s Agreement to the exclusive jurisdiction and venue of the Superior Court of California, Santa Clara County or the Unite
d States District Court for the Northern District of California, San Jose Branch and agree to waive any right to assert
the defense of forum non conveniens or to object to such venue in any such proceeding.

15.4. Notices and Reports. Any notice or report to Maxim hereunder shall be in writing to the following notice address:
Maxim Integrated Products, Inc.
160 Rio Robles
San Jose, CA 95134
Attn: General Counsel
Any notice or report shall be deemed given:

a. upon receipt if by personal delivery;

b. upon receipt if sent by certified or registered mail (return receipt requested); or

c. one day after it is sent if by next day delivery by a major commercial delivery service.

15.5. Amendments; Waivers. No supplement, modification, or amendment of this Agreement is binding, unless executed in wr
iting by a duly authorized representative of each party to this Agreement. No waiver will be implied from conduct or fai
lure to enforce or exercise rights under this Agreement, nor will any waiver be effective unless in a writing signed by
a duly authorized representative on behalf of the party claimed to have waived. No provision of any purchase order or ot
her business form employed by Customer will supersede the terms and conditions of this Agreement, and any such document
relating to this Agreement is for administrative purposes only and shall have no legal effect.

15.6. Entire Agreement. This Agreement is the complete and exclusive statement of the mutual understanding of the partie
s and supersedes and cancels all previous written and oral agreements and communications relating to the subject matter
of this Agreement.

15.7. Audit Rights. Upon Maxim's written request, Customer shall certify in a signed writing that Customer's use of the
Software is in full compliance with the terms of this Agreement (including any copy and user limitations). With prior re
asonable notice, Maxim may audit the copies of the Software in use by
Customer provided such audit is during regular business hours; Customer is responsible for such audit costs only in the
event the audit reveals that Customer's use is not in accordance with the applicable license(s).

15.8. Independent Contractors. The parties to this Agreement are independent contractors. There is no relationship of pa
rtnership, joint venture, employment, franchise, or agency created hereby between the parties. Neither party will have t
he power to bind the other or incur obligations on the other party's behalf without the other party's prior written cons
ent.

15.9. Force Majeure. Neither party is liable to the other for any delay or failure to perform any obligation under this
Agreement if the delay or failure is due to events that are beyond the reasonable control of such party, including but n
ot limited to any strike, blockade, war, act of terrorism, riot, natural disaster, failure or diminishment of power, tel
ecommunications, data networks or services, or refusal of approval or license by a government agency.

15.10. Government End-Users. If the user or licensee of the Software is an agency, department, or other entity of the Un
ited States Government, the use, duplication, reproduction, release, modification, disclosure, or transfer of this Softw
are, or any related documentation of any kind, including technical data and manuals, is restricted by a license agreemen
t or by the terms of this Agreement in accordance with Federal Acquisition Regulation 12.212 for civilian purposes and D
efense Federal Acquisition Regulation Supplement 227.7202 for military purposes.

15.11. Export Compliance. Customer acknowledges that the Software is subject to export restrictions by the United States
 government and import restrictions by certain foreign governments. Customer shall not and shall not allow any third-par
ty to remove or export from the United States or allow the export or re-export of any part of the Software or any direct
 product thereof:

a. into (or to a national or resident of) any embargoed or terrorist-supporting country;

b. to anyone on the U.S. Commerce Department's Table of Denial Orders or U.S. Treasury Department's list of Specially De
signated Nationals;

c. to any country to which such export or re-export is restricted or prohibited, or as to which the United States
government or any agency thereof requires an export license or other governmental approval at the time of export or
re-export without first obtaining such license or approval; or

d. otherwise in violation of any export or import restrictions, laws, or regulations of any United States or foreign age
ncy or authority. Customer agrees to the foregoing and warrants that it is not located in, under the control of, or a na
tional or resident of any such prohibited country or on any such prohibited party list. The Software is further restrict
ed from being used for the design or development of nuclear, chemical, or biological weapons or missile technology, or f
or terrorist activity, without the prior permission of the United States government.

15.12. Injunctive Relief. Customer understands and agrees that, notwithstanding any other provision of this Agreement, b
reach of the provisions of this Agreement by Customer will cause Maxim irreparable damage for which recovery of money da
mages would be inadequate, and that Maxim shall therefore be entitled to obtain timely equitable relief, including but n
ot limited to injunctive relief, to protect Maxim's rights under this Agreement in addition to any and all remedies avai
lable at law.
