=========================================================================
==  Example NOTICE file for use with the Apache License, Version 2.0,  ==
==  in this case for the Apache httpd-2.5.0 distribution.              ==
=========================================================================

Apache HTTP Server
Copyright 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).
