End User License Agreement (EULA)

This Software Licensing Agreement ("Agreement") is a legal agreement between you and
GarageGames.com, Inc. ('GarageGames'). These are the only terms by which GarageGames permits
any use of the Software.

GarageGames Licensing Agreement for Marble Blast.

1. The Software.
The Software licensed under this Agreement is the computer program entitled 'Marble Blast',
which consists of executable files, data files, and documentation.

2. Grant of License.
GarageGames grants you the nontransferable, nonexclusive right to use the Software in
accordance with the terms of this Agreement.

YOU MAY: (i) load the software into RAM as well as install it on a hard disk or other
storage device, and (ii) make one copy for backup purposes.

YOU MAY NOT: modify, translate, disassemble, reverse engineer, decompile, or create
derivative works based upon the Software.

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 GarageGames both financially and professionally. Any
unauthorized distribution of your registered version will result in immediate and automatic
termination of your license, and may result in civil and criminal penalties.

3. Copyright.
The Software is owned by GarageGames and is protected by United States copyright laws and
international treaties. GarageGames reserves the exclusive copyright and all other rights,
title and interest to distribute the Software, and to use Trademarks in connection with
them. &#8220;Trademarks&#8221; refers to the name of the Software, the Software logo, the
name GarageGames, and the GarageGames logo.


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. GARAGEGAMES 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 Software, and supercedes all
prior understandings, agreements, and documentation relating to the Software. 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, without regard for its conflict of laws principles. 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. 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.
