Coherent Graphics Ltd Non-Commercial Use License Agreement

(Please see also the license statement in the file xmlm.ml)

[To be released from this agreement (in other words to use the software
commercially) visit http://www.coherentpdf.com/ and purchase a license.]

This Coherent Graphics Ltd License Agreement is a legal agreement between you
and Coherent Graphics Ltd for the software, data and documentation mentioned
above (together, the "Software").

By installing, copying or otherwise using this Software, you agree to be bound
by the terms of this license agreement. If you do not agreee, do not install,
copy, or use the Software. The Software is protected by copyright and other
intellectual property laws and is licensed, not sold.


SCOPE OF RIGHTS:

You may use, copy, reproduce and distribute this Software for any
non-commercial purpose subject to the restrictions in this license. For
example, teaching, academic research and personal experimentation.

You may not use or distribute this Software or any derivative works in any form
for commercial purposes. For example running business operations, licensing,
leasing, or selling the Software, distributing the Software for use with
commercial products, using the Software in the creation or use of commercial
products or any other activity whose purpose is to procure a commercial gain to
you or others.

If the Software contains source code, you may create derivative works of such
portions of the Software and distribute them under the same terms and
conditions as in this license, and you will not grant other rights to the
Software or derivative works that are different from this license.

If you have created derivative works of the Software, and distribute them, they
must carry prominent notices so that recipients know they are not receiving the
original software.


In return for these rights, we require:

1. That you will not remove any copyright or other notices from the software

2. The Coherent Graphics Ltd is granted back, without any restrictions or
limitations, a non-exclusive, perpetual, irrevocable, royalty-free, assignable
and sub-licensable license to reproduce, perform or display, install, use,
modify, post, distribute, make and have made, sell and transfer your
modifications to and/or derivative works of the Software source code or data,
for any purpose.

3. THAT THE SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS,
IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST
INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OR TITLE OF
NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THE SOFTWARE WILL FULFILL ANY OF
YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS DISCLAIMER ON
WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS.

4. THAT NEITHER COHERENT GRAPHICS LTD NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL
BE LIABLE FOR ANY DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE, INCLUDING
DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE MAXIMUM
EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. ALSO, YOU
MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE THE SOFTTWARE
OR DERIVATIVE WORKS.

5. That we have no duty of reasonable care or lack of negligence, and we are
not obligated to provide technical support for the Software.

6. That if you breach this license, this license terminated immediately.
Sections 3,4,5,7 and 8 of this license survive such or any termination.

7. That all rights not expressly granted to you in this license are reserved.

8. That this license shall be construed and controlled by the laws of the
United Kingdom of Great Britain and Northern Ireland, without regard to
conflicts of law. If any provision of this license shall be deemed
unenforceable or contrary to the law, the rest of this license shall remain in
full effect and interpreted in an enforceable manner that most nearly captures
the effect of the original license.

