Apache Falcon

Copyright 2011-2018 The Apache Software Foundation

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

This product includes JMS specifications (https://javaee.github.io/jms-spec/)
 which is distributed under the Common Development and Distribution License
 (https://javaee.github.io/jms-spec/LICENSE)

This product includes Metro mimepull (https://javaee.github.io/metro-mimepull)
 which is distributed under the Common Development and Distribution License
 (https://github.com/javaee/metro-mimepull/blob/master/LICENSE)

*****************
CC BY-SA 3.0
*****************

The following binary components are provided under CC BY-SA 3.0
  entypo-icon (Entypo pictograms by Daniel Bruce - www.entypo.com)
