International License Agreement for Early Release of Programs

Part 1 - General Terms

BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, OR USING THE PROGRAM YOU
AGREE TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS
ON BEHALF OF ANOTHER PERSON OR A COMPANY OR OTHER LEGAL ENTITY, YOU
REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND THAT PERSON,
COMPANY, OR LEGAL ENTITY TO THESE TERMS. IF YOU DO NOT AGREE TO THESE
TERMS,

- DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, OR USE THE PROGRAM; AND

- PROMPTLY RETURN THE PROGRAM TO THE PARTY FROM WHOM YOU ACQUIRED IT. IF
YOU DOWNLOADED THE PROGRAM, CONTACT THE PARTY FROM WHOM YOU ACQUIRED IT.

"Early Release" means that the Program is not formally released or
commercially available. The term does not imply that the Program will be
formally released or made commercially available. IBM does not warrant
that should a Program be formally released or made commercially
available that it will be similar to, or compatible with, Early Release
versions.

"IBM" is International Business Machines Corporation or one of its
subsidiaries.

"License Information" ("LI") is a document that provides information
specific to a Program. The Program's LI is available in a file in the
Program's directory, by the use of a system command, or as a booklet
which accompanies the Program. The LI may also be found at
http://www.ibm.com/software/sla/ .

"Program" is the following, including the original and all whole or
partial copies: 1) machine-readable instructions and data, 2)
components, 3) audio-visual content (such as images, text, recordings,
or pictures), 4) related licensed materials, and 5) license use
documents or keys, and documentation.

"You" and "Your" refer either to an individual person or to a single
legal entity.

This Agreement includes Part 1 - General Terms, Part 2 - Country-unique
Terms (if any), and License Information and is the complete agreement
between You and IBM regarding the use of the Program. It replaces any
prior oral or written communications between You and IBM concerning Your
use of the Program. The terms of Part 2 and License Information may
replace or modify those of Part 1.

1. Entitlement

License

The Program is owned by IBM or an IBM supplier, and is copyrighted and
licensed, not sold.

IBM grants You a nonexclusive license to use the Program when You
lawfully acquire it.

You may 1) use the Program only for internal evaluation or testing
purposes, and 2) make and install a reasonable number of copies,
including a backup copy, of the Program to support such use. The terms
of this license apply to each copy You make. You will reproduce all
copyright notices and all other legends of ownership on each copy, or
partial copy, of the Program.

THE PROGRAM MAY CONTAIN A DISABLING DEVICE THAT WILL PREVENT IT FROM
BEING USED AFTER THE EVALUATION PERIOD ENDS. YOU WILL NOT TAMPER WITH
THIS DISABLING DEVICE OR THE PROGRAM. YOU SHOULD TAKE PRECAUTIONS TO
AVOID ANY LOSS OF DATA THAT MIGHT RESULT WHEN THE PROGRAM CAN NO LONGER
BE USED.

You will 1) maintain a record of all copies of the Program and 2) ensure
that anyone who uses the Program (accessed either locally or remotely)
does so only for Your authorized use and complies with the terms of this
Agreement.

You may not 1) use, copy, modify or distribute the Program except as
provided in this Agreement; 2) reverse assemble, reverse compile, or
otherwise translate the Program except as specifically permitted by law
without the possibility of contractual waiver; or 3) sublicense, rent,
or lease the Program.

The evaluation period begins when You agree to the terms of this
Agreement and ends 1) as of the duration or date specified in the
License Information, 2) when the Program automatically disables itself,
or 3) when IBM makes the program commercially available. You will
destroy the Program and all copies made of it within ten days of the end
of the evaluation period. There is no charge for the use of Program for
the duration of the evaluation period.

IBM may terminate Your license if You fail to comply with the terms of
this Agreement. If IBM does so, You must destroy all copies of the Program.

2. Rights In Data

You assign to IBM all right, title, and interest (including ownership of
copyright) in any data, suggestions, and written materials that 1) is
related to Your use of the Program and 2) You provide to IBM. If IBM
requires it, You will sign an appropriate document to assign such
rights. Neither party will charge the other for rights in data or any
work performed as a result of this Agreement.

3. No Warranty

