Apache FreeMarker
Copyright 2015-2016 The Apache Software Foundation

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

=========================================================================

FreeMarker, both in its source code and binary form (freemarker.jar)
includes files that were developed outside the FreeMarker project, and
are licensed by the Apache Software Foundation under the Apache License,
Version 2.0. This is the same license as the license of FreeMaker. These
files are:
  
    src/main/resources/freemarker/ext/jsp/web-app_2_2.dtd
    src/main/resources/freemarker/ext/jsp/web-app_2_3.dtd
    src/main/resources/freemarker/ext/jsp/web-jsptaglibrary_1_1.dtd
    src/main/resources/freemarker/ext/jsp/web-jsptaglibrary_1_2.dtd

=========================================================================

The FreeMarker source code contains the following binaries, which were
produced by the FreeMarker project itself, and are hence covered by the
license of the FreeMarker project:

    src/main/misc/overloadedNumberRules/prices.ods
    src/manual/en_US/docgen-originals/figures/overview.odg

=========================================================================
