Apache UIMA
Copyright 2007, 2009, 2012 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of UIMACPP were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant License Agreement", informally known as the 
"IBM UIMA License Agreement".
Copyright (c) 2003, 2007 IBM Corporation.

This product includes the software, International Components for
Unicode, ICU (http://www.icu-project.org). Copyright (c) 1995-2006
International Business Machines Corporation and others.

This product include the software, APR 1.3.8
Apache Portable Runtime
Copyright (c) 2009 The Apache Software Foundation.

Portions of this software were developed at the National Center
for Supercomputing Applications (NCSA) at the University of
Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security
Inc. MD5 Message-Digest Algorithm.

This software contains code derived from UNIX V7, Copyright(C)
Caldera International Inc.

This product includes the software, Apache Xerces 
Portions of this software were originally based on the following:
     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com. 


For ActiveMQ CPP 3.4.1
=========================================================================
==  ZLib Compression / Decompression Library Notice                    ==
=========================================================================
This product includes software developed by the Jean-loup Gailly and Mark Adler
http://www.zlib.net/

------------------------------------------------------------------------
Apache Portable Runtime Utility Library
Copyright (c) 2009 The Apache Software Foundation.

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Portions of this software were developed at the National Center
for Supercomputing Applications (NCSA) at the University of
Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security
Inc. MD5 Message-Digest Algorithm, including various
modifications by Spyglass Inc., Carnegie Mellon University, and
Bell Communications Research, Inc (Bellcore).
