SimpServer test releases License Agreement

This Agreement sets forth the terms and conditions under which test releases 
(also called beta versions) of the software known as SimpServer will be licensed 
by Secway SARL ("Secway") to you ("Licensee") for the duration of the test 
period. 

IMPORTANT: BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING OR 
DISTRIBUTING SIMPSERVER BETA VERSIONS (THE "PRODUCT") OR ANY OF ITS FILES (THE 
"PACKAGE"), THE INDIVIDUAL OR ENTITY LICENSING THE PRODUCT ("LICENSEE") IS 
CONSENTING TO BE BOUND BY AND IS BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE 
DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE BUTTON INDICATING NON-
ACCEPTANCE MUST BE SELECTED, AND LICENSEE MUST NOT INSTALL OR DISTRIBUTE OR USE 
THE SOFTWARE. 


Terms of the license agreement

1.	LICENSE AGREEMENT.  This license agreement governs the obtaining, use, 
duplication, distribution, and modification of the Product and its package. Use, 
duplication, distribution or modification of the Product and its package implies 
the acceptation of this license agreement.  

2.	LICENSE GRANT. 
a.	Secway grants Licensee a non-exclusive and non-transferable license to 
reproduce and use for personal purposes the executable code version of the 
Product for the duration of the test period, provided any copy must contain all 
of the original proprietary notices. 
b.	This license does not entitle Licensee to receive from Secway hard-copy 
documentation, technical support, telephone assistance, or enhancements or 
updates to the Product.
c.	Licensee may not customize the Product unless he has received a written 
agreement from Secway. In this case, the exact terms and extends of this 
customization are to be found in the written agreement. 
d.	Licensee may not redistribute the Product unless for personal or 
internal business purposes. Redistribution must be free except possibly for 
media or bandwidth costs, and redistributed files must be the original package 
as obtained from Secway, without any modification. Distribution of the Product 
or its package aggregated with other programs as part of a larger (possibly 
commercial) software distribution may be permitted by a written agreement from 
Secway. Such distribution is also governed by terms of this license agreement 
plus amendments possibly made by the written agreement.

3.	RESTRICTIONS. 
a.	Except as otherwise expressly permitted in this Agreement, Licensee may 
not: 
i.	modify or create any derivative works of the Product or documentation, 
including translation or localization
ii.	redistribute, encumber, sell, rent, lease, sublicense, or otherwise 
transfer rights to the Product
iii.	remove or alter any trademark, logo, copyright or other proprietary 
notices, legends, symbols or labels in the Product
iv.	publish any results of benchmark tests or evaluation or reverse 
engineering (see below) run on the Product to a third party without Secway's 
prior written consent, which cannot be refused without any  valid reason. 
b.	Decompilation, disassembly, reverse engineering or any attempt to derive 
the source code for the Product is allowed for personal verification purposes 
only. 

4.	FEES. 
a.	There is no license fee for the Product. 
b.	If Licensee wishes to receive the Product on media, there may be a small 
charge for the media and for shipping and handling. Licensee is responsible for 
any and all taxes. 

5.	TERMINATION. 
a.	Without prejudice to any other rights, Licensor may terminate this 
Agreement 1) at the end of the test period, as fixed by Licensor and posted to 
its Web site on the Internet or 2) if Licensee breaches any of its terms and 
conditions. Upon termination, Licensee shall destroy all copies of the Product.

6.	PROPRIETARY RIGHTS. 
a.	Title, ownership rights, and intellectual property rights in the Product 
shall remain in Secway and/or its suppliers. 
b.	Licensee acknowledges such ownership and intellectual property rights 
and will not take any action to jeopardize, limit or interfere in any manner 
with Secway's or its suppliers' ownership of or rights with respect to the 
Product. 
c.	The Product is protected by copyright and other intellectual property 
laws and by international treaties. 
d.	Title and related rights in the content accessed through the Product is 
the property of the applicable content owner and is protected by applicable law. 
The license granted under this Agreement gives Licensee no rights to such 
content.  
e.	The names Secway or Simp or SimpServer may not be used to endorse or 
promote products derived from this software without specific prior written 
permission.

7.	DISCLAIMER OF WARRANTY. 
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE 
PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED 
IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS 
IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT 
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