SUBJECT TO ANY STATUTORY WARRANTIES WHICH CANNOT BE EXCLUDED, IBM MAKES
NO WARRANTIES OR CONDITIONS EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT, REGARDING THE
PROGRAM OR TECHNICAL SUPPORT, IF ANY.

The exclusion also applies to any of IBM's Program developers and suppliers.

Manufacturers, suppliers, or publishers of non-IBM Programs may provide
their own warranties.

IBM does not provide technical support, unless IBM specifies otherwise.

4. Limitation of Liability

Circumstances may arise where, because of a default on IBM's part or
other liability, You are entitled to recover damages from IBM. In each
such instance, regardless of the basis on which You may be entitled to
claim damages from IBM, (including fundamental breach, negligence,
misrepresentation, or other contract or tort claim), IBM is liable for
no more than 1) damages for bodily injury (including death) and damage
to real property and tangible personal property and 2) the amount of any
other actual direct damages up to the charges for the Program that is
the subject of the claim.

This limitation of liability also applies to IBM's Program developers
and suppliers. It is the maximum for which they and IBM are collectively
responsible.

UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS
LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY:

1. LOSS OF, OR DAMAGE TO, DATA;

2. SPECIAL, INCIDENTAL, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC
CONSEQUENTIAL DAMAGES; OR

3. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS.

SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION OR
EXCLUSION MAY NOT APPLY TO YOU.

5. General

1. Nothing in this Agreement affects any statutory rights of consumers
that cannot be waived or limited by contract.

2. In the event that any provision of this Agreement is held to be
invalid or unenforceable, the remaining provisions of this Agreement
remain in full force and effect.

3. You may not export the Program.

4. You agree to allow IBM to store and use Your contact information,
including names, phone numbers, and e-mail addresses, anywhere they do
business. Such information will be processed and used in connection with
our business relationship, and may be provided to contractors, Business
Partners, and assignees of IBM for uses consistent with their collective
business activities, including communicating with You (for example, for
processing orders, for promotions, and for market research).

5. Neither You nor IBM will bring a legal action under this Agreement
more than two years after the cause of action arose unless otherwise
provided by local law without the possibility of contractual waiver or
limitation.

6. Neither You nor IBM is responsible for failure to fulfill any
obligations due to causes beyond its control.

7. This Agreement will not create any right or cause of action for any
third party, nor will IBM be responsible for any third party claims
against You except, as permitted by the Limitation of Liability section
above, for bodily injury (including death) or damage to real or tangible
personal property for which IBM is legally liable.

6. Governing Law, Jurisdiction, and Arbitration

Governing Law

Both You and IBM consent to the application of the laws of the country
in which You acquired the Program license to govern, interpret, and
enforce all of Your and IBM's rights, duties, and obligations arising
from, or relating in any manner to, the subject matter of this
Agreement, without regard to conflict of law principles.

The United Nations Convention on Contracts for the International Sale of
Goods does not apply.

Jurisdiction

All of our rights, duties, and obligations are subject to the courts of
the country in which You acquired the Program license.

Part 2 - Country-unique Terms

AMERICAS

ARGENTINA: Governing Law, Jurisdiction, and Arbitration (Section 6): The
following exception is added to this section:

Any litigation arising from this Agreement will be settled exclusively
by the Ordinary Commercial Court of the city of Buenos Aires.

BRAZIL: Governing Law, Jurisdiction, and Arbitration (Section 6): The
following exception is added to this section:

Any litigation arising from this Agreement will be settled exclusively
by the court of Rio de Janeiro, RJ.

CANADA: Limitation of Liability (Section 4): The following replaces item
1 in the first paragraph of this section:

1) damages for bodily injury (including death) and physical harm to real
property and tangible personal property caused by IBM's negligence; and

General (Section 5): The following replaces the terms in item 7:

7. This Agreement will not create any right or cause of action for any
third party, nor will IBM be responsible for any third party claims
against You except as permitted by the Limitation of Liability section
above for bodily injury (including death) or physical harm to real or
tangible personal property caused by IBM's negligence for which IBM is
legally liable.

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase
"the laws of the country in which You acquired the Program license" in
the Governing Law subsection is replaced by the following:

the laws in the Province of Ontario

