Texas Instruments Incorporated
Technology and Software Publicly Available
Software (Object Code) License Agreement


IMPORTANT - PLEASE READ THE FOLLOWING LICENSE AGREEMENT CAREFULLY. THIS IS
	A LEGALLY BINDING AGREEMENT.  DO NOT DOWNLOAD THE LICENSED MATERIALS
	UNLESS: (1) YOU ARE AUTHORIZED TO ACCEPT AND AGREE TO THE TERMS OF THIS
	LICENSE AGREEMENT AND (2) YOU INTEND TO ENTER INTO AND TO BE BOUND BY
	THE TERMS OF THIS AGREEMENT.

This Software License Agreement ("Agreement") is a legal agreement between you
	(either an individual or entity) and Texas Instruments Incorporated
	("TI").  The "Licensed Materials" subject to this Agreement include,
	in whole or in part, the software programs that accompany this Agreement
	and any "on-line" or electronic documentation associated with these
	programs.  By installing, copying or otherwise using the Licensed
	Materials you agree to abide by the terms of this Agreement.
	If you choose not to accept or agree with these terms, do not download
	or install the Licensed Materials.


1. Object Code License.  TI hereby grants to you a limited, non-exclusive
	license to reproduce and use the Licensed Materials provided to you in
	object code format and to distribute an unlimited number of object or
	executable copies of such Licensed Materials, provided that such object
	or executable copies are used solely and exclusively on devices
	manufactured by or for TI.

2. Termination.  This license is effective until terminated.  Without prejudice
	to any other rights, TI may terminate your right to use the Licensed
	Materials under this Agreement if you fail to comply with the terms of
	this Agreement.  In such event, you shall destroy all copies of the
	Licensed Materials, including all portions and derivatives thereof.

3. Intellectual Property Rights.  The Licensed Materials being provided to you
	hereunder are being made publicly available by TI, even though they
	contain copyrighted material of TI and its licensors, if applicable.
	In no event may you alter, remove or destroy any copyright notice
	included in the Licensed Materials.  To the extent that any of the
	Licensed Materials are provided in binary or object code only, you may
	not unlock, decompile, reverse engineer, disassemble or otherwise
	translate such binary or object code to human-perceivable form. The
	source code of such reverse engineered code may contain TI trade secret
	and other proprietary information.  Further, nothing shall obligate TI
	to provide you with source code for the Licensed Materials licensed to
	you in binary or object code only under this Agreement.  TI reserves all
	rights not specifically granted under this Agreement.

4. Warranties and Limitations.  THE LICENSED MATERIALS ARE PROVIDED "AS IS". TI
	MAKES NO WARRANTY OR REPRESENTATION, EXPRESS, IMPLIED OR STATUTORY,
	INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A
	PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS OF
	RESPONSES, RESULTS AND LACK OF NEGLIGENCE.  TI DISCLAIMS ANY WARRANTY OF
	TITLE, QUIET ENJOYMENT, QUIET POSESSION, AND NON-INFRINGEMENT OF ANY
	THIRD PARTY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE LICENSED
	MATERIALS OR USE OF THOSE MATERIALS.

YOU ACKNOWLEDGE AND AGREE THAT THE LICENSED MATERIALS MAY NOT BE INTENDED FOR
	PRODUCTION APPLICATIONS AND MAY CONTAIN IRREGULARITIES AND DEFECTS NOT
	FOUND IN PRODUCTION SOFTWARE.  FURTHERMORE, YOU ACKNOWLEDGE AND AGREE
	THAT THE LICENSED MATERIALS HAVE NOT BEEN TESTED OR CERTIFIED BY ANY
	GOVERNMENT AGENCY OR INDUSTRY REGULATORY ORGANIZATION OR ANY OTHER THIRD
	PARTY ORGANIZATION.  YOU AGREE THAT PRIOR TO USING, INCORPORATING OR
	DISTRIBUTING THE LICENSED MATERIALS IN OR WITH ANY COMMERCIAL PRODUCT
	THAT YOU WILL THOROUGHLY TEST THE PRODUCT AND THE FUNCTIONALITY OF THE
	LICENSED MATERIALS IN OR WITH THAT PRODUCT AND BE SOLELY RESPONSIBLE FOR
	ANY PROBLEMS OR FAILURES.