8.	LIMITATION OF LIABILITY. 
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR OR 
ITS SUPPLIERS OR RESELLERS BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL OR 
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF OR INABILITY TO USE THE PRODUCT, 
INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, 
COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR 
LOSSES, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND REGARDLESS OF THE LEGAL 
OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. 
IN ANY CASE, LICENSOR'S ENTIRE LIABILITY UNDER ANY PROVISION OF THIS AGREEMENT 
SHALL NOT EXCEED IN THE AGGREGATE THE SUM OF THE FEES LICENSEE PAID FOR THIS 
LICENSE (IF ANY) AND FEES FOR SUPPORT OF THE PRODUCT RECEIVED BY SECWAY UNDER A 
SEPARATE SUPPORT AGREEMENT (IF ANY), WITH THE EXCEPTION OF DEATH OR PERSONAL 
INJURY CAUSED BY THE NEGLIGENCE OF LICENSOR TO THE EXTENT APPLICABLE LAW 
PROHIBITS THE LIMITATION OF DAMAGES IN SUCH CASES. SOME JURISDICTIONS DO NOT 
ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO 
THIS EXCLUSION AND LIMITATION MAY NOT BE APPLICABLE. SECWAY IS NOT RESPONSIBLE 
FOR ANY LIABILITY ARISING OUT OF CONTENT PROVIDED BY LICENSEE OR A THIRD PARTY 
THAT IS ACCESSED THROUGH THE PRODUCT AND/OR ANY MATERIAL LINKED THROUGH SUCH 
CONTENT. 

9.	ENCRYPTION. 
The Product containing encryption algorithms that may be forbidden by certain 
legislations or in certain parts of the World, Licensee must ensure himself that 
he has the legal right to import and/or use the Product. When redistributing 
copies of the Product in accordance with 1. and 2., the Licensee shall also 
ensure that he has the legal right to redistribute such copies, especially when 
exporting them. 

10.	HIGH RISK ACTIVITIES. 
The Product is not fault-tolerant and is not designed, manufactured or intended 
for use or resale as on-line control equipment in hazardous environments 
requiring fail-safe performance, such as in the operation of nuclear facilities, 
aircraft navigation or communication systems, air traffic control, direct life 
support machines, or weapons systems, in which the failure of the Product could 
lead directly to death, personal injury, or severe physical or environmental 
damage ("High Risk Activities"). Accordingly, Licensor and its suppliers 
specifically disclaim any express or implied warranty of fitness for High Risk 
Activities. Licensee agrees that Licensor and its suppliers will not be liable 
for any claims or damages arising from the use of the Product in such 
applications.  

11.	MISCELLANEOUS. 
a.	This Agreement constitutes the entire agreement between the parties 
concerning the subject matter hereof. 
b.	This Agreement may be amended only by a writing signed by both parties. 
c.	Except to the extent applicable law, if any, provides otherwise, this 
Agreement shall be governed by the laws of France.
d.	 If any provision in this Agreement should be held illegal or 
unenforceable by a court having jurisdiction, such provision shall be modified 
to the extent necessary to render it enforceable without losing its intent, or 
severed from this Agreement if no such modification is possible, and other 
provisions of this Agreement shall remain in full force and effect. 
e.	The controlling language of this Agreement is French. If Licensee has 
received a translation into another language, it has been provided for 
Licensee's convenience only. 
f.	A waiver by either party of any term or condition of this Agreement or 
any breach thereof, in any one instance, shall not waive such term or condition 
or any subsequent breach thereof. 
g.	The provisions of this Agreement which require or contemplate 
performance after the expiration or termination of this Agreement shall be 
enforceable notwithstanding said expiration or termination. 
h.	Licensee may not assign or otherwise transfer by operation of law or 
otherwise this Agreement or any rights or obligations herein except in the case 
of a merger or the sale of all or substantially all of Licensee's assets to 
another entity. 
i.	This Agreement shall be binding upon and shall inure to the benefit of 
the parties, their successors and permitted assigns. 
j.	Neither party shall be in default or be liable for any delay, failure in 
performance (excepting the obligation to pay) or interruption of service 
resulting directly or indirectly from any cause beyond its reasonable control. 
k.	The relationship between Licensor and Licensee is that of independent 
contractors and neither Licensee nor its agents shall have any authority to bind 
Licensor in any way. 
l.	If any dispute arises under this Agreement, the prevailing party shall 
be reimbursed by the other party for any and all legal fees and costs associated 
therewith. 
m.	The headings to the sections of this Agreement are used for convenience 
only and shall have no substantive meaning. 
n.	Licensor may use Licensee's name in any customer reference list or in 
any press release issued by Licensor regarding the licensing of the Product 
and/or provide Licensee's name and the names of the Product licensed by Licensee 
to third parties. 



[end.]