PERU: Limitation of Liability (Section 4): The following is added at the
end of this section:

In accordance with Article 1328 of the Peruvian Civil Code, the
limitations and exclusions specified in this section will not apply to
damages caused by IBM's willful misconduct ("dolo") or gross negligence
("culpa inexcusable").

UNITED STATES OF AMERICA: General (Section 5): The following is added to
this section:

U.S. Government Users Restricted Rights - Use, duplication or disclosure
restricted by the GSA ADP Schedule Contract with the IBM Corporation.

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase
"the laws of the country in which You acquired the Program license" in
the Governing Law subsection is replaced by the following:

the laws of the State of New York, United States of America

ASIA PACIFIC

AUSTRALIA: No Warranty (Section 3): The following is added:

Although IBM specifies that there are no warranties, You may have
certain rights under the Trade Practices Act 1974 or other legislation
and are only limited to the extent permitted by the applicable legislation.

Limitation of Liability (Section 4): The following is added:

Where IBM is in breach of a condition or warranty implied by the Trade
Practices Act 1974, IBM's liability is limited to the repair or
replacement of the goods, or the supply of equivalent goods. Where that
condition or warranty relates to right to sell, quiet possession or
clear title, or the goods are of a kind ordinarily acquired for
personal, domestic or household use or consumption, then none of the
limitations in this paragraph apply.

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase
"the laws of the country in which You acquired the Program license" in
the Governing Law subsection is replaced by the following:

the laws of the State or Territory in which You acquired the Program license

CAMBODIA, LAOS, and VIETNAM: Governing Law, Jurisdiction, and
Arbitration (Section 6): The phrase "the laws of the country in which
You acquired the Program license" in the Governing Law subsection is
replaced by the following:

the laws of the State of New York, United States of America

The following is added to this section:

Arbitration

Disputes arising out of or in connection with this Agreement shall be
finally settled by arbitration which shall be held in Singapore in
accordance with the Arbitration Rules of Singapore International
Arbitration Center ("SIAC Rules") then in effect. The arbitration award
shall be final and binding for the parties without appeal and shall be
in writing and set forth the findings of fact and the conclusions of law.

The number of arbitrators shall be three, with each side to the dispute
being entitled to appoint one arbitrator. The two arbitrators appointed
by the parties shall appoint a third arbitrator who shall act as
chairman of the proceedings. Vacancies in the post of chairman shall be
filled by the president of the SIAC. Other vacancies shall be filled by
the respective nominating party. Proceedings shall continue from the
stage they were at when the vacancy occurred.

If one of the parties refuses or otherwise fails to appoint an
arbitrator within 30 days of the date the other party appoints its, the
first appointed arbitrator shall be the sole arbitrator, provided that
the arbitrator was validly and properly appointed.

All proceedings shall be conducted, including all documents presented in
such proceedings, in the English language. The English language version
of this Agreement prevails over any other language version.

HONG KONG S.A.R. and MACAU S.A.R. of China: Governing Law, Jurisdiction,
and Arbitration (Section 6): The phrase "the laws of the country in
which You acquired the Program license" in the Governing Law subsection
is replaced by the following:

the laws of Hong Kong Special Administrative Region of China

INDIA: Limitation of Liability (Section 4): The following replaces the
terms of items 1 and 2 of the first paragraph:

1) liability for bodily injury (including death) or damage to real
property and tangible personal property will be limited to that caused
by IBM's negligence; and 2) as to any other actual damage arising in any
situation involving nonperformance by IBM pursuant to, or in any way
related to the subject of this Agreement, IBM's liability will be
limited to the charge paid by You for the individual Program that is the
subject of the claim.

General (Section 5): The following replaces the terms of item 5:

If no suit or other legal action is brought, within three years after
the cause of action arose, in respect of any claim that either party may
have against the other, the rights of the concerned party in respect of
such claim will be forfeited and the other party will stand released
from its obligations in respect of such claim.

Governing Law, Jurisdiction, and Arbitration (Section 6): The following
is added to this section:

Arbitration

Disputes arising out of or in connection with this Agreement shall be
finally settled by arbitration which shall be held in Bangalore, India
in accordance with the laws of India then in effect. The arbitration
award shall be final and binding for the parties without appeal and
shall be in writing and set forth the findings of fact and the
conclusions of law.

