<html><body>

<!-- BROOKLYN_VERSION_BELOW -->
Javadoc for <a href="http://brooklyn.io"> Apache Brooklyn</a> 0.9.0-SNAPSHOT

<p>
                Apache Brooklyn is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the 
                Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the
                infrastructure, communications, and decision making process have stabilized in a manner consistent with other
                successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of
                the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</p>
<p>
                Apache Brooklyn is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License v2.0</a>.
</p>

<p>
<!-- BROOKLYN_VERSION_BELOW -->
This is the Javadoc for v 0.9.0-SNAPSHOT (git SHA1 hash ${SHA1STAMP}) auto-generated on ${DATESTAMP}.
</p> 

</body><html>
