Apache Helix
Copyright 2014 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
Licensed under the Apache License 2.0.

This product includes software developed at
Codehaus (http://www.codehaus.org/).
Licensed under the BSD License.

This product includes software developed at
jline (http://jline.sourceforge.net/).
Licensed under the BSD License.

This product includes software developed at
restlet (http://www.restlet.org/about/legal).
Licensed under the Apache License 2.0.

This product includes software developed at
Google (http://www.google.com/).
Licensed under the Apache License 2.0.

This product includes software developed at
snakeyaml (http://www.snakeyaml.org/).
Licensed under the Apache License 2.0.

This product includes software developed at
zkclient (https://github.com/sgroschupf/zkclient).
Licensed under the Apache License 2.0.

II. License Summary
- Apache License 2.0
- BSD License