The number of arbitrators shall be three, with each side to the dispute
being entitled to appoint one arbitrator. The two arbitrators appointed
by the parties shall appoint a third arbitrator who shall act as
chairman of the proceedings. Vacancies in the post of chairman shall be
filled by the president of the Bar Council of India. Other vacancies
shall be filled by the respective nominating party. Proceedings shall
continue from the stage they were at when the vacancy occurred.

If one of the parties refuses or otherwise fails to appoint an
arbitrator within 30 days of the date the other party appoints its, the
first appointed arbitrator shall be the sole arbitrator, provided that
the arbitrator was validly and properly appointed.

All proceedings shall be conducted, including all documents presented in
such proceedings, in the English language. The English language version
of this Agreement prevails over any other language version.

JAPAN: General (Section 5): The following is inserted after item 5:

Any doubts concerning this Agreement will be initially resolved between
us in good faith and in accordance with the principle of mutual trust.

MALAYSIA: Limitation of Liability (Section 4): The word "SPECIAL" in
item 2 of the third paragraph is deleted:

NEW ZEALAND: No Warranty (Section 3): The following is added:

Although IBM specifies that there are no warranties, You may have
certain rights under the Consumer Guarantees Act 1993 or other
legislation which cannot be excluded or limited. The Consumer Guarantees
Act 1993 will not apply in respect of any goods which IBM provides, if
You require the goods for the purposes of a business as defined in that Act.

Limitation of Liability (Section 4): The following is added:

Where Programs are not acquired for the purposes of a business as
defined in the Consumer Guarantees Act 1993, the limitations in this
Section are subject to the limitations in that Act.

PEOPLE'S REPUBLIC OF CHINA: Governing Law, Jurisdiction, and Arbitration
(Section 6): The phrase "the laws of the country in which You acquired
the Program license" in the Governing Law subsection is replaced by the
following:

the laws of the State of New York, United States of America (except when
local law requires otherwise)

PHILIPPINES: Limitation of Liability (Section 4): The following replaces
the terms of item 2 of the third paragraph:

2. special (including nominal and exemplary damages), moral, incidental,
or indirect damages or for any economic consequential damages; or

Governing Law, Jurisdiction, and Arbitration (Section 6): The following
is added to this section:

Arbitration

Disputes arising out of or in connection with this Agreement shall be
finally settled by arbitration which shall be held in Metro Manila,
Philippines in accordance with the laws of the Philippines then in
effect. The arbitration award shall be final and binding for the parties
without appeal and shall be in writing and set forth the findings of
fact and the conclusions of law.

The number of arbitrators shall be three, with each side to the dispute
being entitled to appoint one arbitrator. The two arbitrators appointed
by the parties shall appoint a third arbitrator who shall act as
chairman of the proceedings. Vacancies in the post of chairman shall be
filled by the president of the Philippine Dispute Resolution Center,
Inc. Other vacancies shall be filled by the respective nominating party.
Proceedings shall continue from the stage they were at when the vacancy
occurred.

If one of the parties refuses or otherwise fails to appoint an
arbitrator within 30 days of the date the other party appoints its, the
first appointed arbitrator shall be the sole arbitrator, provided that
the arbitrator was validly and properly appointed.

All proceedings shall be conducted, including all documents presented in
such proceedings, in the English language. The English language version
of this Agreement prevails over any other language version.

SINGAPORE: Limitation of Liability (Section 4): The words "SPECIAL" and
"ECONOMIC" are deleted from item 2 of the third paragraph.

General (Section 5): The following replaces the terms of item 7:

Subject to the rights provided to IBM's suppliers and Program developers
as provided in Section 4 above (Limitation of Liability), a person who
is not a party to this Agreement shall have no right under the Contracts
(Right of Third Parties) Act to enforce any of its terms.

EUROPE, MIDDLE EAST, AFRICA (EMEA)

Rights in Data (Section 2): In EMEA, the following replaces the terms of
this section in their entirety:

