This Software Licensing Agreement ("Agreement") is a legal agreement
between you and BraveTree Productions, LLC. ("BraveTree"). By
installing this Software, by loading or running the Software, by
placing or copying the Software onto your hard drive, or by
distributing the Software, you agree to be bound by the terms of this
Agreement. These are the only terms by which BraveTree permits
copying or use.

BraveTree Productions, LLC. LICENSE AGREEMENT FOR ThinkTanks

General terms:


1. THE SOFTWARE.
The Software licensed under this agreement is the computer program
ThinkTanks, which consists of executable files, data files, and
documentation.

2. GRANT OF LICENSE.
BraveTree grants you the right to use the Software in accordance with
the terms of this Agreement. You may load the software into RAM as
well as install it on a hard disk or other storage device. You may
not modify, translate, disassemble, reverse engineer, decompile, or
create derivative works based upon the Software. You agree that the
Software will not be shipped, transferred, or exported into any
country in violation of the U.S. Export Administration Act and that
you will not utilize the Software in violation of any applicable law.

2.1. DEMO VERSION LICENSE.
You may distribute copies of the demo version of the Software freely
to other users, provided that any copy must contain the original,
unaltered files and proprietary notices. You have the ability to
register the demo version at any time by purchasing the full version
from BraveTree.

2.2. REGISTERED VERSION LICENSE.
When you purchase the Software, you will receive the full registered
version. You agree not to distribute the registered version to others
and to use it only for your own personal use. You acknowledge that
distribution of the registered version to others, whether intentional
or unintentional, could damage BraveTree both financially and
professionally. Any unauthorized distribution of your registered
version will result in immediate and automatic termination of your
license.

3. COPYRIGHT.
The Software is owned by BraveTree and is protected by United States
copyright laws and international treaties. You must treat the
Software like any other copyrighted material, except that you may
make copies of the demo version of the Software to give to other
persons under the terms of this Agreement. You may not distribute
copies of the registered version to others. Except as expressly
licensed by BraveTree in writing, BraveTree reserves the exclusive
copyright and all other rights, title and interest to distribute the
Software, and to use Trademarks in connection with them. "Trademarks"
refers to the name of the Software, the name BraveTree, and the
BraveTree logo, which are trademarks of BraveTree.

4. NO WARRANTY.
THE SOFTWARE IS PROVIDED "AS-IS". NO WARRANTIES OF ANY KIND, EXPRESS
OR IMPLIED, ARE MADE AS TO IT OR ANY MEDIUM IT MAY BE ON. BraveTree
Productions, LLC. WILL PROVIDE NO REMEDY FOR INDIRECT, CONSEQUENTIAL,
PUNITIVE OR INCIDENTAL DAMAGES ARISING FROM IT, INCLUDING SUCH FROM
NEGLIGENCE, STRICT LIABILITY, OR BREACH OF WARRANTY OR CONTRACT, EVEN
AFTER NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

5. TERM.
The term of this license grant is perpetual. You may terminate this
Agreement at any time by destroying all copies of the Software in
your possession. Your license to use the Software will automatically
terminate if you breach the terms of this Agreement.

6. GENERAL PROVISIONS.
This Agreement is the sole and entire Agreement relating to the
subject matter hereof, and supercedes all prior understandings,
agreements, and documentation relating to such subject matter. If any
provision in this Agreement is held by a court of competent
jurisdiction to be invalid, void, or unenforceable, the remaining
provisions will continue in full force without being impaired or
invalidated in any way. This Agreement will be governed by the laws
of the State of Oregon. With respect to every matter arising under
this Agreement, you consent to the exclusive jurisdiction and venue
of the state and federal courts sitting in Lane County, Oregon, and
to service by certified mail, return receipt requested, or as
otherwise permitted by law. This Agreement does not create any agency
or partner relationship. Your rights under this Agreement are
personal and do not include any right to sublicense the Software.
This Agreement may be terminated by BraveTree by giving a 30-day
advance written notice.

7. DISTRIBUTION.
BraveTree allows and encourages all web sites, on-line services,
shareware disk vendors, CD-ROM vendors, bulletin board systems, and
end-users to freely distribute the demo version of this Software. If
you wish to distribute the Software, you may obtain the most recent
version from www.garagegames.com. It is generally not necessary to
contact BraveTree for authorization, and you may begin offering the
demo version immediately.

Thank you for using this Software in accordance with the terms of
this Agreement.