IN NO EVENT SHALL TI, OR ANY APPLICABLE LICENSOR, BE LIABLE FOR ANY SPECIAL,
	INDIRECT, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED
	ON ANY THEORY OF LIABILITY, ARISING IN ANY WAY OUT OF THIS AGREEMENT,
	OR YOUR USE OF THE LICENSED MATERIALS, WHETHER OR NOT TI HAS BEEN
	ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  EXCLUDED DAMAGES INCLUDE,
	BUT ARE NOT LIMITED TO, COST OF REMOVAL OR REINSTALLATION, OUTSIDE
	COMPUTER TIME, LABOR COSTS, LOSS OR CORRUPTION OF DATA, LOSS OF
	GOODWILL, LOSS OF PROFITS, LOSS OF SAVINGS, OR LOSS OF USE OR
	INTERRUPTION OF BUSINESS OR ANY OTHER ECONOMIC LOSS.  IN NO EVENT WILL
	TI'S AGGREGATE LIABILITY UNDER THIS AGREEMENT OR ARISING OUT OF YOUR USE
	OF THE LICENSED MATERIALS EXCEED FIVE HUNDRED U.S. DOLLARS (US$500).

Because some jurisdictions do not allow the exclusion or limitation of
	incidental or consequential damages or limitation on how long an implied
	warranty lasts, the above limitations or exclusions may not apply to
	you.

5. Export Control. Thesoftware programs and any "on-line" documentation as well
	as any updates or upgrades to such software programs or documentation
	may be subject to the export or import regulations of certain countries.
	You agree to comply with all such regulations and acknowledge that you
	have the responsibility to obtain any licenses or other authorizations
	that may be required to export, re-export or import the Licensed
	Materials.

6. Governing Law, Jurisdiction and Severability.  This Agreement will be
	governed by and interpreted in accordance with the laws of the State of
	Texas, without reference to that state's conflict of laws principles.
	This Agreement shall not be governed by the United Nations Convention on
	Contracts for the International Sale of Goods, nor shall it be governed
	by the Uniform Computer Information Transactions Act (UCITA).  Any
	dispute arising out of or related to this Agreement will be brought in,
	and each party consents to the exclusive jurisdiction and venue in the
	state and federal courts sitting in Dallas Country, Texas. Each party
	waives all defenses of lack of personal jurisdiction and forum
	non-conveniens and agrees that process may be served on either party in
	a manner authorized by applicable law or court rule.  If for any reason
	a court of competent jurisdiction finds any provision of the Agreement
	to be unenforceable, that provision will be enforced to the maximum
	extent possible to effectuate the intent of the parties and the
	remainder of the Agreement shall continue in full force and effect.

7. PRC Provisions.  If you are located in the People's Republic of China ("PRC")
	or if the Licensed Materials will be sent to the PRC, the following
	provisions shall apply and shall supersede any other provisions in this
	Agreement concerning the same subject matter as the following
	provisions:

	a.	Registration Requirements.  You shall be solely responsible for
	performing all acts and obtaining all approvals that may be required in
	connection with this Agreement by the government of the PRC, including
	but not limited to registering pursuant to, and otherwise complying
	with, the PRC Measures on the Administration of Software Products,
	Management Regulations on Technology Import-Export, and Technology
	Import and Export Contract Registration Management Rules. Upon receipt
	of such approvals from the government authorities, you shall forward
	evidence of all such approvals to TI for its records.  In the event that
	you fail to obtain any such approval or registration, you shall be
	solely responsible for any and all losses, damages or costs resulting
	therefrom, and shall indemnify TI for all such losses, damages or costs.

	b.	Governing Language.  This Agreement is written and executed in
	the English language.  If a translation of this Agreement is required
	for any purpose, including but not limited to registration of the
	Agreement pursuant to any governmental laws, regulations or rules, you
	shall be solely responsible for creating such translation.  Any
	translation of this Agreement into a language other than English is
	intended solely in order to comply with such laws or for reference
	purposes, and the English language version shall be authoritative and
	controlling.

8. Entire Agreement.  This is the entire Agreement between you and TI and
	supersedes any prior agreement between the parties related to the
	subject matter of this Agreement. No amendment or modification of this
	Agreement will be effective unless in writing and signed by a duly
	authorized representative of TI.  You hereby warrant and represent that
	you have obtained all authorizations and other applicable consents
	required empowering you to enter into this Agreement.

1
TILAW-#236402v3