You assign to IBM all rights, title, and interest throughout the world
(including ownership of copyright) in any data, suggestions, and written
materials that 1) is related to Your use of the Program and 2) You
provide to IBM. Such assignment of rights includes, but is not limited
to, assignment of the rights to prepare and have prepared derivative
works of the written materials, and to use, have used, execute,
reproduce, transmit, display, perform, transfer, distribute and license
the written materials and such derivative works in any medium or
distribution technology, and to grant others some or all of the rights
granted herein, for the duration of all such rights, title and interest.
If IBM requires it, You will sign an appropriate document to assign such
rights. Neither party will charge the other for rights in data or any
work performed as a result of this Agreement.

No Warranty (Section 3): In the European Union, the following is added
at the beginning of this section:

In the European Union, consumers have legal rights under applicable
national legislation governing the sale of consumer goods. Such rights
are not affected by the provisions of this Section 3.

Limitation of Liability (Section 4): In Austria, Denmark, Finland,
Greece, Italy, Netherlands, Norway, Portugal, Spain, Sweden and
Switzerland, the following replaces the terms of this section in its
entirety:

Except as otherwise provided by mandatory law:

1. IBM's liability for any damages and losses that may arise as a
consequence of the fulfillment of its obligations under or in connection
with this agreement or due to any other cause related to this agreement
is limited to the compensation of only those damages and losses proved
and actually arising as an immediate and direct consequence of the
non-fulfillment of such obligations (if IBM is at fault) or of such
cause, for a maximum amount equal to the charges You paid for the Program.

The above limitation shall not apply to damages for bodily injuries
(including death) and damages to real property and tangible personal
property for which IBM is legally liable.

2. UNDER NO CIRCUMSTANCES IS IBM, OR ANY OF ITS PROGRAM DEVELOPERS,
LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY:
1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL OR INDIRECT DAMAGES, OR
FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; 3) LOST PROFITS, EVEN IF THEY
ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE
DAMAGES; OR 4) LOSS OF BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS.

3. The limitation and exclusion of liability herein agreed applies not
only to the activities performed by IBM but also to the activities
performed by its suppliers and Program developers, and represents the
maximum amount for which IBM as well as its suppliers and Program
developers, are collectively responsible.

Limitation of Liability (Section 4): In France and Belgium, the
following replaces the terms of this section in its entirety:

Except as otherwise provided by mandatory law:

1. IBM's liability for any damages and losses that may arise as a
consequence of the fulfillment of its obligations under or in connection
with this agreement is limited to the compensation of only those damages
and losses proved and actually arising as an immediate and direct
consequence of the non- fulfillment of such obligations (if IBM is at
fault), for a maximum amount equal to the charges You paid for the
Program that has caused the damages.

The above limitation shall not apply to damages for bodily injuries
(including death) and damages to real property and tangible personal
property for which IBM is legally liable.

2. UNDER NO CIRCUMSTANCES IS IBM, OR ANY OF ITS PROGRAM DEVELOPERS,
LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY:
1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL OR INDIRECT DAMAGES, OR
FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; 3) LOST PROFITS, EVEN IF THEY
ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE
DAMAGES; OR 4) LOSS OF BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS.

3. The limitation and exclusion of liability herein agreed applies not
only to the activities performed by IBM but also to the activities
performed by its suppliers and Program developers, and represents the
maximum amount for which IBM as well as its suppliers and Program
developers, are collectively responsible.

Governing Law, Jurisdiction, and Arbitration (Section 6)

Governing Law

The phrase "the laws of the country in which You acquired the Program
license" is replaced by:
1) "the laws of Austria" in Albania, Armenia, Azerbeijan, Belarus,
Bosnia-Herzegovina, Bulgaria, Croatia, Georgia, Hungary, Kazakhstan,
Kyrgyzstan, FYR Macedonia, Moldavia, Poland, Romania, Russia, Slovakia,
Slovenia, Tajikistan, Turkmenistan, Ukraine, Uzbekistan, and FR Yugoslavia;
2) "the laws of France" in Algeria, Benin, Burkina Faso, Cameroon, Cape
Verde, Central African Republic, Chad, Comoros, Congo Republic,
Djibouti, Democratic Republic of Congo, Equatorial Guinea, French
Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea- Bissau, Ivory
Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte,
Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo,
Tunisia, Vanuatu, and Wallis & Futuna;
3) "the laws of Finland" in Estonia, Latvia, and Lithuania;
4) "the laws of England" in Angola, Bahrain, Botswana, Burundi, Egypt,
Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta,
Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome, Saudi
Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates,
the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe; and
5) "the laws of South Africa" in South Africa, Namibia, Lesotho and
Swaziland.

