Apache UIMA
Copyright 2006 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 includes the software, Apache Portable Runtime 1.6.5
Copyright (c) 2000-2018 The Apache Software Foundation.

This product includes software developed at
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.

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. 

---------------------
This product includes the software Apache ActiveMQ CPP 3.9.3
=========================================================================
==  ZLib Compression / Decompression Library Notice                    ==
=========================================================================
This product includes software developed by the Jean-loup Gailly and Mark Adler
http://www.zlib.net/

---------------------
This product includes the software Apache Portable Runtime Utility Library 1.6.1
Copyright (c) 2000-2016 The Apache Software Foundation.

This product includes software developed at
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).
