Apache Flink
Copyright 2014-2018 The Apache Software Foundation

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

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

Apache Flink contains subcomponents with separate copyright notices and
license terms. Your use of the source code for the these subcomponents
is subject to the terms and conditions of their respective licenses.

See the LICENSE file for a list of subcomponents and dependencies and
their respective licenses.


lodash:
---------
Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