Jurisdiction

The following exceptions are added to this section:

1) In Austria the choice of jurisdiction for all disputes arising out of
this Agreement and relating thereto, including its existence, will be
the competent court of law in Vienna, Austria (Inner-City);
2) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia,
Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique,
Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome, Saudi Arabia, Sierra
Leone, Somalia, Tanzania, Uganda, United Arab Emirates, West Bank/Gaza,
Yemen, Zambia, and Zimbabwe all disputes arising out of this Agreement
or related to its execution, including summary proceedings, will be
submitted to the exclusive jurisdiction of the English courts;
3) in Belgium and Luxembourg all disputes arising out of this Agreement
or related to its interpretation or its execution, the law, and the
courts of the capital city, of the country of Your registered office
and/or commercial site location only are competent;
4) in France, Algeria, Benin, Burkina Faso, Cameroon, Cape Verde,
Central African Republic, Chad, Comoros, Congo Republic, Djibouti,
Democratic Republic of Congo, Equatorial Guinea, French Guiana, French
Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon,
Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New
Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu,
and Wallis & Futuna all disputes arising out of this Agreement or
related to its violation or execution, including summary proceedings,
will be settled exclusively by the Commercial Court of Paris;
5) in Russia all disputes arising out of or in relation to the
interpretation, the violation, the termination, the nullity of the
execution of this Agreement shall be settled by Arbitration Court of
Moscow;
6) in South Africa, Namibia, Lesotho and Swaziland both of us agree to
submit all disputes relating to this Agreement to the jurisdiction of
the High Court in Johannesburg;
7) in Turkey all disputes arising out of or in connection with this
Agreement shall be resolved by the Istanbul Central (Sultanahmet) Courts
and Execution Directorates of Istanbul, the Republic of Turkey;
8) in each of the following specified countries, any legal claim arising
out of this Agreement will be brought before, and settled exclusively
by, the competent court of a) Athens for Greece, b) Tel Aviv-Jaffa for
Israel, c) Milan for Italy, d) Lisbon for Portugal, and e) Madrid for
Spain; and
9) in the United Kingdom both of us agree to submit all disputes
relating to this Agreement to the jurisdiction of the English courts.

Arbitration

In Albania, Armenia, Azerbeijan, Belarus, Bosnia- Herzegovina, Bulgaria,
Croatia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, FYR Macedonia,
Moldavia, Poland, Romania, Russia, Slovakia, Slovenia, Tajikistan,
Turkmenistan, Ukraine, Uzbekistan, and FR Yugoslavia all disputes
arising out of this Agreement or related to its violation, termination
or nullity will be finally settled under the Rules of Arbitration and
Conciliation of the International Arbitral Center of the Federal
Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed
in accordance with these rules.
The arbitration will be held in Vienna, Austria, and the official
language of the proceedings will be English. The decision of the
arbitrators will be final and binding upon both parties. Therefore,
pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure,
the parties expressly waive the application of paragraph 595 (1) figure
7 of the Code. IBM may, however, institute proceedings in a competent
court in the country of installation.

In Estonia, Latvia and Lithuania all disputes arising in connection with
this Agreement will be finally settled in arbitration that will be held
in Helsinki, Finland in accordance with the arbitration laws of Finland
then in effect. Each party will appoint one arbitrator. The arbitrators
will then jointly appoint the chairman. If arbitrators cannot agree on
the chairman, then the Central Chamber of Commerce in Helsinki will
appoint the chairman.

AUSTRIA: General (Section 5): The following is added to item 4:

For purposes of this clause, contact information will also include
information about You as a legal entity, for example revenue data and
other transactional information.

GERMANY: Limitation of Liability (Section 4): The following paragraph is
added to this Section:

The limitations and exclusions specified in this Section will not apply
to damages caused by IBM intentionally or by gross negligence.

General (Section 5): The following replaces the terms of item 5:

Any claims resulting from this Agreement are subject to a statute of
limitation of three years.

