Apache Syncope
Copyright 2012 The Apache Software Foundation

This product includes software developed by:
The Apache Software Foundation (http://www.apache.org/).

The following copyright notice(s) were affixed to portions of this code
with which this file is now or was at one time distributed.

===

This product includes software developed by the Code Generation Library project.

===

This product includes software developed by QOS.ch.
Copyright (C) 1999-2011, QOS.ch. All rights reserved.
This software is included in binary form only.

==

This product contains unmodified binary redistributions for H2 database engine
(http://www.h2database.com/), which is dual licensed and available under a 
modified version of the MPL 1.1 (Mozilla Public License) or under the 
(unmodified) EPL 1.0 (Eclipse Public License).
An original copy of the license agreement can be found at: 
http://www.h2database.com/html/license.html

==

This product includes software developed by the XStream project
Copyright (c) 2003-2006, Joe Walnes
Copyright (c) 2006-2009, XStream Committers
All rights reserved.

==

This product includes software developed by the Activiti BPM Platform project.

==

This product includes AspectJ (>= 1.52) software developed by the Eclipse 
Software Foundation.
This software is included in binary form only.

==

This product includes software developed by the Groovy project.

==

This product includes software developed by the Jackson project
Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi
All rights reserved.

==

This product includes software developed by Tirasa (http://www.tirasa.net)
Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
Copyright 2011-2012 Tirasa S.r.l. All rights reserved.
This software is included in binary form only.

==

This product includes software developed by the Groovy project.

==

This product includes software developed by the Javassist project at JBoss.

==

This product includes software developed by Terracotta. Inc.
Quartz Scheduler source code and documentation are Copyright (c) 2001-2010 Terracotta, Inc.

==

This product includes software developed by QOS.ch
Copyright (c) 2004-2011 QOS.ch
All rights reserved.

==

This product includes software developed by SpringSource
Copyright (c) 2002-2012 SpringSource
All rights reserved.

==

This product includes software developed by the Groovy project.

==

This product includes software developed by the Livetribe project.

==

This product includes software developed by the MyBatis project.

==

This product includes software developed by the XMLPULL API project.
Copyright (c) 2001 Stefan Haustein / Aleksander Slominski
All rights reserved.

==

This product includes software developed by the Indiana University Extreme! Lab.
Copyright (c) 2002 Extreme! Lab, Indiana University.
All rights reserved.

==

This product includes software developed by the AOP Alliance (Java/J2EE AOP standards).

==

This product includes software developed by the ObjectWeb consortium.
Copyright (c) 2000-2011 INRIA, France Telecom
All rights reserved.

==

This product includes software developed by the ANTLR Project.
Copyright (c) 2010 Terence Parr
All rights reserved.

==

This product includes software developed by the dom4j Project.
Copyright 2001-2005 (C) MetaStuff, Ltd.
All Rights Reserved.

==

This product includes software developed by the Joda Time project.

==