HUNGARY: Limitation of Liability (Section 4): The following is added at
the end of this section:

The limitation and exclusion specified herein shall not apply to
liability for a breach of contract damaging life, physical well-being,
or health that has been caused intentionally, by gross negligence, or by
a criminal act.

The parties accept the limitations of liability as valid provisions and
state that the Section 314.(2) of the Hungarian Civil Code applies as
the acquisition price as well as other advantages arising out of the
present Agreement balance this limitation of liability.

IRELAND: No Warranty (Section 3): The following is added to this section:

Except as expressly provided in these terms and conditions, or section
12 of the Sale of Goods Act 1893 (as amended by the Sale of Goods and
Supply of Services Act 1980 ("the 1980 Act")), all conditions and
warranties (express or implied, statutory or otherwise) are hereby
excluded including, without limitation, any warranties implied by the
Sale of Goods Act 1893 as amended by the 1980 Act (including, for the
avoidance of doubt, section 39 of the 1980 Act).

Limitation of Liability (Section 4): The following replaces the terms of
this section in its entirety:

For the purposes of this section, a "Default" means any act, statement,
omission, or negligence on the part of IBM in connection with, or in
relation to, the subject matter of an Agreement in respect of which IBM
is legally liable to You whether in contract or tort. A number of
Defaults which together result in, or contribute to, substantially the
same loss or damage will be treated as one Default occurring on the date
of occurrence of the last such Default.

Circumstances may arise where, because of a Default, You are entitled to
recover damages from IBM. This section sets out the extent of IBM's
liability and Your sole remedy.

1. IBM will accept unlimited liability for (a) death or personal injury
caused by the negligence of IBM, and (b) subject always to the Items for
Which IBM is Not Liable below, for physical damage to Your tangible
property resulting from the negligence of IBM.

2. Except as provided in item 1 above, IBM's entire liability for actual
damages for any one Default will not in any event exceed the greater of
1) EUR 125,000, or 2) 125% of the amount You paid for the Program
directly relating to the Default. These limits also apply to any of
IBM's suppliers and Program developers. They state the maximum for which
IBM and such suppliers and Program developers are collectively responsible.

Items for Which IBM is Not Liable

Save with respect to any liability referred to in item 1 above, under no
circumstances is IBM or any of its suppliers or Program developers
liable for any of the following, even if IBM or they were informed of
the possibility of such losses:

1. loss of, or damage to, data;

2. special, indirect, or consequential loss; or

3. loss of profits, business, revenue, goodwill, or anticipated savings.

ITALY: General (Section 5): The following is added to this section:

IBM and Customer (hereinafter, individually, "Party") shall comply with
all the obligations of the applicable provisions of law and/or
regulation on personal data protection. Each of the Parties will
indemnify and keep the other Party harmless from any damage, claim, cost
or expense incurred by the latter, directly and or indirectly, as a
consequence of an infringement of the other Party of the mentioned
provisions of law and/or regulations.

SLOVAKIA: Limitation of Liability (Section 4): The following is added to
the end of the last paragraph:

The limitations apply to the extent they are not prohibited under §§
373-386 of the Slovak Commercial Code.

General (Section 5): The terms of item 5 are replaced with the following:

THE PARTIES AGREE THAT, AS DEFINED BY APPLICABLE LOCAL LAW, ANY LEGAL OR
OTHER ACTION RELATED TO A BREACH OF THIS AGREEMENT MUST BE COMMENCED NO
LATER THAN FOUR YEARS FROM THE DATE ON WHICH THE CAUSE OF ACTION AROSE.

SWITZERLAND: General (Section 5): The following is added to item 4:

For purposes of this clause, contact information will also include
information about You as a legal entity, for example revenue data and
other transactional information.

UNITED KINGDOM: No Warranty (Section 3): The following replaces the
first sentence in the first paragraph of this section:

SUBJECT TO ANY STATUTORY WARRANTIES WHICH CANNOT BE EXCLUDED, IBM MAKES
NO WARRANTY OR CONDITION EITHER EXPRESS OR IMPLIED, INCLUDING (WITHOUT
LIMITATION) THE IMPLIED WARRANTIES OF SATISFACTORY QUALITY, FITNESS FOR
A PARTICULAR PURPOSE, AND NON- INFRINGEMENT, REGARDING THE PROGRAM.

Limitation of Liability (Section 4): The following replaces the terms of
this section in its entirety:

For the purposes of this section, a "Default" means any act, statement,
omission, or negligence on the part of IBM in connection with, or in
relation to, the subject matter of an Agreement in respect of which IBM
is legally liable to You, whether in contract or tort. A number of
Defaults which together result in, or contribute to, substantially the
same loss or damage will be treated as one Default.

Circumstances may arise where, because of a Default, You are entitled to
recover damages from IBM. This section sets out the extent of IBM's
liability and Your sole remedy.

1. IBM will accept unlimited liability for:

a. death or personal injury caused by the negligence of IBM;

b. any breach of its obligations implied by Section 12 of the Sale of
Goods Act 1979 or Section 2 of the Supply of Goods and Services Act
1982, or any statutory modification or re- enactment of either such
Section; and

c. subject always to the Items for Which IBM is Not Liable below, for
physical damage to Your tangible property resulting from the negligence
of IBM.

2. IBM's entire liability for actual damages for any one Default will
not in any event, except as provided in item 1 above, exceed the greater
of 1) £75,000, or 2) 125% of the amount You paid for the Program
directly relating to the Default. These limits also apply to IBM's
suppliers and Program developers. They state the maximum for which IBM
and such suppliers and Program developers are collectively responsible.

Items for Which IBM is Not Liable

Save with respect to any liability referred to in item 1 above, under no
circumstances is IBM or any of its suppliers or Program developers
liable for any of the following, even if IBM or they were informed of
the possibility of such losses:

1. loss of, or damage to, data;

2. special, indirect, or consequential loss; or

3. loss of profits, business, revenue, goodwill, or anticipated savings.

Z125-5544-02 (11/2002)
LICENSE INFORMATION

The Programs listed below are licensed under the following terms and
conditions in addition to those of the International License Agreement
for Early Release of Programs.

Program Name: IBM(R) SDK, Java(TM) 2 Technology Edition, Version 5.0
Early Access Release
Program Number: 6205-001

Specified Operating Environment

The Program's specifications and specified operating environment
information may be found in documentation accompanying the Program, if
available, such as a read-me file, or other information published by
IBM, such as an announcement letter.

Evaluation Period

The evaluation period begins on the date that You agree to the terms of
this Agreement and ends after 90 days.

Program-unique Terms

1. GENERAL

a) To the extent of any conflict between the terms of the International
License Agreement for Early Release of Programs and this License
Information, the terms of this License Information shall prevail.

b) Where the Program has been provided to you separately by IBM, it is
provided at no charge.

c) The Program consists of binary code that executes on the operating
system(s) specified in Readme files that accompany the Program.

d) You are not authorized to use the Program or any component thereof
for executing any production workload.

e) No right is granted to you under this license to redistribute any
part of the Program.

f) In the event of any defect in the Program being reported by you to
IBM, IBM makes no commitment to upgrade the Program or to remedy such
defect.

g) You agree to comply with all applicable export and import laws and
regulations.

h) You may not without IBM's prior written consent (i) use (or allow the
use of) the Program, or of any of its components, for the purposes of
benchmarking against any other version or implementation of Java 5; or
(ii) publish, disclose or otherwise communicate to any third party the
results of any benchmarking of the Program.

2. TRADEMARKS AND COPYRIGHT: YOUR RESPONSIBILITIES

a) You shall not modify, delete, suppress, or obscure any copyright,
trademark or other legal notice (whether from IBM or any third party)
which may be displayed by or included within the Program.

b) Java and all Java-based Trademarks are trademarks of Sun
Microsystems, Inc. in the United States, other countries, or both.

c) You recognize IBM's and Sun Microsystems, Inc.'s ownership and title
to their respective trademarks and of any goodwill attaching thereto,
including goodwill resulting from use. You will not use or attempt to
register any trademark which is confusingly similar to such IBM or Sun
trademarks.

3. PROOF OF ENTITLEMENT

This License Agreement constitutes your Proof of Entitlement.



D/N: L-ADAN-63KLDA
P/N: L-ADAN-63KLDA
