Merge and close #18
diff --git a/.gitignore b/.gitignore
index ff6bf3c..50cda82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 _site
-_config_local.yml
 *~
 .idea
+.project
+.settings
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index bc46bf5..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-#ruby=ruby-2.1.2
-#ruby-gemset=incubator-brooklyn-site
-
-source 'https://rubygems.org'
-
-gem 'jekyll'
-gem 'therubyracer'
-gem 'link-checker'
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index cf69053..0000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,87 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    anemone (0.7.2)
-      nokogiri (>= 1.3.0)
-      robotex (>= 1.0.0)
-    blankslate (2.1.2.4)
-    celluloid (0.15.2)
-      timers (~> 1.1.0)
-    classifier (1.3.4)
-      fast-stemmer (>= 1.0.0)
-    coffee-script (2.2.0)
-      coffee-script-source
-      execjs
-    coffee-script-source (1.7.0)
-    colorator (0.1)
-    colorize (0.5.8)
-    execjs (2.2.1)
-    fast-stemmer (1.0.2)
-    ffi (1.9.3)
-    jekyll (2.1.0)
-      classifier (~> 1.3)
-      colorator (~> 0.1)
-      jekyll-coffeescript (~> 1.0)
-      jekyll-gist (~> 1.0)
-      jekyll-paginate (~> 1.0)
-      jekyll-sass-converter (~> 1.0)
-      jekyll-watch (~> 1.0)
-      kramdown (~> 1.3)
-      liquid (~> 2.6.1)
-      mercenary (~> 0.3.3)
-      pygments.rb (~> 0.6.0)
-      redcarpet (~> 3.1)
-      safe_yaml (~> 1.0)
-      toml (~> 0.1.0)
-    jekyll-coffeescript (1.0.0)
-      coffee-script (~> 2.2)
-    jekyll-gist (1.1.0)
-    jekyll-paginate (1.0.0)
-    jekyll-sass-converter (1.0.0)
-      sass (~> 3.2)
-    jekyll-watch (1.0.0)
-      listen (~> 2.7)
-    kramdown (1.4.0)
-    libv8 (3.16.14.3)
-    link-checker (0.7.2)
-      anemone (~> 0.7.2)
-      colorize (~> 0.5.8)
-      nokogiri (~> 1.5.5)
-      trollop (~> 2.0)
-    liquid (2.6.1)
-    listen (2.7.9)
-      celluloid (>= 0.15.2)
-      rb-fsevent (>= 0.9.3)
-      rb-inotify (>= 0.9)
-    mercenary (0.3.3)
-    nokogiri (1.5.11)
-    parslet (1.5.0)
-      blankslate (~> 2.0)
-    posix-spawn (0.3.8)
-    pygments.rb (0.6.0)
-      posix-spawn (~> 0.3.6)
-      yajl-ruby (~> 1.1.0)
-    rb-fsevent (0.9.4)
-    rb-inotify (0.9.5)
-      ffi (>= 0.5.0)
-    redcarpet (3.1.2)
-    ref (1.0.5)
-    robotex (1.0.0)
-    safe_yaml (1.0.3)
-    sass (3.3.9)
-    therubyracer (0.12.1)
-      libv8 (~> 3.16.14.0)
-      ref
-    timers (1.1.0)
-    toml (0.1.1)
-      parslet (~> 1.5.0)
-    trollop (2.0)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  jekyll
-  link-checker
-  therubyracer
diff --git a/README.md b/README.md
index cba9589..1a1f2c0 100644
--- a/README.md
+++ b/README.md
@@ -1,107 +1,5 @@
-Brooklyn Website source
+Legacy Brooklyn Website
 =======================
 
-Contributor worflow
--------------------
-
-The contributor workflow is identical to that used by the main project, with
-the exception of the different repository - `incubator-brooklyn-site` instead
-of `incubator-brooklyn`. Therefore you should familiarise yourself with the
-standard workflow for Apache Brooklyn:
-
-* [Guide for contributors][CONTRIB]
-* [Guide for committers][COMMIT]
-
-[CONTRIB]: https://brooklyn.incubator.apache.org/community/how-to-contribute.html
-[COMMIT]: https://brooklyn.incubator.apache.org/community/committers.html
-
-
-Workstation setup
------------------
-
-First, clone the `incubator-brooklyn-site` repository and set up the remotes as
-described in [Guide for committers][COMMIT].
-
-Install [RVM](http://rvm.io/); this manages Ruby installations and sets of Ruby
-gems.
-
-    \curl -sSL https://get.rvm.io | bash -s stable
-
-At this point, close your shell session and start a new one, to get the new
-environment that RVM has configured. Now change directory to the location where
-you checked out your repository; RVM should detect its configuration inside
-`Gemfile` and try to configure itself. Most likely it will report that the
-required version of Ruby is not installed; it will show the command that you
-need to run to install the correct version. Follow the instructions.
-
-Once the correct version of Ruby is installed, change to your home directory
-(`cd ~`) and then change back to the repository again (`cd -`). This will cause
-RVM to re-load configuration from `Gemfile` with the correct version of Ruby.
-
-If you are running Ubuntu, there is a further dependency that is required:
-
-    sudo apt-get install libxslt-dev libxml2-dev
-
-Finally, run this command to install all the required Gems in the correct
-versions:
-
-    bundle install
-
-
-Building and previewing the website
------------------------------------
-
-### Using Jekyll's in-built server
-
-Run the command:
-
-    jekyll serve
-    
-or:
-
-    jekyll serve --watch
-
-This will start up a local web server. The URL is printed by Jekyll when the server starts. It will continue to run
-until you press Ctrl+C.
-
-
-### Using file:/// URLs
-Run this script:
-
-    ./_scripts/build-preview
-
-This will run Jekyll using a base URL of type `file://` for the repository
-directory. This means that it is possible to browse the generated files,
-located in the `_site` directory, using a web browser pointed at your
-filesystem. Unfortunately it does mean that moving the files, or attempting to
-point a web server host at them, will not work.
-
-
-Building and publishing the website
------------------------------------
-
-Run this script:
-
-    ./_scripts/build-for-publication
-
-This will run Jekyll with the correct base URL for the live website and place
-the output in the `_site` directory.
-
-The Apache website publication process is based around the Subversion repository; the generated HTML files must be checked in to Subversion, whereupon an automated process will publish the files to the live website.
-
-Starting in a suitable directory, check out the website directory from the repository:
-
-    svn co https://svn.apache.org/repos/asf/incubator/brooklyn/site incubator-brooklyn-site-public
-    cd incubator-brooklyn-site-public
-
-Synchronise the generated site into the Subversion working copy - please amend this command to include the correct paths for your setup:
-
-    rsync -rv --delete --exclude .svn --exclude v ~/incubator-brooklyn-site/_site/ ~/incubator-brooklyn-site-public
-
-Review the changes using the usual `svn` commands - e.g., `status`, `diff`, `add`, `rm`, etc.
-
-Once you are ready to publish, commit the changes to Subversion:
-
-    svn ci -m 'Update Brooklyn (incubating) website'
-
-The changes will become live within a few minutes.
+The Brooklyn website is now combined with the version-specific docs at:
+https://github.com/apache/incubator-brooklyn/tree/master/docs 
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index 4bf0e21..0000000
--- a/_config.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-exclude: ['LICENSE.md', 'README.md', 'Gemfile', 'Gemfile.lock' ]
-
-# Deliberately add the "/brooklyn" to the URL to catch out places where a document uses a link starting "/" - these
-# links should either be relative or use {{site.url}}. We want to preserve this behaviour to allow the possibility of
-# "staging servers" which may publish preview copies of the site at a non-root URL.
-url: http://0.0.0.0:4000/brooklyn
-baseurl: /brooklyn
diff --git a/_config_for_publication.yml b/_config_for_publication.yml
deleted file mode 100644
index 0f67044..0000000
--- a/_config_for_publication.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-baseurl: ""
-url: https://brooklyn.incubator.apache.org
diff --git a/_layouts/base.html b/_layouts/base.html
deleted file mode 100644
index 9bc6600..0000000
--- a/_layouts/base.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-<title>{{ page.title }} - Apache Brooklyn (incubating)</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8">
-<meta name="viewport" content="width=device-width, initial-scale=1">
-<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
-<link href="{{site.url}}/style/css/bootstrap-theme.css" rel="stylesheet">
-<link href="{{site.url}}/style/css/theme.css" rel="stylesheet">
-</head>
-
-<body>
-
-<nav class="navbar navbar-default navbar-fixed-top" id="header" role="navigation">
-    <div class="container">
-        <div class="container-fluid">
-            <!-- Brand and toggle get grouped for better mobile display -->
-            <div class="navbar-header">
-                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
-                    <span class="sr-only">Toggle navigation</span>
-                    <span class="icon-bar"></span>
-                    <span class="icon-bar"></span>
-                    <span class="icon-bar"></span>
-                </button>
-                {% if page.navgroup != 'home' %}<a class="navbar-brand" href="{{site.url}}"><img src="{{site.url}}/style/img/apache-brooklyn-logo-244px-wide.png" alt="brooklyn"></a>{% endif %}
-            </div>
-
-            <!-- Collect the nav links, forms, and other content for toggling -->
-            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
-                <ul class="nav navbar-nav navbar-right">
-                    {% for navgroup in site.data.navgroups %}
-                    {% if navgroup.page.menu2 %}
-                    <li class="dropdown{% if page.navgroup == navgroup.id %} active{% endif %}">
-                        <a href="{{site.url}}{{navgroup.page.url}}">{{navgroup.title}}</a>
-                        <ul class="dropdown-menu" role="menu">
-                            <li>
-                                <a href="{{site.url}}{{navgroup.page.url}}">{{navgroup.title_in_menu}}</a>
-                            </li>
-                            <li class="divider"></li>
-                            {% for child in navgroup.page.menu2 %}
-                            <li>
-                                <a href="{{site.url}}{{child.reference.url}}">{{child.reference.title}}</a>
-                            </li>
-                            {% endfor %}
-                        </ul>
-                    </li><!-- {{ navgroup.id }} -->
-                    {% else %}
-                    <li class="{% if page.navgroup == navgroup.id %}active{% endif %}"><a href="{{site.url}}{{navgroup.page.url}}">{{navgroup.title}}</a></li><!-- {{ navgroup.id }} -->
-                    {% endif %}
-                    {% endfor %}
-                </ul>
-            </div><!-- /.navbar-collapse -->
-        </div><!-- /.container-fluid -->
-    </div>
-</nav>
-
-{{ content }}
-
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
-<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
-<script language="JavaScript" type="application/javascript">
-    $(window).resize(function () { 
-        $('body').css('padding-top', parseInt($('#header').css("height"))+10);
-        $('body').css('padding-bottom', parseInt($('#footer').css("height"))+10);
-    });
-    
-    $(window).load(function () { 
-        $('body').css('padding-top', parseInt($('#header').css("height"))+10);        
-        $('body').css('padding-bottom', parseInt($('#footer').css("height"))+10);
-    });</script>
-</body>
-</html>
-
diff --git a/_layouts/homepage.html b/_layouts/homepage.html
deleted file mode 100644
index 829142c..0000000
--- a/_layouts/homepage.html
+++ /dev/null
@@ -1,29 +0,0 @@
----
-layout: base
----
-<div class="container slightlyNarrowContainer">
-    {{ content }}
-</div>
-
-<div id="footer">
-    <div class="container">
-        <div class="row">
-            <div class="col-md-9 text-muted">
-                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.
-                Apache Brooklyn is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License v2.0</a>.
-            </div>
-            <div class="col-md-3">
-                <p><img src="https://incubator.apache.org/images/egg-logo.png" alt="Apache Incubator" /></p>
-                <p>
-                    <a class="btn btn-sm btn-default" href="https://github.com/apache/incubator-brooklyn-site/edit/master/{{ page.path }}">Edit This Page</a>
-                    <br />
-                    <a href="https://brooklyn.incubator.apache.org/community/how-to-contribute-docs.html">help with editing</a>
-                </p>
-            </div>
-        </div>
-    </div>
-</div>
diff --git a/_layouts/normal.html b/_layouts/normal.html
deleted file mode 100644
index 519e900..0000000
--- a/_layouts/normal.html
+++ /dev/null
@@ -1,40 +0,0 @@
----
-layout: base
----
-<div class="container">
-    <div class="row">
-        <div class="col-md-9">
-            <h1>{{ page.title }}</h1>
-            {{ content }}
-        </div>
-        <div class="col-md-3">
-            {% if page.menu2 %}
-            <div class="list-group">
-                <h4><a href="{{site.url}}{{page.menu2parent.url}}" class="list-group-item{% if page.menu2parent.path == page.path %} active{% endif %}">{{ page.menu2parent.title }}</a></h4>
-                {% for child in page.menu2 %}
-                <a href="{{site.url}}{{child.reference.url}}" class="list-group-item{% if child.reference.path == page.path %} active{% endif %}">{{ child.reference.title }}</a>
-                {% endfor %}
-            </div>
-            {% endif %}
-        </div>
-    </div>
-</div>
-
-<div id="footer">
-    <div class="container">
-        <div class="row">
-            <div class="col-md-10 text-muted">
-                Apache Brooklyn is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
-                License v2.0</a>.
-                <br />
-                Apache Brooklyn is currently undergoing Incubation at The Apache Software
-                Foundation.
-            </div>
-            <div class="col-md-2">
-                <a class="btn btn-sm btn-default" href="https://github.com/apache/incubator-brooklyn-site/edit/master/{{ page.path }}">Edit This Page</a>
-                <br />
-                <a href="https://brooklyn.incubator.apache.org/community/how-to-contribute-docs.html">help with editing</a>
-            </div>
-        </div>
-    </div>
-</div>
diff --git a/_plugins/brooklyn_metadata.rb b/_plugins/brooklyn_metadata.rb
deleted file mode 100644
index 32020a1..0000000
--- a/_plugins/brooklyn_metadata.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# Inserts several useful fields that can be referenced using {{ name }} syntax
-#
-# site.data.brooklyn.version: brooklyn version, such as 0.7.0-M1
-# site.data.brooklyn.is_snapshot: true if this is a snapshot version, otherwise false
-# site.data.brooklyn.url.userguide: URL of the user guide for this version
-#
-module BrooklynMetadata
-
-  BROOKLYN_VERSION = "0.7.0-M1"
-
-  class Generator < Jekyll::Generator
-    def generate(site)
-      is_snapshot = BrooklynMetadata::BROOKLYN_VERSION.end_with?('-SNAPSHOT')
-      
-      if is_snapshot
-        url_set = {
-            "search" => {
-                "all" => "https://oss.sonatype.org/index.html#nexus-search;gav~io.brooklyn~~#{ BrooklynMetadata::BROOKLYN_VERSION }~~",
-                "dist" => "https://oss.sonatype.org/index.html#nexus-search;gav~io.brooklyn~brooklyn-dist~#{ BrooklynMetadata::BROOKLYN_VERSION }~~",
-                "alljar" => "https://oss.sonatype.org/index.html#nexus-search;gav~io.brooklyn~brooklyn-dist~#{ BrooklynMetadata::BROOKLYN_VERSION }~~"
-            },
-            "dist" => {
-                "base" => "https://oss.sonatype.org/content/groups/public/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/",
-                "zip" => "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=#{ BrooklynMetadata::BROOKLYN_VERSION }&a=brooklyn-dist&c=dist&e=zip",
-                "tgz" => "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=#{ BrooklynMetadata::BROOKLYN_VERSION }&a=brooklyn-dist&c=dist&e=tar.gz"
-            },
-            "alljar" => {
-                "base" => "https://oss.sonatype.org/content/groups/public/io/brooklyn/brooklyn-all/#{ BrooklynMetadata::BROOKLYN_VERSION }/",
-                "jar" => "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=#{ BrooklynMetadata::BROOKLYN_VERSION }}&a=brooklyn-all&c=with-dependencies&e=jar"
-            }
-        }
-      else
-        url_set = {
-            "search" => {
-                "all" => "http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22io.brooklyn%22%20AND%20v%3A%22#{ BrooklynMetadata::BROOKLYN_VERSION }%22",
-                "dist" => "http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22io.brooklyn%22%20AND%20a%3A%22brooklyn-dist%22%20AND%20v%3A%22#{ BrooklynMetadata::BROOKLYN_VERSION }%22",
-                "alljar" => "http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22io.brooklyn%22%20AND%20a%3A%22brooklyn-all%22%20AND%20v%3A%22#{ BrooklynMetadata::BROOKLYN_VERSION }%22"
-            },
-            "dist" => {
-                "base" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/",
-                "zip" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/brooklyn-dist-#{ BrooklynMetadata::BROOKLYN_VERSION }-dist.zip",
-                "tgz" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/brooklyn-dist-#{ BrooklynMetadata::BROOKLYN_VERSION }-dist.tar.gz"
-            },
-            "alljar" => {
-                "base" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-all/#{ BrooklynMetadata::BROOKLYN_VERSION }/",
-                "jar" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-all/#{ BrooklynMetadata::BROOKLYN_VERSION }/brooklyn-all-#{ BrooklynMetadata::BROOKLYN_VERSION }-with-dependencies.jar"
-            }
-        }
-      end
-      
-      url_set['userguide'] = "#{site.config['url']}/v/#{BrooklynMetadata::BROOKLYN_VERSION}"
-      
-      site.data['brooklyn'] = {
-          "version" => BrooklynMetadata::BROOKLYN_VERSION,
-          "is_snapshot" => is_snapshot,
-          "url" => url_set
-      }
-    end
-  end
-end
\ No newline at end of file
diff --git a/_plugins/read.rb b/_plugins/read.rb
deleted file mode 100644
index 6ad390a..0000000
--- a/_plugins/read.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# tag to read and insert a file relative to the current working directory
-# (like include, but in the dir where it is invoked)
-
-# there is also readj which reads a file and applies jekyll processing to it
-# handy if we want to include a toc.json file which itself calls {% readj child/toc.json %}
-# (note however variables do not seem to be exported when use readj (TODO),
-# although they are exported if you have _includes/file.md and use the standard include file)
-
-# the argument can be a variable or a filename literal (not quoted)
-# TODO: figure out how to accept a quoted string as an argument
-
-module JekyllRead
-  class ReadTag < Liquid::Tag
-    def initialize(tag_name, text, tokens)
-      super
-      @text = text
-    end
-    def render(context)
-	jekyllSite = context.registers[:site]
-	dir = jekyllSite.source+'/'+File.dirname(context['page']['url'])
-	filename = @text.strip
-        filename = context[filename] || filename
-	if !filename.match(/^\/.*/) 
-		filename = dir + '/' + filename
-	else
-		filename = jekyllSite.source+'/'+filename
-	end
-	filename = filename.gsub(/\/\/+/,'/')
-	file = File.open(filename, "rb")
-	return file.read
-    end
-  end
-
-  class ReadjTag < Liquid::Tag
-    def initialize(tag_name, text, tokens)
-      super
-      @text = text
-    end
-    def render(context)
-	jekyllSite = context.registers[:site]
-	filename = @text.strip
-	filename = context[filename] || filename
-# support vars (above) and relative paths in filename (below - need the right path if there is a subsequent link)
-        dir = filename
-	if !filename.match(/^\/.*/) 
-		dir = File.dirname(context['page']['url']) + '/' + filename
-	end
-	dir = dir.gsub(/\/\/+/,'/')
-	filename = dir.sub(/^.*\//, '')
-	dir = dir.gsub(/\/[^\/]*$/, '/')
-	targetPage = Jekyll::Page.new(jekyllSite, jekyllSite.source, dir, filename)
-	targetPage.render(jekyllSite.layouts, jekyllSite.site_payload)
-	targetPage.output
-    end
-  end
-end
-
-Liquid::Template.register_tag('read', JekyllRead::ReadTag)
-Liquid::Template.register_tag('readj', JekyllRead::ReadjTag)
-
diff --git a/_plugins/site_structure.rb b/_plugins/site_structure.rb
deleted file mode 100644
index 903d0cf..0000000
--- a/_plugins/site_structure.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# Builds a hierarchical structure for the site, based on the YAML front matter of each page
-# Starts from a page called "index.md", and follows "children" links in the YAML front matter
-module SiteStructure
-  
-  ROOT = "index.md"
-  
-  class Generator < Jekyll::Generator
-    def generate(site)
-      navgroups = site.pages.detect { |page| page.path == SiteStructure::ROOT }.data['navgroups']
-      navgroups.each do |ng|
-        ng['page'] = site.pages.detect { |page| page.path == ng['page'] }
-        if not ng['title_in_menu']
-          ng['title_in_menu'] = ng['title'].capitalize
-        end
-      end
-      site.data['navgroups'] = navgroups
-      site.data['structure'] = gen_structure(site, SiteStructure::ROOT, nil, navgroups)
-    end
-    
-    def gen_structure(site, pagename, parent, navgroups)
-      page = site.pages.detect { |page| page.path == pagename }
-      throw "Could not find a page called: #{pagename} (referenced from #{page ? page.url : nil})" unless page
-      
-      # My navgroup is (first rule matches):
-      # 1. what I have explicitly declared
-      # 2. if I find my path referred to in the global navgroup list
-      # 3. my parent's navgroup
-      unless page.data['navgroup']
-        match = navgroups.detect { |ng| ng['page'] == page }
-        if match
-          page.data['navgroup'] = match['id']
-        elsif parent
-          page.data['navgroup'] = parent.data['navgroup']
-        end
-      end
-      
-      # Figure out second level menu
-      # If there's no parent => I'm at the top level, so no action
-      # If there's a parent, but parent has no parent => I'm at second level, so set second-level menu
-      # Otherwise, use the parent's second level menu
-      if parent && !parent.data['parent']
-        page.data['menu2parent'] = page
-        page.data['menu2'] = page.data['children']
-      elsif parent && parent.data['parent']
-        page.data['menu2parent'] = parent.data['menu2parent']
-        page.data['menu2'] = parent.data['menu2']
-      end
-      
-      page.data['parent'] = parent
-      if page.data['children']
-        page.data['children'].each do |c|
-          if c['path']
-            # links to another Jekyll-managed page
-            c['reference'] = gen_structure(site, c['path'], page, navgroups)
-          elsif c['link']
-            # links to a not-Jekyll-managed page on this site
-            c['reference'] = { 'url' => c['link'], 'title' => c['title'] }
-          end
-        end
-      end
-      
-      page
-    end
-  end
-end
\ No newline at end of file
diff --git a/_scripts/build-for-publication b/_scripts/build-for-publication
deleted file mode 100755
index affe61a..0000000
--- a/_scripts/build-for-publication
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash -e
-
-set -x
-
-rm -rf _site
-jekyll build --config _config.yml,_config_for_publication.yml
diff --git a/_scripts/build-preview b/_scripts/build-preview
deleted file mode 100755
index 6b4bc13..0000000
--- a/_scripts/build-preview
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash -e
-
-set -x
-
-sitedir=$( cd $( dirname $0 ); cd ..; pwd )/_site
-siteurl="file://${sitedir}"
-echo > _config_local.yml "baseurl: \"\""
-echo >> _config_local.yml "url: ${siteurl}"
-
-rm -rf _site
-jekyll build --config _config.yml,_config_local.yml
diff --git a/community/committers.md b/community/committers.md
deleted file mode 100644
index 7101eb5..0000000
--- a/community/committers.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-layout: normal
-title: Committer's Guide
-navgroup: community
----
-
-The Apache Brooklyn Git repositories are hosted in the ASF infrastructure and mirrored to Github. This is the current
-repository layout:
-
-- [Apache](https://git-wip-us.apache.org/repos/asf?s=incubator-brooklyn) - the main and official repository
-- [GitHub](https://github.com/apache/incubator-brooklyn) - mirror of the ASF repository, used to accept contributions
-  and do code reviews
-
-
-Before
-------
-
-For everything except the most trivial changes, the submitter must have a CLA on file. Check the [list of Apache
-committers, and non-commiters with ICLAs on record](https://people.apache.org/committer-index.html) and prompt the
-contributor to file an appropriate CLA if required.
-
-For all significant changes, there must be a Jira issue. If a Jira issue is not referenced in the PR and/or commit
-messages, prompt the contributor to open a Jira issue.
-
-
-Rules of thumb
---------------
-
-1. Every contribution is a piece of intellectual property.  This is the precious sustenance that nourishes our
-   project.  Please treat it with respect.
-2. Always give credit where it is due, ensure every merged commit reflects properly the individual who authored that
-   commit.  Preserve both the name and email address.
-3. Ensure your name and email address are there as the committer prior to pushing it to the Apache repositories.
-4. Always strive for linear commit history, avoid merge commits while pulling in contributor's changes.
-
-
-Setting up your repository
---------------------------
-
-Clone the canonical ASF repo using this command. The `--origin` option tells git to name the remote `apache` instead
-of the default, `origin`; this will reduce ambiguity when we later add a second remote upstream.
-
-    git clone --origin apache https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git
-
-Add a second remote, for the GitHub repository.
-
-    git remote add github https://github.com/apache/incubator-brooklyn.git
-
-For the GitHub remote, add an additional `fetch` reference which will cause
-every pull request to be made available as a remote branch in your workspace.
-
-    git config --local --add remote.github.fetch '+refs/pull/*/head:refs/remotes/github/pr/*'
-
-Finally, run `git fetch --all` to update from all remote repositories - you will see all the pull requests appear:
-
-    * [new ref]         refs/pull/98/head -> github/pr/98
-    * [new ref]         refs/pull/99/head -> github/pr/99
-
-
-Merging a pull request
-----------------------
-
-Fetch the latest remote branches, which will cause a remote branch for the PR to become available to you.
-
-    git fetch --all
-
-If you want to inspect the PR and/or run tests, check out the branch:
-
-    git checkout github/pr/1234
-
-To perform the merge, first update your master branch to the latest:
-
-    git checkout master
-    git pull --rebase
-
-Then merge and push:
-
-    git merge --no-ff -m 'This closes #1234' github/pr/1234
-    git push apache master
-
-Note that this commit message is important, as this is what will trigger the
-pull request to be automatically closed, and the `--no-ff` means that a merge
-commit will always be created.
-
-
-Alternative options
--------------------
-
-### Adding the remote reference to the contributor's repository
-
-Fetch the branch of the user you want to merge from
-
-    git fetch https://github.com/user-to-merge-from/incubator-brooklyn.git branch-to-merge-from
-
-If you commonly merge from a particular user, you'll want to add their repo as a remote to make fetching branches easier.
-
-    git remote add user-to-merge-from https://github.com/user-to-merge-from/incubator-brooklyn.git
-    git fetch user-to-merge-from
-
-
-### Merging from a patch file
-
-Save the patch from the Github patch link (just append '.patch' to the pull request link to get it). This patch will
-keep the authorship of the commit, so we should use it instead of the diff.
-
-Apply the patch preserving the original author:
-
-    git am pull-request-9876.patch
-
-
-Additional information
-----------------------
-
-Particularly for new committers, you may find the following information useful:
-
-* [Guide for new project
-  committers](https://www.apache.org/dev/new-committers-guide.html)
-* [Committers FAQ](https://www.apache.org/dev/committers.html)
-* [Git at Apache](https://git-wip-us.apache.org/)
diff --git a/community/fork-after.png b/community/fork-after.png
deleted file mode 100644
index 3148ff3..0000000
--- a/community/fork-after.png
+++ /dev/null
Binary files differ
diff --git a/community/fork-before.png b/community/fork-before.png
deleted file mode 100644
index 276eb9d..0000000
--- a/community/fork-before.png
+++ /dev/null
Binary files differ
diff --git a/community/fork-new.png b/community/fork-new.png
deleted file mode 100644
index 34c2053..0000000
--- a/community/fork-new.png
+++ /dev/null
Binary files differ
diff --git a/community/how-to-contribute-docs.md b/community/how-to-contribute-docs.md
deleted file mode 100644
index ceb3c70..0000000
--- a/community/how-to-contribute-docs.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-layout: normal
-title: How to contribute documentation
-navgroup: community
----
-
-Welcome and thank you for your interest in contributing to Apache Brooklyn! This guide will take you through the
-process of making contributions to the Apache Brooklyn website and documentation.
-
-
-Two types of documentation
---------------------------
-
-The Brooklyn documentation is split into two parts:
-
-- **The main website and shared documentation**. This covers the root website
-  and all pages that are not part of the version-specific user manual. This
-  guide describes how to work with this documentation.
-- **Version-specific user manual**. These pages have a URL with a path that
-  begins /v/*version-number* - for example,
-  https://brooklyn.incubator.apache.org/v/0.7.0-M1. This documentation is part
-  of the main source code, so please refer to the [How to contribute source
-  code](how-to-contribute.html) for help with modifying these pages.
-
-
-Contributor license agreement
------------------------------
-
-Apache Brooklyn is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). All
-contributions will be under this license, so please read and understand this license before contributing.
-
-For all but the most trivial patches, you are required to file a Contributor License Agreement with the Apache
-Software Foundation. Please read the [guide to CLAs](https://www.apache.org/licenses/#clas) to find out how to file a
-CLA with the Foundation.
-
-
-Before you start
-----------------
-
-### Join the community
-
-If it's your first contribution or it's a particularly big or complex contribution, things typically go much more
-smoothly when they start off with a conversation. Visit our [Community](index.html) page to see how you can contact
-us via IRC or email.
-
-### Create an issue in Jira
-
-Your first step is to create or find an issue in [Brooklyn's Jira](https://issues.apache.org/jira/browse/BROOKLYN)
-for your feature request or fix. For small changes this isn't necessary, but it's good to see if your change fixes an
-existing issue anyway.
-
-
-Contributing using *Edit this page*
------------------------------------
-
-Most of the pages on the website have an *Edit this page* button at the bottom.
-Clicking this button will take you to the GitHub repository and immediately
-begin editing the file. This approach makes editing easy, as you do not need to
-clone the repository to your workstation and make changes there; they can be
-changed directly on the GitHub website for the repository.
-
-Once you have made your edits, there is a short form titled *Propose file
-change*. Provide a short description of the change in the first box; optionally,
-provide a longer description in the second box. If your change fixes or
-addresses a Jira issue, be sure to mention it. Finally, click the *Propose file
-change* button to prepare a pull request, and then *Create pull request* to
-formally submit your change request and notify the dev team of your proposed
-change.
-
-The website is not a Wiki and your changes will not appear immediately. The
-community mailing list will receive a notification of your proposed change, and
-an Apache Brooklyn committer will review your changes. Once your change has
-passed review, the committer will merge it and re-publish the public website.
-
-While the *Edit this page* button is great for quickly editing a single page, if
-you want to do anything that involves editing multiple pages, you will need to
-fork and clone the repository and make the changes on your own workstation - see
-the next section for information on this.
-
-
-Contributing using GitHub
--------------------------
-
-Our GitHub repository is located at
-[https://github.com/apache/incubator-brooklyn-site](https://github.com/apache/incubator-brooklyn-site)
-
-Your commit messages must properly describes the changes that have been made and
-their purpose ([here are some
-guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)).
-If your contributions fix a Jira issue, then ensure that you reference the issue
-(like `BROOKLYN-9876`) in the commit message.
-
-Create a pull request (PR) in GitHub for the change you're interested in making.
-The comment section of the PR must contain a link to the Jira issue (if it has
-one).
-
-Some good references for working with GitHub are below.  We ask that you keep
-your change rebased to master as much as possible, and we will ask you to rebase
-again if master has moved before accepting your patch.
-
-- [Setting Up Git with GitHub](https://help.github.com/articles/set-up-git)
-- [Forking a Repository](https://help.github.com/articles/fork-a-repo)
-- [Submitting Pull Requests](https://help.github.com/articles/using-pull-requests)
-- [Rebasing your Branch](https://help.github.com/articles/interactive-rebase)
-
-Finally, add a comment in the Jira issue with a link to the pull request so we
-know the code is ready to be reviewed.
-
-### Reviews
-
-The Apache Brooklyn community will review your pull request before it is merged.
-This process can take a while, so please be patient. If we are slow to respond,
-please feel free to post a reminder to the PR, Jira issue, IRC channel or
-mailing list - see the [Community](index.html) page to see how to contact us.
-
-During the review process you may be asked to make some changes to your
-submission. While working through feedback, it can be beneficial to create new
-commits so the incremental change is obvious.  This can also lead to a complex
-set of commits, and having an atomic change per commit is preferred in the end.
-Use your best judgement and work with your reviewer as to when you should revise
-a commit or create a new one.
-
-A pull request is considered ready to be merged once it gets at lease one +1
-from a committer. Once all the changes have been completed and the pull request
-is accepted, you may be asked to rebase it against the latest code. You may also
-wish to squash some commits together and make other history revisions, to leave
-the commit history clean and easily understood.
-
-
-### Contributing without using GitHub
-
-If you prefer to not use GitHub, then that is fine - we are also happy to accept
-patches attached to a Jira issue.  Our canonical repository is located at
-`https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git`; for example:
-
-    $ git clone https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git
-
-When producing patches, please use `git format-patch` or a similar mechanism -
-this will ensure that you are properly attributed as the author of the patch
-when a committer merges it.
diff --git a/community/how-to-contribute.md b/community/how-to-contribute.md
deleted file mode 100644
index effdbcc..0000000
--- a/community/how-to-contribute.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-layout: normal
-title: How to contribute
-navgroup: community
----
-
-Welcome and thank you for your interest in contributing to Apache Brooklyn! This guide will take you through the
-process of making contributions to the Apache Brooklyn code base.
-
-
-Contributor license agreement
------------------------------
-
-Apache Brooklyn is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). All
-contributions will be under this license, so please read and understand this license before contributing.
-
-For all but the most trivial patches, you are required to file a Contributor License Agreement with the Apache
-Software Foundation. Please read the [guide to CLAs](https://www.apache.org/licenses/#clas) to find out how to file a
-CLA with the Foundation.
-
-
-Before you start
-----------------
-
-### Join the community
-
-If it's your first contribution or it's a particularly big or complex contribution, things typically go much more
-smoothly when they start off with a conversation. Visit our [Community](index.html) page to see how you can contact
-us via IRC or email.
-
-### Create an issue in Jira
-
-Your first step is to create or find an issue in [Brooklyn's Jira](https://issues.apache.org/jira/browse/BROOKLYN)
-for your feature request or fix. For small changes this isn't necessary, but it's good to see if your change fixes an
-existing issue anyway.
-
-
-### Contributing using GitHub
-
-This is our preferred way for contributing code. Our GitHub repository is located at
-[https://github.com/apache/incubator-brooklyn](https://github.com/apache/incubator-brooklyn)
-
-Your commit messages must properly describes the changes that have been made and their purpose
-([here are some guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)). If your
-contributions fix a Jira issue, then ensure that you reference the issue (like `BROOKLYN-9876`) in the commit message.
-
-Create a pull request (PR) in GitHub for the change you're interested in making. The comment section of the PR must
-contain a link to the Jira issue (if it has one).
-
-Some good references for working with GitHub are below.  We ask that you keep your change rebased to master as much
-as possible, and we will ask you to rebase again if master has moved before accepting your patch.
-
-- [Setting Up Git with GitHub](https://help.github.com/articles/set-up-git)
-- [Forking a Repository](https://help.github.com/articles/fork-a-repo)
-- [Submitting Pull Requests](https://help.github.com/articles/using-pull-requests)
-- [Rebasing your Branch](https://help.github.com/articles/interactive-rebase)
-
-Finally, add a comment in the Jira issue with a link to the pull request so we know the code is ready to be reviewed.
-
-### Reviews
-
-The Apache Brooklyn community will review your pull request before it is merged. This process can take a while, so
-please be patient. If we are slow to respond, please feel free to post a reminder to the PR, Jira issue, IRC channel
-or mailing list - see the [Community](index.html) page to see how to contact us.
-
-During the review process you may be asked to make some changes to your submission. While working through feedback,
-it can be beneficial to create new commits so the incremental change is obvious.  This can also lead to a complex set
-of commits, and having an atomic change per commit is preferred in the end.  Use your best judgement and work with
-your reviewer as to when you should revise a commit or create a new one.
-
-A pull request is considered ready to be merged once it gets at lease one +1 from a committer. Once all the changes
-have been completed and the pull request is accepted, you may be asked to rebase it against the latest code. You may
-also wish to squash some commits together and make other history revisions, to leave the commit history clean and
-easily understood.
-
-
-### Contributing without using GitHub
-
-If you prefer to not use GitHub, then that is fine - we are also happy to accept patches attached to a Jira issue.
-Our canonical repository is located at `https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git`; for example:
-
-    $ git clone https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git
-
-When producing patches, please use `git format-patch` or a similar mechanism - this will ensure that you are properly
-attributed as the author of the patch when a committer merges it.
diff --git a/community/index.md b/community/index.md
deleted file mode 100644
index 8d53e69..0000000
--- a/community/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-layout: normal
-title: Community
-children:
-- { path: community/how-to-contribute.md }
-- { path: community/migrate-to-apache.md }
-- { path: community/committers.md }
-- { path: community/how-to-contribute-docs.md }
----
-
-<div class="row">
-<div class="col-md-6" markdown="1">
-
-## Mailing lists
-
-Our main discussion list is our *dev* list - here you can ask questions and get
-help with issues, ranging from basic getting started through to detailed
-questions about Brooklyn's internals.
-
-To subscribe, send an email to:
-[dev-subscribe@brooklyn.incubator.apache.org](mailto:dev-subscribe@brooklyn.incubator.apache.org)
-
-You can also [read and search the dev list
-archives](https://mail-archives.apache.org/mod_mbox/incubator-brooklyn-dev/) on
-Apache's list archiver.
-
-
-### Other lists
-
-We also have a *commits* list - a read-only list which automatically posts as
-commits are made to our source repositories. Subscribe by sending an email to
-[commits-subscribe@brooklyn.incubator.apache.org](mailto:commits-subscribe@brooklyn.incubator.apache.org),
-and [read the archives here](https://mail-archives.apache.org/mod_mbox/incubator-brooklyn-commits/).
-
-
-### Historical lists
-
-Before Brooklyn joined the Apache Incubator, we had lists hosted on Google
-Groups. These lists are now deprecated and it's no longer possible to subscribe
-or post, but you may find useful information in the archives.
-
-- [Old Brooklyn users list archive](https://groups.google.com/forum/#!forum/brooklyn-dev)
-- [Old Brooklyn dev list archive](https://groups.google.com/forum/#!forum/brooklyn-dev)
-
-Once again, these lists are deprecated, so please subscribe to the Apache-hosted
-lists to receive new messages.
-
-</div><!-- col -->
-<div class="col-md-6" markdown="1">
-
-## Issue tracker
-
-We have a [Jira instance at Apache](https://issues.apache.org/jira/browse/BROOKLYN)
-
-
-## Contributing source code
-
-If you have changes or additions to the Brooklyn source code, we would love to
-see them! Please read our guide on [how to contribute](how-to-contribute.html).
-
-If you have used the *brooklyncentral* repository prior to Brooklyn's move to
-Apache, you can read the guide on
-[how to migrate your brooklyncentral fork to Apache](migrate-to-apache.html).
-
-Committers can read the corresponding [guide for committers](committers.html)
-to see how to review and merge contributions.
-
-
-## Contributing to the website and documentation
-
-We would also be very happy to receive contributions to our website and
-documentation. You can read our [How to contribute
-documentation](how-to-contribute-docs.html) guide or, if you are impatient,
-simply click on the *Edit this page* button at the bottom of most pages on this
-site and follow the instructions.
-
-
-## IRC
-
-Join channel `#brooklyncentral` on the [Freenode](https://freenode.net/) IRC
-network. Many of the Brooklyn dev team can be found here. Note that the team
-is predominantly Europe-based, and channel activity is usually centered
-around European daylight hours.
-
-</div><!-- col -->
-</div><!-- row -->
diff --git a/community/migrate-to-apache.md b/community/migrate-to-apache.md
deleted file mode 100644
index b5e7bb0..0000000
--- a/community/migrate-to-apache.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-layout: normal
-title: How to migrate your brooklyncentral fork to Apache
----
-
-Prior to our adoption by the Apache Incubator, Brooklyn was developed in a
-GitHub repository at `https://github.com/brooklyncentral/brooklyn`. If you
-already have a fork of this repository, follow this guide to smoothly shift
-your repository references to the new repository at Apache.
-
-If you have not forked or cloned the `brooklyncentral/brooklyn` repository,
-then this is not the right guide for you. Instead, you should refer to the
-[How to contribute](how-to-contribute.html) page, and possibly refer to
-[GitHub Help - Fork A Repo](https://help.github.com/articles/fork-a-repo) for
-further help.
-
-
-Assumptions
------------
-
-This guides assumes that you have followed the standard GitHub workflow, as
-describe in [GitHub Help - Fork A Repo](https://help.github.com/articles/fork-a-repo).
-In particular:
-
-- You have forked the `brooklyncentral/brooklyn` repository into your own
-  username:
-
-![Screenshot of GitHub showing a typical fork](fork-before.png)
-
-- You have used `git clone` to clone this fork onto your own computer;
-- You have added an additional remote, `upstream`, to refer to the original
-  `brooklyncentral/brooklyn` repository.
-
-In short, if you can recognise the above screenshot, and the output of the
-`git remote -v` command looks similar to below, then this guide should work
-for you. (Replace `rdowner` with your own GitHub username.)
-
-    origin  https://github.com/rdowner/brooklyn.git (fetch)
-    origin  https://github.com/rdowner/brooklyn.git (push)
-    upstream        https://github.com/brooklyncentral/brooklyn (fetch)
-    upstream        https://github.com/brooklyncentral/brooklyn (push)
-
-Or, if you are using SSH to access your remote repositories, it may look like
-this:
-
-    origin  git@github.com:rdowner/brooklyn.git (fetch)
-    origin  git@github.com:rdowner/brooklyn.git (push)
-    upstream        git@github.com:brooklyncentral/brooklyn.git (fetch)
-    upstream        git@github.com:brooklyncentral/brooklyn (push)
-
-
-
-Procedure
----------
-
-The new repository has a mirror in GitHub, located at
-[https://github.com/apache/incubator-brooklyn](https://github.com/apache/incubator-brooklyn).
-Go to this page now, and fork it:
-
-![Screenshot of the new repository mirror in GitHub, with fork button](fork-new.png)
-
-This will now create a fork of this repository under your own username:
-
-![Screenshot of the new fork in your workspace](fork-after.png)
-
-So previously you referred to repositories named `brooklyn` under the
-`brooklyncentral` organization and your own username. Now, you will need to
-refer to repositories named `incubator-brooklyn` under the `Apache`
-organization and your own username.
-
-To update the cloned repository on your computer to point to the new
-repositories instead of the old ones, use these commands, replacing `rdowner`
-with your own GitHub username.
-
-    git remote set-url origin https://github.com/rdowner/incubator-brooklyn.git
-    git remote set-url upstream https://github.com/apache/incubator-brooklyn.git
-
-Or, if you would prefer to use SSH to access your remote repositories:
-
-    git remote set-url origin git@github.com:rdowner/incubator-brooklyn.git
-    git remote set-url upstream git@github.com:apache/incubator-brooklyn.git
-
-Finally, fetch everything:
-
-    git fetch --all
-
-
-Existing pull requests
-----------------------
-
-If you have submitted a pull request at `brooklyncentral/brooklyn`, this pull
-request will be closed, unmerged, with a message pointing you to this page. You
-will need to re-submit your pull request against the
-`apache/incubator-brooklyn`.
-
-If you have followed the above procedure, all you will need to do is identify
-the branch in your local repository on your computer that you used to make the
-original pull request, and push this to your new fork:
-
-```
-git push origin my-new-feature-branch
-```
-
-Now, go to your `incubator-brooklyn` fork on the GitHub website, and you should
-see the **Compare &amp; pull request** button; click this, and it will set up a
-pull request against the new repository.
-
-![Screen shot of a pull request against incubator-brooklyn](pull-request.png)
-
-
-Any problems?
--------------
-
-If you are not sure how to do this, perhaps because you have a slightly
-different arrangement in your repositories, or is something unusual happens,
-please ask our community for help. You can find details of our IRC channel
-and mailing lists on our [Community](index.html) page.
diff --git a/community/pull-request.png b/community/pull-request.png
deleted file mode 100644
index 70407f2..0000000
--- a/community/pull-request.png
+++ /dev/null
Binary files differ
diff --git a/documentation.md b/documentation.md
deleted file mode 100644
index f68b12a..0000000
--- a/documentation.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: normal
-title: Documentation
-children:
-- { link: v/0.7.0-M1, title: User Manual (0.7.0-M1) }
-- { path: glossary.md }
-- { path: documentation/install-on-server.md }
----
-
-## Official User Manual
-
-Our main user manual is organised by release version. Please pick the version that you are using:
-
-- [0.7.0-M1]({{ site.url }}/v/0.7.0-M1) -
-  Please note that this release was made prior to entering the Apache Incubator,
-  and therefore it is not endorsed by Apache.
-
-## Server install
-Follow this [guide]({{ site.url }}/documentation/install-on-server.html) to install Brooklyn on a production server.
diff --git a/documentation/increase-entropy.md b/documentation/increase-entropy.md
deleted file mode 100644
index e97b02d..0000000
--- a/documentation/increase-entropy.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Increase entropy
-layout: normal
----
-If you are installing AMP on a virtual machine, you may find it useful to increase the Linux kernel entropy to speed up the ssh connections to the managed entities. You can install and configure `rng-tools` or just use /dev/urandom`.
-
-### Installing rng-tool
-if you are using a RHEL-based OS:
-{% highlight bash %}
-yum -y -q install rng-tools
-echo "EXTRAOPTIONS=\"-r /dev/urandom\"" | cat >> /etc/sysconfig/rngd
-/etc/init.d/rngd start
-{% endhighlight %}
-
-if you are using a Debian-based OS:
-{% highlight bash %}
-apt-get -y install rng-tools
-echo "HRNGDEVICE=/dev/urandom" | cat >> /etc/default/rng-tools
-/etc/init.d/rng-tools start
-{% endhighlight %}
-
-The following links contain further [information for RHEL or CentOS](http://my.itwnik.com/how-to-increase-linux-kernel-entropy/), and [Ubuntu](http://www.howtoforge.com/helping-the-random-number-generator-to-gain-enough-entropy-with-rng-tools-debian-lenny).
-
-### Using /dev/urandom
-You can also just mv /dev/random then create it again linked to /dev/urandom, by issuing the following commands:
-
-{% highlight bash %}
-sudo mv /dev/random /dev/random-real
-sudo ln -s /dev/urandom /dev/random
-{% endhighlight %}
-
diff --git a/documentation/install-on-server.md b/documentation/install-on-server.md
deleted file mode 100644
index 33016d3..0000000
--- a/documentation/install-on-server.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-layout: normal
-title: Installing on a server
----
-Here we present two *alternatives* to install Brooklyn:
-
-- [Running the *installation script*](#script)
-- [Manual installation](#manual)
-
-## <a id="script"></a> Running the installation script
-There is a simple bash script available to help with the installation process. 
-
-#### Script prerequisites
-The script assumes that the server is a recent *RHEL/CentOS 6.x Linux* or *Ubuntu 12.04* installation, but other Linux variants have been tested successfully.
-
-The script will install Java 7 and other required packages if they are not present. You must have root access over [passwordless SSH]({{ site.url }}/documentation/passwordless-ssh.html) to install brooklyn, but the service runs as an ordinary user once installed. 
-
-To manage the brooklyn service you must also be able to connect to port 8081 remotely.
-
-Once the above prerequisites are satisfied, you should be able to run successfully:
-{% highlight bash %}
-$ curl -o brooklyn-install.sh -L https://github.com/apache/incubator-brooklyn/raw/master/brooklyn-install.sh
-$ chmod +x ./brooklyn-install.sh
-$ ./brooklyn-install.sh -s -r <your-server-ip>
-{% endhighlight %}
-
-## <a id="manual"></a> Manual installation
-
-1. [Set up the prerequisites](#prerequisites)
-1. [Download Brooklyn](#download)
-1. [Configuring brooklyn.properties](#configuring-properties)
-1. [Configuring catalog.xml](#configuring-catalog)
-1. [Test the installation](#confirm)
-
-### <a id="prerequisites"></a>Set up the prerequisites
-
-Before installing Apache Brooklyn, you will need to configure the host as follows. 
-
-* install Java JRE or SDK (version 6 or later)
-* install [SSH key]({{ site.url }}/documentation//ssh-key.html), if not available.
-* enable [passwordless ssh login]({{ site.url }}/documentation/passwordless-ssh.html).
-* create a `~/.brooklyn` directory on the host with `$ mkdir ~/.brooklyn`
-* Check your iptables service, and if enabled, make sure that it accepts all incoming connections to 8443+ ports.
-* [optional] Increase [linux kernel entropy]({{ site.url }}/documentation//increase-entropy.html) for faster ssh connections.
-
-## <a id="download"></a>Download Brooklyn
-
-Download the [Brooklyn distribution]({{ site.data.brooklyn.url.dist.tgz }}) and expand it to your home directory ( `~/` ), or in a location of your choice. Other [download options]({{site.url}}/download.html) are available.
-
-{% if brooklyn_version contains 'SNAPSHOT' %}
-Expand the `tar.gz` archive (note: as this is a -SNAPSHOT version, your filename will be slightly different):
-{% else %}
-Expand the `tar.gz` archive:
-{% endif %}
-
-{% if brooklyn_version contains 'SNAPSHOT' %}
-{% highlight bash %}
-$ tar -zxf brooklyn-dist-{{ site.data.brooklyn.version }}-timestamp-dist.tar.gz
-{% endhighlight %}
-{% else %}
-{% highlight bash %}
-$ tar -zxf brooklyn-dist-{{ site.data.brooklyn.version }}-dist.tar.gz
-{% endhighlight %}
-{% endif %}
-
-This will create a `brooklyn-{{ site.data.brooklyn.version }}` folder.
-
-Let's setup some paths for easy commands.
-
-{% highlight bash %}
-$ cd brooklyn-{{ site.data.brooklyn.version }}
-$ BROOKLYN_DIR="$(pwd)"
-$ export PATH=$PATH:$BROOKLYN_DIR/bin/
-{% endhighlight %}
-
-## <a id="configuring-properties"></a>Configuring brooklyn.properties
-Brooklyn deploys applications to Locations. *Locations* can be clouds, machines with fixed IPs or localhost (for testing).
-
-By default Brooklyn loads configuration parameters (including credentials for any cloud accounts) from 
-
-`~/.brooklyn/brooklyn.properties` 
-
-The `brooklyn.properties` is the main configuration file for deployment locations. Contains the connection details and credentials for all public or on-premises cloud providers, as well as controlling some application startup and security options.
-
-Create a `.brooklyn` folder in your home directory and download the template [brooklyn.properties](../quickstart/brooklyn.properties) to that folder.
-
-{% highlight bash %}
-$ mkdir -p ~/.brooklyn
-$ wget -O ~/.brooklyn/brooklyn.properties {{site.url}}/quickstart/brooklyn.properties
-$ chmod 600 ~/.brooklyn/brooklyn.properties
-{% endhighlight %}
-
-You may need to edit `~/.brooklyn/brooklyn.properties` to ensure that brooklyn can access cloud locations for application deployment.
-
-## <a id="configuring-catalog"></a>Configuring catalog.xml
-By default Brooklyn loads the catalog of available application components and services from 
-`~/.brooklyn/catalog.xml`. 
-
-{% highlight bash %}
-$ wget -O ~/.brooklyn/catalog.xml {{site.url}}/quickstart/catalog.xml
-{% endhighlight %}
-
-The `catalog.xml` is the application blueprint catalog. The above example file contains some blueprints which will be automatically downloaded from the web if you run them.
-
-You may need to edit `~/.brooklyn/catalog.xml` to update links to any resources for download.
-
-## <a id="confirm"></a>Confirm installation
-We can do a quick test drive by launching Brooklyn:
-
-{% highlight bash %}
-$ brooklyn launch
-{% endhighlight %}
-
-Brooklyn will output the address of the management interface:
-
-{% highlight bash %}
-INFO  Starting brooklyn web-console on loopback interface because no security config is set
-
-INFO  Started Brooklyn console at http://127.0.0.1:8081/, running classpath://brooklyn.war and []
-{% endhighlight %}
-
-Stop Brooklyn with ctrl-c.
diff --git a/documentation/passwordless-ssh.md b/documentation/passwordless-ssh.md
deleted file mode 100644
index 63ddbd5..0000000
--- a/documentation/passwordless-ssh.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Passwordless SSH login
-layout: normal
----
-To enable passwordless SSH login to a *nix server, first you will need a pair of keys. If you don't already have a keypair generated you'll first of all need to create one.
-To generate a new keypair you run the following command:
-
-    your-user@host1:~$ ssh-keygen -t rsa
-
-This will prompt you for a location to save the keys, and a pass-phrase:
-
-    Generating public/private rsa key pair.
-    Enter file in which to save the key (/home/skx/.ssh/id_rsa): 
-    Enter passphrase (empty for no passphrase): 
-    Enter same passphrase again: 
-    Your identification has been saved in /home/skx/.ssh/id_rsa.
-    Your public key has been saved in /home/skx/.ssh/id_rsa.pub.
-
-Then, assuming that you want to enable passwordless SSH login to the `host2` server from `host1` with the `id_rsa` and `id_rsa.pub` files you've just generated you should run the following command:
-
-    your-user@host1:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@host2
-
-If `host1` doesn't have `ssh-copy-id` installed, you can either install `ssh-copy-id` or manually copy the `id_rsa.pub` key to the `host2` by issuing the following commands:
-
-    host1# cat ~/.ssh/id_rsa.pub | ssh user@host2 'cat >> .ssh/authorized_keys'
-
-or if you need to make a `.ssh` directory on `host2`
-
-    host1#cat ~/.ssh/id_rsa.pub | ssh user@host2 'mkdir .ssh; chmod 700 .ssh; cat >> .ssh/authorized_keys; chmod 644 .ssh/authorized_keys'
diff --git a/documentation/ssh-key.md b/documentation/ssh-key.md
deleted file mode 100644
index 1dc2690..0000000
--- a/documentation/ssh-key.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: SSH keys
-layout: normal
----
-Brooklyn requires an SSH key, which will be used to connect to cloud VMs. By default Brooklyn will look for SSH keys named `~/.ssh/id_rsa` or `~/.ssh/id_dsa`. If you do not already have an SSH key installed, create a new key.
-
-{% highlight bash %}
-$ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
-{% endhighlight %}
\ No newline at end of file
diff --git a/download.md b/download.md
deleted file mode 100644
index f169212..0000000
--- a/download.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-layout: normal
-title: Download
----
-
-## Download Brooklyn Binary Distributions
-
-**New to Brooklyn**? Download the *Milestone* release below then take a look
-at the [Get Started](quickstart/) page.
-
-<div class="row">
-<div class="col-md-6" markdown="1">
-
-### Milestone
-
-#### 0.7.0-M1
-*Recommended*. A good compromise between stability and features which has undergone live testing.
-
-Download [.tar.gz](http://search.maven.org/remotecontent?filepath=io/brooklyn/brooklyn-dist/0.7.0-M1/brooklyn-dist-0.7.0-M1-dist.tar.gz)
-&bull; [.zip](http://search.maven.org/remotecontent?filepath=io/brooklyn/brooklyn-dist/0.7.0-M1/brooklyn-dist-0.7.0-M1-dist.zip)
-
-Please note that this release was made prior to entering the Apache Incubator, and therefore it is not endorsed by Apache.
-
-</div>
-<div class="col-md-6" markdown="1">
-
-### Stable
-
-#### 0.6.0
-Well-tested releases, but missing the latest features.
-
-Download [.tar.gz](http://search.maven.org/remotecontent?filepath=io/brooklyn/brooklyn-dist/0.6.0/brooklyn-dist-0.6.0-dist.tar.gz)
-&bull; [.zip](http://search.maven.org/remotecontent?filepath=io/brooklyn/brooklyn-dist/0.6.0/brooklyn-dist-0.6.0-dist.zip)
-
-Please note that this release was made prior to entering the Apache Incubator, and therefore it is not endorsed by Apache.
-
-</div>
-</div>
-
-
-## Download Brooklyn source code
-
-<div class="row">
-<div class="col-md-6" markdown="1">
-
-### Milestone
-
-#### 0.7.0-M1
-*Recommended*. A good compromise between stability and features which has undergone live testing.
-
-Download [.tar.gz](https://github.com/apache/incubator-brooklyn/archive/0.7.0-M1.tar.gz)
-&bull; [.zip](https://github.com/apache/incubator-brooklyn/archive/0.7.0-M1.zip)
-
-Please note that this release was made prior to entering the Apache Incubator, and therefore it is not endorsed by Apache.
-
-</div>
-<div class="col-md-6" markdown="1">
-
-### Stable
-
-#### 0.6.0
-Well-tested releases, but missing the latest features.
-
-Download [.tar.gz](https://github.com/apache/incubator-brooklyn/archive/v0.6.0.tar.gz)
-&bull; [.zip](https://github.com/apache/incubator-brooklyn/archive/v0.6.0.zip)
-
-Please note that this release was made prior to entering the Apache Incubator, and therefore it is not endorsed by Apache.
-
-</div>
-</div>
diff --git a/glossary.md b/glossary.md
deleted file mode 100644
index 78ab4cc..0000000
--- a/glossary.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-layout: normal
-title: Glossary
----
-
-[//]: # (Abusing link groups to write comments that are not rendered in the document..)
-[//]: # (The links below reference the id attributes generated for the headers.)
-[//]: # (For example, the Autonomic section can be referred to with a link to #autonomic.)
-[//]: # (So if you alter any of the headers you should update the relevant link group too.)
-
-[autonomic]: #autonomic
-[blueprint]: #blueprint
-[effector]: #effector
-[entity]: #entity
-[policy]: #policy
-[sensor]: #sensor
-[YAML]: #yaml
-
-[//]: # (Note: Autonomic and blueprint section could link to learnmore page.)
-
-
-#### Autonomic
-
-Refers to the self-managing characteristics of distributed computing resources,
-adapting to unpredictable changes while hiding intrinsic complexity to
-operators and users.
-
-
-#### Blueprint
-
-A description of an application or system, which can be used for its automated
-deployment and runtime management. The blueprint describes a model of the
-application (i.e. its components, their configuration, and their
-relationships), along with policies for runtime management. The blueprint can
-be described in [YAML][].
-
-###### See also
-* [Documentation]({{site.url}}/learnmore/catalog/index.html) for the entity,
-  policy and enricher blueprints that Apache Brooklyn supports out-of-the-box.
-
-
-#### Effector
-
-An operation on an [entity][].
-
-
-#### Entity
-
-A component of an application or system. This could be a physical component, a
-service, a grouping of components, or a logical construct describing part of an
-application/system. It is a "managed element" in autonomic computing parlance.
-
-
-#### Policy
-
-Part of an autonomic management system, performing runtime management. A policy
-is associated with an [entity][]; it normally manages the health of that entity
-or an associated group of entities (e.g. HA policies or auto-scaling policies).
-
-
-#### Sensor
-
-An attribute of an [entity][].
-
-
-#### YAML
-
-A human-readable data format.
-
-###### See also
-* [Wikipedia article](http://en.wikipedia.org/wiki/YAML) on YAML
-
-
-#### Apache Jclouds
-
-An open source Java library that provides a consistent interface to many
-clouds. Apache Brooklyn uses Apache Jclouds as its core cloud abstraction.
-
-###### See also
-* [Project homepage](https://jclouds.apache.org/)
-
-
-#### CAMP and TOSCA
-
-OASIS Cloud Application Management for Platforms (CAMP) and OASIS Topology and
-Orchestration Specification for Cloud Applications (TOSCA) are specifications
-that aim to standardise the portability and management of cloud applications.
-
-###### See also
-* [CAMP homepage](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=camp)
-* [TOSCA homepage](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=tosca)
-
diff --git a/index.md b/index.md
deleted file mode 100644
index 2193329..0000000
--- a/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-layout: homepage
-title: Home
-navgroup: home
-children:
-- { path: learnmore.md }
-- { path: download.md }
-- { path: quickstart/index.md }
-- { path: documentation.md }
-- { path: community/index.md }
-navgroups:
-- { id: learnmore, page: learnmore.md, title: learn more }
-- { id: download, page: download.md, title: download }
-- { id: getstarted, page: quickstart/index.md, title: get started, title_in_menu: Get started }
-- { id: documentation, page: documentation.md, title: documentation, title_in_menu: All documentation }
-- { id: community, page: community/index.md, title: community, title_in_menu: Community home }
----
-
-<div class="jumbotron">
-<div id="apachebrooklynbanner">&nbsp;</div>
-
-<div class="row">
-<div class="col-md-4" markdown="1">
-
-### model
-
-*Blueprints* describe your application, stored as *text files* in *version control*
-
-*Compose* from the [*dozens* of supported components](learnmore/catalog/) or your *own components* using *bash, Java, Chef...*
-
-<div class="text-muted" markdown="1">
-#### JBoss &bull; Cassandra &bull; QPid &bull; nginx &bull; [many more](learnmore/catalog/)
-</div>
-
-</div>
-<div class="col-md-4" markdown="1">
-
-### deploy
-
-Components *configured &amp; integrated* across *multiple machines* automatically
-
-*20+ public clouds*, or your *private cloud* or bare servers - and *Docker* containers
-
-<div class="text-muted" markdown="1">
-#### Amazon EC2 &bull; CloudStack &bull; OpenStack &bull; SoftLayer &bull; many more
-</div>
-
-</div>
-<div class="col-md-4" markdown="1">
-
-### manage
-
-*Monitor* key application *metrics*; *scale* to meet demand; *restart* and *replace* failed components
-
-View and modify using the *web console* or automate using the *REST API*
-
-<div class="text-muted" markdown="1">
-#### Metric-based autoscaler &bull; Restarter &amp; replacer &bull; Follow the sun &bull; Load balancing 
-</div>
-
-</div>
-</div><!-- row -->
-
-<div style="text-align: center" markdown="1">
-
-<a class="btn btn-primary btn-lg" role="button" href="learnmore.html">learn more</a>
-<a class="btn btn-primary btn-lg" role="button" href="quickstart/">get started</a>
-
-</div>
-
-</div><!-- jumbotron -->
diff --git a/learnmore.md b/learnmore.md
deleted file mode 100644
index ede3649..0000000
--- a/learnmore.md
+++ /dev/null
@@ -1,177 +0,0 @@
----
-layout: normal
-title: Learn More
----
-
-<div class="jumobotron" markdown="1">
-
-Brooklyn is a framework for modeling, monitoring, and managing applications
-through autonomic blueprints.
-
-</div>
-
-## Why Brooklyn?
-
-Building and deploying applications in the cloud computing era has changed many
-things. Provision a bare server just-in-time, and use automated tools to install
-an application. Use APIs to add the server to a load balancer. When load goes
-up, provision another server; when load drops, kill a server to save money.
-
-Many new tools have appeared that take advantage of this new era. However each
-of them only solve part of the problem and don’t consider the big picture. For
-example, configuration management tools such as Chef can, in a single command,
-provision a new cloud server then install and configure an application -- but
-they require extra programming to reconfigure an load balancer whenever the pool
-of web servers changes. Amazon Auto Scaling can provision new servers and update
-load balancers, but it is dependent on CloudWatch -- this means either using
-proxy metrics such as average response time, or writing more code to expose an
-application’s real metrics. A dedicated monitoring tool may be able to easily
-monitor the key metrics with little effort, but its alerts will need to be
-integrated it into the server provisioning process.
-
-So all the tools are there to to create and manage a cloud-scale application
-that can adapt to demand to meet user expectations without wasting money on
-superfluous services - but you will need several such tools and it is up to you
-to integrate them into your deployment plan. Some of these tools -- such as the
-Amazon Web Services web of EC2, CloudWatch, AutoScaling and CloudFormation --
-mean that you may suffer from lock-in. Related projects in OpenStack (Heat,
-Ceilometer, Murano, Solum, etc) provide similar functionality but again for a
-restricted target. The most common policies (such as minimising request latency)
-may be easy, but less common policies such as follow-the-sun and follow-the-moon
-may be up to you to implement. Your scaling policies may understand that
-"high demand = add another server", but may not understand requirements such as
-some clustered services requiring an odd number of instances to prevent voting
-deadlocks.
-
-
-## How Brooklyn can help
-
-In this context the advantage of Brooklyn becomes apparent: a single tool is
-able to manage provisioning and application deployment, monitor an application’s
-health and metrics, understand the dependencies between components (such as
-knowing that adding a new web server means that the load balancer needs
-reconfiguration) and apply complex policies to manage the application. The tool
-provides a REST API and a GUI, and allows the autonomic blueprints to be treated
-as an integral part of the application. With Brooklyn, these policies become
-modular components which can be reused and easily added to blueprints.
-
-Brooklyn is about deploying and managing applications: composing a full stack
-for an application; deploying to cloud and non-cloud targets; using monitoring
-tools to collect key health/performance metrics; responding to situations
-such as a failing node; and adding or removing capacity to match demand.
-
-
-## Blueprints
-
-A Brooklyn blueprint defines an application, using a declarative YAML syntax
-supporting JVM plugins. A basic blueprint might comprise a single process,
-such as a web-application server running a WAR file or a SQL database and
-its associated DDL scripts. More complex blueprints encompass combinations
-of processes across multiple machines and services, such as a load-balancing
-HTTP server or SDN controller fronting a cluster of J2EE application
-servers, in turn connected to a resilient cluster of SQL database servers.
-Even larger clustered application running in multiple regions can be
-described, with features such as message buses with resilient brokers,
-cacheing tiers of NoSQL key-value store servers, a high-availability
-database cluster and multiple application components connected across these
-layers.
-
-One main benefit of these blueprints is that they are composable:
-best-practice blueprints for one process or pattern (e.g. a Cassandra
-cluster) can be incorporated in other blueprints (e.g. an application with a
-Cassandra cluster as one component). Another major benefit is that the
-blueprints can be treated as source code as part of an applications
-codebase: tested, tracked, versioned, and hardened as an integral part of
-the devops process. In some ways, Brooklyn is to run-time what Maven is to
-build-time.
-
-
-### Blueprints turn into deployments
-
-Brooklyn knows about Chef, Salt, and similar tools, and APT and Yum and
-plain old shell scripts, for deploying application components. Blueprints
-are built from a mixture of both off-the-shelf packages such as Tomcat,
-MySQL, Cassandra, and many more from our library; and components that are
-bespoke to individual applications; together with policies that allow the
-application to be self-managing.
-
-Brooklyn is built for the cloud, and will take a blueprint and deploy it to
-one of many supported clouds or even to multiple different clouds, or to
-private infrastructure (bring-your-own-node), or to other platforms. It will
-dynamically configure and connect all the different components of an
-application, e.g. so load balancers know where the web servers are and the
-web applications know where the database is.
-
-Brooklyn collects key metrics to monitor the health of applications; for
-example, by sending a request and measuring latency, or installing
-monitoring tools and using those to read a server’s management interface to
-determine the request queue length. These metrics can be fed into policies,
-which automatically take actions such as restarting a failed node, or
-scaling out the web tier if user demand exceeds capacity. This allows an
-application to be self-managing: to recover itself from simple failures, to
-scale out when demand increases and meet capacity; then scale in as demand
-drops and stop paying for spare capacity.
-
-In short, Brooklyn blueprints allow the best practices for deploying and
-managing complex software to be codified as part of the software development
-process.
-
-
-### Agile and flexible
-
-Brooklyn is a product built from the ground up for application agility. This
-includes portability across non-cloud, cloud, and PaaS targets; devops-style
-infrastructure-as-code applied to applications; and real-time autonomic
-management based on promise theory. Some introductions to these concepts,
-associated tools, and open specifications may be useful.
-
-Cloud computing at its core is about provisioning resources on-demand. The most
-widely known aspect is IaaS (infrastructure-as-a-service) such as Amazon EC2,
-Softlayer, Google Cloud Platform, Apache CloudStack, or OpenStack. By leveraging
-the Apache jclouds project (and contributing heavily to it), the Brooklyn
-project is able to work with a large number of such providers. Higher up the
-stack, however, there is an increasingly diverse set of platform targets, from
-PaaS (platform-as-a-service) such as Cloud Foundry and Apache Stratos, through
-to myriad containers and runtime fabrics such as LXC/Docker, Apache Mesos,
-Apache Karaf, Apache Hadoop, and Apache Usergrid and other backend-as-a-service
-environments. Brooklyn is based on the premise that applications may need to run
-in any or all of these, and the model must be flexible and open enough to
-support this.
-
-The buzzword-compliant trends of agile and devops have reinforced many important
-lessons:
-
-- The truth is in the code (not any ancillary documents)
-- If it isn't tested then assume it isn't working
-- Toolchain integration and APIs are key to a project's success
-- Even more critical is empowering all stakeholders to a project
-- Brooklyn's focus on blueprinting and modeling as code and APIs serves these
-principles.
-
-### Autonomic computing
-
-Another major influence on the design of Brooklyn are the ideas of autonomic
-computing and promise theory. It is not necessary to have a thorough
-understanding of these to use Brooklyn, but contributors tend to become versed
-in these ideas quickly. Essentially, autonomics is based on the concept of
-components looking after themselves where possible (self-healing,
-self-optimizing, etc), and exposing a sensor (data outputs) and effector
-(operations) API where they may need to controlled by another element. Promise
-theory extends this approach by introducing the idea that communicating intent
-(through promises) is a more reliable basis for complex cooperating systems than
-obligation-based effectors. Tools such as CF Engine, Chef, Puppet, Ansible, and
-Salt apply promise theory to files and processes on machines; Brooklyn can
-leverage all of these tools, complementing it with an application-oriented
-model.
-
-### Standards compliant
-
-Finally we note some emerging standards in this area. OASIS CAMP (Cloud
-Application Management for Platforms) and TOSCA (Topology and Orchestration
-Specification for Cloud Applications) both define YAML application models
-similar to Brooklyn's. CAMP focuses on the REST API for interacting with such a
-management layer, and TOSCA focuses on declarative support for more
-sophisticated orchestration. Currently Brooklyn uses a YAML which complies with
-CAMP's syntax and exposes many of the CAMP REST API endpoints. We would like to
-support the hot-off-the-press TOSCA YAML and expand the CAMP REST API coverage.
-
diff --git a/learnmore/catalog/common.js b/learnmore/catalog/common.js
deleted file mode 100644
index 8e8a45f..0000000
--- a/learnmore/catalog/common.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var brooklyn = (function ($, _) {
-
-    return {
-        findItemOfType: function(items, type) {
-            return _.findWhere(items, { type: type });
-        },
-
-        entityCard: _.template(
-            "<a class='plain' data-type='<%= type %>' href='entities/<%= type %>.html'>" +
-            "<div class='card'>" +
-            "<span class='glyphicon glyphicon-chevron-right'/>" +
-            "<div class='name'><%=name%></div>" +
-            "<div class='type'><%=type%></div>" +
-            "<div class='description'><%=description%></div>" +
-            "</div>" +
-            "</a>"
-        ),
-        policyCard: _.template(
-            "<a class='plain' data-type='<%= type %>' href='policies/<%= type %>.html'>" +
-            "<div class='card'>" +
-            "<span class='glyphicon glyphicon-chevron-right'/>" +
-            "<div class='name'><%=name%></div>" +
-            "<div class='type'><%=type%></div>" +
-            "<div class='description'><%=description%></div>" +
-            "</div>" +
-            "</a>"
-        ),
-        enricherCard: _.template(
-            "<a class='plain' data-type='<%= type %>' href='enrichers/<%= type %>.html'>" +
-            "<div class='card'>" +
-            "<span class='glyphicon glyphicon-chevron-right'/>" +
-            "<div class='name'><%=name%></div>" +
-            "<div class='type'><%=type%></div>" +
-            "<div class='description'><%=description%></div>" +
-            "</div>" +
-            "</a>"
-        ),
-
-        typeSummary: _.template(
-            "<div class='summaryLabel'><%=name%></div>" +
-            "<div class='summaryType'><%=type%></div>" +
-            "<div class='description'><%=description%></div>"
-        ),
-
-        configKeyCard: _.template(
-            "<div class='card configKey'>" +
-            "<div class='name'><%=name%></div>" +
-            "<dl>" +
-            "<dt>description</dt><dd><%=(description||'&nbsp;')%></dd>" +
-            "<dt>value type</dt><dd class='java'><%=(type||'&nbsp;')%></dd>" +
-            "<dt>default value</dt><dd><%=(defaultValue||'&nbsp;')%></dd>" +
-            "</dl>" +
-            "</div>"
-        ),
-        sensorCard: _.template(
-            "<div class='card sensor'>" +
-            "<div class='name'><%=name%></div>" +
-            "<dl>" +
-            "<dt>description</dt><dd><%=(description||'&nbsp;')%></dd>" +
-            "<dt>value type</dt><dd class='java'><%=(type||'&nbsp;')%></dd>" +
-            "</dl>" +
-            "</div>"
-        ),
-        effectorCard: _.template(
-            "<div class='card effector'>" +
-            "<div class='name'><%=name%></div>" +
-            "<dl>" +
-            "<dt>description</dt><dd><%=(description||'&nbsp;')%></dd>" +
-            "<dt>return type</dt><dd class='java'><%=(returnType||'&nbsp;')%></dd>" +
-            "</dl>" +
-            "</div>"
-        )
-    };
-
-}(jQuery, _));
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.DeltaEnricher.html b/learnmore/catalog/enrichers/brooklyn.enricher.DeltaEnricher.html
deleted file mode 100644
index d888b8c..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.DeltaEnricher.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Delta</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.DeltaEnricher");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.HttpLatencyDetector.html b/learnmore/catalog/enrichers/brooklyn.enricher.HttpLatencyDetector.html
deleted file mode 100644
index 47b3a54..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.HttpLatencyDetector.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - HTTP Latency Detector</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.HttpLatencyDetector");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.RollingMeanEnricher.html b/learnmore/catalog/enrichers/brooklyn.enricher.RollingMeanEnricher.html
deleted file mode 100644
index ba4c179..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.RollingMeanEnricher.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Rolling Mean</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.RollingMeanEnricher");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.RollingTimeWindowMeanEnricher.html b/learnmore/catalog/enrichers/brooklyn.enricher.RollingTimeWindowMeanEnricher.html
deleted file mode 100644
index acc9a84..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.RollingTimeWindowMeanEnricher.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Rolling Mean in Time Window</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.RollingTimeWindowMeanEnricher");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.TimeFractionDeltaEnricher.html b/learnmore/catalog/enrichers/brooklyn.enricher.TimeFractionDeltaEnricher.html
deleted file mode 100644
index f21846b..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.TimeFractionDeltaEnricher.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Time-fraction Delta</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.TimeFractionDeltaEnricher");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.TimeWeightedDeltaEnricher.html b/learnmore/catalog/enrichers/brooklyn.enricher.TimeWeightedDeltaEnricher.html
deleted file mode 100644
index 6679d8a..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.TimeWeightedDeltaEnricher.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Time-weighted Delta</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.TimeWeightedDeltaEnricher");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Aggregator.html b/learnmore/catalog/enrichers/brooklyn.enricher.basic.Aggregator.html
deleted file mode 100644
index 920d74e..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Aggregator.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Aggregator</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.basic.Aggregator");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Combiner.html b/learnmore/catalog/enrichers/brooklyn.enricher.basic.Combiner.html
deleted file mode 100644
index d489eb3..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Combiner.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Combiner</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.basic.Combiner");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Propagator.html b/learnmore/catalog/enrichers/brooklyn.enricher.basic.Propagator.html
deleted file mode 100644
index 62136af..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Propagator.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Propagator</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.basic.Propagator");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Transformer.html b/learnmore/catalog/enrichers/brooklyn.enricher.basic.Transformer.html
deleted file mode 100644
index 2c27f4d..0000000
--- a/learnmore/catalog/enrichers/brooklyn.enricher.basic.Transformer.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Transformer</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.enricher.basic.Transformer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/enrichers/brooklyn.policy.ha.ServiceFailureDetector.html b/learnmore/catalog/enrichers/brooklyn.policy.ha.ServiceFailureDetector.html
deleted file mode 100644
index a2c06af..0000000
--- a/learnmore/catalog/enrichers/brooklyn.policy.ha.ServiceFailureDetector.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Enricher - Service Failure Detector</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.enrichers, "brooklyn.policy.ha.ServiceFailureDetector");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.basic.VanillaSoftwareProcess.html b/learnmore/catalog/entities/brooklyn.entity.basic.VanillaSoftwareProcess.html
deleted file mode 100644
index 6b33b01..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.basic.VanillaSoftwareProcess.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Vanilla Software Process</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.basic.VanillaSoftwareProcess");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.brooklynnode.BrooklynEntityMirror.html b/learnmore/catalog/entities/brooklyn.entity.brooklynnode.BrooklynEntityMirror.html
deleted file mode 100644
index 2877ea5..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.brooklynnode.BrooklynEntityMirror.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Brooklyn Entity Mirror</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.brooklynnode.BrooklynEntityMirror");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.brooklynnode.BrooklynNode.html b/learnmore/catalog/entities/brooklyn.entity.brooklynnode.BrooklynNode.html
deleted file mode 100644
index b592f64..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.brooklynnode.BrooklynNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Brooklyn Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.brooklynnode.BrooklynNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.database.mariadb.MariaDbNode.html b/learnmore/catalog/entities/brooklyn.entity.database.mariadb.MariaDbNode.html
deleted file mode 100644
index 66a4f62..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.database.mariadb.MariaDbNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - MariaDB Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.database.mariadb.MariaDbNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.database.mysql.MySqlNode.html b/learnmore/catalog/entities/brooklyn.entity.database.mysql.MySqlNode.html
deleted file mode 100644
index 4426838..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.database.mysql.MySqlNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - MySql Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.database.mysql.MySqlNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.database.postgresql.PostgreSqlNode.html b/learnmore/catalog/entities/brooklyn.entity.database.postgresql.PostgreSqlNode.html
deleted file mode 100644
index e8e30db..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.database.postgresql.PostgreSqlNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - PostgreSQL Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.database.postgresql.PostgreSqlNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.database.rubyrep.RubyRepNode.html b/learnmore/catalog/entities/brooklyn.entity.database.rubyrep.RubyRepNode.html
deleted file mode 100644
index c7bce4a..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.database.rubyrep.RubyRepNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - RubyRep Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.database.rubyrep.RubyRepNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.machine.MachineEntity.html b/learnmore/catalog/entities/brooklyn.entity.machine.MachineEntity.html
deleted file mode 100644
index e710e37..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.machine.MachineEntity.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Machine Entity</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.machine.MachineEntity");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.messaging.activemq.ActiveMQBroker.html b/learnmore/catalog/entities/brooklyn.entity.messaging.activemq.ActiveMQBroker.html
deleted file mode 100644
index c3629b8..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.messaging.activemq.ActiveMQBroker.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - ActiveMQ Broker</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.messaging.activemq.ActiveMQBroker");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.messaging.kafka.KafkaCluster.html b/learnmore/catalog/entities/brooklyn.entity.messaging.kafka.KafkaCluster.html
deleted file mode 100644
index 7c8c8b5..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.messaging.kafka.KafkaCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Kafka</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.messaging.kafka.KafkaCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.messaging.qpid.QpidBroker.html b/learnmore/catalog/entities/brooklyn.entity.messaging.qpid.QpidBroker.html
deleted file mode 100644
index a805f46..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.messaging.qpid.QpidBroker.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Qpid Broker</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.messaging.qpid.QpidBroker");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.messaging.rabbit.RabbitBroker.html b/learnmore/catalog/entities/brooklyn.entity.messaging.rabbit.RabbitBroker.html
deleted file mode 100644
index 50012b7..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.messaging.rabbit.RabbitBroker.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - RabbitMQ Broker</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.messaging.rabbit.RabbitBroker");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.messaging.storm.Storm.html b/learnmore/catalog/entities/brooklyn.entity.messaging.storm.Storm.html
deleted file mode 100644
index 06d71a1..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.messaging.storm.Storm.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Storm Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.messaging.storm.Storm");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.messaging.storm.StormDeployment.html b/learnmore/catalog/entities/brooklyn.entity.messaging.storm.StormDeployment.html
deleted file mode 100644
index 8a5c329..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.messaging.storm.StormDeployment.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Storm Deployment</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.messaging.storm.StormDeployment");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.monitoring.monit.MonitNode.html b/learnmore/catalog/entities/brooklyn.entity.monitoring.monit.MonitNode.html
deleted file mode 100644
index 0ec1202..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.monitoring.monit.MonitNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Monit Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.monitoring.monit.MonitNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.network.bind.BindDnsServer.html b/learnmore/catalog/entities/brooklyn.entity.network.bind.BindDnsServer.html
deleted file mode 100644
index 2e79679..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.network.bind.BindDnsServer.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - BIND</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.network.bind.BindDnsServer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraDatacenter.html b/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraDatacenter.html
deleted file mode 100644
index 0103410..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraDatacenter.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Apache Cassandra Datacenter Cluster</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.cassandra.CassandraDatacenter");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraFabric.html b/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraFabric.html
deleted file mode 100644
index 71ee547..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraFabric.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Apache Cassandra Database Fabric</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.cassandra.CassandraFabric");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraNode.html b/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraNode.html
deleted file mode 100644
index cc9496e..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.cassandra.CassandraNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Apache Cassandra Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.cassandra.CassandraNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.couchbase.CouchbaseCluster.html b/learnmore/catalog/entities/brooklyn.entity.nosql.couchbase.CouchbaseCluster.html
deleted file mode 100644
index 493abc7..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.couchbase.CouchbaseCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - CouchBase Cluster</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.couchbase.CouchbaseCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.couchbase.CouchbaseNode.html b/learnmore/catalog/entities/brooklyn.entity.nosql.couchbase.CouchbaseNode.html
deleted file mode 100644
index 3e42ae1..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.couchbase.CouchbaseNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - CouchBase Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.couchbase.CouchbaseNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.couchdb.CouchDBNode.html b/learnmore/catalog/entities/brooklyn.entity.nosql.couchdb.CouchDBNode.html
deleted file mode 100644
index ca1ab15..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.couchdb.CouchDBNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - CouchDB Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.couchdb.CouchDBNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.elasticsearch.ElasticSearchCluster.html b/learnmore/catalog/entities/brooklyn.entity.nosql.elasticsearch.ElasticSearchCluster.html
deleted file mode 100644
index ab90e66..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.elasticsearch.ElasticSearchCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Elastic Search Cluster</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.elasticsearch.ElasticSearchCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.elasticsearch.ElasticSearchNode.html b/learnmore/catalog/entities/brooklyn.entity.nosql.elasticsearch.ElasticSearchNode.html
deleted file mode 100644
index b5e6581..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.elasticsearch.ElasticSearchNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Elastic Search Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.elasticsearch.ElasticSearchNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.MongoDBServer.html b/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.MongoDBServer.html
deleted file mode 100644
index d66cfd4..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.MongoDBServer.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - MongoDB Server</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.mongodb.MongoDBServer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.sharding.MongoDBRouter.html b/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.sharding.MongoDBRouter.html
deleted file mode 100644
index 4aa3d58..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.sharding.MongoDBRouter.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - MongoDB Router</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.mongodb.sharding.MongoDBRouter");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.sharding.MongoDBShardedDeployment.html b/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.sharding.MongoDBShardedDeployment.html
deleted file mode 100644
index 32407e8..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.mongodb.sharding.MongoDBShardedDeployment.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - MongoDB Sharded Deployment</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.mongodb.sharding.MongoDBShardedDeployment");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.redis.RedisCluster.html b/learnmore/catalog/entities/brooklyn.entity.nosql.redis.RedisCluster.html
deleted file mode 100644
index b89a515..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.redis.RedisCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Redis Cluster</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.redis.RedisCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.redis.RedisStore.html b/learnmore/catalog/entities/brooklyn.entity.nosql.redis.RedisStore.html
deleted file mode 100644
index a0a5504..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.redis.RedisStore.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Redis Server</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.redis.RedisStore");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.riak.RiakCluster.html b/learnmore/catalog/entities/brooklyn.entity.nosql.riak.RiakCluster.html
deleted file mode 100644
index e588e09..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.riak.RiakCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Riak Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.riak.RiakCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.riak.RiakNode.html b/learnmore/catalog/entities/brooklyn.entity.nosql.riak.RiakNode.html
deleted file mode 100644
index d70b0b0..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.riak.RiakNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Riak Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.riak.RiakNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.nosql.solr.SolrServer.html b/learnmore/catalog/entities/brooklyn.entity.nosql.solr.SolrServer.html
deleted file mode 100644
index 45514a6..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.nosql.solr.SolrServer.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Apache Solr Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.nosql.solr.SolrServer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.osgi.karaf.KarafContainer.html b/learnmore/catalog/entities/brooklyn.entity.osgi.karaf.KarafContainer.html
deleted file mode 100644
index 3583da1..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.osgi.karaf.KarafContainer.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Karaf</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.osgi.karaf.KarafContainer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.pool.ServerPool.html b/learnmore/catalog/entities/brooklyn.entity.pool.ServerPool.html
deleted file mode 100644
index c20cdd1..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.pool.ServerPool.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Server Pool</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.pool.ServerPool");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.proxy.nginx.NginxController.html b/learnmore/catalog/entities/brooklyn.entity.proxy.nginx.NginxController.html
deleted file mode 100644
index d0a0c61..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.proxy.nginx.NginxController.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Nginx Server</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.proxy.nginx.NginxController");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.ControlledDynamicWebAppCluster.html b/learnmore/catalog/entities/brooklyn.entity.webapp.ControlledDynamicWebAppCluster.html
deleted file mode 100644
index 3c8ebff..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.ControlledDynamicWebAppCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Controlled Dynamic Web-app Cluster</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.ControlledDynamicWebAppCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.DynamicWebAppCluster.html b/learnmore/catalog/entities/brooklyn.entity.webapp.DynamicWebAppCluster.html
deleted file mode 100644
index 046604f..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.DynamicWebAppCluster.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Dynamic Web-app Cluster</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.DynamicWebAppCluster");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.jboss.JBoss6Server.html b/learnmore/catalog/entities/brooklyn.entity.webapp.jboss.JBoss6Server.html
deleted file mode 100644
index 668ce5a..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.jboss.JBoss6Server.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - JBoss Application Server 6</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.jboss.JBoss6Server");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.jboss.JBoss7Server.html b/learnmore/catalog/entities/brooklyn.entity.webapp.jboss.JBoss7Server.html
deleted file mode 100644
index 7b2c3f5..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.jboss.JBoss7Server.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - JBoss Application Server 7</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.jboss.JBoss7Server");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.jetty.Jetty6Server.html b/learnmore/catalog/entities/brooklyn.entity.webapp.jetty.Jetty6Server.html
deleted file mode 100644
index 1d0cbd5..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.jetty.Jetty6Server.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Jetty6 Server</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.jetty.Jetty6Server");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.nodejs.NodeJsWebAppService.html b/learnmore/catalog/entities/brooklyn.entity.webapp.nodejs.NodeJsWebAppService.html
deleted file mode 100644
index 1ea921b..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.nodejs.NodeJsWebAppService.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Node.JS Application</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.nodejs.NodeJsWebAppService");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.webapp.tomcat.TomcatServer.html b/learnmore/catalog/entities/brooklyn.entity.webapp.tomcat.TomcatServer.html
deleted file mode 100644
index a18368c..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.webapp.tomcat.TomcatServer.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - Tomcat Server</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.webapp.tomcat.TomcatServer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.zookeeper.ZooKeeperEnsemble.html b/learnmore/catalog/entities/brooklyn.entity.zookeeper.ZooKeeperEnsemble.html
deleted file mode 100644
index 527805d..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.zookeeper.ZooKeeperEnsemble.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - ZooKeeper ensemble</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.zookeeper.ZooKeeperEnsemble");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/entities/brooklyn.entity.zookeeper.ZooKeeperNode.html b/learnmore/catalog/entities/brooklyn.entity.zookeeper.ZooKeeperNode.html
deleted file mode 100644
index 054d806..0000000
--- a/learnmore/catalog/entities/brooklyn.entity.zookeeper.ZooKeeperNode.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Entity - ZooKeeper Node</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-        <li><a href="#sensors" data-toggle="tab">Sensors</a></li>
-        <li><a href="#effectors" data-toggle="tab">Effectors</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="configKeys"></div>
-        <div class="tab-pane" id="sensors"></div>
-        <div class="tab-pane" id="effectors"></div>
-      </div>
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.entities, "brooklyn.entity.zookeeper.ZooKeeperNode");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-            item.sensors.forEach(function (element) { $("#sensors").append(brooklyn.sensorCard(element)); });
-            if (item.effectors != undefined) {
-                item.effectors.forEach(function (element) { $("#effectors").append(brooklyn.effectorCard(element)); });
-            }
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/index.html b/learnmore/catalog/index.html
deleted file mode 100644
index 4487346..0000000
--- a/learnmore/catalog/index.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="items.css" type="text/css" media="screen"/>
-    <title>Brooklyn Objects</title>
-  </head>
-
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="https://brooklyn.incubator.apache.org/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#entities" data-toggle="tab">Entities</a></li>
-        <li><a href="#policies" data-toggle="tab">Policies</a></li>
-        <li><a href="#enrichers" data-toggle="tab">Enrichers</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div class="tab-pane active" id="entities">
-          <input class="filter form-control" type="text" placeholder="Filter by type, e.g. webapp or nosql">
-        </div>
-        <div class="tab-pane" id="policies">
-          <input class="filter form-control" type="text" placeholder="Filter by type, e.g. ha">
-        </div>
-        <div class="tab-pane" id="enrichers">
-          <input class="filter form-control" type="text" placeholder="Filter by type, e.g. http">
-        </div>
-        <div class="tab-pane" id="locations"></div>
-        <div class="tab-pane" id="locationResolvers"></div>
-      </div>
-    </div>
-
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="libs/js/bloodhound.js" type="text/javascript"></script>
-    <script src="common.js" type="text/javascript"></script>
-    <script src="items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        if (!String.prototype.trim) {
-            String.prototype.trim = function () {
-                return this.replace(/^\s+|\s+$/g, '');
-            };
-        }
-        var card = function (collection, cardFunction, target) {
-            var cards = _.map(collection, cardFunction);
-            $(target).append(cards.join(""));
-        };
-        var ESCAPE_KEY = 27;
-
-        var filter = function (element) {
-            var $element = $(element),
-                $tab = $element.parent(),
-                kind = $tab.attr("id"),
-                collection = items[kind];
-            if (!collection) {
-                console.warn("Unable to determine type for input", element);
-                return;
-            }
-
-            // Number.MAX_VALUE configures Bloodhound to return all matches.
-            var bloodhound = new Bloodhound({
-                name: kind,
-                local: collection,
-                limit: Number.MAX_VALUE,
-                datumTokenizer: function (d) {
-                    return Bloodhound.tokenizers.nonword(d.type);
-                },
-                queryTokenizer: Bloodhound.tokenizers.nonword
-            });
-            bloodhound.initialize();
-
-            // Filter items as input changes
-            var allAnchors = $tab.find("a").map(function (index, a) { return $(a); });
-            var hideAnchorsNotMatchingQuery = function () {
-                var query = $element.val();
-                query = query.trim();
-                if (!query) {
-                    $tab.find("a").removeClass("hide");
-                } else {
-                    var matchedTypes = {};
-                    bloodhound.get(query, function (suggestions) {
-                        _.each(suggestions, function (s) {
-                            // approximate a set!
-                            matchedTypes[s.type] = true;
-                        });
-                    });
-                    _.each(allAnchors, function (a) {
-                        if (_.has(matchedTypes, a.data("type"))) {
-                            a.removeClass("hide");
-                        } else {
-                            a.addClass("hide");
-                        }
-                    });
-                }
-            };
-            $element.on("input", hideAnchorsNotMatchingQuery);
-            // In case page is loaded with text in input, e.g. from back button.
-            hideAnchorsNotMatchingQuery();
-
-            $element.on("keydown", function (e) {
-                if (e.keyCode == ESCAPE_KEY) {
-                    $element.val("");
-                    hideAnchorsNotMatchingQuery();
-                }
-            });
-        };
-
-        $(document).ready(function () {
-            card(items.entities, brooklyn.entityCard, "#entities");
-            card(items.policies, brooklyn.policyCard, "#policies");
-            card(items.enrichers, brooklyn.enricherCard, "#enrichers");
-            //transformItemAndAddToElement(items.locations, brooklyn.locationCard, "#locations");
-            //items.locationResolvers.forEach(function (element) { $("#locationResolvers").append("<tr><td>" + element + "</td></tr>"); });
-            $("input.filter").each(function (index, element) {
-                filter(element);
-            });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/items.css b/learnmore/catalog/items.css
deleted file mode 100644
index a0bf0f0..0000000
--- a/learnmore/catalog/items.css
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-*/
-/* landing page */
-body {
-  margin: 0px;
-  padding: 10px 0px 20px 0px;
-  font-family: arial, helvetica, sans-serif;
-  background-color: #ffffff;
-  color: #393939;
-  font-size: 15px;
-}
-
-.nav-tabs {
-  clear: both;
-  font-weight: bold;
-  font-size: 12pt;
-}
-.nav-tabs a {
-  color: #4d9d3a;
-}
-.nav-tabs a:hover {
-  color: #4d9d3a;
-}
-
-.tab-content {
-  padding: 20px;
-  padding-bottom: 10px;
-  border: 1px solid #ddd;
-  border-top: none;
-}
-
-a:hover > .card {
-  top: -2px;
-  background-color: #f4f4f4;
-  box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.2);
-}
-.card {
-  position: relative;
-  padding: 12px;
-  background-color: #f8f8f8;
-  color: #333;
-  border: 1px solid #E1E1E8;
-  border-radius: 6px;
-  font-size: 11pt;
-}
-.card,
-.filter {
-    margin-bottom: 10px;
-}
-a .glyphicon {
-  display: block;
-  position: absolute;
-  right: 0;
-  top: 0;
-  padding: 8px;
-  font-size: 16pt;
-  color: #aaa;
-}
-a:hover .glyphicon {
-  color: #888;
-}
-a.plain {
-  text-decoration: none !important;
-}
-.name {
-  font-size: 12pt;
-  font-weight: bold;
-}
-.type {
-  font-family: monospace;
-  color: #888;
-  margin-top: 2px;
-}
-#summary .description {
-  margin: 15px 0 25px 0;
-}
-.card .description {
-  margin: 10px 40px 0 20px;
-}
-
-#summary {
-  clear: both;
-  margin: 10px 0 20px 0;
-}
-.summaryLabel {
-  font-size: 20px;
-  font-weight: bold;
-}
-.summaryType {
-  font-family: monospace;
-  font-size: 12pt;
-  color: #888;
-}
-.java {
-  font-family: monospace;
-}
-
-.card dl {
-  margin-bottom: 0;
-  margin-top: 5px;
-}
-dt {
-  clear: both;
-  float: left;
-  width: 8em;
-  text-align: right;
-  font-weight: normal;
-}
-dd {
-  margin-left: 9em;
-}
-
-#container {
-  width: 980px;
-  padding: 0;
-  margin: 0 auto;
-}
-
-#identity {
-  float: left;
-  margin: 0;
-  padding: 30px 0 15px 10px;
-}
-
-#identity a {
-  text-decoration: none;
-  display: block;
-  margin: 0;
-  color: #4d9d3a;
-  font-size: 2.5em;
-  padding: 0;
-  background: transparent url(images/brooklyn.gif) no-repeat 0 0;
-  width: 206px;
-  height: 44px;
-  text-indent: -1000px;
-  overflow: hidden;
-}
diff --git a/learnmore/catalog/items.js b/learnmore/catalog/items.js
deleted file mode 100644
index 814636a..0000000
--- a/learnmore/catalog/items.js
+++ /dev/null
@@ -1,24674 +0,0 @@
-var items = {
-  "entities" : [ {
-    "type" : "brooklyn.entity.messaging.activemq.ActiveMQBroker",
-    "defaultVersion" : "5.7.0",
-    "name" : "ActiveMQ Broker",
-    "description" : "ActiveMQ is an open source message broker which fully implements the Java Message Service 1.1 (JMS)",
-    "iconUrl" : "classpath:///activemq-logo.png",
-    "config" : [ {
-      "name" : "activemq.install.mirror.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://www.mirrorservice.org/sites/ftp.apache.org/activemq/apache-activemq",
-      "description" : "URL of mirror",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "activemq.jetty.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8161-65535",
-      "description" : "jetty port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "activemq.templateConfigurationUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/messaging/activemq/activemq.xml",
-      "description" : "Template file (in freemarker format) for the conf/activemq.xml file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "${driver.mirrorUrl}/${version}/apache-activemq-${version}-bin.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "5.7.0",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : "admin",
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : "admin",
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "openwire.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "61616-65535",
-      "description" : "OpenWire port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "activemq.jetty.port",
-      "type" : "java.lang.Integer",
-      "description" : "jetty port",
-      "links" : null
-    }, {
-      "name" : "activemq.templateConfigurationUrl",
-      "type" : "java.lang.String",
-      "description" : "Template file (in freemarker format) for the conf/activemq.xml file",
-      "links" : null
-    }, {
-      "name" : "broker.url",
-      "type" : "java.lang.String",
-      "description" : "Broker Connection URL",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "openwire.port",
-      "type" : "java.lang.Integer",
-      "description" : "OpenWire port",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.cassandra.CassandraFabric",
-    "name" : "Apache Cassandra Database Fabric",
-    "description" : "Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store which provides a ColumnFamily-based data model richer than typical key/value systems",
-    "iconUrl" : "classpath:///cassandra-logo.jpeg",
-    "config" : [ {
-      "name" : "cassandra.fabric.datacenter.namer",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "Function used to provide the cassandra.replication.datacenterName for a given location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccfabric.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamicfabric.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamicfabric.displayNamePrefix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Display name prefix, for created children",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamicfabric.displayNameSuffix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Display name suffix, for created children",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamicfabric.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "fabric.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial fabric quorum size - number of initial nodes that must have been successfully started to report success (if less than 0, then use a value based on INITIAL_SIZE of clusters)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cassandra.cluster.datacenterUsages",
-      "type" : "com.google.common.collect.Multimap",
-      "description" : "Current set of datacenters in use, with nodes in each",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.datacenters",
-      "type" : "java.util.Set",
-      "description" : "Current set of datacenters in use",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.hostname",
-      "type" : "java.lang.String",
-      "description" : "Hostname to connect to cluster with",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.seeds.current",
-      "type" : "java.util.Set",
-      "description" : "Current set of seeds to use to bootstrap the cluster",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.seeds.hasPublished",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether we have published any seeds",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.thrift.port",
-      "type" : "java.lang.Integer",
-      "description" : "Cassandra Thrift RPC port to connect to cluster with",
-      "links" : null
-    }, {
-      "name" : "fabric.size",
-      "type" : "java.lang.Integer",
-      "description" : "Fabric size",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "update",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Updates the cluster members",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.cassandra.CassandraDatacenter",
-    "name" : "Apache Cassandra Datacenter Cluster",
-    "description" : "Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store which provides a ColumnFamily-based data model richer than typical key/value systems",
-    "iconUrl" : "classpath:///cassandra-logo.jpeg",
-    "config" : [ {
-      "name" : "cassandra.cluster.delayBeforeAdvertisingCluster",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "Delay after cluster is started before checking and advertising its availability",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "BrooklynCluster",
-      "description" : "Name of the Cassandra cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.seedSupplier",
-      "type" : "com.google.common.base.Supplier",
-      "defaultValue" : null,
-      "description" : "For determining the seed nodes",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.snitchName",
-      "type" : "java.lang.String",
-      "defaultValue" : "SimpleSnitch",
-      "description" : "Type of the Cassandra snitch",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.tokenGenerator.class",
-      "type" : "java.lang.Class",
-      "defaultValue" : "class brooklyn.entity.nosql.cassandra.TokenGenerators$PosNeg63TokenGenerator",
-      "description" : "For determining the tokens of nodes",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.tokenShift",
-      "type" : "java.math.BigInteger",
-      "defaultValue" : null,
-      "description" : "Delta applied to all tokens generated for this Cassandra datacenter, useful when configuring multiple datacenters which should be shifted; if not set, a random shift is applied. (Pass 0 to prevent any shift.)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.useVnodes",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Determines whether to use vnodes; if doing so, tokens will not be explicitly assigned to nodes in the cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.numTokensPerNode",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 256,
-      "description" : "Number of tokens per node; if using vnodes, should set this to a value like 256; will be overridden to 1 if USE_VNODES==false",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cassandra.cluster.datacenterUsages",
-      "type" : "com.google.common.collect.Multimap",
-      "description" : "Current set of datacenters in use, with nodes in each",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.datacenters",
-      "type" : "java.util.Set",
-      "description" : "Current set of datacenters in use",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.first.node.started.utc",
-      "type" : "java.lang.Long",
-      "description" : "Time (UTC) when the first node was started",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.hostname",
-      "type" : "java.lang.String",
-      "description" : "Hostname to connect to cluster with",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.metrics.processCpuTime.fraction.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of CPU time used (percentage reported by JMX), averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.metrics.processCpuTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of CPU time used (percentage, over time window), averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.name",
-      "type" : "java.lang.String",
-      "description" : "Name of the Cassandra cluster",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.nodes",
-      "type" : "java.util.List",
-      "description" : "List of host:port of all active nodes in the cluster (thrift port, and public hostname/IP)",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.read.active",
-      "type" : "java.lang.Integer",
-      "description" : "Current active ReadStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.read.pending",
-      "type" : "java.lang.Long",
-      "description" : "Current pending ReadStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.schema.versions.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of different schema versions in the cluster; should be 1 for a healthy cluster, 0 when off; 2 and above indicats a Schema Disagreement Error (and keyspace access may fail)",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.seeds.current",
-      "type" : "java.util.Set",
-      "description" : "Current set of seeds to use to bootstrap the cluster",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.seeds.hasPublished",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether we have published any seeds",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.start.nodes.queued",
-      "type" : "java.util.List",
-      "description" : "Nodes queued for starting (for sequential start)",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.thrift.latency.perNode",
-      "type" : "java.lang.Long",
-      "description" : "Latency for thrift port connection  averaged over all nodes (ms)",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.thrift.port",
-      "type" : "java.lang.Integer",
-      "description" : "Cassandra Thrift RPC port to connect to cluster with",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.write.active",
-      "type" : "java.lang.Integer",
-      "description" : "Current active MutationStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.write.pending",
-      "type" : "java.lang.Long",
-      "description" : "Current pending MutationStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.reads.perSec.last.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Reads/sec (last datapoint) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cassandra.reads.perSec.windowed.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Reads/sec (over time window) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cassandra.thrift.latency.windowed.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Latency for thrift port (ms, over time window) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cassandra.write.perSec.last.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Writes/sec (last datapoint) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cassandra.writes.perSec.windowed.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Writes/sec (over time window) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "datastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "executeScript",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "commands",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "executes the given script contents using cassandra-cli",
-      "links" : null
-    }, {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "update",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Updates the cluster members",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.cassandra.CassandraNode",
-    "defaultVersion" : "1.2.16",
-    "name" : "Apache Cassandra Node",
-    "description" : "Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store which provides a ColumnFamily-based data model richer than typical key/value systems",
-    "iconUrl" : "classpath:///cassandra-logo.jpeg",
-    "config" : [ {
-      "name" : "cassandra.broadcastAddressSensor",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "sensor name from which to take the broadcast address; default (null) is a smart lookup",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "BrooklynCluster",
-      "description" : "Name of the Cassandra cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.seeds.initial",
-      "type" : "java.util.Set",
-      "defaultValue" : null,
-      "description" : "List of cluster nodes to seed this node",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.cluster.snitchName",
-      "type" : "java.lang.String",
-      "defaultValue" : "SimpleSnitch",
-      "description" : "Type of the Cassandra snitch",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.config.customSnitchUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL for a jar file to be uploaded (e.g. \"classpath://brooklyn/entity/nosql/cassandra/cassandra-multicloud-snitch.jar\"); defaults to null which means nothing to upload",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.config.fileName",
-      "type" : "java.lang.String",
-      "defaultValue" : "cassandra.yaml",
-      "description" : "Name for the copied config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.config.rackdc.fileName",
-      "type" : "java.lang.String",
-      "defaultValue" : "cassandra-rackdc.properties",
-      "description" : "Name for the copied rackdc config file (used for configuring replication, when a suitable snitch is used)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.config.rackdc.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/cassandra/cassandra-rackdc.properties",
-      "description" : "Template file (in freemarker format) for the cassandra-rackdc.properties config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.config.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/cassandra/cassandra-${entity.majorMinorVersion}.yaml",
-      "description" : "A URL (in freemarker format) for a cassandra.yaml config file (in freemarker format)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.gossip.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "7000-65535",
-      "description" : "Cassandra Gossip communications port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.install.mirror.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://www.mirrorservice.org/sites/ftp.apache.org/cassandra",
-      "description" : "URL of mirror",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.install.tgzUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL of TGZ download file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.listenAddressSensor",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "sensor name from which to take the listen address; default (null) is a smart lookup",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.native.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "9042-65535",
-      "description" : "Cassandra Native Transport port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.numTokensPerNode",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Number of tokens per node; if using vnodes, should set this to a value like 256",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.replication.datacenterName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Datacenter name (used for configuring replication, when a suitable snitch is used)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.replication.rackName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Rack name (used for configuring replication, when a suitable snitch is used)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.rpcAddressSensor",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "sensor name from which to take the RPC address; default (null) is 0.0.0.0",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.ssl-gossip.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "7001-65535",
-      "description" : "Cassandra Gossip SSL communications port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.thrift.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "9160-65535",
-      "description" : "Cassandra Thrift RPC port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.token",
-      "type" : "java.math.BigInteger",
-      "defaultValue" : null,
-      "description" : "Cassandra Token",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cassandra.tokens",
-      "type" : "java.util.Set",
-      "defaultValue" : null,
-      "description" : "Cassandra Tokens",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "Contensts of creation script to initialize the datastore",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "URL of creation script to use to initialize the datastore (ignored if contents are specified)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "${driver.mirrorUrl}/${version}/apache-cassandra-${version}-bin.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.2.16",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.metrics.mxbeanStatsEnabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Enables collection of JVM stats from the MXBeans, such as memory and thread usage (default is true)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "JMXMP_AND_RMI",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "7199",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cassandra.cluster.name",
-      "type" : "java.lang.String",
-      "description" : "Name of the Cassandra cluster",
-      "links" : null
-    }, {
-      "name" : "cassandra.gossip.port",
-      "type" : "java.lang.Integer",
-      "description" : "Cassandra Gossip communications port",
-      "links" : null
-    }, {
-      "name" : "cassandra.liveNodeCount",
-      "type" : "java.lang.Integer",
-      "description" : "Number of live nodes in cluster",
-      "links" : null
-    }, {
-      "name" : "cassandra.native.port",
-      "type" : "java.lang.Integer",
-      "description" : "Cassandra Native Transport port",
-      "links" : null
-    }, {
-      "name" : "cassandra.peers",
-      "type" : "java.lang.Integer",
-      "description" : "Number of peers in cluster",
-      "links" : null
-    }, {
-      "name" : "cassandra.read.active",
-      "type" : "java.lang.Integer",
-      "description" : "Current active ReadStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.read.completed",
-      "type" : "java.lang.Long",
-      "description" : "Total completed ReadStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.read.pending",
-      "type" : "java.lang.Long",
-      "description" : "Current pending ReadStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.reads.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reads/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "cassandra.reads.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reads/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "cassandra.replication.datacenterName",
-      "type" : "java.lang.String",
-      "description" : "Datacenter name (used for configuring replication, when a suitable snitch is used)",
-      "links" : null
-    }, {
-      "name" : "cassandra.replication.rackName",
-      "type" : "java.lang.String",
-      "description" : "Rack name (used for configuring replication, when a suitable snitch is used)",
-      "links" : null
-    }, {
-      "name" : "cassandra.service.jmx.up",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether JMX is up for this service",
-      "links" : null
-    }, {
-      "name" : "cassandra.ssl-gossip.port",
-      "type" : "java.lang.Integer",
-      "description" : "Cassandra Gossip SSL communications port",
-      "links" : null
-    }, {
-      "name" : "cassandra.thrift.latency",
-      "type" : "java.lang.Long",
-      "description" : "Latency for thrift port connection (ms) or null if down",
-      "links" : null
-    }, {
-      "name" : "cassandra.thrift.latency.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Latency for thrift port (ms, averaged over time window)",
-      "links" : null
-    }, {
-      "name" : "cassandra.thrift.port",
-      "type" : "java.lang.Integer",
-      "description" : "Cassandra Thrift RPC port",
-      "links" : null
-    }, {
-      "name" : "cassandra.token",
-      "type" : "java.math.BigInteger",
-      "description" : "Cassandra Token",
-      "links" : null
-    }, {
-      "name" : "cassandra.tokens",
-      "type" : "java.util.Set",
-      "description" : "Cassandra Tokens",
-      "links" : null
-    }, {
-      "name" : "cassandra.write.active",
-      "type" : "java.lang.Integer",
-      "description" : "Current active MutationStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.write.completed",
-      "type" : "java.lang.Long",
-      "description" : "Total completed MutationStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.write.pending",
-      "type" : "java.lang.Long",
-      "description" : "Current pending MutationStage tasks",
-      "links" : null
-    }, {
-      "name" : "cassandra.write.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Writes/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "cassandra.writes.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Writes/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "datastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "java.metrics.gc.time",
-      "type" : "java.util.Map",
-      "description" : "garbage collection time",
-      "links" : null
-    }, {
-      "name" : "java.metrics.heap.committed",
-      "type" : "java.lang.Long",
-      "description" : "Commited heap size (bytes)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.heap.init",
-      "type" : "java.lang.Long",
-      "description" : "Initial heap size (bytes)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.heap.max",
-      "type" : "java.lang.Long",
-      "description" : "Max heap size (bytes)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.heap.used",
-      "type" : "java.lang.Long",
-      "description" : "Current heap size (bytes)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.nonheap.used",
-      "type" : "java.lang.Long",
-      "description" : "Current non-heap size (bytes)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.physicalmemory.free",
-      "type" : "java.lang.Long",
-      "description" : "The free memory available to the operating system",
-      "links" : null
-    }, {
-      "name" : "java.metrics.physicalmemory.total",
-      "type" : "java.lang.Long",
-      "description" : "The physical memory available to the operating system",
-      "links" : null
-    }, {
-      "name" : "java.metrics.processCpuTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of CPU time used, reported by JVM (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.processCpuTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of CPU time used, reported by JVM (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.processCpuTime.total",
-      "type" : "java.lang.Double",
-      "description" : "Process CPU time (total millis since start)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.processors.available",
-      "type" : "java.lang.Integer",
-      "description" : "number of processors available to the Java virtual machine",
-      "links" : null
-    }, {
-      "name" : "java.metrics.starttime",
-      "type" : "java.lang.Long",
-      "description" : "Start time of Java process (UTC)",
-      "links" : null
-    }, {
-      "name" : "java.metrics.systemload.average",
-      "type" : "java.lang.Double",
-      "description" : "average system load",
-      "links" : null
-    }, {
-      "name" : "java.metrics.threads.current",
-      "type" : "java.lang.Integer",
-      "description" : "Current number of threads",
-      "links" : null
-    }, {
-      "name" : "java.metrics.threads.max",
-      "type" : "java.lang.Integer",
-      "description" : "Peak number of threads",
-      "links" : null
-    }, {
-      "name" : "java.metrics.uptime",
-      "type" : "java.lang.Long",
-      "description" : "Uptime of Java process (millis, elapsed since start)",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "executeScript",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "commands",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "executes the given script contents using cassandra-cli",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.solr.SolrServer",
-    "defaultVersion" : "4.7.0",
-    "name" : "Apache Solr Node",
-    "description" : "Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project.",
-    "iconUrl" : "classpath:///solr-logo.jpeg",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "${driver.mirrorUrl}/${version}/solr-${version}.tgz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "4.7.0",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "solr.config.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/solr/solr.xml",
-      "description" : "Template file (in freemarker format) for the solr.xml config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "solr.core.config",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of core names to core configuration archive URL",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "solr.http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8983-65535",
-      "description" : "Solr HTTP communications port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "solr.install.mirror.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://mirrors.ukfast.co.uk/sites/ftp.apache.org/lucene/solr/",
-      "description" : "URL of mirror",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "solr.http.port",
-      "type" : "java.lang.Integer",
-      "description" : "Solr HTTP communications port",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.network.bind.BindDnsServer",
-    "defaultVersion" : null,
-    "name" : "BIND",
-    "description" : "BIND is an Internet Domain Name Server.",
-    "iconUrl" : "classpath:///isc-logo.png",
-    "config" : [ {
-      "name" : "bind.access.cidr",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.0.0.0/0",
-      "description" : "Subnet CIDR or ACL allowed to access DNS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.domain.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "brooklyn.local",
-      "description" : "The DNS domain name to serve",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.entity.filter",
-      "type" : "com.google.common.base.Predicate",
-      "defaultValue" : "Predicates.instanceOf(brooklyn.entity.basic.SoftwareProcess)",
-      "description" : "Filter for entities which will use the BIND DNS service for name resolution",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "53",
-      "description" : "BIND DNS port for TCP and UDP",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.resolv-conf.replce",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Set to replace resolv.conf with the template (default is to use eth0 script)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.reverse-lookup.address",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Network address for reverse lookup zone",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.sensor.hostname",
-      "type" : "brooklyn.event.AttributeSensor",
-      "defaultValue" : "Sensor: host.name (java.lang.String)",
-      "description" : "Sensor on managed entities that reports the hostname",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.template.domain-zone",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/network/bind/domain.zone",
-      "description" : "The BIND domain zone file to serve (as FreeMarker template)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.template.interface-cfg",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/network/bind/ifcfg",
-      "description" : "The network interface configuration file for clients (as FreeMarker template)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.template.named-conf",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/network/bind/named.conf",
-      "description" : "The BIND named configuration file (as FreeMarker template)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.template.resolv-conf",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/network/bind/resolv.conf",
-      "description" : "The resolver configuration file for clients (as FreeMarker template)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "bind.template.reverse-zone",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/network/bind/reverse.zone",
-      "description" : "The BIND reverse lookup zone file to serve (as FreeMarker template)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "bind.port",
-      "type" : "java.lang.Integer",
-      "description" : "BIND DNS port for TCP and UDP",
-      "links" : null
-    }, {
-      "name" : "bind.reverse-lookup.cidr",
-      "type" : "brooklyn.util.net.Cidr",
-      "description" : "The network CIDR that hosts must have for reverse lookup entriers to be added (default uses server address /24)",
-      "links" : null
-    }, {
-      "name" : "bind.reverse-lookup.domain",
-      "type" : "java.lang.String",
-      "description" : "The in-addr.arpa reverse lookup domain name",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "getAddressMappings",
-      "returnType" : "java.util.Map",
-      "parameters" : [ ],
-      "description" : "Gets the Hostname->IP mappings stored in this DNS server's conf file",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.brooklynnode.BrooklynEntityMirror",
-    "name" : "Brooklyn Entity Mirror",
-    "description" : "Provides an entity which can sit in one brooklyn domain and reflect the status of an entity via the REST API of another domain.",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "brooklyn.mirror.entity_id",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Brooklyn ID of the entity being mirrored",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.mirror.entity_url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL for the entity in the remote Brooklyn mgmt endpoint",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.mirror.poll_period",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5s",
-      "description" : "Frequency to poll for client sensors",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.managementPassword",
-      "type" : "java.lang.String",
-      "defaultValue" : "password",
-      "description" : "Password for MANAGEMENT_USER",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.managementUser",
-      "type" : "java.lang.String",
-      "defaultValue" : "admin",
-      "description" : "The user for logging into the brooklyn web-console (also used for health-checks)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "brooklyn.mirror.monitoring_status",
-      "type" : "java.lang.String",
-      "description" : "brooklyn.mirror.monitoring_status",
-      "links" : null
-    } ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.entity.brooklynnode.BrooklynNode",
-    "defaultVersion" : "0.7.0-SNAPSHOT",
-    "name" : "Brooklyn Node",
-    "description" : "Deploys a Brooklyn management server",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "brooklynnode.app",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Application (fully qualified class name) to launch using the brooklyn CLI",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklyncatalog.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Contents for the brooklyn catalog.xml file (to upload to ~/.brooklyn/catalog.xml",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklyncatalog.remotepath",
-      "type" : "java.lang.String",
-      "defaultValue" : "${HOME}/.brooklyn/catalog.xml",
-      "description" : "Remote path for the brooklyn catalog.xml file to be uploaded",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklyncatalog.uri",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URI for the brooklyn catalog.xml file (to upload to ~/.brooklyn/catalog.xml",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklynproperties.global.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Contents for the global brooklyn properties file (to upload to ~/.brooklyn/brooklyn.properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklynproperties.global.remotepath",
-      "type" : "java.lang.String",
-      "defaultValue" : "${HOME}/.brooklyn/brooklyn.properties",
-      "description" : "Remote path for the global brooklyn.properties file to be uploaded",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklynproperties.global.uri",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URI for the global brooklyn properties file (to upload to ~/.brooklyn/brooklyn.properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklynproperties.local.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Contents for the launch-specific brooklyn properties file (to upload to ~/.brooklyn/brooklyn.properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklynproperties.local.remotepath",
-      "type" : "java.lang.String",
-      "defaultValue" : "${driver.runDir}/brooklyn-local.properties",
-      "description" : "Remote path for the launch-specific brooklyn.properties file to be uploaded",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.brooklynproperties.local.uri",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URI for the launch-specific brooklyn properties file (to upload to ~/.brooklyn/brooklyn.properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.classpath",
-      "type" : "java.util.List",
-      "defaultValue" : [ ],
-      "description" : "classpath to use, as list of URL entries",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.copytorundir",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "URLs of resources to be copied across to the server, giving the path they are to be copied to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.customization.extraScript",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Optional additional script commands to run as part of customization; this might e.g. ensure id_rsa is set up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.distro.uploadurl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL for uploading the brooklyn distro (retrieved locally and pushed to remote install location)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.download.archive.subpath",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Path to the main directory in the archive being supplied for installation; to use the root of an archive, specify '.'; default value if left blank is the appropriate value for brooklyn,e.g. 'brooklyn-0.7.0-SNAPSHOT'",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : "bin/brooklyn",
-      "description" : "Path to the script to launch Brooklyn / the app relative to the subpath in the archive, defaulting to 'bin/brooklyn'",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.launch.command.pid.updated",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether the launch script creates/updates the PID file, if not the entity will do so, but note it will not necessarily kill sub-processes",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.locations",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Locations to use when launching the app",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.managementPassword",
-      "type" : "java.lang.String",
-      "defaultValue" : "password",
-      "description" : "Password for MANAGEMENT_USER",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.managementUser",
-      "type" : "java.lang.String",
-      "defaultValue" : "admin",
-      "description" : "The user for logging into the brooklyn web-console (also used for health-checks)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.noshutdownonexit",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to shutdown entities on exit",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.properties.file.ifExists",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "FAIL",
-      "description" : "What to do in the case where brooklyn.properties already exists",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "USE_EXISTING",
-        "description" : "USE_EXISTING"
-      }, {
-        "value" : "OVERWRITE",
-        "description" : "OVERWRITE"
-      }, {
-        "value" : "FAIL",
-        "description" : "FAIL"
-      } ],
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.bindAddress",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Specifies the IP address of the NIC to bind the Brooklyn Management Console to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.enabledHttpProtocols",
-      "type" : "java.util.List",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.httpPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8081-65535",
-      "description" : "HTTP Port for the brooklyn web-console",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.httpsPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443-65535",
-      "description" : "HTTPS Port for the brooklyn web-console",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.nosecurity",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to start the web console with no security",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.portMapper",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : "identity",
-      "description" : "Function for mapping private to public ports, for use in inferring the brooklyn URI",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "<#if version?contains(\"SNAPSHOT\")>https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=${version}&a=brooklyn-dist&c=dist&e=tar.gz<#else>http://search.maven.org/remotecontent?filepath=io/brooklyn/brooklyn-dist/${version}/brooklyn-dist-${version}-dist.tar.gz</#if>",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.7.0-SNAPSHOT",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "brooklynnode.app",
-      "type" : "java.lang.String",
-      "description" : "Application (fully qualified class name) to launch using the brooklyn CLI",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.classpath",
-      "type" : "java.util.List",
-      "description" : "classpath to use, as list of URL entries",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.copytorundir",
-      "type" : "java.util.Map",
-      "description" : "URLs of resources to be copied across to the server, giving the path they are to be copied to",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.locations",
-      "type" : "java.lang.String",
-      "description" : "Locations to use when launching the app",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.bindAddress",
-      "type" : "java.lang.String",
-      "description" : "Specifies the IP address of the NIC to bind the Brooklyn Management Console to",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.enabledHttpProtocols",
-      "type" : "java.util.List",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.httpPort",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP Port for the brooklyn web-console",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.httpsPort",
-      "type" : "java.lang.Integer",
-      "description" : "HTTPS Port for the brooklyn web-console",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.nosecurity",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether to start the web console with no security",
-      "links" : null
-    }, {
-      "name" : "brooklynnode.webconsole.url",
-      "type" : "java.net.URI",
-      "description" : "URL of the brooklyn web-console",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deployBlueprint",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "blueprintType",
-        "type" : "java.lang.String",
-        "description" : "blueprintType",
-        "defaultValue" : null
-      }, {
-        "name" : "blueprintConfig",
-        "type" : "java.util.Map",
-        "description" : "blueprintConfig",
-        "defaultValue" : null
-      }, {
-        "name" : "blueprintPlan",
-        "type" : "java.util.Map",
-        "description" : "CAMP plan for the blueprint to be deployed; currently only supports Java map or JSON string (not yet YAML)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploy a blueprint, either given a plan (as Java map or JSON string for a map), or given URL and optional config",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.ControlledDynamicWebAppCluster",
-    "name" : "Controlled Dynamic Web-app Cluster",
-    "description" : "A cluster of load-balanced web-apps, which can be dynamically re-sized",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "controlleddynamicwebappcluster.controller",
-      "type" : "brooklyn.entity.proxy.LoadBalancer",
-      "defaultValue" : null,
-      "description" : "Controller for the cluster; if null a default will created (using controllerSpec)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "controlleddynamicwebappcluster.controllerSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "Spec for creating the controller (if one not supplied explicitly); if null an NGINX instance will be created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "controlleddynamicwebappcluster.webClusterSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "Spec for creating the cluster; if null a DynamicWebAppCluster will be created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.ConfigurableEntityFactory",
-      "defaultValue" : null,
-      "description" : "factory (or closure) to create the web server",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "Spec for web server entiites to be created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamicgroup.entityfilter",
-      "type" : "com.google.common.base.Predicate",
-      "defaultValue" : null,
-      "description" : "Filter for entities which will automatically be in the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.by.context",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.named",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.root",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "controlleddynamicwebappcluster.cluster",
-      "type" : "brooklyn.entity.webapp.DynamicWebAppCluster",
-      "description" : "Underlying web-app cluster",
-      "links" : null
-    }, {
-      "name" : "controlleddynamicwebappcluster.controller",
-      "type" : "brooklyn.entity.proxy.LoadBalancer",
-      "description" : "Controller for the cluster; if null a default will created (using controllerSpec)",
-      "links" : null
-    }, {
-      "name" : "controlleddynamicwebappcluster.controllerSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "description" : "Spec for creating the controller (if one not supplied explicitly); if null an NGINX instance will be created",
-      "links" : null
-    }, {
-      "name" : "controlleddynamicwebappcluster.webClusterSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "description" : "Spec for creating the cluster; if null a DynamicWebAppCluster will be created",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.ConfigurableEntityFactory",
-      "description" : "factory (or closure) to create the web server",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "description" : "Spec for web server entiites to be created",
-      "links" : null
-    }, {
-      "name" : "dynamicgroup.running",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the entity is running, and will automatically update group membership",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "webapp.deployedWars",
-      "type" : "java.util.Set",
-      "description" : "Names of archives/contexts that are currently deployed",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "url",
-        "type" : "java.lang.String",
-        "description" : "URL of WAR file",
-        "defaultValue" : null
-      }, {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : "context path where WAR should be deployed (/ for ROOT)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given artifact, from a source URL, to a given deployment filename/context",
-      "links" : null
-    }, {
-      "name" : "redeployAll",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Redeploys all web apps known here across the cluster (e.g. if it gets into an inconsistent state)",
-      "links" : null
-    }, {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "undeploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the given context/artifact",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.couchbase.CouchbaseCluster",
-    "name" : "CouchBase Cluster",
-    "description" : "CouchBase is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.createBuckets",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "a list of all dedicated port buckets to be created on the couchbase cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.delayBeforeAdvertisingCluster",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "Delay after cluster is started before checking and advertising its availability",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.intialQuorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.postStartStabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "Delay after nodes have been started before treating it as a cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "coucbase.cluster.actualClusterSize",
-      "type" : "java.lang.Integer",
-      "description" : "returns the actual number of nodes in the cluster",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.bucketCreationInProgress",
-      "type" : "java.lang.Boolean",
-      "description" : "Indicates that a bucket is currently being created, andfurther bucket creation should be deferred",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.buckets",
-      "type" : "java.util.List",
-      "description" : "Names of all the buckets the couchbase cluster",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.clusterEntities",
-      "type" : "java.util.Set",
-      "description" : "the set of service up nodes",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.connection.url",
-      "type" : "java.lang.String",
-      "description" : "Couchbase-style URL to connect to the cluster (e.g. http://127.0.0.1:8091/ or couchbase://10.0.0.1,10.0.0.2/)",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.isClusterInitialized",
-      "type" : "java.lang.Boolean",
-      "description" : "flag to emit if the couchbase cluster was intialized",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.node.addresses",
-      "type" : "java.util.List",
-      "description" : "List of host:port of all active nodes in the cluster (http admin port, and public hostname/IP)",
-      "links" : null
-    }, {
-      "name" : "couchbase.cluster.primaryNode",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The primary couchbase node to query and issue add-server and rebalance on",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.cmd.get",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/cmd_get",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.couch.docs.actual.disk.size",
-      "type" : "java.lang.Long",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/couch_docs_actual_disk_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.couch.docs.data.size",
-      "type" : "java.lang.Long",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/couch_docs_data_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.couch.views.actual.disk.size",
-      "type" : "java.lang.Long",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/couch_views_actual_disk_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.couch.views.data.size",
-      "type" : "java.lang.Long",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/couch_views_data_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.curr.items",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/curr_items",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.curr.items.tot",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/curr_items_tot",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.ep.bg.fetched",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/ep_bg_fetched",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.get.hits",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/get_hits",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.mem.used",
-      "type" : "java.lang.Long",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/mem_used",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.ops",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/ops",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cluster.per.node.vb.replica.curr.items",
-      "type" : "java.lang.Double",
-      "description" : "Average across cluster for pools/nodes/<current node>/interestingStats/vb_replica_curr_items",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.couchbase.CouchbaseNode",
-    "defaultVersion" : "2.5.1",
-    "name" : "CouchBase Node",
-    "description" : "CouchBase is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "couchbase.adminPassword",
-      "type" : "java.lang.String",
-      "defaultValue" : "Password",
-      "description" : "Password for the admin user on the node",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.adminUsername",
-      "type" : "java.lang.String",
-      "defaultValue" : "Administrator",
-      "description" : "Username for the admin user on the node",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.apiPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8092-65535",
-      "description" : "Couchbase API Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.clientInterfaceProxy",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "11211",
-      "description" : "Client interface (proxy)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.clusterInitRamSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 300,
-      "description" : "initial ram size of the cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.erlangPortMapper",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "4369",
-      "description" : "Erlang Port Mapper Daemon Listener Port (epmd)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.incomingSslProxy",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "11214",
-      "description" : "Incoming SSL Proxy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.internalBucketPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "11209",
-      "description" : "Internal Bucket Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.internalCapiHttpsForSsl",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "18092",
-      "description" : "Internal CAPI HTTPS for SSL",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.internalExternalBucketPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "11210",
-      "description" : "Internal/External Bucket Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.internalOutgoingSslProxy",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "11215",
-      "description" : "Internal Outgoing SSL Proxy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.internalRestHttpsForSsl",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "18091",
-      "description" : "Internal REST HTTPS for SSL",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.nodeDataExchangePortRangeEnd",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "21199-65535",
-      "description" : "Node data exchange Port Range End",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.nodeDataExchangePortRangeStart",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "21100-65535",
-      "description" : "Node data exchange Port Range Start",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchbase.webAdminPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8091-65535",
-      "description" : "Web Administration Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://packages.couchbase.com/releases/${version}/couchbase-server-enterprise_${version}_${driver.osTag}",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.5.1",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "couchbase.apiPort",
-      "type" : "java.lang.Integer",
-      "description" : "Couchbase API Port",
-      "links" : null
-    }, {
-      "name" : "couchbase.clientInterfaceProxy",
-      "type" : "java.lang.Integer",
-      "description" : "Client interface (proxy)",
-      "links" : null
-    }, {
-      "name" : "couchbase.clusterInitRamSize",
-      "type" : "java.lang.Integer",
-      "description" : "initial ram size of the cluster",
-      "links" : null
-    }, {
-      "name" : "couchbase.erlangPortMapper",
-      "type" : "java.lang.Integer",
-      "description" : "Erlang Port Mapper Daemon Listener Port (epmd)",
-      "links" : null
-    }, {
-      "name" : "couchbase.incomingSslProxy",
-      "type" : "java.lang.Integer",
-      "description" : "Incoming SSL Proxy",
-      "links" : null
-    }, {
-      "name" : "couchbase.internalBucketPort",
-      "type" : "java.lang.Integer",
-      "description" : "Internal Bucket Port",
-      "links" : null
-    }, {
-      "name" : "couchbase.internalCapiHttpsForSsl",
-      "type" : "java.lang.Integer",
-      "description" : "Internal CAPI HTTPS for SSL",
-      "links" : null
-    }, {
-      "name" : "couchbase.internalExternalBucketPort",
-      "type" : "java.lang.Integer",
-      "description" : "Internal/External Bucket Port",
-      "links" : null
-    }, {
-      "name" : "couchbase.internalOutgoingSslProxy",
-      "type" : "java.lang.Integer",
-      "description" : "Internal Outgoing SSL Proxy",
-      "links" : null
-    }, {
-      "name" : "couchbase.internalRestHttpsForSsl",
-      "type" : "java.lang.Integer",
-      "description" : "Internal REST HTTPS for SSL",
-      "links" : null
-    }, {
-      "name" : "couchbase.isInCluster",
-      "type" : "java.lang.Boolean",
-      "description" : "flag to determine if the current couchbase node has been added to a cluster",
-      "links" : null
-    }, {
-      "name" : "couchbase.isPrimaryNode",
-      "type" : "java.lang.Boolean",
-      "description" : "flag to determine if the current couchbase node is the primary node for the cluster",
-      "links" : null
-    }, {
-      "name" : "couchbase.nodeDataExchangePortRangeEnd",
-      "type" : "java.lang.Integer",
-      "description" : "Node data exchange Port Range End",
-      "links" : null
-    }, {
-      "name" : "couchbase.nodeDataExchangePortRangeStart",
-      "type" : "java.lang.Integer",
-      "description" : "Node data exchange Port Range Start",
-      "links" : null
-    }, {
-      "name" : "couchbase.rebalance.status",
-      "type" : "java.lang.String",
-      "description" : "Displays the current rebalance status from pools/nodes/rebalanceStatus",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.cmd.get",
-      "type" : "java.lang.Double",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/cmd_get",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.couch.docs.actual.disk.size",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/couch_docs_actual_disk_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.couch.docs.data.size",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/couch_docs_data_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.couch.views.actual.disk.size",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/couch_views_actual_disk_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.couch.views.data.size",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/couch_views_data_size",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.curr.items",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/curr_items",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.curr.items.tot",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/curr_items_tot",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.ep.bg.fetched",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/ep_bg_fetched",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.get.hits",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/get_hits",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.mem.used",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/mem_used",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.ops",
-      "type" : "java.lang.Double",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/ops",
-      "links" : null
-    }, {
-      "name" : "couchbase.stats.vb.replica.curr.items",
-      "type" : "java.lang.Long",
-      "description" : "Retrieved from pools/nodes/<current node>/interestingStats/vb_replica_curr_items",
-      "links" : null
-    }, {
-      "name" : "couchbase.webAdminPort",
-      "type" : "java.lang.Integer",
-      "description" : "Web Administration Port",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "bucketCreate",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "bucketName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "bucketType",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "bucketPort",
-        "type" : "java.lang.Integer",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "bucketRamSize",
-        "type" : "java.lang.Integer",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "bucketReplica",
-        "type" : "java.lang.Integer",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "create a new bucket",
-      "links" : null
-    }, {
-      "name" : "rebalance",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "rebalance the couchbase cluster",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "serverAdd",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "serverHostname",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "username",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "password",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "add a server to a cluster",
-      "links" : null
-    }, {
-      "name" : "serverAddAndRebalance",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "serverHostname",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "username",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      }, {
-        "name" : "password",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "add a server to a cluster, and immediately rebalances",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.couchdb.CouchDBNode",
-    "defaultVersion" : "1.2.1",
-    "name" : "CouchDB Node",
-    "description" : "Apache CouchDB is a database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API",
-    "iconUrl" : "classpath:///couchdb-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "couchdb.cluster.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "BrooklynCluster",
-      "description" : "Name of the CouchDB cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchdb.config.fileName",
-      "type" : "java.lang.String",
-      "defaultValue" : "local.ini",
-      "description" : "Name for the copied config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchdb.config.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/couchdb/couch.ini",
-      "description" : "Template file (in freemarker format) for the couchdb config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "couchdb.uri.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/couchdb/couch.uri",
-      "description" : "Template file (in freemarker format) for the couchdb URI file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "erlang.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "R15B",
-      "description" : "Erlang runtime version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.2.1",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "couchdb.cluster.name",
-      "type" : "java.lang.String",
-      "description" : "Name of the CouchDB cluster",
-      "links" : null
-    }, {
-      "name" : "couchdb.config.fileName",
-      "type" : "java.lang.String",
-      "description" : "Name for the copied config file",
-      "links" : null
-    }, {
-      "name" : "couchdb.config.templateUrl",
-      "type" : "java.lang.String",
-      "description" : "Template file (in freemarker format) for the couchdb config file",
-      "links" : null
-    }, {
-      "name" : "couchdb.uri.templateUrl",
-      "type" : "java.lang.String",
-      "description" : "Template file (in freemarker format) for the couchdb URI file",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.DynamicWebAppCluster",
-    "name" : "Dynamic Web-app Cluster",
-    "description" : "A cluster of web-apps, which can be dynamically re-sized; this does not include a load-balancer",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.by.context",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.named",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.root",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "webapp.deployedWars",
-      "type" : "java.util.Set",
-      "description" : "Names of archives/contexts that are currently deployed",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors.perNode",
-      "type" : "java.lang.Integer",
-      "description" : "Cluster entity request error average",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing reported by webserver (percentage, over time window) averaged over all nodes",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.perNode",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time per node (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total.perNode",
-      "type" : "java.lang.Double",
-      "description" : "Cluster entity request average",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "url",
-        "type" : "java.lang.String",
-        "description" : "URL of WAR file",
-        "defaultValue" : null
-      }, {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : "context path where WAR should be deployed (/ for ROOT)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given artifact, from a source URL, to a given deployment filename/context",
-      "links" : null
-    }, {
-      "name" : "redeployAll",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Redeploys all web apps known here across the cluster (e.g. if it gets into an inconsistent state)",
-      "links" : null
-    }, {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "undeploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the given context/artifact",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.elasticsearch.ElasticSearchCluster",
-    "name" : "Elastic Search Cluster",
-    "description" : "Elastic Search is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.cluster.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "BrooklynCluster",
-      "description" : "Name of the ElasticSearch cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.cluster.name",
-      "type" : "java.lang.String",
-      "description" : "Name of the ElasticSearch cluster",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.elasticsearch.ElasticSearchNode",
-    "defaultVersion" : "1.2.1",
-    "name" : "Elastic Search Node",
-    "description" : "Elastic Search is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.UNicast.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Indicates whether zen discovery unicast should be enabled for a node",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.cluster.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Cluster name (or elasticsearch selected if not set",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.data.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for writing data files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.log.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for writing log files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.multicast.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Indicates whether zen discovery multicast should be enabled for a node",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Node name (or randomly selected if not set",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.template.configuration.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL where the elasticsearch configuration file (in freemarker format) can be found",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "9200-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.2.1",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "datastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.cluster.name",
-      "type" : "java.lang.String",
-      "description" : "Cluster name (or elasticsearch selected if not set",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.docs.count",
-      "type" : "java.lang.Integer",
-      "description" : "elasticsearch.node.docs.count",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.get.time.in.millis",
-      "type" : "java.lang.Integer",
-      "description" : "elasticsearch.node.get.time.in.millis",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.get.total",
-      "type" : "java.lang.Integer",
-      "description" : "elasticsearch.node.get.total",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.id",
-      "type" : "java.lang.String",
-      "description" : "elasticsearch.node.id",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.name",
-      "type" : "java.lang.String",
-      "description" : "Node name (or randomly selected if not set",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.search.query.time.in.millis",
-      "type" : "java.lang.Integer",
-      "description" : "elasticsearch.node.search.query.time.in.millis",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.search.query.total",
-      "type" : "java.lang.Integer",
-      "description" : "elasticsearch.node.search.query.total",
-      "links" : null
-    }, {
-      "name" : "elasticsearch.node.store.bytes",
-      "type" : "java.lang.Integer",
-      "description" : "elasticsearch.node.store.bytes",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.jboss.JBoss6Server",
-    "defaultVersion" : "6.0.0.Final",
-    "name" : "JBoss Application Server 6",
-    "description" : "AS6: an open source Java application server from JBoss",
-    "iconUrl" : "classpath:///jboss-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-${version}/jboss-as-distribution-${version}.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjboss%2Ffiles%2FJBoss%2F${version}%2F&ts=1307104229&use_mirror=kent",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "6.0.0.Final",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jboss6.bind.address",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.0.0.0",
-      "description" : "Address of interface JBoss should listen on, defaulting 0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jboss6.clusterName",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "Identifier used to group JBoss instances",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jboss6.portincrement",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 0,
-      "description" : "Increment to be used for all jboss ports",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.by.context",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.named",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.root",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jboss6.bind.address",
-      "type" : "java.lang.String",
-      "description" : "Address of interface JBoss should listen on, defaulting 0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)",
-      "links" : null
-    }, {
-      "name" : "jboss6.clusterName",
-      "type" : "java.lang.String",
-      "description" : "Identifier used to group JBoss instances",
-      "links" : null
-    }, {
-      "name" : "jboss6.portincrement",
-      "type" : "java.lang.Integer",
-      "description" : "Increment to be used for all jboss ports",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.deployedWars",
-      "type" : "java.util.Set",
-      "description" : "Names of archives/contexts that are currently deployed",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "url",
-        "type" : "java.lang.String",
-        "description" : "URL of WAR file",
-        "defaultValue" : null
-      }, {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : "context path where WAR should be deployed (/ for ROOT)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given artifact, from a source URL, to a given deployment filename/context",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "undeploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the given context/artifact",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.jboss.JBoss7Server",
-    "defaultVersion" : "7.1.1.Final",
-    "name" : "JBoss Application Server 7",
-    "description" : "AS7: an open source Java application server from JBoss",
-    "iconUrl" : "classpath:///jboss-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://download.jboss.org/jbossas/7.1/jboss-as-${version}/jboss-as-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "7.1.1.Final",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jboss.bind.address",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.0.0.0",
-      "description" : "Address of interface JBoss should listen on, defaulting 0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.by.context",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.named",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.root",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.deploymentTimeout",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 600,
-      "description" : "Deployment timeout, in seconds",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementHttpPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "9990-65535",
-      "description" : "Management port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementHttpsPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "9443-65535",
-      "description" : "Management port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementNativePort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "10999-65535",
-      "description" : "Management native port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementPassword",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Password for MANAGEMENT_USER.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementUser",
-      "type" : "java.lang.String",
-      "defaultValue" : "brooklyn",
-      "description" : "A user to be placed in the management realm. Brooklyn will use this user to poll sensors",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.portIncrement",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 0,
-      "description" : "Port increment for all ports in config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.templateConfigurationUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/webapp/jboss/jboss7-standalone.xml",
-      "description" : "Template file (in freemarker format) for the standalone.xml file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jboss.bind.address",
-      "type" : "java.lang.String",
-      "description" : "Address of interface JBoss should listen on, defaulting 0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)",
-      "links" : null
-    }, {
-      "name" : "jboss.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.deployedWars",
-      "type" : "java.util.Set",
-      "description" : "Names of archives/contexts that are currently deployed",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementHttpPort",
-      "type" : "java.lang.Integer",
-      "description" : "Management port",
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementHttpsPort",
-      "type" : "java.lang.Integer",
-      "description" : "Management port",
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementNativePort",
-      "type" : "java.lang.Integer",
-      "description" : "Management native port",
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementStatus",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP response code for the management server",
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Management server is responding with OK",
-      "links" : null
-    }, {
-      "name" : "webapp.jboss.managementUrl",
-      "type" : "java.lang.String",
-      "description" : "URL where management endpoint is available",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "url",
-        "type" : "java.lang.String",
-        "description" : "URL of WAR file",
-        "defaultValue" : null
-      }, {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : "context path where WAR should be deployed (/ for ROOT)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given artifact, from a source URL, to a given deployment filename/context",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "undeploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the given context/artifact",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.jetty.Jetty6Server",
-    "defaultVersion" : "6.1.26",
-    "name" : "Jetty6 Server",
-    "description" : "Old version (v6 @ Mortbay) of the popular Jetty webapp container",
-    "iconUrl" : "classpath:///jetty-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://dist.codehaus.org/jetty/jetty-${version}/jetty-${version}.zip",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "6.1.26",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jetty.configXml.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Extra XML configuration file template URL if required",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.by.context",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.named",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.root",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.deployedWars",
-      "type" : "java.util.Set",
-      "description" : "Names of archives/contexts that are currently deployed",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.responses.4xx",
-      "type" : "java.lang.Integer",
-      "description" : "Responses in the 400's",
-      "links" : null
-    }, {
-      "name" : "webapp.responses.5xx",
-      "type" : "java.lang.Integer",
-      "description" : "Responses in the 500's",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "url",
-        "type" : "java.lang.String",
-        "description" : "URL of WAR file",
-        "defaultValue" : null
-      }, {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : "context path where WAR should be deployed (/ for ROOT)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given artifact, from a source URL, to a given deployment filename/context",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "undeploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the given context/artifact",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.messaging.kafka.KafkaCluster",
-    "name" : "Kafka",
-    "description" : "Apache Kafka is a distributed publish-subscribe messaging system",
-    "iconUrl" : "classpath://brooklyn/entity/messaging/kafka/kafka-google-doorway.jpg",
-    "config" : [ {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "kafka.cluster.brokerSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "Spec for Kafka broker entiites to be created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "kafka.cluster.zookeeper",
-      "type" : "brooklyn.entity.zookeeper.ZooKeeperNode",
-      "defaultValue" : null,
-      "description" : "The zookeeper for the cluster; if null a default be will created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "kafka.cluster.zookeeperSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "Spec for creating the kafka zookeeper",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "kafka.cluster.brokerCluster",
-      "type" : "brooklyn.entity.group.DynamicCluster",
-      "description" : "Underlying Kafka broker cluster",
-      "links" : null
-    }, {
-      "name" : "kafka.cluster.brokerSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "description" : "Spec for Kafka broker entiites to be created",
-      "links" : null
-    }, {
-      "name" : "kafka.cluster.zookeeper",
-      "type" : "brooklyn.entity.zookeeper.ZooKeeperNode",
-      "description" : "The zookeeper for the cluster; if null a default be will created",
-      "links" : null
-    }, {
-      "name" : "kafka.cluster.zookeeperSpec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "description" : "Spec for creating the kafka zookeeper",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.osgi.karaf.KarafContainer",
-    "defaultVersion" : "2.3.0",
-    "name" : "Karaf",
-    "description" : "Apache Karaf is a small OSGi based runtime which provides a lightweight container onto which various components and applications can be deployed.",
-    "iconUrl" : "classpath:///karaf-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://apache.mirror.anlx.net/karaf/${version}/apache-karaf-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.3.0",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "karaf-root",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "44444-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : "karaf",
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : "karaf",
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "karaf.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "root",
-      "description" : "Karaf instance name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "karaf.runtime.files",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Property files to be generated, referenced by name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.instances",
-      "type" : "java.util.Map",
-      "description" : "Karaf admin instances",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.isRoot",
-      "type" : "java.lang.Boolean",
-      "description" : "Karaf admin isRoot",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.java_opts",
-      "type" : "java.lang.String",
-      "description" : "Karaf Java opts",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.location",
-      "type" : "java.lang.String",
-      "description" : "Karaf install location",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.pid",
-      "type" : "java.lang.Integer",
-      "description" : "Karaf instance PID",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.rmi_registry_port",
-      "type" : "java.lang.Integer",
-      "description" : "Karaf instance RMI registry port",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.rmi_server_port",
-      "type" : "java.lang.Integer",
-      "description" : "Karaf RMI (JMX) server port",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.ssh_port",
-      "type" : "java.lang.Integer",
-      "description" : "Karaf SSH Port",
-      "links" : null
-    }, {
-      "name" : "karaf.admin.state",
-      "type" : "java.lang.String",
-      "description" : "Karaf instance state",
-      "links" : null
-    }, {
-      "name" : "karaf.name",
-      "type" : "java.lang.String",
-      "description" : "Karaf instance name",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "installBundle",
-      "returnType" : "long",
-      "parameters" : [ {
-        "name" : "bundle",
-        "type" : "java.lang.String",
-        "description" : "URI of bundle to be deployed",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given bundle, returning the bundle id - see osgi.core:type=framework#installBundle()",
-      "links" : null
-    }, {
-      "name" : "installFeature",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "featureName",
-        "type" : "java.lang.String",
-        "description" : "Name of the feature - see org.apache.karaf:type=features#installFeature()",
-        "defaultValue" : null
-      } ],
-      "description" : "Installs the given OSGi feature",
-      "links" : null
-    }, {
-      "name" : "listBundles",
-      "returnType" : "java.util.Map",
-      "parameters" : [ ],
-      "description" : "Lists all the karaf bundles",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "uninstallBundle",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "bundleId",
-        "type" : "java.lang.Long",
-        "description" : "Id of the bundle",
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the bundle with the given id",
-      "links" : null
-    }, {
-      "name" : "updateServiceProperties",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "serviceName",
-        "type" : "java.lang.String",
-        "description" : "Name of the OSGi service",
-        "defaultValue" : null
-      }, {
-        "name" : null,
-        "type" : "java.util.Map",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Updates the OSGi Service's properties, adding (and overriding) the given key-value pairs",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.machine.MachineEntity",
-    "defaultVersion" : null,
-    "name" : "Machine Entity",
-    "description" : "Represents a machine, providing metrics (normally optained of ssh) about it",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "machine.cpu",
-      "type" : "java.lang.Double",
-      "description" : "Current CPU usage",
-      "links" : null
-    }, {
-      "name" : "machine.loadAverage",
-      "type" : "java.lang.Double",
-      "description" : "Current load average",
-      "links" : null
-    }, {
-      "name" : "machine.memory.free",
-      "type" : "java.lang.Long",
-      "description" : "Current free memory",
-      "links" : null
-    }, {
-      "name" : "machine.memory.total",
-      "type" : "java.lang.Long",
-      "description" : "Total memory",
-      "links" : null
-    }, {
-      "name" : "machine.memory.used",
-      "type" : "java.lang.Long",
-      "description" : "Current memory usage",
-      "links" : null
-    }, {
-      "name" : "machine.uptime",
-      "type" : "brooklyn.util.time.Duration",
-      "description" : "Current uptime",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "execCommand",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "command",
-        "type" : "java.lang.String",
-        "description" : "Command",
-        "defaultValue" : null
-      } ],
-      "description" : "Execute a command and return the output",
-      "links" : null
-    }, {
-      "name" : "execCommandTimeout",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "command",
-        "type" : "java.lang.String",
-        "description" : "Command",
-        "defaultValue" : null
-      }, {
-        "name" : "timeout",
-        "type" : "brooklyn.util.time.Duration",
-        "description" : "Timeout",
-        "defaultValue" : null
-      } ],
-      "description" : "Execute a command and return the output",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.database.mariadb.MariaDbNode",
-    "defaultVersion" : "5.5.33a",
-    "name" : "MariaDB Node",
-    "description" : "MariaDB is an open source relational database management system (RDBMS)",
-    "iconUrl" : "classpath:///mariadb-logo-180x119.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "Contensts of creation script to initialize the datastore",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "URL of creation script to use to initialize the datastore (ignored if contents are specified)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "${driver.mirrorUrl}/mariadb-${version}/${driver.downloadParentDir}/mariadb-${version}-${driver.osTag}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "5.5.33a",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.datadir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for writing data files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.install.mirror.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://mirrors.coreix.net/mariadb/",
-      "description" : "URL of mirror",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Database admin password (or randomly generated if not set)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "3306,13306-65535",
-      "description" : "MariaDB port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.server.conf",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Configuration options for MariaDB server",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.server.conf.lower_case_table_names",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "See MariaDB (or MySQL!) guide. Set 1 to ignore case in table names (useful for OS portability)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.socketUid",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Socket uid, for use in file /tmp/mysql.sock.<uid>.3306 (or randomly generated if not set)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mariadb.template.configuration.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/database/mariadb/my.cnf",
-      "description" : "Template file (in freemarker format) for the my.cnf file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "datastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "mariadb.password",
-      "type" : "java.lang.String",
-      "description" : "Database admin password (or randomly generated if not set)",
-      "links" : null
-    }, {
-      "name" : "mariadb.port",
-      "type" : "java.lang.Integer",
-      "description" : "MariaDB port",
-      "links" : null
-    }, {
-      "name" : "mariadb.queries.perSec.fromMariadb",
-      "type" : "java.lang.Double",
-      "description" : "mariadb.queries.perSec.fromMariadb",
-      "links" : null
-    }, {
-      "name" : "mariadb.socketUid",
-      "type" : "java.lang.String",
-      "description" : "Socket uid, for use in file /tmp/mysql.sock.<uid>.3306 (or randomly generated if not set)",
-      "links" : null
-    }, {
-      "name" : "mariadb.template.configuration.url",
-      "type" : "java.lang.String",
-      "description" : "Template file (in freemarker format) for the my.cnf file",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "executeScript",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "commands",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "executes the given script contents",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.mongodb.sharding.MongoDBRouter",
-    "defaultVersion" : "2.5.4",
-    "name" : "MongoDB Router",
-    "description" : "MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database",
-    "iconUrl" : "classpath:///mongodb-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://fastdl.mongodb.org/${driver.osDir}/${driver.osTag}-${version}.tgz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.5.4",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.config.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/mongodb/default-mongodb.conf",
-      "description" : "Template file (in freemarker format) for a MongoDB configuration file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.data.directory",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Data directory to store MongoDB journals",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.router.config.servers",
-      "type" : "java.lang.Iterable",
-      "defaultValue" : null,
-      "description" : "List of host names and ports of the config servers",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.server.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "27017-65535",
-      "description" : "Server port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "mongodb.router.config.shard.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of shards that have been added",
-      "links" : null
-    }, {
-      "name" : "mongodb.router.running",
-      "type" : "java.lang.Boolean",
-      "description" : "Indicates that the router is running, and can be used to add shards, but is not necessarity available for CRUD operations (e.g. if no shards have been added)",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.port",
-      "type" : "java.lang.Integer",
-      "description" : "Server port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.mongodb.MongoDBServer",
-    "defaultVersion" : "2.5.4",
-    "name" : "MongoDB Server",
-    "description" : "MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database",
-    "iconUrl" : "classpath:///mongodb-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://fastdl.mongodb.org/${driver.osDir}/${driver.osTag}-${version}.tgz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.5.4",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.config.enable_rest",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Adds --rest to server startup flags when true",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.config.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/mongodb/default-mongodb.conf",
-      "description" : "Template file (in freemarker format) for a MongoDB configuration file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.data.directory",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Data directory to store MongoDB journals",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.replicaset",
-      "type" : "brooklyn.entity.nosql.mongodb.MongoDBReplicaSet",
-      "defaultValue" : null,
-      "description" : "The replica set to which the server belongs. Users should not set this directly when creating a new replica set.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.server.httpPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "28017-65535",
-      "description" : "HTTP port for the server (estimated)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.server.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "27017-65535",
-      "description" : "Server port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.endpoint",
-      "type" : "java.lang.String",
-      "description" : "The host:port where this server is listening",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.httpPort",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port for the server (estimated)",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.http_interface",
-      "type" : "java.lang.String",
-      "description" : "URL of the server's HTTP console",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.network.bytesIn",
-      "type" : "java.lang.Long",
-      "description" : "Server incoming network traffic (in bytes)",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.network.bytesOut",
-      "type" : "java.lang.Long",
-      "description" : "Server outgoing network traffic (in bytes)",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.network.numRequests",
-      "type" : "java.lang.Long",
-      "description" : "Server network requests",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.opcounters.command",
-      "type" : "java.lang.Long",
-      "description" : "Server commands",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.opcounters.delete",
-      "type" : "java.lang.Long",
-      "description" : "Server deletes",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.opcounters.getmore",
-      "type" : "java.lang.Long",
-      "description" : "Server getmores",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.opcounters.insert",
-      "type" : "java.lang.Long",
-      "description" : "Server inserts",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.opcounters.query",
-      "type" : "java.lang.Long",
-      "description" : "Server queries",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.opcounters.update",
-      "type" : "java.lang.Long",
-      "description" : "Server updates",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.port",
-      "type" : "java.lang.Integer",
-      "description" : "Server port",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.replicaSet.isPrimary",
-      "type" : "java.lang.Boolean",
-      "description" : "True if this server is the write master for the replica set",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.replicaSet.isSecondary",
-      "type" : "java.lang.Boolean",
-      "description" : "True if this server is a secondary server in the replica set",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.replicaSet.memberStatus",
-      "type" : "brooklyn.entity.nosql.mongodb.ReplicaSetMemberStatus",
-      "description" : "The status of this server in the replica set",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.replicaSet.primary.endpoint",
-      "type" : "java.lang.String",
-      "description" : "The host:port of the server which is acting as primary (master) for the replica set",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.status.bson",
-      "type" : "org.bson.BasicBSONObject",
-      "description" : "Server status (BSON/JSON map ojbect)",
-      "links" : null
-    }, {
-      "name" : "mongodb.server.uptime",
-      "type" : "java.lang.Double",
-      "description" : "Server uptime in seconds",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.mongodb.sharding.MongoDBShardedDeployment",
-    "name" : "MongoDB Sharded Deployment",
-    "description" : "MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database",
-    "iconUrl" : "classpath:///mongodb-logo.png",
-    "config" : [ {
-      "name" : "mongodb.colocated.router.group",
-      "type" : "brooklyn.entity.Group",
-      "defaultValue" : null,
-      "description" : "Group to be monitored for the addition of new CoLocatedMongoDBRouter entities",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.config.cluster.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 3,
-      "description" : "Number of config servers",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.router.cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 0,
-      "description" : "Initial number of routers (mongos)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.router.up.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Maximum time to wait for the routers to become available before adding the shards",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.shard.cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 2,
-      "description" : "Initial number of shards (replicasets)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mongodb.shard.replicaset.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 3,
-      "description" : "Number of servers (mongod) in each shard (replicaset)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "mongodbshardeddeployment.configservers",
-      "type" : "brooklyn.entity.nosql.mongodb.sharding.MongoDBConfigServerCluster",
-      "description" : "Config servers",
-      "links" : null
-    }, {
-      "name" : "mongodbshardeddeployment.routers",
-      "type" : "brooklyn.entity.nosql.mongodb.sharding.MongoDBRouterCluster",
-      "description" : "Routers",
-      "links" : null
-    }, {
-      "name" : "mongodbshardeddeployment.shards",
-      "type" : "brooklyn.entity.nosql.mongodb.sharding.MongoDBShardCluster",
-      "description" : "Shards",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.monitoring.monit.MonitNode",
-    "defaultVersion" : "5.6",
-    "name" : "Monit Node",
-    "description" : "Monit is a free open source utility for managing and monitoring, processes, programs, files, directories and filesystems on a UNIX system",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "https://mmonit.com/monit/dist/binary/${version}/monit-${version}-${driver.osTag}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "5.6",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "monit.control.substitutions",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional substitutions to be used in the control file template",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "monit.control.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "URL where monit control (.monitrc) file can be found",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "monit.target.process.name",
-      "type" : "java.lang.String",
-      "description" : "monit.target.process.name",
-      "links" : null
-    }, {
-      "name" : "monit.target.process.status",
-      "type" : "java.lang.String",
-      "description" : "monit.target.process.status",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.database.mysql.MySqlNode",
-    "defaultVersion" : "5.5.37",
-    "name" : "MySql Node",
-    "description" : "MySql is an open source relational database management system (RDBMS)",
-    "iconUrl" : "classpath:///mysql-logo-110x57.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "Contensts of creation script to initialize the datastore",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "URL of creation script to use to initialize the datastore (ignored if contents are specified)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-${version}-${driver.osTag}.tar.gz/from/${driver.mirrorUrl}",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "5.5.37",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.datadir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for writing data files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.install.mirror.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://www.mirrorservice.org/sites/ftp.mysql.com/",
-      "description" : "URL of mirror",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Database admin password (or randomly generated if not set)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "3306,13306-65535",
-      "description" : "MySQL port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.server.conf",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Configuration options for mysqld",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.server.conf.lower_case_table_names",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "See MySQL guide. Set 1 to ignore case in table names (useful for OS portability)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.socketUid",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Socket uid, for use in file /tmp/mysql.sock.<uid>.3306 (or randomly generated if not set)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "mysql.template.configuration.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/database/mysql/mysql.conf",
-      "description" : "Template file (in freemarker format) for the mysql.conf file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "datastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "mysql.password",
-      "type" : "java.lang.String",
-      "description" : "Database admin password (or randomly generated if not set)",
-      "links" : null
-    }, {
-      "name" : "mysql.port",
-      "type" : "java.lang.Integer",
-      "description" : "MySQL port",
-      "links" : null
-    }, {
-      "name" : "mysql.queries.perSec.fromMysql",
-      "type" : "java.lang.Double",
-      "description" : "mysql.queries.perSec.fromMysql",
-      "links" : null
-    }, {
-      "name" : "mysql.socketUid",
-      "type" : "java.lang.String",
-      "description" : "Socket uid, for use in file /tmp/mysql.sock.<uid>.3306 (or randomly generated if not set)",
-      "links" : null
-    }, {
-      "name" : "mysql.template.configuration.url",
-      "type" : "java.lang.String",
-      "description" : "Template file (in freemarker format) for the mysql.conf file",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "executeScript",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "commands",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "executes the given script contents",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.proxy.nginx.NginxController",
-    "defaultVersion" : "1.3.7",
-    "name" : "Nginx Server",
-    "description" : "A single Nginx server. Provides HTTP and reverse proxy services",
-    "iconUrl" : "classpath:///nginx-logo.jpeg",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "controller.config.serviceUpUrlPath",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "The path that will be appended to the root URL to determine SERVICE_UP",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : {
-        "stickymodule" : "http://nginx-sticky-module.googlecode.com/files/nginx-sticky-module-${addonversion}.tar.gz",
-        "pcre" : "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-${addonversion}.tar.gz"
-      },
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://nginx.org/download/nginx-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.3.7",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "loadbalancer.serverpool",
-      "type" : "brooklyn.entity.Group",
-      "defaultValue" : null,
-      "description" : "The default servers to route messages to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "loadbalancer.urlmappings",
-      "type" : "brooklyn.entity.Group",
-      "defaultValue" : null,
-      "description" : "Special mapping rules (e.g. for domain/path matching, rewrite, etc); not supported by all load balancers",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "member.sensor.hostandport",
-      "type" : "brooklyn.event.AttributeSensor",
-      "defaultValue" : null,
-      "description" : "host:port sensor on members (invalid to configure this and the portNumber or hostname sensors)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "member.sensor.hostname",
-      "type" : "brooklyn.event.AttributeSensor",
-      "defaultValue" : "Sensor: host.name (java.lang.String)",
-      "description" : "Hostname/IP sensor on members (defaults to host.name; not supported in all implementations)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "member.sensor.portNumber",
-      "type" : "brooklyn.event.AttributeSensor",
-      "defaultValue" : "Sensor: http.port (java.lang.Integer)",
-      "description" : "Port number sensor on members (defaults to http.port; not supported in all implementations)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.config.staticContentArchiveUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The URL of an archive file of static content (To be copied to the server)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.config.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The server.conf configuration file URL (FreeMarker template)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.install.withCcOpt",
-      "type" : "java.lang.String",
-      "defaultValue" : "-I /usr/local/include",
-      "description" : "String to pass in with --with-cc-opt=\"<val>\"",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.install.withLdOpt",
-      "type" : "java.lang.String",
-      "defaultValue" : "-L /usr/local/lib",
-      "description" : "String to pass in with --with-ld-opt=\"<val>\" (and for OS X has pcre auto-appended to this)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.log.access",
-      "type" : "java.lang.String",
-      "defaultValue" : "logs/access.log",
-      "description" : "Nginx access log file location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.log.error",
-      "type" : "java.lang.String",
-      "defaultValue" : "logs/error.log",
-      "description" : "Nginx error log file location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.sensorpoll.http",
-      "type" : "java.lang.Long",
-      "defaultValue" : 1000,
-      "description" : "Poll period (in milliseconds)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.sticky",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to use sticky sessions",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nginx.sticky.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.0",
-      "description" : "Version of ngnix-sticky-module to be installed, if required",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pcre.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "8.33",
-      "description" : "Version of PCRE to be installed, if required",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "proxy.domainName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Domain name that this controller responds to, or null if it responds to all domains",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "proxy.http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8000,8001-65535",
-      "description" : "Main HTTP port where this proxy listens",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "proxy.protocol",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Main URL protocol this proxy answers (typically http or https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "proxy.ssl.config",
-      "type" : "brooklyn.entity.proxy.ProxySslConfig",
-      "defaultValue" : null,
-      "description" : "configuration (e.g. certificates) for SSL; will use SSL if set, not use SSL if not set",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "member.sensor.hostandport",
-      "type" : "brooklyn.event.AttributeSensor",
-      "description" : "host:port sensor on members (invalid to configure this and the portNumber or hostname sensors)",
-      "links" : null
-    }, {
-      "name" : "member.sensor.hostname",
-      "type" : "brooklyn.event.AttributeSensor",
-      "description" : "Hostname/IP sensor on members (defaults to host.name; not supported in all implementations)",
-      "links" : null
-    }, {
-      "name" : "member.sensor.portNumber",
-      "type" : "brooklyn.event.AttributeSensor",
-      "description" : "Port number sensor on members (defaults to http.port; not supported in all implementations)",
-      "links" : null
-    }, {
-      "name" : "nginx.log.access",
-      "type" : "java.lang.String",
-      "description" : "Nginx access log file location",
-      "links" : null
-    }, {
-      "name" : "nginx.log.error",
-      "type" : "java.lang.String",
-      "description" : "Nginx error log file location",
-      "links" : null
-    }, {
-      "name" : "nginx.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "proxy.domainName",
-      "type" : "java.lang.String",
-      "description" : "Domain name that this controller responds to, or null if it responds to all domains",
-      "links" : null
-    }, {
-      "name" : "proxy.http.port",
-      "type" : "java.lang.Integer",
-      "description" : "Main HTTP port where this proxy listens",
-      "links" : null
-    }, {
-      "name" : "proxy.protocol",
-      "type" : "java.lang.String",
-      "description" : "Main URL protocol this proxy answers (typically http or https)",
-      "links" : null
-    }, {
-      "name" : "proxy.serverpool.targets",
-      "type" : "java.util.Map",
-      "description" : "The downstream targets in the server pool",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "archiveUrl",
-        "type" : "java.lang.String",
-        "description" : "The URL of the static content archive to deploy",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys an archive of static content to the server",
-      "links" : null
-    }, {
-      "name" : "getCurrentConfiguration",
-      "returnType" : "java.lang.String",
-      "parameters" : [ ],
-      "description" : "Gets the current server configuration (by brooklyn recalculating what the config should be); does not affect the server",
-      "links" : null
-    }, {
-      "name" : "reload",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Forces reload of the configuration",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "update",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Updates the entities configuration, and then forces reload of that configuration",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.nodejs.NodeJsWebAppService",
-    "defaultVersion" : "stable",
-    "name" : "Node.JS Application",
-    "description" : "Node.JS Web Application",
-    "iconUrl" : "classpath:///nodejs-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "3000",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "stable",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.app.command",
-      "type" : "java.lang.String",
-      "defaultValue" : "node",
-      "description" : "Command to start the NodeJS application (defaults to node)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.app.commandLine",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Replacement command line to start the NodeJS application (ignores command and file if set)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.app.fileName",
-      "type" : "java.lang.String",
-      "defaultValue" : "app.js",
-      "description" : "The NodeJS application file to start",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.app.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name of the NodeJS application",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.archive.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The URL where the application archive is hosted",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.gitRepo.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The Git repository where the application is hosted",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.packages",
-      "type" : "java.util.List",
-      "defaultValue" : [ ],
-      "description" : "The NPM packages to install",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "nodejs.serviceUp.path",
-      "type" : "java.lang.String",
-      "defaultValue" : "/",
-      "description" : "Path to use when checking the NodeJS application is running",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.database.postgresql.PostgreSqlNode",
-    "defaultVersion" : "9.3-1",
-    "name" : "PostgreSQL Node",
-    "description" : "PostgreSQL is an object-relational database management system (ORDBMS)",
-    "iconUrl" : "classpath:///postgresql-logo-200px.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.contents",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "Contensts of creation script to initialize the datastore",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "datastore.creation.script.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "",
-      "description" : "URL of creation script to use to initialize the datastore (ignored if contents are specified)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "9.3-1",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.authConfig.file.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL where PostgreSQL host-based authentication configuration file can be found; if not supplied the blueprint uses the default and customises it",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.config.file.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL where PostgreSQL configuration file can be found; if not supplied the blueprint uses the default and customises it",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.disconnect.on.stop",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, PostgreSQL will immediately disconnet (pg_ctl -m immediate stop) all current connections when the node is stopped",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.maxConnections",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 100,
-      "description" : "Maximum number of connections to the database",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "5432-65535",
-      "description" : "PostgreSQL port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.sensorpoll",
-      "type" : "java.lang.Long",
-      "defaultValue" : 1000,
-      "description" : "Poll period (in milliseconds)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "postgresql.sharedMemory",
-      "type" : "java.lang.String",
-      "defaultValue" : "4MB",
-      "description" : "Size of shared memory buffer (must specify as kB, MB or GB, minimum 128kB)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "datastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "postgresql.port",
-      "type" : "java.lang.Integer",
-      "description" : "PostgreSQL port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "executeScript",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "commands",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Executes the given script contents using psql",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.messaging.qpid.QpidBroker",
-    "defaultVersion" : "0.20",
-    "name" : "Qpid Broker",
-    "description" : "Apache Qpid is an open-source messaging system, implementing the Advanced Message Queuing Protocol (AMQP)",
-    "iconUrl" : "classpath:///qpid-logo.jpeg",
-    "config" : [ {
-      "name" : "amqp.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "5672-65535",
-      "description" : "AMQP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "amqp.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "0-10",
-      "description" : "AMQP protocol version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "amqp.virtualHost",
-      "type" : "java.lang.String",
-      "defaultValue" : "localhost",
-      "description" : "AMQP virtual host name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://download.nextag.com/apache/qpid/${version}/qpid-java-broker-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.20",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : "admin",
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : "admin",
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "qpid.http-management.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : null,
-      "description" : "Qpid HTTP management plugin port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "amqp.port",
-      "type" : "java.lang.Integer",
-      "description" : "AMQP port",
-      "links" : null
-    }, {
-      "name" : "amqp.version",
-      "type" : "java.lang.String",
-      "description" : "AMQP protocol version",
-      "links" : null
-    }, {
-      "name" : "amqp.virtualHost",
-      "type" : "java.lang.String",
-      "description" : "AMQP virtual host name",
-      "links" : null
-    }, {
-      "name" : "broker.url",
-      "type" : "java.lang.String",
-      "description" : "Broker Connection URL",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "qpid.http-management.port",
-      "type" : "java.lang.Integer",
-      "description" : "Qpid HTTP management plugin port",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.messaging.rabbit.RabbitBroker",
-    "defaultVersion" : "2.8.7",
-    "name" : "RabbitMQ Broker",
-    "description" : "RabbitMQ is an open source message broker software (i.e. message-oriented middleware) that implements the Advanced Message Queuing Protocol (AMQP) standard",
-    "iconUrl" : "classpath:///RabbitMQLogo.png",
-    "config" : [ {
-      "name" : "amqp.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "5672-65535",
-      "description" : "AMQP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "amqp.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "0-9-1",
-      "description" : "AMQP protocol version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "amqp.virtualHost",
-      "type" : "java.lang.String",
-      "defaultValue" : "localhost",
-      "description" : "AMQP virtual host name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://www.rabbitmq.com/releases/rabbitmq-server/v${version}/rabbitmq-server-generic-unix-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "erlang.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "R15B",
-      "description" : "Erlang runtime version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.8.7",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "amqp.port",
-      "type" : "java.lang.Integer",
-      "description" : "AMQP port",
-      "links" : null
-    }, {
-      "name" : "amqp.version",
-      "type" : "java.lang.String",
-      "description" : "AMQP protocol version",
-      "links" : null
-    }, {
-      "name" : "amqp.virtualHost",
-      "type" : "java.lang.String",
-      "description" : "AMQP virtual host name",
-      "links" : null
-    }, {
-      "name" : "broker.url",
-      "type" : "java.lang.String",
-      "description" : "Broker Connection URL",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.redis.RedisCluster",
-    "name" : "Redis Cluster",
-    "description" : "Redis is an open-source, networked, in-memory, key-value data store with optional durability",
-    "iconUrl" : "classpath:///redis-logo.png",
-    "config" : [ ],
-    "sensors" : [ {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.redis.RedisStore",
-    "defaultVersion" : "2.8.4",
-    "name" : "Redis Server",
-    "description" : "Redis is an open-source, networked, in-memory, key-value data store with optional durability",
-    "iconUrl" : "classpath:///redis-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://download.redis.io/releases/redis-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.8.4",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "redis.config.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/redis/redis.conf",
-      "description" : "Template file (in freemarker format) for the redis.conf config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "redis.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "6379-65535",
-      "description" : "Redis port number",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "redis.commands.processed.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total number of commands processed by the server",
-      "links" : null
-    }, {
-      "name" : "redis.connections.received.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total number of connections accepted by the server",
-      "links" : null
-    }, {
-      "name" : "redis.keys.evicted",
-      "type" : "java.lang.Integer",
-      "description" : "Number of evicted keys due to maxmemory limit",
-      "links" : null
-    }, {
-      "name" : "redis.keys.expired",
-      "type" : "java.lang.Integer",
-      "description" : "Total number of key expiration events",
-      "links" : null
-    }, {
-      "name" : "redis.keyspace.hits",
-      "type" : "java.lang.Integer",
-      "description" : "Number of successful lookup of keys in the main dictionary",
-      "links" : null
-    }, {
-      "name" : "redis.keyspace.misses",
-      "type" : "java.lang.Integer",
-      "description" : "Number of failed lookup of keys in the main dictionary",
-      "links" : null
-    }, {
-      "name" : "redis.port",
-      "type" : "java.lang.Integer",
-      "description" : "Redis port number",
-      "links" : null
-    }, {
-      "name" : "redis.uptime",
-      "type" : "java.lang.Integer",
-      "description" : "Redis uptime in seconds",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.riak.RiakCluster",
-    "name" : "Riak Node",
-    "description" : "Riak is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.cluster.delayBeforeAdvertisingCluster",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Delay after cluster is started before checking and advertising its availability",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "riak.cluster.isClusterInit",
-      "type" : "java.lang.Boolean",
-      "description" : "flag to determine if the cluster was already initialized",
-      "links" : null
-    }, {
-      "name" : "riak.cluster.nodes",
-      "type" : "java.util.Map",
-      "description" : "Names of all active Riak nodes in the cluster <Entity,Riak Name>",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.nosql.riak.RiakNode",
-    "defaultVersion" : "1.4.8",
-    "name" : "Riak Node",
-    "description" : "Riak is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.4.8",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.appConfig.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/riak/app.config",
-      "description" : "Template file (in freemarker format) for the app.config config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.epmdListenerPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "4369",
-      "description" : "Erlang Port Mapper Daemon Listener Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.erlangPortRangeEnd",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "7999-65535",
-      "description" : "Erlang Port Range End",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.erlangPortRangeStart",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "6000-65535",
-      "description" : "Erlang Port Range Start",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.handoffListenerPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8099-65535",
-      "description" : "Handoff Listener Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.pbPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8087-65535",
-      "description" : "Riak Protocol Buffers Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.vmArgs.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/nosql/riak/vm.args",
-      "description" : "Template file (in freemarker format) for the vm.args config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "riak.webPort",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8098-65535",
-      "description" : "Riak Web Port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "coord.redirs.total",
-      "type" : "java.lang.Integer",
-      "description" : "coord.redirs.total",
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "memory.processes.used",
-      "type" : "java.lang.Integer",
-      "description" : "memory.processes.used",
-      "links" : null
-    }, {
-      "name" : "node.gets",
-      "type" : "java.lang.Integer",
-      "description" : "node.gets",
-      "links" : null
-    }, {
-      "name" : "node.gets.total",
-      "type" : "java.lang.Integer",
-      "description" : "node.gets.total",
-      "links" : null
-    }, {
-      "name" : "node.puts",
-      "type" : "java.lang.Integer",
-      "description" : "node.puts",
-      "links" : null
-    }, {
-      "name" : "node.puts.total",
-      "type" : "java.lang.Integer",
-      "description" : "node.puts.total",
-      "links" : null
-    }, {
-      "name" : "pbc.active",
-      "type" : "java.lang.Integer",
-      "description" : "pbc.active",
-      "links" : null
-    }, {
-      "name" : "pbc.connects",
-      "type" : "java.lang.Integer",
-      "description" : "pbc.connects",
-      "links" : null
-    }, {
-      "name" : "read.repairs.total",
-      "type" : "java.lang.Integer",
-      "description" : "read.repairs.total",
-      "links" : null
-    }, {
-      "name" : "riak.epmdListenerPort",
-      "type" : "java.lang.Integer",
-      "description" : "Erlang Port Mapper Daemon Listener Port",
-      "links" : null
-    }, {
-      "name" : "riak.erlangPortRangeEnd",
-      "type" : "java.lang.Integer",
-      "description" : "Erlang Port Range End",
-      "links" : null
-    }, {
-      "name" : "riak.erlangPortRangeStart",
-      "type" : "java.lang.Integer",
-      "description" : "Erlang Port Range Start",
-      "links" : null
-    }, {
-      "name" : "riak.handoffListenerPort",
-      "type" : "java.lang.Integer",
-      "description" : "Handoff Listener Port",
-      "links" : null
-    }, {
-      "name" : "riak.node",
-      "type" : "java.lang.String",
-      "description" : "Returns the riak node name as defined in vm.args",
-      "links" : null
-    }, {
-      "name" : "riak.node.riakNodeHasJoinedCluster",
-      "type" : "java.lang.Boolean",
-      "description" : "Flag to indicate wether the Riak node has joined a cluster member",
-      "links" : null
-    }, {
-      "name" : "riak.pbPort",
-      "type" : "java.lang.Integer",
-      "description" : "Riak Protocol Buffers Port",
-      "links" : null
-    }, {
-      "name" : "riak.webPort",
-      "type" : "java.lang.Integer",
-      "description" : "Riak Web Port",
-      "links" : null
-    }, {
-      "name" : "ring.members",
-      "type" : "java.util.List",
-      "description" : "all the riak nodes in the ring",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "sys.process.count",
-      "type" : "java.lang.Integer",
-      "description" : "sys.process.count",
-      "links" : null
-    }, {
-      "name" : "vnode.gets",
-      "type" : "java.lang.Integer",
-      "description" : "vnode.gets",
-      "links" : null
-    }, {
-      "name" : "vnode.gets.total",
-      "type" : "java.lang.Integer",
-      "description" : "vnode.gets.total",
-      "links" : null
-    }, {
-      "name" : "vnode.puts",
-      "type" : "java.lang.Integer",
-      "description" : "vnode.puts",
-      "links" : null
-    }, {
-      "name" : "vnode.puts.total",
-      "type" : "java.lang.Integer",
-      "description" : "vnode.puts.total",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "commitCluster",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "commit changes made to a Riak cluster",
-      "links" : null
-    }, {
-      "name" : "joinCluster",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "nodeName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "add this riak node to the riak cluster",
-      "links" : null
-    }, {
-      "name" : "leaveCluster",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "remove this riak node from the cluster",
-      "links" : null
-    }, {
-      "name" : "recoverFailedNode",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "nodeName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "recover a failed riak node and join it back to the cluster (by passing it a working node on the cluster 'node')",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.database.rubyrep.RubyRepNode",
-    "defaultVersion" : "1.2.0",
-    "name" : "RubyRep Node",
-    "description" : "RubyRep is a database replication system",
-    "iconUrl" : "classpath:///rubyrep-logo.jpeg",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.configScriptUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL where RubyRep configuration can be found - disables other configuration options (except version)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.leftDatabase",
-      "type" : "brooklyn.entity.database.DatastoreMixins$DatastoreCommon",
-      "defaultValue" : null,
-      "description" : "Brooklyn database entity to use as the left DBMS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.leftDatabaseName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "name of database to use for left db",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.leftPassword",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "password to connect to left db",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.leftUsername",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "username to connect to left db",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.replicationInterval",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 30,
-      "description" : "Replication Interval",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.rightDatabase",
-      "type" : "brooklyn.entity.database.DatastoreMixins$DatastoreCommon",
-      "defaultValue" : null,
-      "description" : "Brooklyn database entity to use as the right DBMS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.rightDatabaseName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "name of database to use for right db",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.rightPassword",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "password to connect to right db",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.rightUsername",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "username to connect to right db",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.startupTimeout",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 120,
-      "description" : "Time to wait until databases have started up (in seconds)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.tableRegex",
-      "type" : "java.lang.String",
-      "defaultValue" : ".",
-      "description" : "Regular expression to select tables to sync using RubyRep",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "database.rubyrep.templateConfigurationUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/database/rubyrep/rubyrep.conf",
-      "description" : "Template file (in freemarker format) for the rubyrep.conf file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://files.rubyforge.vm.bytemark.co.uk/rubyrep/rubyrep-${version}.zip",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "1.2.0",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "leftdatastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "rightdatastore.url",
-      "type" : "java.lang.String",
-      "description" : "Primary contact URL for a datastore (e.g. mysql://localhost:3306/)",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.pool.ServerPool",
-    "name" : "Server Pool",
-    "description" : "Creates a pre-allocated server pool, which other applications can deploy to",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 2,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : "EntitySpec{type=interface brooklyn.entity.machine.MachineEntity}",
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.flags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Extra creation flags for the Location owned by this entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name of the location owned by this entity (default is auto-generated using prefix and suffix keys)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.prefix",
-      "type" : "java.lang.String",
-      "defaultValue" : "dynamic",
-      "description" : "The name prefix for the location owned by this entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.suffix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name suffix for the location owned by this entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation",
-      "type" : "brooklyn.location.Location",
-      "description" : "The location owned by this entity",
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.name",
-      "type" : "java.lang.String",
-      "description" : "The name of the location owned by this entity (default is auto-generated using prefix and suffix keys)",
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.spec",
-      "type" : "java.lang.String",
-      "description" : "The specification string for the location owned by this entity",
-      "links" : null
-    }, {
-      "name" : "entity.dynamicLocation.status",
-      "type" : "java.lang.Boolean",
-      "description" : "The status of the location owned by this entity",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "pool.available",
-      "type" : "java.lang.Integer",
-      "description" : "The number of locations in the pool that are unused",
-      "links" : null
-    }, {
-      "name" : "pool.claimed",
-      "type" : "java.lang.Integer",
-      "description" : "The number of locations in the pool that are in use",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "addExistingMachinesFromSpec",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "spec",
-        "type" : "java.lang.String",
-        "description" : "Spec",
-        "defaultValue" : null
-      } ],
-      "description" : "Adds additional machines to the pool by resolving the given spec.",
-      "links" : null
-    }, {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.messaging.storm.StormDeployment",
-    "name" : "Storm Deployment",
-    "description" : "Storm is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "storm.supervisors.count",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 3,
-      "description" : "Number of supervisor nodes",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.zookeepers.count",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Number of zookeeper nodes",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.messaging.storm.Storm",
-    "defaultVersion" : "0.8.2",
-    "name" : "Storm Node",
-    "description" : "Storm is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "https://dl.dropboxusercontent.com/s/fl4kr7w0oc8ihdw/storm-${version}.zip",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.8.2",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.config.templateUrl",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/messaging/storm/storm.yaml",
-      "description" : "Template file (in freemarker format) for the storm.yaml config file",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.local.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Setting for Storm local dir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.nimbus.entity",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : "storm.nimbus.entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.nimbus.hostname",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "storm.nimbus.hostname",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.role",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "The Storm server role",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NIMBUS",
-        "description" : "NIMBUS"
-      }, {
-        "value" : "SUPERVISOR",
-        "description" : "SUPERVISOR"
-      }, {
-        "value" : "UI",
-        "description" : "UI"
-      } ],
-      "links" : null
-    }, {
-      "name" : "storm.start.mutex",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "storm.start.mutex",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.thrift.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "6627",
-      "description" : "Storm Thrift port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.ui.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080-65535",
-      "description" : "Storm UI port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.zeromq.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "2.1.7",
-      "description" : "zeromq version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "storm.zookeeper.ensemble",
-      "type" : "brooklyn.entity.zookeeper.ZooKeeperEnsemble",
-      "defaultValue" : null,
-      "description" : "Zookeeper ensemble entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "storm.service.jmx.up",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether JMX is up for this service",
-      "links" : null
-    }, {
-      "name" : "storm.thrift.port",
-      "type" : "java.lang.Integer",
-      "description" : "Storm Thrift port",
-      "links" : null
-    }, {
-      "name" : "storm.ui.port",
-      "type" : "java.lang.Integer",
-      "description" : "Storm UI port",
-      "links" : null
-    }, {
-      "name" : "storm.ui.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.webapp.tomcat.TomcatServer",
-    "defaultVersion" : "7.0.53",
-    "name" : "Tomcat Server",
-    "description" : "Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies",
-    "iconUrl" : "classpath:///tomcat-logo.png",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://download.nextag.com/apache/tomcat/tomcat-7/v${version}/bin/apache-tomcat-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8080,18080-65535",
-      "description" : "HTTP port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "8443,18443-65535",
-      "description" : "HTTP port (with SSL/TLS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "7.0.53",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.check.hostname.bug",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Check whether hostname is too long and will likely crash Javadue to bug 7089443",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.opts",
-      "type" : "java.util.Set",
-      "defaultValue" : [ ],
-      "description" : "Java command line options",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "java.sysprops",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Java command line system properties",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.agent.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : "AUTODETECT",
-      "description" : "What type of JMX agent to use; defaults to null (autodetect) which means JMXMP_AND_RMI allowing firewall access through a single port as well as local access supporting jconsole (unless JMX_SSL_ENABLED is set, in which case it is JMXMP only)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "AUTODETECT",
-        "description" : "AUTODETECT"
-      }, {
-        "value" : "JMXMP",
-        "description" : "JMXMP"
-      }, {
-        "value" : "JMXMP_AND_RMI",
-        "description" : "JMXMP_AND_RMI"
-      }, {
-        "value" : "JMX_RMI_CUSTOM_AGENT",
-        "description" : "JMX_RMI_CUSTOM_AGENT"
-      }, {
-        "value" : "JMX_RMI",
-        "description" : "JMX_RMI"
-      }, {
-        "value" : "NONE",
-        "description" : "NONE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "defaultValue" : "jmxrmi",
-      "description" : "JMX context path",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31001-65535",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "JMX enabled",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.cert",
-      "type" : "java.security.cert.Certificate",
-      "defaultValue" : null,
-      "description" : "certificate of key used to access a JMX agent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.access.key",
-      "type" : "java.security.PrivateKey",
-      "defaultValue" : null,
-      "description" : "key used to access a JMX agent (typically per entity, embedded in the managed JVM)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.ssl.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "JMX over JMXMP enabled with SSL/TLS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "JMX username",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "1099,19099-65535",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "tomcat.shutdownport",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "31880-65535",
-      "description" : "Suggested shutdown port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.by.context",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.named",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "wars.root",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "defaultValue" : [ "http" ],
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "defaultValue" : null,
-      "description" : "SSL Configuration for HTTPS",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "http.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port",
-      "links" : null
-    }, {
-      "name" : "https.port",
-      "type" : "java.lang.Integer",
-      "description" : "HTTP port (with SSL/TLS)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "jmx.context",
-      "type" : "java.lang.String",
-      "description" : "JMX context path",
-      "links" : null
-    }, {
-      "name" : "jmx.direct.port",
-      "type" : "java.lang.Integer",
-      "description" : "JMX direct/private port (e.g. JMX RMI server port, or JMXMP port, but not RMI registry port)",
-      "links" : null
-    }, {
-      "name" : "jmx.password",
-      "type" : "java.lang.String",
-      "description" : "JMX password",
-      "links" : null
-    }, {
-      "name" : "jmx.service.url",
-      "type" : "java.lang.String",
-      "description" : "The URL for connecting to the MBean Server",
-      "links" : null
-    }, {
-      "name" : "jmx.user",
-      "type" : "java.lang.String",
-      "description" : "JMX username",
-      "links" : null
-    }, {
-      "name" : "rmi.registry.port",
-      "type" : "java.lang.Integer",
-      "description" : "RMI registry port, used for discovering JMX (private) port",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "tomcat.shutdownport",
-      "type" : "java.lang.Integer",
-      "description" : "Suggested shutdown port",
-      "links" : null
-    }, {
-      "name" : "webapp.deployedWars",
-      "type" : "java.util.Set",
-      "description" : "Names of archives/contexts that are currently deployed",
-      "links" : null
-    }, {
-      "name" : "webapp.enabledProtocols",
-      "type" : "java.util.Set",
-      "description" : "List of enabled protocols (e.g. http, https)",
-      "links" : null
-    }, {
-      "name" : "webapp.https.ssl",
-      "type" : "brooklyn.entity.webapp.HttpsSslConfig",
-      "description" : "SSL Configuration for HTTPS",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.received",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes received by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.bytes.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total bytes sent by the webserver",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.errors",
-      "type" : "java.lang.Integer",
-      "description" : "Request errors",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.last",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.perSec.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Reqs/sec (over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.last",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, last datapoint)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.fraction.windowed",
-      "type" : "java.lang.Double",
-      "description" : "Fraction of time spent processing, reported by webserver (percentage, over time window)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.max",
-      "type" : "java.lang.Integer",
-      "description" : "Max processing time for any single request, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.processingTime.total",
-      "type" : "java.lang.Integer",
-      "description" : "Total processing time, reported by webserver (millis)",
-      "links" : null
-    }, {
-      "name" : "webapp.reqs.total",
-      "type" : "java.lang.Integer",
-      "description" : "Request count",
-      "links" : null
-    }, {
-      "name" : "webapp.tomcat.connectorStatus",
-      "type" : "java.lang.String",
-      "description" : "Catalina connector state name",
-      "links" : null
-    }, {
-      "name" : "webapp.url",
-      "type" : "java.lang.String",
-      "description" : "URL",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "deploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "url",
-        "type" : "java.lang.String",
-        "description" : "URL of WAR file",
-        "defaultValue" : null
-      }, {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : "context path where WAR should be deployed (/ for ROOT)",
-        "defaultValue" : null
-      } ],
-      "description" : "Deploys the given artifact, from a source URL, to a given deployment filename/context",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "undeploy",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "targetName",
-        "type" : "java.lang.String",
-        "description" : null,
-        "defaultValue" : null
-      } ],
-      "description" : "Undeploys the given context/artifact",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.basic.VanillaSoftwareProcess",
-    "defaultVersion" : "0.0.0",
-    "name" : "Vanilla Software Process",
-    "description" : "A software process configured with scripts, e.g. for launch, check-running and stop",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "checkRunning.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "command to determine whether the process is running",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "0.0.0",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : "./start.sh",
-      "description" : "command to run to launch the process",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "stop.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "command to run to stop the process",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.zookeeper.ZooKeeperNode",
-    "defaultVersion" : "3.4.5",
-    "name" : "ZooKeeper Node",
-    "description" : "ZooKeeper is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "children.startable.mode",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "children.startable.mode",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "NONE",
-        "description" : "NONE"
-      }, {
-        "value" : "FOREGROUND",
-        "description" : "FOREGROUND"
-      }, {
-        "value" : "FOREGROUND_LATE",
-        "description" : "FOREGROUND_LATE"
-      }, {
-        "value" : "BACKGROUND",
-        "description" : "BACKGROUND"
-      }, {
-        "value" : "BACKGROUND_LATE",
-        "description" : "BACKGROUND_LATE"
-      } ],
-      "links" : null
-    }, {
-      "name" : "customize.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking customize until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "defaultValue" : "http://apache.fastbull.org/zookeeper/zookeeper-${version}/zookeeper-${version}.tar.gz",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "files.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of files to be copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/installs/${(config['install.unique_label']??)?string(config['install.unique_label']!'X',(entity.entityType.simpleName)+((config['install.version']??)?string('_'+(config['install.version']!'X'),'')))}",
-      "description" : "Directory for this software to be installed in",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking install until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.skip",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Skip the driver install commands entirely, for pre-installed software",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.unique_label",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Provides a label which uniquely identifies an installation, used in the computation of the install dir; this should include something readable, and must include a hash of all data which differentiates an installation (e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "install.version",
-      "type" : "java.lang.String",
-      "defaultValue" : "3.4.5",
-      "description" : "Suggested version",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "launch.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking launch until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "post.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run after the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.install.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the install method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pre.launch.command",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Command to be run prior to the launch method being called on the driver",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provisioning.properties",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Custom properties to be passed in when provisioning a new machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "resources.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking resources until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "defaultValue" : "${config['onbox.base.dir']!config['brooklyn.datadir']!'/<ERROR>-ONBOX_BASE_DIR-not-set'}/apps/${entity.applicationId}/entities/${entity.entityType.simpleName}_${entity.id}",
-      "description" : "Directory for this software to be run from",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking setup until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "shell.env",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Map of environment variables to pass to the runtime shell",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "softwareProcess.maxSensorRebindDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "10s",
-      "description" : "The maximum delay to apply when reconnecting sensors when rebinding to this entity. Brooklyn will wait a random amount of time, up to the value of this config key, to avoid a thundering herd problem when the entity shares its machine with several others. Set to null or to 0 to disable any delay.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.latch",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Latch for blocking start until ready",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "start.timeout",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "2m",
-      "description" : "Time to wait for process and for SERVICE_UP before failing (in seconds, default 2m)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templates.runtime",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "Map of templates to be filled in and copied, keyed by destination name relative to runDir",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "zookeeper.configTemplate",
-      "type" : "java.lang.String",
-      "defaultValue" : "classpath://brooklyn/entity/messaging/zookeeper/zoo.cfg",
-      "description" : "Zookeeper configuration template (in freemarker format)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "zookeeper.election.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "3888-65535",
-      "description" : "Zookeeper election ports",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "zookeeper.leader.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "2888-65535",
-      "description" : "Zookeeper leader ports",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "zookeeper.port",
-      "type" : "brooklyn.location.PortRange",
-      "defaultValue" : "2181-65535",
-      "description" : "Zookeeper port",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "download.addon.urls",
-      "type" : "java.util.Map",
-      "description" : "URL patterns for downloading named add-ons (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "download.url",
-      "type" : "java.lang.String",
-      "description" : "URL pattern for downloading the installer (will substitute things like ${version} automatically)",
-      "links" : null
-    }, {
-      "name" : "expandedinstall.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for installed artifacts (e.g. expanded dir after unpacking .tgz)",
-      "links" : null
-    }, {
-      "name" : "host.address",
-      "type" : "java.lang.String",
-      "description" : "Host IP address",
-      "links" : null
-    }, {
-      "name" : "host.name",
-      "type" : "java.lang.String",
-      "description" : "Host name",
-      "links" : null
-    }, {
-      "name" : "host.subnet.address",
-      "type" : "java.lang.String",
-      "description" : "Host address as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "host.subnet.hostname",
-      "type" : "java.lang.String",
-      "description" : "Host name as known internally in the subnet where it is running (if different to host.name)",
-      "links" : null
-    }, {
-      "name" : "install.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be installed in",
-      "links" : null
-    }, {
-      "name" : "run.dir",
-      "type" : "java.lang.String",
-      "description" : "Directory for this software to be run from",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.process.isRunning",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the process for the service is confirmed as running",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "softwareprocess.pid.file",
-      "type" : "java.lang.String",
-      "description" : "PID file",
-      "links" : null
-    }, {
-      "name" : "softwareservice.provisioningLocation",
-      "type" : "brooklyn.location.MachineProvisioningLocation",
-      "description" : "Location used to provision a machine where this is running",
-      "links" : null
-    }, {
-      "name" : "zookeeper.election.port",
-      "type" : "java.lang.Integer",
-      "description" : "Zookeeper election ports",
-      "links" : null
-    }, {
-      "name" : "zookeeper.leader.port",
-      "type" : "java.lang.Integer",
-      "description" : "Zookeeper leader ports",
-      "links" : null
-    }, {
-      "name" : "zookeeper.myid",
-      "type" : "java.lang.Integer",
-      "description" : "ZooKeeper node's myId",
-      "links" : null
-    }, {
-      "name" : "zookeeper.outstandingRequests",
-      "type" : "java.lang.Long",
-      "description" : "Outstanding request count",
-      "links" : null
-    }, {
-      "name" : "zookeeper.packets.received",
-      "type" : "java.lang.Long",
-      "description" : "Total packets received",
-      "links" : null
-    }, {
-      "name" : "zookeeper.packets.sent",
-      "type" : "java.lang.Long",
-      "description" : "Total packets sent",
-      "links" : null
-    }, {
-      "name" : "zookeeper.port",
-      "type" : "java.lang.Integer",
-      "description" : "Zookeeper port",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.entity.zookeeper.ZooKeeperEnsemble",
-    "name" : "ZooKeeper ensemble",
-    "description" : "ZooKeeper is...",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "cluster.initial.quorumSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : -1,
-      "description" : "Initial cluster quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "cluster.initial.size",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 3,
-      "description" : "Initial cluster size",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.availabilityZones",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "availability zones to use (if non-null, overrides other configuration)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.customChildFlags",
-      "type" : "java.util.Map",
-      "defaultValue" : { },
-      "description" : "Additional flags to be passed to children when they are being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.factory",
-      "type" : "brooklyn.entity.basic.EntityFactory",
-      "defaultValue" : null,
-      "description" : "factory for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.memberspec",
-      "type" : "brooklyn.entity.proxying.EntitySpec",
-      "defaultValue" : null,
-      "description" : "entity spec for creating new cluster members",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.numAvailabilityZones",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "number of availability zones to use (will attempt to auto-discover this number)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineFailedEntities",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "If true, will quarantine entities that fail to start; if false, will get rid of them (i.e. delete them)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.removalstrategy",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "strategy for deciding what to remove when down-sizing",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.enable",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to use availability zones, or just deploy everything into the generic location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.failureDetector",
-      "type" : "brooklyn.entity.group.DynamicCluster$ZoneFailureDetector",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector@b7193fc",
-      "description" : "Zone failure detector",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.zone.placementStrategy",
-      "type" : "brooklyn.entity.group.DynamicCluster$NodePlacementStrategy",
-      "defaultValue" : "brooklyn.entity.group.zoneaware.BalancingNodePlacementStrategy@37f02eaa",
-      "description" : "Node placement strategy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.running",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=0,100.0%]",
-      "description" : "Problems check from children actual states (lifecycle), applied by default to members and children, not checking upness, but requiring by default that none are on-fire",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.service_state.children_and_members.quorum.up",
-      "type" : "brooklyn.entity.basic.QuorumCheck",
-      "defaultValue" : "QuorumCheck[require=1,0.0%]",
-      "description" : "Up check, applied by default to members, requiring at least one present and up",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Add delegate child entities for members of the group",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "group.members.delegate.nameFormat",
-      "type" : "java.lang.String",
-      "defaultValue" : "%s",
-      "description" : "Delegate members name format string (Use %s for the original entity display name)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "zookeeper.cluster.name",
-      "type" : "java.lang.String",
-      "defaultValue" : "BrooklynZookeeperCluster",
-      "description" : "Name of the Zookeeper cluster",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ {
-      "name" : "cluster.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The cluster an entity is a member of",
-      "links" : null
-    }, {
-      "name" : "cluster.first",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is the first member of a cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.first.entity",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "The first member of the cluster",
-      "links" : null
-    }, {
-      "name" : "cluster.member",
-      "type" : "java.lang.Boolean",
-      "description" : "Set on an entity if it is a member of a cluster",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.entityQuarantined",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity failed to start, and has been quarantined",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.failedSubLocations",
-      "type" : "java.util.Set",
-      "description" : "Sub locations that seem to have failed",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.quarantineGroup",
-      "type" : "brooklyn.entity.group.QuarantineGroup",
-      "description" : "Group of quarantined entities that failed to start",
-      "links" : null
-    }, {
-      "name" : "dynamiccluster.subLocations",
-      "type" : "java.util.List",
-      "description" : "Locations for each availability zone to use",
-      "links" : null
-    }, {
-      "name" : "group.members",
-      "type" : "java.util.Collection",
-      "description" : "Members of the group",
-      "links" : null
-    }, {
-      "name" : "group.members.added",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity added to group members",
-      "links" : null
-    }, {
-      "name" : "group.members.count",
-      "type" : "java.lang.Integer",
-      "description" : "Number of members",
-      "links" : null
-    }, {
-      "name" : "group.members.removed",
-      "type" : "brooklyn.entity.Entity",
-      "description" : "Entity removed from group members",
-      "links" : null
-    }, {
-      "name" : "service.isUp",
-      "type" : "java.lang.Boolean",
-      "description" : "Whether the service is active and availability (confirmed and monitored)",
-      "links" : null
-    }, {
-      "name" : "service.state",
-      "type" : "brooklyn.entity.basic.Lifecycle",
-      "description" : "Actual lifecycle state of the service",
-      "links" : null
-    }, {
-      "name" : "zookeeper.cluster.name",
-      "type" : "java.lang.String",
-      "description" : "Name of the Zookeeper cluster",
-      "links" : null
-    }, {
-      "name" : "zookeeper.servers",
-      "type" : "java.util.List",
-      "description" : "Hostnames to connect to cluster with",
-      "links" : null
-    } ],
-    "effectors" : [ {
-      "name" : "replaceMember",
-      "returnType" : "java.lang.String",
-      "parameters" : [ {
-        "name" : "memberId",
-        "type" : "java.lang.String",
-        "description" : "The entity id of a member to be replaced",
-        "defaultValue" : null
-      } ],
-      "description" : "Replaces the entity with the given ID, if it is a member; first adds a new member, then removes this one. Returns id of the new entity; or throws exception if couldn't be replaced.",
-      "links" : null
-    }, {
-      "name" : "resize",
-      "returnType" : "java.lang.Integer",
-      "parameters" : [ {
-        "name" : "desiredSize",
-        "type" : "java.lang.Integer",
-        "description" : "The new size of the cluster",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the entity (e.g. the number of nodes in a cluster)",
-      "links" : null
-    }, {
-      "name" : "resizeByDelta",
-      "returnType" : "java.util.Collection",
-      "parameters" : [ {
-        "name" : "delta",
-        "type" : "int",
-        "description" : "The change in number of nodes",
-        "defaultValue" : null
-      } ],
-      "description" : "Changes the size of the cluster.",
-      "links" : null
-    }, {
-      "name" : "restart",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Restart the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "start",
-      "returnType" : "void",
-      "parameters" : [ {
-        "name" : "locations",
-        "type" : "java.lang.Object",
-        "description" : "The location or locations to start in, as a string, a location object, a list of strings, or a list of location objects",
-        "defaultValue" : null
-      } ],
-      "description" : "Start the process/service represented by an entity",
-      "links" : null
-    }, {
-      "name" : "stop",
-      "returnType" : "void",
-      "parameters" : [ ],
-      "description" : "Stop the process/service represented by an entity",
-      "links" : null
-    } ]
-  } ],
-  "policies" : [ {
-    "type" : "brooklyn.policy.autoscaling.AutoScalerPolicy",
-    "name" : "Auto-scaler",
-    "description" : "Policy that is attached to a Resizable entity and dynamically adjusts its size in response to either keep a metric within a given range, or in response to POOL_COLD and POOL_HOT events",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "autoscaler.currentSizeOperator",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : "brooklyn.policy.autoscaling.AutoScalerPolicy$5@65f39cb2",
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.entityWithMetric",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.maxPoolSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 2147483647,
-      "description" : null,
-      "reconfigurable" : true,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.maxReachedNotificationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : "Time that we consistently wanted to go above the maxPoolSize for, after which the maxSizeReachedSensor (if any) will be emitted",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.maxSizeReachedSensor",
-      "type" : "brooklyn.event.basic.BasicNotificationSensor",
-      "defaultValue" : null,
-      "description" : "Sensor for which a notification will be emitted (on the associated entity) when we consistently wanted to resize the pool above the max allowed size, for maxReachedNotificationDelay milliseconds",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.metric",
-      "type" : "brooklyn.event.AttributeSensor",
-      "defaultValue" : null,
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.metricLowerBound",
-      "type" : "java.lang.Number",
-      "defaultValue" : null,
-      "description" : null,
-      "reconfigurable" : true,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.metricUpperBound",
-      "type" : "java.lang.Number",
-      "defaultValue" : null,
-      "description" : null,
-      "reconfigurable" : true,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.minPeriodBetweenExecs",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "100ms",
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.minPoolSize",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 0,
-      "description" : null,
-      "reconfigurable" : true,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.poolColdSensor",
-      "type" : "brooklyn.event.basic.BasicNotificationSensor",
-      "defaultValue" : "Sensor: resizablepool.cold (java.util.Map)",
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.poolHotSensor",
-      "type" : "brooklyn.event.basic.BasicNotificationSensor",
-      "defaultValue" : "Sensor: resizablepool.hot (java.util.Map)",
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.poolOkSensor",
-      "type" : "brooklyn.event.basic.BasicNotificationSensor",
-      "defaultValue" : "Sensor: resizablepool.cold (java.util.Map)",
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.resizeDownStabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : null,
-      "reconfigurable" : true,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.resizeOperator",
-      "type" : "brooklyn.policy.autoscaling.ResizeOperator",
-      "defaultValue" : "brooklyn.policy.autoscaling.AutoScalerPolicy$3@560bed64",
-      "description" : null,
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "autoscaler.resizeUpStabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : null,
-      "reconfigurable" : true,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.policy.ha.ConnectionFailureDetector",
-    "name" : "Connection Failure Detector",
-    "description" : "HA policy for monitoring a host:port, emitting an event if the connection is lost/restored",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "connectionFailureDetector.endpoint",
-      "type" : "com.google.common.net.HostAndPort",
-      "defaultValue" : null,
-      "description" : "connectionFailureDetector.endpoint",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "connectionFailureDetector.pollPeriod",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "1s",
-      "description" : "",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "connectionFailureDetector.serviceFailedStabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : "Time period for which the connection must be consistently down for (e.g. doesn't report down-up-down) before concluding failure. Note that long TCP timeouts mean there can be long (e.g. 70 second) delays in noticing a connection refused condition.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "connectionFailureDetector.serviceRecoveredStabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : "For a failed connection, time period for which the connection must be consistently up for (e.g. doesn't report up-down-up) before concluding recovered",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.policy.followthesun.FollowTheSunPolicy",
-    "name" : "Follow the Sun",
-    "description" : "Policy for moving \"work\" around to follow the demand; the work can be any \"Movable\" entity",
-    "iconUrl" : "",
-    "config" : [ ]
-  }, {
-    "type" : "brooklyn.policy.loadbalancing.LoadBalancingPolicy",
-    "name" : "Load Balancer",
-    "description" : "Policy that is attached to a pool of \"containers\", each of which can host one or more migratable \"items\". The policy monitors the workrates of the items and effects migrations in an attempt to ensure that the containers are all sufficiently utilized without any of them being overloaded.",
-    "iconUrl" : "",
-    "config" : [ ]
-  }, {
-    "type" : "brooklyn.policy.ha.ServiceReplacer",
-    "name" : "Service Replacer",
-    "description" : "HA policy for replacing a failed member of a group",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "failOnNumRecurringFailures",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 5,
-      "description" : "abandon replace if replacement has failed this many times (100% of attempts) within the time interval",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "failOnRecurringFailuresInThisDuration",
-      "type" : "java.lang.Long",
-      "defaultValue" : 300000,
-      "description" : "abandon replace if replacement has failed many times within this time interval",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "failureSensorToMonitor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : "Sensor: ha.entityFailed.restart (brooklyn.policy.ha.HASensors$FailureDescriptor)",
-      "description" : "",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setOnFireOnFailure",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "ticker",
-      "type" : "com.google.common.base.Ticker",
-      "defaultValue" : null,
-      "description" : "A time source (defaults to system-clock, which is almost certainly what's wanted, except in tests)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.policy.ha.ServiceRestarter",
-    "name" : "Service Restarter",
-    "description" : "HA policy for restarting a service automatically, and for emitting an events if the service repeatedly fails",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "failOnRecurringFailuresInThisDuration",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "3m",
-      "description" : "Reports entity as failed if it fails two or more times in this time window",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "failureSensorToMonitor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : "Sensor: ha.entityFailed (brooklyn.policy.ha.HASensors$FailureDescriptor)",
-      "description" : "",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setOnFireOnFailure",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  } ],
-  "enrichers" : [ {
-    "type" : "brooklyn.enricher.basic.Aggregator",
-    "name" : "Aggregator",
-    "description" : "Aggregates attributes from multiple entities into a single attribute value; see Enrichers.builder().aggregating(...)",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.aggregating.entityFilter",
-      "type" : "com.google.common.base.Predicate",
-      "defaultValue" : null,
-      "description" : "enricher.aggregating.entityFilter",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.aggregating.fromChildren",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "enricher.aggregating.fromChildren",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.aggregating.fromHardcodedProducers",
-      "type" : "java.util.Set",
-      "defaultValue" : null,
-      "description" : "enricher.aggregating.fromHardcodedProducers",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.aggregating.fromMembers",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "enricher.aggregating.fromMembers",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.aggregating.valueFilter",
-      "type" : "com.google.common.base.Predicate",
-      "defaultValue" : null,
-      "description" : "enricher.aggregating.valueFilter",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.defaultMemberValue",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "enricher.defaultMemberValue",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.producer",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : "The entity whose children/members will be aggregated",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.sourceSensor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : null,
-      "description" : "enricher.sourceSensor",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.targetSensor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : null,
-      "description" : "enricher.targetSensor",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.transformation",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "enricher.transformation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.basic.Combiner",
-    "name" : "Combiner",
-    "description" : "Combines attributes; see Enrichers.builder().combining(...)",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.aggregating.valueFilter",
-      "type" : "com.google.common.base.Predicate",
-      "defaultValue" : null,
-      "description" : "enricher.aggregating.valueFilter",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.producer",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : "enricher.producer",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.sourceSensors",
-      "type" : "java.util.Set",
-      "defaultValue" : null,
-      "description" : "enricher.sourceSensors",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.targetSensor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : null,
-      "description" : "enricher.targetSensor",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.transformation",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "enricher.transformation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.DeltaEnricher",
-    "name" : "Delta",
-    "description" : "Converts an absolute sensor into a delta sensor (i.e. the diff between the current and previous value)",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.HttpLatencyDetector",
-    "name" : "HTTP Latency Detector",
-    "description" : "An Enricher which computes latency in accessing a URL, normally by periodically polling that URL",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "latencyDetector.period",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : null,
-      "description" : "latencyDetector.period",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "latencyDetector.requireServiceUp",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "latencyDetector.requireServiceUp",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "latencyDetector.rollup",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : null,
-      "description" : "latencyDetector.rollup",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "latencyDetector.url",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "latencyDetector.url",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "latencyDetector.urlPostProcessing",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "Function applied to the urlSensor value, to determine the URL to use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "latencyDetector.urlSensor",
-      "type" : "brooklyn.event.AttributeSensor",
-      "defaultValue" : null,
-      "description" : "latencyDetector.urlSensor",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.basic.Propagator",
-    "name" : "Propagator",
-    "description" : "Propagates attributes from one entity to another; see Enrichers.builder().propagating(...)",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.producer",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : "enricher.producer",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.propagating.inclusions",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "enricher.propagating.inclusions",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.propagating.propagatingAll",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "enricher.propagating.propagatingAll",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.propagating.propagatingAllBut",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "enricher.propagating.propagatingAllBut",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.propagating.sensorMapping",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "enricher.propagating.sensorMapping",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.RollingMeanEnricher",
-    "name" : "Rolling Mean",
-    "description" : "Transforms a sensor into a rolling average based on a fixed window size. This is useful for smoothing sample type metrics, such as latency or CPU time",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.RollingTimeWindowMeanEnricher",
-    "name" : "Rolling Mean in Time Window",
-    "description" : "Transforms a sensor's data into a rolling average based on a time window.",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.policy.ha.ServiceFailureDetector",
-    "name" : "Service Failure Detector",
-    "description" : "HA policy for deteting failure of a service",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "entityFailed.stabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : "Time period for which the service must be consistently down for (e.g. doesn't report down-up-down) before emitting ENTITY_FAILED",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "entityRecovered.stabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : "For a failed entity, time period for which the service must be consistently up for (e.g. doesn't report up-down-up) before emitting ENTITY_RECOVERED",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "monitorServiceProblems",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to monitor service problems, and emit on failures there (if set to false, this monitors only service up)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "onlyReportIfPreviouslyUp",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Prevents the policy from emitting ENTITY_FAILED if the entity fails on startup (ie has never been up)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "serviceOnFire.stabilizationDelay",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "0",
-      "description" : "Time period for which the service must be consistently down for (e.g. doesn't report down-up-down) before concluding ON_FIRE",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.TimeFractionDeltaEnricher",
-    "name" : "Time-fraction Delta",
-    "description" : "Converts an absolute measure of time into a fraction of time, based on the delta between consecutive values and the elapsed time between those values.",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.TimeWeightedDeltaEnricher",
-    "name" : "Time-weighted Delta",
-    "description" : "Converts an absolute sensor into a delta sensor (i.e. the diff between the current and previous value), presented as a units/timeUnit based on the event timing.",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  }, {
-    "type" : "brooklyn.enricher.basic.Transformer",
-    "name" : "Transformer",
-    "description" : "Transformers attributes of an entity; see Enrichers.builder().transforming(...)",
-    "iconUrl" : "",
-    "config" : [ {
-      "name" : "enricher.producer",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : "enricher.producer",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.sourceSensor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : null,
-      "description" : "enricher.sourceSensor",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.suppressDuplicates",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether duplicate values published by this enricher should be suppressed",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.targetSensor",
-      "type" : "brooklyn.event.Sensor",
-      "defaultValue" : null,
-      "description" : "enricher.targetSensor",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.transformation",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "enricher.transformation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "enricher.transformation.fromevent",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : null,
-      "description" : "enricher.transformation.fromevent",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ]
-  } ],
-  "locations" : [ {
-    "type" : "brooklyn.entity.pool.ServerPoolLocation",
-    "config" : [ {
-      "name" : "maxLocations",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 0,
-      "description" : "The maximum number of sub-locations that can be created; 0 for unlimited",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "owner",
-      "type" : "brooklyn.entity.Entity",
-      "defaultValue" : null,
-      "description" : "The entity owning this location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "pool.location.owner",
-      "type" : "brooklyn.entity.pool.ServerPool",
-      "defaultValue" : null,
-      "description" : "pool.location.owner",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.AddressableLocation",
-    "config" : [ ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.MachineLocation",
-    "config" : [ ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation",
-    "config" : [ ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.MachineProvisioningLocation",
-    "config" : [ ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.AbstractLocation",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.AggregatingMachineProvisioningLocation",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.FixedListMachineProvisioningLocation",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.LocalhostMachineProvisioningLocation",
-    "config" : [ {
-      "name" : "onbox.base.dir.skipResolution",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to skip on-box directory resolution (which can require ssh'ing), and just assume the directory exists; can be set on machine or on entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine",
-    "config" : [ {
-      "name" : "allocatePTY",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to allocate PTY (vt100); if true then stderr is sent to stdout, but sometimes required for sudo'ing due to requiretty",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.host",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Host to connect to (required)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.port",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 22,
-      "description" : "Port on host to connect to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "close",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Close the SSH connection after use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "env",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "environment variables to pass to the remote SSH shell session",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "err",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "err",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "localTempDir",
-      "type" : "java.lang.String",
-      "defaultValue" : "/tmp/brooklyn-splodge-ssh-tmp",
-      "description" : "The directory on the local machine (i.e. running brooklyn) for writing temp files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "logPrefix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "logPrefix",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStderrLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stderr from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStdoutLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stdout from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "onbox.base.dir.skipResolution",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to skip on-box directory resolution (which can require ssh'ing), and just assume the directory exists; can be set on machine or on entity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "out",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "out",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Password to use to connect",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the private ssh key (e.g. contents of an id_rsa or id_dsa file)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the path of an ssh private key file; leave blank to use defaults (i.e. ~/.ssh/id_rsa and id_dsa)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyPassphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the passphrase for the ssh private key",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scpExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `scp` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scriptDir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "directory where scripts should be placed and executed on the SSH target machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshCacheExpiryDuration",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Expiry time for unused cached ssh connections",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `ssh` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "unique",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Unique ID for the SSH connection",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.LocationInternal",
-    "config" : [ {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.MultiLocation",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "subLocations",
-      "type" : "java.util.List",
-      "defaultValue" : null,
-      "description" : "The sub-machines that this location can delegate to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.SimulatedLocation",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.SingleMachineProvisioningLocation",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.basic.SshMachineLocation",
-    "config" : [ {
-      "name" : "allocatePTY",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to allocate PTY (vt100); if true then stderr is sent to stdout, but sometimes required for sudo'ing due to requiretty",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.host",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Host to connect to (required)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.port",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 22,
-      "description" : "Port on host to connect to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "close",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Close the SSH connection after use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "env",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "environment variables to pass to the remote SSH shell session",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "err",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "err",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "localTempDir",
-      "type" : "java.lang.String",
-      "defaultValue" : "/tmp/brooklyn-splodge-ssh-tmp",
-      "description" : "The directory on the local machine (i.e. running brooklyn) for writing temp files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "logPrefix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "logPrefix",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStderrLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stderr from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStdoutLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stdout from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "out",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "out",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Password to use to connect",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the private ssh key (e.g. contents of an id_rsa or id_dsa file)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the path of an ssh private key file; leave blank to use defaults (i.e. ~/.ssh/id_rsa and id_dsa)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyPassphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the passphrase for the ssh private key",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scpExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `scp` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scriptDir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "directory where scripts should be placed and executed on the SSH target machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshCacheExpiryDuration",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Expiry time for unused cached ssh connections",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `ssh` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "unique",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Unique ID for the SSH connection",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation",
-    "config" : [ {
-      "name" : "availabilityZone",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "availabilityZone",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "callerContext",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "An object whose toString is used for logging, to indicate wherefore a VM is being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "credential",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "credential",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "destroyOnFailure",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to destroy the VM if provisioningLocation.obtain() fails",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "endpoint",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "endpoint",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "identity",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "identity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "inboundPorts",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "Inbound ports to be applied when creating a VM, on supported clouds (either a single port as a String, or an Iterable<Integer> or Integer[])",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "minCores",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "Minimum number of cores, for use in selecting the machine/hardware profile",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "minDisk",
-      "type" : "java.lang.Double",
-      "defaultValue" : null,
-      "description" : "Minimum size of disk (in GB), for use in selecting the machine/hardware profile",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "minRam",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "Minimum amount of RAM (in MB), for use in selecting the machine/hardware profile",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "os64Bit",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether to require 64-bit OS images (true), 32-bit images (false), or either (null)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "private-key-data",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh private key string to use (takes precedence over privateKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "private-key-file",
-      "type" : "java.lang.String",
-      "defaultValue" : "/Users/splodge/.ssh/id_rsa:/Users/splodge/.ssh/id_dsa",
-      "description" : "a ':' separated list of ssh private key files; uses first in list that can be read",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "private-key-passphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "privateKeyPassphrase",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh private key string to use (takes precedence over privateKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : "/Users/splodge/.ssh/id_rsa:/Users/splodge/.ssh/id_dsa",
-      "description" : "a ':' separated list of ssh private key files; uses first in list that can be read",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyPassphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "privateKeyPassphrase",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "public-key-data",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh public key string to use (takes precedence over publicKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "public-key-file",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "colon-separated list of ssh public key file(s) to use; if blank will infer from privateKeyFile by appending \".pub\"",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "publicKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh public key string to use (takes precedence over publicKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "publicKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "colon-separated list of ssh public key file(s) to use; if blank will infer from privateKeyFile by appending \".pub\"",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "region",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "region",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "user",
-      "type" : "java.lang.String",
-      "defaultValue" : "splodge",
-      "description" : "user account for normal access to the remote machine, defaulting to local user",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "vmNameMaxLength",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 61,
-      "description" : "Maximum length of VM name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "waitForSshable",
-      "type" : "java.lang.String",
-      "defaultValue" : "5m",
-      "description" : "Whether and how long to wait for a newly provisioned VM to be accessible via ssh; if 'false', won't check; if 'true' uses default duration; otherwise accepts a time string e.g. '5m' (the default) or a number of milliseconds",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation",
-    "config" : [ {
-      "name" : "allocatePTY",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to allocate PTY (vt100); if true then stderr is sent to stdout, but sometimes required for sudo'ing due to requiretty",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.host",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Host to connect to (required)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.port",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 22,
-      "description" : "Port on host to connect to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "close",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Close the SSH connection after use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "env",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "environment variables to pass to the remote SSH shell session",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "err",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "err",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "localTempDir",
-      "type" : "java.lang.String",
-      "defaultValue" : "/tmp/brooklyn-splodge-ssh-tmp",
-      "description" : "The directory on the local machine (i.e. running brooklyn) for writing temp files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "logPrefix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "logPrefix",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStderrLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stderr from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStdoutLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stdout from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "out",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "out",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Password to use to connect",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the private ssh key (e.g. contents of an id_rsa or id_dsa file)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the path of an ssh private key file; leave blank to use defaults (i.e. ~/.ssh/id_rsa and id_dsa)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyPassphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the passphrase for the ssh private key",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scpExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `scp` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scriptDir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "directory where scripts should be placed and executed on the SSH target machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshCacheExpiryDuration",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Expiry time for unused cached ssh connections",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `ssh` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "unique",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Unique ID for the SSH connection",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.jclouds.JcloudsLocation",
-    "config" : [ {
-      "name" : "autoAssignFloatingIp",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether to generate floating ips (in Nova paralance), or elastic IPs (in CloudStack parlance)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "availabilityZone",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "availabilityZone",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.portforwarding.manager",
-      "type" : "brooklyn.location.access.PortForwardManager",
-      "defaultValue" : null,
-      "description" : "A port-forwarding manager to use at an entity or a location, where supported; note this should normally be a serializable client instance to prevent the creation of multiple disconnected instances via config duplication",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "callerContext",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "An object whose toString is used for logging, to indicate wherefore a VM is being created",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "credential",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "credential",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customCredentials",
-      "type" : "org.jclouds.domain.LoginCredentials",
-      "defaultValue" : null,
-      "description" : "Custom jclouds LoginCredentials object to be used to connect to the VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customizer",
-      "type" : "brooklyn.location.jclouds.JcloudsLocationCustomizer",
-      "defaultValue" : null,
-      "description" : "Optional location customizer",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customizerType",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Optional location customizer type (to be class-loaded and constructed with no-arg constructor)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customizers",
-      "type" : "java.util.Collection",
-      "defaultValue" : null,
-      "description" : "Optional location customizers",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "customizersSupplierType",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Optional type of a Supplier<Collection<JcloudsLocationCustomizer>> (to be class-loaded and constructed with ConfigBag or no-arg constructor)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "defaultImageId",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "A system-specific identifier for the VM image to be used by default when creating a VM (if no other VM image selection criteria are supplied)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "destroyOnFailure",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to destroy the VM if provisioningLocation.obtain() fails",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "dontCreateUser",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to skip creation of 'user' when provisioning machines (default false)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "endpoint",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "endpoint",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "extraSshPublicKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Additional public key data to add to authorized_keys",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "generate.hostname",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Use the nodename generated by jclouds",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "grantUserSudo",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Whether to grant the created user sudo privileges. Irrelevant if dontCreateUser is true. Default: true.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "groupId",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The Jclouds group provisioned machines should be members of. Users of this config key are also responsible for configuring security groups.",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "hardwareId",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "A system-specific identifier for the hardware profile or machine type to be used when creating a VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "identity",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "identity",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "imageChooser",
-      "type" : "com.google.common.base.Function",
-      "defaultValue" : "brooklyn.location.jclouds.BrooklynImageChooser$3@58ca40be",
-      "description" : "An image chooser function to control which images are preferred",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "imageDescriptionRegex",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "A regular expression to be compared against the 'description' when selecting the VM image to be used when creating a VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "imageId",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "A system-specific identifier for the VM image to be used when creating a VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "imageNameRegex",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "A regular expression to be compared against the 'name' when selecting the VM image to be used when creating a VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "inboundPorts",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "Inbound ports to be applied when creating a VM, on supported clouds (either a single port as a String, or an Iterable<Integer> or Integer[])",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "installDevUrandom",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : true,
-      "description" : "Map /dev/random to /dev/urandom to prevent halting on insufficient entropy",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jclouds.endpoint",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Equivalent to 'endpoint'; provided for jclouds compatibility",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jclouds.openstack-nova.auto-create-floating-ips",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether to generate floating ips for Nova",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "jclouds.openstack-nova.auto-generate-keypairs",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether to generate keypairs for Nova",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "keyPair",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Custom keypair name to be re-used",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "localTempDir",
-      "type" : "java.lang.String",
-      "defaultValue" : "/tmp/brooklyn-splodge-ssh-tmp",
-      "description" : "The directory on the local machine (i.e. running brooklyn) for writing temp files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "loginUser",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Override the user who logs in initially to perform setup (otherwise it is detected from the cloud or known defaults in cloud or VM OS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "loginUser.password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Custom password for the user who logs in initially",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "loginUser.privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Custom private key for the user who logs in initially",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "loginUser.privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Custom private key for the user who logs in initially",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "machineCreateAttempts",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 1,
-      "description" : "Number of times to retry if jclouds fails to create a VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "machineCreationSemaphore",
-      "type" : "java.util.concurrent.Semaphore",
-      "defaultValue" : null,
-      "description" : "Semaphore for controlling concurrent machine creation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "maxConcurrentMachineCreations",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 2147483647,
-      "description" : "Maximum number of concurrent machine-creations",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "minCores",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "Minimum number of cores, for use in selecting the machine/hardware profile",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "minDisk",
-      "type" : "java.lang.Double",
-      "defaultValue" : null,
-      "description" : "Minimum size of disk (in GB), for use in selecting the machine/hardware profile",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "minRam",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "Minimum amount of RAM (in MB), for use in selecting the machine/hardware profile",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "networkName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Network name to specify as template option (e.g. GCE)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "openIptables",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to open the INBOUND_PORTS via iptables rules; if true then ssh in to run iptables commands, as part of machine provisioning",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "os64Bit",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether to require 64-bit OS images (true), 32-bit images (false), or either (null)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "osFamily",
-      "type" : "java.lang.Enum",
-      "defaultValue" : null,
-      "description" : "OS family, e.g. CentOS, Debian, RHEL, Ubuntu",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : [ {
-        "value" : "UNRECOGNIZED",
-        "description" : "unrecognized"
-      }, {
-        "value" : "AIX",
-        "description" : "aix"
-      }, {
-        "value" : "ARCH",
-        "description" : "arch"
-      }, {
-        "value" : "CENTOS",
-        "description" : "centos"
-      }, {
-        "value" : "DARWIN",
-        "description" : "darwin"
-      }, {
-        "value" : "DEBIAN",
-        "description" : "debian"
-      }, {
-        "value" : "ESX",
-        "description" : "esx"
-      }, {
-        "value" : "FEDORA",
-        "description" : "fedora"
-      }, {
-        "value" : "FREEBSD",
-        "description" : "freebsd"
-      }, {
-        "value" : "GENTOO",
-        "description" : "gentoo"
-      }, {
-        "value" : "HPUX",
-        "description" : "hpux"
-      }, {
-        "value" : "LINUX",
-        "description" : "linux"
-      }, {
-        "value" : "SMARTOS",
-        "description" : "smartos"
-      }, {
-        "value" : "AMZN_LINUX",
-        "description" : "amzn-linux"
-      }, {
-        "value" : "MANDRIVA",
-        "description" : "mandriva"
-      }, {
-        "value" : "NETBSD",
-        "description" : "netbsd"
-      }, {
-        "value" : "OEL",
-        "description" : "oel"
-      }, {
-        "value" : "OPENBSD",
-        "description" : "openbsd"
-      }, {
-        "value" : "RHEL",
-        "description" : "rhel"
-      }, {
-        "value" : "SCIENTIFIC",
-        "description" : "scientific"
-      }, {
-        "value" : "GCEL",
-        "description" : "gcel"
-      }, {
-        "value" : "SIGAR",
-        "description" : "sigar"
-      }, {
-        "value" : "SLACKWARE",
-        "description" : "slackware"
-      }, {
-        "value" : "SOLARIS",
-        "description" : "solaris"
-      }, {
-        "value" : "SUSE",
-        "description" : "suse"
-      }, {
-        "value" : "TURBOLINUX",
-        "description" : "turbolinux"
-      }, {
-        "value" : "CLOUD_LINUX",
-        "description" : "cloud-linux"
-      }, {
-        "value" : "UBUNTU",
-        "description" : "ubuntu"
-      }, {
-        "value" : "WINDOWS",
-        "description" : "windows"
-      } ],
-      "links" : null
-    }, {
-      "name" : "osVersionRegex",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Regular expression for the OS version to load",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "overrideRam",
-      "type" : "java.lang.Integer",
-      "defaultValue" : null,
-      "description" : "Custom ram value",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "password",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "portforwarding.enabled",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to setup port-forwarding to subsequently access the VM (over the ssh port)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "portforwarding.forwarder",
-      "type" : "brooklyn.location.jclouds.networking.JcloudsPortForwarderExtension",
-      "defaultValue" : null,
-      "description" : "The port-forwarder to use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "private-key-data",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh private key string to use (takes precedence over privateKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "private-key-file",
-      "type" : "java.lang.String",
-      "defaultValue" : "/Users/splodge/.ssh/id_rsa:/Users/splodge/.ssh/id_dsa",
-      "description" : "a ':' separated list of ssh private key files; uses first in list that can be read",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "private-key-passphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "privateKeyPassphrase",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh private key string to use (takes precedence over privateKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : "/Users/splodge/.ssh/id_rsa:/Users/splodge/.ssh/id_dsa",
-      "description" : "a ':' separated list of ssh private key files; uses first in list that can be read",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyPassphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "privateKeyPassphrase",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "provider",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "provider",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "public-key-data",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh public key string to use (takes precedence over publicKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "public-key-file",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "colon-separated list of ssh public key file(s) to use; if blank will infer from privateKeyFile by appending \".pub\"",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "publicKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "ssh public key string to use (takes precedence over publicKeyFile)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "publicKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "colon-separated list of ssh public key file(s) to use; if blank will infer from privateKeyFile by appending \".pub\"",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "region",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "region",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "runAsRoot",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : null,
-      "description" : "Whether to run initial setup as root (default true)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "securityGroups",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "Security groups to be applied when creating a VM, on supported clouds (either a single group identifier as a String, or an Iterable<String> or String[])",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.script",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Custom script to customize a node",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "setup.script.vars",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "vars to customize a setup.script i.e.: key1:value1,key2:value2",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "stopIptables",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Whether to stop iptables entirely; if true then ssh in to stop the iptables service, as part of machine provisioning",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "tags",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "Tags to be applied when creating a VM, on supported clouds (either a single tag as a String, or an Iterable<String> or String[];note this is not key-value pairs (e.g. what AWS calls 'tags'), for that see userMetadata)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templateBuilder",
-      "type" : "org.jclouds.compute.domain.TemplateBuilder",
-      "defaultValue" : null,
-      "description" : "A TemplateBuilder instance provided programmatically, to be used when creating a VM",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "templateSpec",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "A jclouds 'spec' string consisting of properties and values to be used when creating a VM (in most cases the properties can, and should, be specified individually using other Brooklyn location config keys)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "user",
-      "type" : "java.lang.String",
-      "defaultValue" : "splodge",
-      "description" : "user account for normal access to the remote machine, defaulting to local user",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "userData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Arbitrary user data, as a single string in uuencoded format, on supported clouds (AWS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "userMetadata",
-      "type" : "java.lang.Object",
-      "defaultValue" : null,
-      "description" : "Arbitrary user metadata, as a map (or String of comma-separated key=value pairs), on supported clouds; note often values cannot be null",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "userMetadataString",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Arbitrary user data, as a single string, on supported clouds (AWS)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "userName",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Equivalent to 'user'; provided for jclouds compatibility",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "vmNameMaxLength",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 61,
-      "description" : "Maximum length of VM name",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "waitForSshable",
-      "type" : "java.lang.String",
-      "defaultValue" : "5m",
-      "description" : "Whether and how long to wait for a newly provisioned VM to be accessible via ssh; if 'false', won't check; if 'true' uses default duration; otherwise accepts a time string e.g. '5m' (the default) or a number of milliseconds",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.location.jclouds.JcloudsSshMachineLocation",
-    "config" : [ {
-      "name" : "allocatePTY",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to allocate PTY (vt100); if true then stderr is sent to stdout, but sometimes required for sudo'ing due to requiretty",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.host",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Host to connect to (required)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "brooklyn.ssh.config.port",
-      "type" : "java.lang.Integer",
-      "defaultValue" : 22,
-      "description" : "Port on host to connect to",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "close",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "Close the SSH connection after use",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "env",
-      "type" : "java.util.Map",
-      "defaultValue" : null,
-      "description" : "environment variables to pass to the remote SSH shell session",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "err",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "err",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "localTempDir",
-      "type" : "java.lang.String",
-      "defaultValue" : "/tmp/brooklyn-splodge-ssh-tmp",
-      "description" : "The directory on the local machine (i.e. running brooklyn) for writing temp files",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "logPrefix",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "logPrefix",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStderrLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stderr from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "noStdoutLogging",
-      "type" : "java.lang.Boolean",
-      "defaultValue" : false,
-      "description" : "whether to disable logging of stdout from SSH commands (e.g. for verbose commands)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "out",
-      "type" : "java.io.OutputStream",
-      "defaultValue" : null,
-      "description" : "out",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "password",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Password to use to connect",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyData",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the private ssh key (e.g. contents of an id_rsa or id_dsa file)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyFile",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the path of an ssh private key file; leave blank to use defaults (i.e. ~/.ssh/id_rsa and id_dsa)",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "privateKeyPassphrase",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "the passphrase for the ssh private key",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scpExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `scp` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "scriptDir",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "directory where scripts should be placed and executed on the SSH target machine",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshCacheExpiryDuration",
-      "type" : "brooklyn.util.time.Duration",
-      "defaultValue" : "5m",
-      "description" : "Expiry time for unused cached ssh connections",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "sshExecutable",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Allows an `ssh` executable file to be specified, to be used in place of the default (programmatic) java ssh client",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "unique",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "Unique ID for the SSH connection",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  }, {
-    "type" : "brooklyn.policy.followthesun.DefaultFollowTheSunModel$1",
-    "config" : [ {
-      "name" : "parentLocation",
-      "type" : "brooklyn.location.Location",
-      "defaultValue" : null,
-      "description" : "parentLocation",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.final",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The actual spec (in a chain) which instantiates a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.named.name",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The name on the (first) named spec in a chain",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    }, {
-      "name" : "spec.original",
-      "type" : "java.lang.String",
-      "defaultValue" : null,
-      "description" : "The original spec used to instantiate a location",
-      "reconfigurable" : false,
-      "label" : null,
-      "priority" : null,
-      "possibleValues" : null,
-      "links" : null
-    } ],
-    "sensors" : [ ],
-    "effectors" : [ ]
-  } ],
-  "locationResolvers" : [ "byon", "host", "id", "jclouds", "jcloudsByon", "localhost", "multi", "named", "pool", "single" ]
-}
\ No newline at end of file
diff --git a/learnmore/catalog/libs/js/bloodhound.js b/learnmore/catalog/libs/js/bloodhound.js
deleted file mode 100644
index 96a4c43..0000000
--- a/learnmore/catalog/libs/js/bloodhound.js
+++ /dev/null
@@ -1,727 +0,0 @@
-/*!
- * typeahead.js 0.10.5
- * https://github.com/twitter/typeahead.js
- * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT
- */
-
-(function($) {
-    var _ = function() {
-        "use strict";
-        return {
-            isMsie: function() {
-                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
-            },
-            isBlankString: function(str) {
-                return !str || /^\s*$/.test(str);
-            },
-            escapeRegExChars: function(str) {
-                return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
-            },
-            isString: function(obj) {
-                return typeof obj === "string";
-            },
-            isNumber: function(obj) {
-                return typeof obj === "number";
-            },
-            isArray: $.isArray,
-            isFunction: $.isFunction,
-            isObject: $.isPlainObject,
-            isUndefined: function(obj) {
-                return typeof obj === "undefined";
-            },
-            toStr: function toStr(s) {
-                return _.isUndefined(s) || s === null ? "" : s + "";
-            },
-            bind: $.proxy,
-            each: function(collection, cb) {
-                $.each(collection, reverseArgs);
-                function reverseArgs(index, value) {
-                    return cb(value, index);
-                }
-            },
-            map: $.map,
-            filter: $.grep,
-            every: function(obj, test) {
-                var result = true;
-                if (!obj) {
-                    return result;
-                }
-                $.each(obj, function(key, val) {
-                    if (!(result = test.call(null, val, key, obj))) {
-                        return false;
-                    }
-                });
-                return !!result;
-            },
-            some: function(obj, test) {
-                var result = false;
-                if (!obj) {
-                    return result;
-                }
-                $.each(obj, function(key, val) {
-                    if (result = test.call(null, val, key, obj)) {
-                        return false;
-                    }
-                });
-                return !!result;
-            },
-            mixin: $.extend,
-            getUniqueId: function() {
-                var counter = 0;
-                return function() {
-                    return counter++;
-                };
-            }(),
-            templatify: function templatify(obj) {
-                return $.isFunction(obj) ? obj : template;
-                function template() {
-                    return String(obj);
-                }
-            },
-            defer: function(fn) {
-                setTimeout(fn, 0);
-            },
-            debounce: function(func, wait, immediate) {
-                var timeout, result;
-                return function() {
-                    var context = this, args = arguments, later, callNow;
-                    later = function() {
-                        timeout = null;
-                        if (!immediate) {
-                            result = func.apply(context, args);
-                        }
-                    };
-                    callNow = immediate && !timeout;
-                    clearTimeout(timeout);
-                    timeout = setTimeout(later, wait);
-                    if (callNow) {
-                        result = func.apply(context, args);
-                    }
-                    return result;
-                };
-            },
-            throttle: function(func, wait) {
-                var context, args, timeout, result, previous, later;
-                previous = 0;
-                later = function() {
-                    previous = new Date();
-                    timeout = null;
-                    result = func.apply(context, args);
-                };
-                return function() {
-                    var now = new Date(), remaining = wait - (now - previous);
-                    context = this;
-                    args = arguments;
-                    if (remaining <= 0) {
-                        clearTimeout(timeout);
-                        timeout = null;
-                        previous = now;
-                        result = func.apply(context, args);
-                    } else if (!timeout) {
-                        timeout = setTimeout(later, remaining);
-                    }
-                    return result;
-                };
-            },
-            noop: function() {}
-        };
-    }();
-    var VERSION = "0.10.5";
-    var tokenizers = function() {
-        "use strict";
-        return {
-            nonword: nonword,
-            whitespace: whitespace,
-            obj: {
-                nonword: getObjTokenizer(nonword),
-                whitespace: getObjTokenizer(whitespace)
-            }
-        };
-        function whitespace(str) {
-            str = _.toStr(str);
-            return str ? str.split(/\s+/) : [];
-        }
-        function nonword(str) {
-            str = _.toStr(str);
-            return str ? str.split(/\W+/) : [];
-        }
-        function getObjTokenizer(tokenizer) {
-            return function setKey() {
-                var args = [].slice.call(arguments, 0);
-                return function tokenize(o) {
-                    var tokens = [];
-                    _.each(args, function(k) {
-                        tokens = tokens.concat(tokenizer(_.toStr(o[k])));
-                    });
-                    return tokens;
-                };
-            };
-        }
-    }();
-    var LruCache = function() {
-        "use strict";
-        function LruCache(maxSize) {
-            this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
-            this.reset();
-            if (this.maxSize <= 0) {
-                this.set = this.get = $.noop;
-            }
-        }
-        _.mixin(LruCache.prototype, {
-            set: function set(key, val) {
-                var tailItem = this.list.tail, node;
-                if (this.size >= this.maxSize) {
-                    this.list.remove(tailItem);
-                    delete this.hash[tailItem.key];
-                }
-                if (node = this.hash[key]) {
-                    node.val = val;
-                    this.list.moveToFront(node);
-                } else {
-                    node = new Node(key, val);
-                    this.list.add(node);
-                    this.hash[key] = node;
-                    this.size++;
-                }
-            },
-            get: function get(key) {
-                var node = this.hash[key];
-                if (node) {
-                    this.list.moveToFront(node);
-                    return node.val;
-                }
-            },
-            reset: function reset() {
-                this.size = 0;
-                this.hash = {};
-                this.list = new List();
-            }
-        });
-        function List() {
-            this.head = this.tail = null;
-        }
-        _.mixin(List.prototype, {
-            add: function add(node) {
-                if (this.head) {
-                    node.next = this.head;
-                    this.head.prev = node;
-                }
-                this.head = node;
-                this.tail = this.tail || node;
-            },
-            remove: function remove(node) {
-                node.prev ? node.prev.next = node.next : this.head = node.next;
-                node.next ? node.next.prev = node.prev : this.tail = node.prev;
-            },
-            moveToFront: function(node) {
-                this.remove(node);
-                this.add(node);
-            }
-        });
-        function Node(key, val) {
-            this.key = key;
-            this.val = val;
-            this.prev = this.next = null;
-        }
-        return LruCache;
-    }();
-    var PersistentStorage = function() {
-        "use strict";
-        var ls, methods;
-        try {
-            ls = window.localStorage;
-            ls.setItem("~~~", "!");
-            ls.removeItem("~~~");
-        } catch (err) {
-            ls = null;
-        }
-        function PersistentStorage(namespace) {
-            this.prefix = [ "__", namespace, "__" ].join("");
-            this.ttlKey = "__ttl__";
-            this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
-        }
-        if (ls && window.JSON) {
-            methods = {
-                _prefix: function(key) {
-                    return this.prefix + key;
-                },
-                _ttlKey: function(key) {
-                    return this._prefix(key) + this.ttlKey;
-                },
-                get: function(key) {
-                    if (this.isExpired(key)) {
-                        this.remove(key);
-                    }
-                    return decode(ls.getItem(this._prefix(key)));
-                },
-                set: function(key, val, ttl) {
-                    if (_.isNumber(ttl)) {
-                        ls.setItem(this._ttlKey(key), encode(now() + ttl));
-                    } else {
-                        ls.removeItem(this._ttlKey(key));
-                    }
-                    return ls.setItem(this._prefix(key), encode(val));
-                },
-                remove: function(key) {
-                    ls.removeItem(this._ttlKey(key));
-                    ls.removeItem(this._prefix(key));
-                    return this;
-                },
-                clear: function() {
-                    var i, key, keys = [], len = ls.length;
-                    for (i = 0; i < len; i++) {
-                        if ((key = ls.key(i)).match(this.keyMatcher)) {
-                            keys.push(key.replace(this.keyMatcher, ""));
-                        }
-                    }
-                    for (i = keys.length; i--; ) {
-                        this.remove(keys[i]);
-                    }
-                    return this;
-                },
-                isExpired: function(key) {
-                    var ttl = decode(ls.getItem(this._ttlKey(key)));
-                    return _.isNumber(ttl) && now() > ttl ? true : false;
-                }
-            };
-        } else {
-            methods = {
-                get: _.noop,
-                set: _.noop,
-                remove: _.noop,
-                clear: _.noop,
-                isExpired: _.noop
-            };
-        }
-        _.mixin(PersistentStorage.prototype, methods);
-        return PersistentStorage;
-        function now() {
-            return new Date().getTime();
-        }
-        function encode(val) {
-            return JSON.stringify(_.isUndefined(val) ? null : val);
-        }
-        function decode(val) {
-            return JSON.parse(val);
-        }
-    }();
-    var Transport = function() {
-        "use strict";
-        var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
-        function Transport(o) {
-            o = o || {};
-            this.cancelled = false;
-            this.lastUrl = null;
-            this._send = o.transport ? callbackToDeferred(o.transport) : $.ajax;
-            this._get = o.rateLimiter ? o.rateLimiter(this._get) : this._get;
-            this._cache = o.cache === false ? new LruCache(0) : sharedCache;
-        }
-        Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
-            maxPendingRequests = num;
-        };
-        Transport.resetCache = function resetCache() {
-            sharedCache.reset();
-        };
-        _.mixin(Transport.prototype, {
-            _get: function(url, o, cb) {
-                var that = this, jqXhr;
-                if (this.cancelled || url !== this.lastUrl) {
-                    return;
-                }
-                if (jqXhr = pendingRequests[url]) {
-                    jqXhr.done(done).fail(fail);
-                } else if (pendingRequestsCount < maxPendingRequests) {
-                    pendingRequestsCount++;
-                    pendingRequests[url] = this._send(url, o).done(done).fail(fail).always(always);
-                } else {
-                    this.onDeckRequestArgs = [].slice.call(arguments, 0);
-                }
-                function done(resp) {
-                    cb && cb(null, resp);
-                    that._cache.set(url, resp);
-                }
-                function fail() {
-                    cb && cb(true);
-                }
-                function always() {
-                    pendingRequestsCount--;
-                    delete pendingRequests[url];
-                    if (that.onDeckRequestArgs) {
-                        that._get.apply(that, that.onDeckRequestArgs);
-                        that.onDeckRequestArgs = null;
-                    }
-                }
-            },
-            get: function(url, o, cb) {
-                var resp;
-                if (_.isFunction(o)) {
-                    cb = o;
-                    o = {};
-                }
-                this.cancelled = false;
-                this.lastUrl = url;
-                if (resp = this._cache.get(url)) {
-                    _.defer(function() {
-                        cb && cb(null, resp);
-                    });
-                } else {
-                    this._get(url, o, cb);
-                }
-                return !!resp;
-            },
-            cancel: function() {
-                this.cancelled = true;
-            }
-        });
-        return Transport;
-        function callbackToDeferred(fn) {
-            return function customSendWrapper(url, o) {
-                var deferred = $.Deferred();
-                fn(url, o, onSuccess, onError);
-                return deferred;
-                function onSuccess(resp) {
-                    _.defer(function() {
-                        deferred.resolve(resp);
-                    });
-                }
-                function onError(err) {
-                    _.defer(function() {
-                        deferred.reject(err);
-                    });
-                }
-            };
-        }
-    }();
-    var SearchIndex = function() {
-        "use strict";
-        function SearchIndex(o) {
-            o = o || {};
-            if (!o.datumTokenizer || !o.queryTokenizer) {
-                $.error("datumTokenizer and queryTokenizer are both required");
-            }
-            this.datumTokenizer = o.datumTokenizer;
-            this.queryTokenizer = o.queryTokenizer;
-            this.reset();
-        }
-        _.mixin(SearchIndex.prototype, {
-            bootstrap: function bootstrap(o) {
-                this.datums = o.datums;
-                this.trie = o.trie;
-            },
-            add: function(data) {
-                var that = this;
-                data = _.isArray(data) ? data : [ data ];
-                _.each(data, function(datum) {
-                    var id, tokens;
-                    id = that.datums.push(datum) - 1;
-                    tokens = normalizeTokens(that.datumTokenizer(datum));
-                    _.each(tokens, function(token) {
-                        var node, chars, ch;
-                        node = that.trie;
-                        chars = token.split("");
-                        while (ch = chars.shift()) {
-                            node = node.children[ch] || (node.children[ch] = newNode());
-                            node.ids.push(id);
-                        }
-                    });
-                });
-            },
-            get: function get(query) {
-                var that = this, tokens, matches;
-                tokens = normalizeTokens(this.queryTokenizer(query));
-                _.each(tokens, function(token) {
-                    var node, chars, ch, ids;
-                    if (matches && matches.length === 0) {
-                        return false;
-                    }
-                    node = that.trie;
-                    chars = token.split("");
-                    while (node && (ch = chars.shift())) {
-                        node = node.children[ch];
-                    }
-                    if (node && chars.length === 0) {
-                        ids = node.ids.slice(0);
-                        matches = matches ? getIntersection(matches, ids) : ids;
-                    } else {
-                        matches = [];
-                        return false;
-                    }
-                });
-                return matches ? _.map(unique(matches), function(id) {
-                    return that.datums[id];
-                }) : [];
-            },
-            reset: function reset() {
-                this.datums = [];
-                this.trie = newNode();
-            },
-            serialize: function serialize() {
-                return {
-                    datums: this.datums,
-                    trie: this.trie
-                };
-            }
-        });
-        return SearchIndex;
-        function normalizeTokens(tokens) {
-            tokens = _.filter(tokens, function(token) {
-                return !!token;
-            });
-            tokens = _.map(tokens, function(token) {
-                return token.toLowerCase();
-            });
-            return tokens;
-        }
-        function newNode() {
-            return {
-                ids: [],
-                children: {}
-            };
-        }
-        function unique(array) {
-            var seen = {}, uniques = [];
-            for (var i = 0, len = array.length; i < len; i++) {
-                if (!seen[array[i]]) {
-                    seen[array[i]] = true;
-                    uniques.push(array[i]);
-                }
-            }
-            return uniques;
-        }
-        function getIntersection(arrayA, arrayB) {
-            var ai = 0, bi = 0, intersection = [];
-            arrayA = arrayA.sort(compare);
-            arrayB = arrayB.sort(compare);
-            var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
-            while (ai < lenArrayA && bi < lenArrayB) {
-                if (arrayA[ai] < arrayB[bi]) {
-                    ai++;
-                } else if (arrayA[ai] > arrayB[bi]) {
-                    bi++;
-                } else {
-                    intersection.push(arrayA[ai]);
-                    ai++;
-                    bi++;
-                }
-            }
-            return intersection;
-            function compare(a, b) {
-                return a - b;
-            }
-        }
-    }();
-    var oParser = function() {
-        "use strict";
-        return {
-            local: getLocal,
-            prefetch: getPrefetch,
-            remote: getRemote
-        };
-        function getLocal(o) {
-            return o.local || null;
-        }
-        function getPrefetch(o) {
-            var prefetch, defaults;
-            defaults = {
-                url: null,
-                thumbprint: "",
-                ttl: 24 * 60 * 60 * 1e3,
-                filter: null,
-                ajax: {}
-            };
-            if (prefetch = o.prefetch || null) {
-                prefetch = _.isString(prefetch) ? {
-                    url: prefetch
-                } : prefetch;
-                prefetch = _.mixin(defaults, prefetch);
-                prefetch.thumbprint = VERSION + prefetch.thumbprint;
-                prefetch.ajax.type = prefetch.ajax.type || "GET";
-                prefetch.ajax.dataType = prefetch.ajax.dataType || "json";
-                !prefetch.url && $.error("prefetch requires url to be set");
-            }
-            return prefetch;
-        }
-        function getRemote(o) {
-            var remote, defaults;
-            defaults = {
-                url: null,
-                cache: true,
-                wildcard: "%QUERY",
-                replace: null,
-                rateLimitBy: "debounce",
-                rateLimitWait: 300,
-                send: null,
-                filter: null,
-                ajax: {}
-            };
-            if (remote = o.remote || null) {
-                remote = _.isString(remote) ? {
-                    url: remote
-                } : remote;
-                remote = _.mixin(defaults, remote);
-                remote.rateLimiter = /^throttle$/i.test(remote.rateLimitBy) ? byThrottle(remote.rateLimitWait) : byDebounce(remote.rateLimitWait);
-                remote.ajax.type = remote.ajax.type || "GET";
-                remote.ajax.dataType = remote.ajax.dataType || "json";
-                delete remote.rateLimitBy;
-                delete remote.rateLimitWait;
-                !remote.url && $.error("remote requires url to be set");
-            }
-            return remote;
-            function byDebounce(wait) {
-                return function(fn) {
-                    return _.debounce(fn, wait);
-                };
-            }
-            function byThrottle(wait) {
-                return function(fn) {
-                    return _.throttle(fn, wait);
-                };
-            }
-        }
-    }();
-    (function(root) {
-        "use strict";
-        var old, keys;
-        old = root.Bloodhound;
-        keys = {
-            data: "data",
-            protocol: "protocol",
-            thumbprint: "thumbprint"
-        };
-        root.Bloodhound = Bloodhound;
-        function Bloodhound(o) {
-            if (!o || !o.local && !o.prefetch && !o.remote) {
-                $.error("one of local, prefetch, or remote is required");
-            }
-            this.limit = o.limit || 5;
-            this.sorter = getSorter(o.sorter);
-            this.dupDetector = o.dupDetector || ignoreDuplicates;
-            this.local = oParser.local(o);
-            this.prefetch = oParser.prefetch(o);
-            this.remote = oParser.remote(o);
-            this.cacheKey = this.prefetch ? this.prefetch.cacheKey || this.prefetch.url : null;
-            this.index = new SearchIndex({
-                datumTokenizer: o.datumTokenizer,
-                queryTokenizer: o.queryTokenizer
-            });
-            this.storage = this.cacheKey ? new PersistentStorage(this.cacheKey) : null;
-        }
-        Bloodhound.noConflict = function noConflict() {
-            root.Bloodhound = old;
-            return Bloodhound;
-        };
-        Bloodhound.tokenizers = tokenizers;
-        _.mixin(Bloodhound.prototype, {
-            _loadPrefetch: function loadPrefetch(o) {
-                var that = this, serialized, deferred;
-                if (serialized = this._readFromStorage(o.thumbprint)) {
-                    this.index.bootstrap(serialized);
-                    deferred = $.Deferred().resolve();
-                } else {
-                    deferred = $.ajax(o.url, o.ajax).done(handlePrefetchResponse);
-                }
-                return deferred;
-                function handlePrefetchResponse(resp) {
-                    that.clear();
-                    that.add(o.filter ? o.filter(resp) : resp);
-                    that._saveToStorage(that.index.serialize(), o.thumbprint, o.ttl);
-                }
-            },
-            _getFromRemote: function getFromRemote(query, cb) {
-                var that = this, url, uriEncodedQuery;
-                if (!this.transport) {
-                    return;
-                }
-                query = query || "";
-                uriEncodedQuery = encodeURIComponent(query);
-                url = this.remote.replace ? this.remote.replace(this.remote.url, query) : this.remote.url.replace(this.remote.wildcard, uriEncodedQuery);
-                return this.transport.get(url, this.remote.ajax, handleRemoteResponse);
-                function handleRemoteResponse(err, resp) {
-                    err ? cb([]) : cb(that.remote.filter ? that.remote.filter(resp) : resp);
-                }
-            },
-            _cancelLastRemoteRequest: function cancelLastRemoteRequest() {
-                this.transport && this.transport.cancel();
-            },
-            _saveToStorage: function saveToStorage(data, thumbprint, ttl) {
-                if (this.storage) {
-                    this.storage.set(keys.data, data, ttl);
-                    this.storage.set(keys.protocol, location.protocol, ttl);
-                    this.storage.set(keys.thumbprint, thumbprint, ttl);
-                }
-            },
-            _readFromStorage: function readFromStorage(thumbprint) {
-                var stored = {}, isExpired;
-                if (this.storage) {
-                    stored.data = this.storage.get(keys.data);
-                    stored.protocol = this.storage.get(keys.protocol);
-                    stored.thumbprint = this.storage.get(keys.thumbprint);
-                }
-                isExpired = stored.thumbprint !== thumbprint || stored.protocol !== location.protocol;
-                return stored.data && !isExpired ? stored.data : null;
-            },
-            _initialize: function initialize() {
-                var that = this, local = this.local, deferred;
-                deferred = this.prefetch ? this._loadPrefetch(this.prefetch) : $.Deferred().resolve();
-                local && deferred.done(addLocalToIndex);
-                this.transport = this.remote ? new Transport(this.remote) : null;
-                return this.initPromise = deferred.promise();
-                function addLocalToIndex() {
-                    that.add(_.isFunction(local) ? local() : local);
-                }
-            },
-            initialize: function initialize(force) {
-                return !this.initPromise || force ? this._initialize() : this.initPromise;
-            },
-            add: function add(data) {
-                this.index.add(data);
-            },
-            get: function get(query, cb) {
-                var that = this, matches = [], cacheHit = false;
-                matches = this.index.get(query);
-                matches = this.sorter(matches).slice(0, this.limit);
-                matches.length < this.limit ? cacheHit = this._getFromRemote(query, returnRemoteMatches) : this._cancelLastRemoteRequest();
-                if (!cacheHit) {
-                    (matches.length > 0 || !this.transport) && cb && cb(matches);
-                }
-                function returnRemoteMatches(remoteMatches) {
-                    var matchesWithBackfill = matches.slice(0);
-                    _.each(remoteMatches, function(remoteMatch) {
-                        var isDuplicate;
-                        isDuplicate = _.some(matchesWithBackfill, function(match) {
-                            return that.dupDetector(remoteMatch, match);
-                        });
-                        !isDuplicate && matchesWithBackfill.push(remoteMatch);
-                        return matchesWithBackfill.length < that.limit;
-                    });
-                    cb && cb(that.sorter(matchesWithBackfill));
-                }
-            },
-            clear: function clear() {
-                this.index.reset();
-            },
-            clearPrefetchCache: function clearPrefetchCache() {
-                this.storage && this.storage.clear();
-            },
-            clearRemoteCache: function clearRemoteCache() {
-                this.transport && Transport.resetCache();
-            },
-            ttAdapter: function ttAdapter() {
-                return _.bind(this.get, this);
-            }
-        });
-        return Bloodhound;
-        function getSorter(sortFn) {
-            return _.isFunction(sortFn) ? sort : noSort;
-            function sort(array) {
-                return array.sort(sortFn);
-            }
-            function noSort(array) {
-                return array;
-            }
-        }
-        function ignoreDuplicates() {
-            return false;
-        }
-    })(this);
-})(window.jQuery);
\ No newline at end of file
diff --git a/learnmore/catalog/locations/brooklyn.entity.pool.ServerPoolLocation.html b/learnmore/catalog/locations/brooklyn.entity.pool.ServerPoolLocation.html
deleted file mode 100644
index 2e27b43..0000000
--- a/learnmore/catalog/locations/brooklyn.entity.pool.ServerPoolLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.entity.pool.ServerPoolLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.entity.pool.ServerPoolLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.entity.pool.ServerPoolLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.AddressableLocation.html b/learnmore/catalog/locations/brooklyn.location.AddressableLocation.html
deleted file mode 100644
index 857a635..0000000
--- a/learnmore/catalog/locations/brooklyn.location.AddressableLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.AddressableLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.AddressableLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.AddressableLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.MachineLocation.html b/learnmore/catalog/locations/brooklyn.location.MachineLocation.html
deleted file mode 100644
index dbd9455..0000000
--- a/learnmore/catalog/locations/brooklyn.location.MachineLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.MachineLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.MachineLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.MachineLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation.html
deleted file mode 100644
index fdf531b..0000000
--- a/learnmore/catalog/locations/brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.MachineManagementMixins$RichMachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.MachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.MachineProvisioningLocation.html
deleted file mode 100644
index d63dc8b..0000000
--- a/learnmore/catalog/locations/brooklyn.location.MachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.MachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.MachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.MachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.AbstractLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.AbstractLocation.html
deleted file mode 100644
index 6861236..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.AbstractLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.AbstractLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.AbstractLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.AbstractLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.AggregatingMachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.AggregatingMachineProvisioningLocation.html
deleted file mode 100644
index 790d261..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.AggregatingMachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.AggregatingMachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.AggregatingMachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.AggregatingMachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.FixedListMachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.FixedListMachineProvisioningLocation.html
deleted file mode 100644
index 989c8ee..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.FixedListMachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.FixedListMachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.FixedListMachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.FixedListMachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine.html b/learnmore/catalog/locations/brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine.html
deleted file mode 100644
index 2a26d53..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.LocalhostMachineProvisioningLocation$LocalhostMachine";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.LocalhostMachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.LocalhostMachineProvisioningLocation.html
deleted file mode 100644
index 47af495..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.LocalhostMachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.LocalhostMachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.LocalhostMachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.LocalhostMachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.LocationInternal.html b/learnmore/catalog/locations/brooklyn.location.basic.LocationInternal.html
deleted file mode 100644
index 009a41d..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.LocationInternal.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.LocationInternal</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.LocationInternal</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.LocationInternal";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.MultiLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.MultiLocation.html
deleted file mode 100644
index cefe218..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.MultiLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.MultiLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.MultiLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.MultiLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.SimulatedLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.SimulatedLocation.html
deleted file mode 100644
index 5fe7a58..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.SimulatedLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.SimulatedLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.SimulatedLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.SimulatedLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.SingleMachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.SingleMachineProvisioningLocation.html
deleted file mode 100644
index 29abdf8..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.SingleMachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.SingleMachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.SingleMachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.SingleMachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.basic.SshMachineLocation.html b/learnmore/catalog/locations/brooklyn.location.basic.SshMachineLocation.html
deleted file mode 100644
index 3ee27ab..0000000
--- a/learnmore/catalog/locations/brooklyn.location.basic.SshMachineLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.basic.SshMachineLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.basic.SshMachineLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.basic.SshMachineLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation.html b/learnmore/catalog/locations/brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation.html
deleted file mode 100644
index 6a41d3f..0000000
--- a/learnmore/catalog/locations/brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation.html b/learnmore/catalog/locations/brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation.html
deleted file mode 100644
index 7240131..0000000
--- a/learnmore/catalog/locations/brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.jclouds.JcloudsLocation.html b/learnmore/catalog/locations/brooklyn.location.jclouds.JcloudsLocation.html
deleted file mode 100644
index de80bcb..0000000
--- a/learnmore/catalog/locations/brooklyn.location.jclouds.JcloudsLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.jclouds.JcloudsLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.jclouds.JcloudsLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.jclouds.JcloudsLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.location.jclouds.JcloudsSshMachineLocation.html b/learnmore/catalog/locations/brooklyn.location.jclouds.JcloudsSshMachineLocation.html
deleted file mode 100644
index 6ae6cc0..0000000
--- a/learnmore/catalog/locations/brooklyn.location.jclouds.JcloudsSshMachineLocation.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.location.jclouds.JcloudsSshMachineLocation</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.location.jclouds.JcloudsSshMachineLocation</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.location.jclouds.JcloudsSshMachineLocation";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/locations/brooklyn.policy.followthesun.DefaultFollowTheSunModel$1.html b/learnmore/catalog/locations/brooklyn.policy.followthesun.DefaultFollowTheSunModel$1.html
deleted file mode 100644
index 4bf0fd3..0000000
--- a/learnmore/catalog/locations/brooklyn.policy.followthesun.DefaultFollowTheSunModel$1.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Brooklyn Location - brooklyn.policy.followthesun.DefaultFollowTheSunModel$1</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-</head>
-<body>
-<div id="container">
-    <div id="header">
-        <div id="identity">
-            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-    </div>
-    <div id="content" class="objectContent">
-        <h1>brooklyn.policy.followthesun.DefaultFollowTheSunModel$1</h1>
-        <h2 class="typeLabel">Type:</h2><span id="type"></span>
-
-        <h2>Config Keys</h2>
-        <table id="configKeys">
-            <tr>
-                <th>Name</th>
-                <th>Type</th>
-                <th>Default Value</th>
-                <th>Description</th>
-            </tr>
-        </table>
-        <br>
-    </div>
-</div>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-<script src="../items.js" type="text/javascript"></script>
-<script type="text/javascript">
-    $(document).ready(function () {
-        var item = $.grep((items.locations), function (entity) {
-            return entity.type == "brooklyn.policy.followthesun.DefaultFollowTheSunModel$1";
-        })[0];
-        $("#type").html(item.type);
-        item.config.forEach(function (element) {
-            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/learnmore/catalog/policies/brooklyn.policy.autoscaling.AutoScalerPolicy.html b/learnmore/catalog/policies/brooklyn.policy.autoscaling.AutoScalerPolicy.html
deleted file mode 100644
index 78a2cb5..0000000
--- a/learnmore/catalog/policies/brooklyn.policy.autoscaling.AutoScalerPolicy.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Policy - Auto-scaler</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.policies, "brooklyn.policy.autoscaling.AutoScalerPolicy");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/policies/brooklyn.policy.followthesun.FollowTheSunPolicy.html b/learnmore/catalog/policies/brooklyn.policy.followthesun.FollowTheSunPolicy.html
deleted file mode 100644
index b080d7b..0000000
--- a/learnmore/catalog/policies/brooklyn.policy.followthesun.FollowTheSunPolicy.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Policy - Follow the Sun</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.policies, "brooklyn.policy.followthesun.FollowTheSunPolicy");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/policies/brooklyn.policy.ha.ConnectionFailureDetector.html b/learnmore/catalog/policies/brooklyn.policy.ha.ConnectionFailureDetector.html
deleted file mode 100644
index 11ca8de..0000000
--- a/learnmore/catalog/policies/brooklyn.policy.ha.ConnectionFailureDetector.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Policy - Connection Failure Detector</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.policies, "brooklyn.policy.ha.ConnectionFailureDetector");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/policies/brooklyn.policy.ha.ServiceReplacer.html b/learnmore/catalog/policies/brooklyn.policy.ha.ServiceReplacer.html
deleted file mode 100644
index f7f696a..0000000
--- a/learnmore/catalog/policies/brooklyn.policy.ha.ServiceReplacer.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Policy - Service Replacer</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.policies, "brooklyn.policy.ha.ServiceReplacer");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/policies/brooklyn.policy.ha.ServiceRestarter.html b/learnmore/catalog/policies/brooklyn.policy.ha.ServiceRestarter.html
deleted file mode 100644
index e27c023..0000000
--- a/learnmore/catalog/policies/brooklyn.policy.ha.ServiceRestarter.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Policy - Service Restarter</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.policies, "brooklyn.policy.ha.ServiceRestarter");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/learnmore/catalog/policies/brooklyn.policy.loadbalancing.LoadBalancingPolicy.html b/learnmore/catalog/policies/brooklyn.policy.loadbalancing.LoadBalancingPolicy.html
deleted file mode 100644
index 84df363..0000000
--- a/learnmore/catalog/policies/brooklyn.policy.loadbalancing.LoadBalancingPolicy.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head>
-    <title>Brooklyn Policy - Load Balancer</title>
-    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
-  </head>
-  <body>
-    <div id="container">
-      <div id="header">
-        <div id="identity">
-          <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
-        </div>
-      </div>
-
-      <div id="summary"></div>
-
-      <ul class="nav nav-tabs">
-        <li class="active"><a href="#configKeys" data-toggle="tab">Config Keys</a></li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="configKeys"></div>
-      </div>
-
-    </div>
-
-    <script src="../../../style/js/underscore-min.js" type="text/javascript"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <script src="../common.js" type="text/javascript"></script>
-    <script src="../items.js" type="text/javascript"></script>
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var item = brooklyn.findItemOfType(items.policies, "brooklyn.policy.loadbalancing.LoadBalancingPolicy");
-            $("#summary").html(brooklyn.typeSummary(item));
-            item.config.forEach(function (element) { $("#configKeys").append(brooklyn.configKeyCard(element)); });
-        });
-    </script>
-  </body>
-</html>
diff --git a/quickstart/_my-web-cluster.yaml b/quickstart/_my-web-cluster.yaml
deleted file mode 100644
index 3b6134b..0000000
--- a/quickstart/_my-web-cluster.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: My Web Cluster
-location: location
-services:
-
-- serviceType: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
-  name: My Web
-  brooklyn.config:
-    wars.root: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/{{ site.data.brooklyn.version }}/brooklyn-example-hello-world-sql-webapp-{{ site.data.brooklyn.version }}.war
-    java.sysprops:
-      brooklyn.example.db.url: >
-        $brooklyn:formatString("jdbc:%s%s?user=%s\\&password=%s",
-        component("db").attributeWhenReady("datastore.url"),
-        "visitors", "brooklyn", "br00k11n")
-
-- serviceType: brooklyn.entity.database.mysql.MySqlNode
-  id: db
-  name: My DB
-  brooklyn.config:
-    creationScriptUrl: https://bit.ly/brooklyn-visitors-creation-script
\ No newline at end of file
diff --git a/quickstart/brooklyn.properties b/quickstart/brooklyn.properties
deleted file mode 100644
index 08a9d7c..0000000
--- a/quickstart/brooklyn.properties
+++ /dev/null
@@ -1,266 +0,0 @@
-# This is Brooklyn's dot-properties file.
-# It should be located at "~/.brooklyn/brooklyn.properties" for automatic loading,
-# or can be specified as a CLI option with --localProperties /path/to/these.properties.
-
-##################################  Welcome!  ############################################
-
-# It's great to have you here.
-
-# Getting Started options have been pulled to the top. There's a formatting guide at the
-# very bottom.
-
-############################ Getting Started Options  ####################################
-
-# By default we have AWS set up (but with invalid credentials!).  Many, many other
-# providers are supported.
-
-## Amazon EC2 Credentials
-# These should be an "Access Key ID" and "Secret Access Key" for your account.
-# This is configured at https://console.aws.amazon.com/iam/home?#security_credential .
-
-brooklyn.location.jclouds.aws-ec2.identity = AKA_YOUR_ACCESS_KEY_ID
-brooklyn.location.jclouds.aws-ec2.credential = <access-key-hex-digits>
-
-# Beware of trailing spaces in your cloud credentials. This will cause unexpected
-# 401: unauthorized responses.
-
-## Using Other Clouds
-# 1. Cast your eyes down this document to find your preferred cloud in the Named Locations
-#    section, and the examples.
-# 2. Uncomment the relevant line(s) for your provider.
-# 3. ADD  -.identity and -.credential lines for your provider, similar to the AWS ones above,
-#    replacing 'aws-ec2' with jcloud's id for your cloud.
-
-
-## Deploying to Localhost
-## see: brooklyncentral.github.io/use/guide/locations/
-#
-## ~/.ssh/id_rsa is Brooklyn's default location
-# brooklyn.location.localhost.privateKeyFile = ~/.ssh/id_rsa
-## Passphrases are supported, but not required
-# brooklyn.location.localhost.privateKeyPassphrase = s3cr3tpassphrase
-
-## Geoscaling Service - used for the Global Web Fabric demo
-## see: brooklyncentral.github.io/use/examples/global-web-fabric/ and
-## https://www.geoscaling.com/dns2/
-## other services may take similar configuration similarly; or can usually be set in YAML
-# brooklyn.geoscaling.username = USERNAME
-# brooklyn.geoscaling.password = PASSWORD
-# brooklyn.geoscaling.primaryDomain = DOMAIN
-
-
-##########################  Getting Started Complete!  ###################################
-
-# That's it, although you may want to read through these options...
-
-################################ Brooklyn Options ########################################
-
-## Brooklyn Management Base Directory: specify where management data should be stored on this server;
-## ~/.brooklyn/ is the default but you could use something like /opt/brooklyn/state/
-## (provided this process has write permissions) 
-# brooklyn.base.dir=~/.brooklyn/
-
-## Brooklyn On-Box Directory: specify where data should be stored on managed hosts; 
-## for most locations a directory off home is the default (but using /tmp/brooklyn-user/ on localhost),
-## however you could specify something like /opt/brooklyn-managed-process/ (creation and permissions are handled)
-# onbox.base.dir=~/brooklyn-managed-process/
-
-
-## GUI Security
-## NOTE: in production it is highly recommended to set this, as otherwise it will not require login,
-## not will it be encrypted (though for safety if security is not set it will only bind to loopback)
-# brooklyn.webconsole.security.https.required=true
-# brooklyn.webconsole.security.users=admin,bob
-# brooklyn.webconsole.security.user.admin.password=password
-# brooklyn.webconsole.security.user.bob.password=bobsword
-
-## GUI Security: Allow all - if you know what you are doing! (You can also plug in e.g. LDAP security.)
-# brooklyn.webconsole.security.provider = brooklyn.rest.security.provider.AnyoneSecurityProvider
-
-## Optionally disallow deployment to localhost (or any other location)
-# brooklyn.location.localhost.enabled=false
-
-## Scripting Behaviour
-
-## keep scripts around after running them (usually in /tmp) 
-# brooklyn.ssh.config.noDeleteAfterExec = true
-
-## Misc Cloud Settings
-## brooklyn will fail a node if the cloud machine doesn't come up, but you can tell it to retry:
-# brooklyn.location.jclouds.machineCreateAttempts = 3
-## many cloud machines don't have sufficient entropy for lots of encrypted networking, so fake it:
-# brooklyn.location.jclouds.installDevUrandom=true
-
-## Sets a minimium ram property for all jclouds locations. Recommended to avoid getting m1.micros on AWS!
-brooklyn.location.jclouds.minRam = 2048
-
-## When setting up a new cloud machine Brooklyn creates a user with the same name as the user running
-## Brooklyn on the management server, but you can force a different user here:
-# brooklyn.location.jclouds.user=brooklyn
-## And you can force a password or key (by default it will use the keys in ~/.ssh/id_rsa{,.pub}
-# brooklyn.location.jclouds.password=s3cr3t
-
-################################ Named Locations ########################################
-
-# Named locations appear in the web console. If using the command line or YAML it may be 
-# just as easy to use the jclouds:<provider> locations and specify additional properties there.
-
-## Example: AWS Virginia using Rightscale 6.3 64bit Centos AMI and Large Instances
-# brooklyn.location.named.aws-va-centos-large = jclouds:aws-ec2:us-east-1
-# brooklyn.location.named.aws-va-centos-large.imageId=us-east-1/ami-7d7bfc14
-# brooklyn.location.named.aws-va-centos-large.user=brooklyn
-# brooklyn.location.named.aws-va-centos-large.minRam=4096
-
-## You can also nest these:
-# brooklyn.location.named.aws-acct-two = jclouds:aws-ec2
-# brooklyn.location.named.aws-acct-two.identity = AKA_ACCT_TWO
-# brooklyn.location.named.aws-acct-two.credential = <access-key-hex-digits>
-# brooklyn.location.named.aws-acct-two-singapore = named:aws-acct-two
-# brooklyn.location.named.aws-acct-two-singapore.region = ap-southeast-1
-# brooklyn.location.named.aws-acct-two-singapore.displayName = AWS Singapore (Acct Two)
-
-# For convenience some common defaults:
-brooklyn.location.named.aws-california = jclouds:aws-ec2:us-west-1
-brooklyn.location.named.aws-oregon = jclouds:aws-ec2:us-west-2
-brooklyn.location.named.aws-ireland = jclouds:aws-ec2:eu-west-1
-brooklyn.location.named.aws-tokyo = jclouds:aws-ec2:ap-northeast-1
-
-## Google Compute
-## Note at present you have to create and download the P12 key from the Google "APIs & auth -> Registered Apps" interface,
-## then convert to PEM private key format using  `openssl pkcs12 -in Certificates.p12 -out Certificates.pem -nodes`
-## then embed that on one line as the 'credential, replacing new lines with \n as below
-## (hopefully this will be improved in jclouds in the future)
-# brooklyn.location.jclouds.google-compute-engine.identity=1234567890-somet1mesArand0mU1Dhere@developer.gserviceaccount.com
-# brooklyn.location.jclouds.google-compute-engine.credential=-----BEGIN PRIVATE KEY----- \nMIIblahablahblah \nblahblahblah \n-----END PRIVATE KEY-----
-# brooklyn.location.named.Google\ US = jclouds:google-compute-engine
-# brooklyn.location.named.Google\ US.region=us-central1-a
-# brooklyn.location.named.Google\ EU = jclouds:google-compute-engine
-# brooklyn.location.named.Google\ EU.region=europe-west1-a
-## the following flags for GCE are recommended
-## specify the network to use - otherwise it creates new networks each time and you hit quotas pretty quickly
-## you may have to manually create this network AND enable a firewall rule EG  tcp:1-65535;udp:1-65535;icmp  
-## (fix for this is in progress)
-# brooklyn.location.jclouds.google-compute-engine.networkName=brooklyn-default-network
-## gce images have bad entropy, this ensures they have noisy /dev/random (even if the "randomness" is not quite as random)
-# brooklyn.location.jclouds.google-compute-engine.installDevUrandom=true
-## gce images often start with iptables turned on; turn it off 
-# brooklyn.location.jclouds.google-compute-engine.stopIptables=true
-
-## HP Cloud - also Ubuntu 12.04 LTS
-## You specify your HP Credentials like this:
-# brooklyn.location.jclouds.hpcloud-compute.identity = projectname:username
-# brooklyn.location.jclouds.hpcloud-compute.credential = password
-## where username and password are the same as logging in to the web console, and
-## projectname can be found here: https://account.hpcloud.com/projects
-#�brooklyn.location.named.HP\ Cloud\ Arizona-1 = jclouds:hpcloud-compute:az-1.region-a.geo-1
-# brooklyn.location.named.HP\ Cloud\ Arizona-1.imageId = az-1.region-a.geo-1/75845
-# brooklyn.location.named.HP\ Cloud\ Arizona-1.user = ubuntu
-
-## Softlayer - need a key from the gui, under "administrative -> user administration -> api-access 
-# brooklyn.location.jclouds.softlayer.identity=username
-# brooklyn.location.jclouds.softlayer.credential=<private-key-hex-digits>
-## A sample good image, available in all regions
-# brooklyn.location.jclouds.softlayer.imageId=13945
-## locations
-# brooklyn.location.named.Softlayer\ Seattle=jclouds:softlayer:sea01
-# brooklyn.location.named.Softlayer\ Dallas=jclouds:softlayer:dal05
-# brooklyn.location.named.Softlayer\ Washington\ DC=jclouds:softlayer:wdc01
-# brooklyn.location.named.Softlayer\ Singapore\ 1=jclouds:softlayer:sng01
-# brooklyn.location.named.Softlayer\ Amsterdam\ 1=jclouds:softlayer:ams01
-
-
-## Brooklyn uses the jclouds multi-cloud library to access many clouds.
-## http://www.jclouds.org/documentation/reference/supported-providers/
-
-## Templates for many other clouds, but remember to add identity and credentials:
-
-# brooklyn.location.named.Bluelock = jclouds:bluelock-vcloud-zone01
-
-# brooklyn.location.named.CloudSigma\ Nevada = jclouds:cloudsigma-lvs
-# brooklyn.location.named.CloudSigma\ Zurich = jclouds:cloudsigma-zrh
-
-# brooklyn.location.named.ElasticHosts\ London = jclouds:elastichosts-lon-p
-# brooklyn.location.named.ElasticHosts\ Texas = jclouds:elastichosts-sat-p
-
-# brooklyn.location.named.GleSYS = jclouds:glesys
-
-# brooklyn.location.named.Go2Cloud = jclouds:go2cloud-jhb1
-
-# brooklyn.location.named.GoGrid = jclouds:gogrid
-
-# brooklyn.location.named.Green\ House\ Data = jclouds:greenhousedata-element-vcloud
-
-# brooklyn.location.named.Ninefold = jclouds:ninefold-compute
-
-# brooklyn.location.named.OpenHosting = jclouds:openhosting-east1
-
-# brooklyn.location.named.Rackspace\ Chicago\ (ord) = jclouds:rackspace-cloudservers-us:ORD
-# brooklyn.location.named.Rackspace\ Dallas\ (dfw) = jclouds:rackspace-cloudservers-us:DFW
-# brooklyn.location.named.Rackspace\ Hong\ Kong\ (hkg) = jclouds:rackspace-cloudservers-us:HKG
-# brooklyn.location.named.Rackspace\ Northern\ Virginia\ (iad) = jclouds:rackspace-cloudservers-us:IAD
-# brooklyn.location.named.Rackspace\ Sydney\ (syd) = jclouds:rackspace-cloudservers-us:SYD
-## for UK you will need a separate account with rackspace.co.uk
-# brooklyn.location.named.Rackspace\ London\ (lon) = jclouds:rackspace-cloudservers-uk
-
-## if you need to use Rackspace "first gen" API
-## (note the "next gen" api configured above seems to be faster)
-# brooklyn.location.jclouds.cloudservers-us.identity = YOURAPIKEY
-# brooklyn.location.jclouds.cloudservers-us.credential = YOURSECRETKEY
-# brooklyn.location.named.Rackspace\ US\ (First Gen) = jclouds:cloudservers-us
-## and as with next gen, first gen requires a separate acct for the UK:
-# brooklyn.location.jclouds.cloudservers-uk.identity = YOURAPIKEY
-# brooklyn.location.jclouds.cloudservers-uk.credential = YOURSECRETKEY
-# brooklyn.location.named.Rackspace\ UK\ (First Gen) = jclouds:cloudservers-uk
-
-# brooklyn.location.named.SeverLove = jclouds:serverlove-z1-man
-
-# brooklyn.location.named.SkaliCloud = jclouds:skalicloud-sdg-my
-
-# brooklyn.location.named.Stratogen = jclouds:stratogen-vcloud-mycloud
-
-# brooklyn.location.named.TryStack\ (Openstack) = jclouds:trystack-nova
-
-
-## Production pool of machines for my application (deploy to named:On-Prem\ Iron\ Example)
-# brooklyn.location.named.On-Prem\ Iron\ Example=byon:(hosts="10.9.1.1,10.9.1.2,produser2@10.9.2.{10,11,20-29}")
-# brooklyn.location.named.On-Prem\ Iron\ Example.user=produser1
-# brooklyn.location.named.On-Prem\ Iron\ Example.privateKeyFile=~/.ssh/produser_id_rsa
-# brooklyn.location.named.On-Prem\ Iron\ Example.privateKeyPassphrase=s3cr3tpassphrase
-
-## Various Private Clouds
-
-## openstack identity and credential are random strings of letters and numbers (TBC - still the case?)
-# brooklyn.location.named.My\ Openstack=jclouds:openstack-nova:https://9.9.9.9:9999/v2.0/
-
-## cloudstack identity and credential are rather long random strings of letters and numbers
-## you generate this in the cloudstack gui, under accounts, then "view users", then "generate key"
-## use the "api key" as the identity and "secret key" as the credential
-# brooklyn.location.named.My\ Cloudstack=jclouds:cloudstack:http://9.9.9.9:9999/client/api/
-
-## abiquo identity and credential are your login username/passed
-# brooklyn.location.named.My\ Abiquo=jclouds:abiquo:http://demonstration.abiquo.com/api/
-
-###############################  Formatting Guide  #######################################
-
-! Both # and ! mark lines as comments
-# The follow syntax are ALL valid.
-# example_key example_value
-# example_key : example_value
-# example_key = example_value
-# example_key=example_value
-
-# The backslash below tells Brooklyn to continue reading the value onto the next line.
-# example_key = A very \
-#          	long string!
-# Note all white space before 'long...' is ignored. Also '!' is kept as part of the string
-
-
-# Keys with spaces should be escaped with backslashes.
-# This is useful for named locations, as the name displayed in Brooklyn's web
-# interface is derived from the key name.
-# key\ with\ spaces = some\ value
-
-# Encoding for .properties must be ISO-8859-1, aka Latin-1.
-# All non-latin1 characters must be entered using unicode escape characters
-# polish_pangram = P\u00F3jd\u017A\u017Ce, ki\u0144 \
-#                  t\u0119 chmurno\u015B\u0107 w g\u0142\u0105b flaszy!
diff --git a/quickstart/catalog.xml b/quickstart/catalog.xml
deleted file mode 100644
index c9a2a4c..0000000
--- a/quickstart/catalog.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<catalog>

-    <name>Brooklyn Demos</name>

-

-

-    <template type="brooklyn.demo.WebClusterDatabaseExample" name="Demo Web Cluster with DB">

-      <description>Deploys a demonstration web application to a managed JBoss cluster with elasticity, persisting to a MySQL</description>

-      <iconUrl>http://downloads.cloudsoftcorp.com/brooklyn/catalog/logos/JBoss_by_Red_Hat.png</iconUrl>

-    </template>

-

-    <template type="brooklyn.demo.GlobalWebFabricExample" name="Demo GeoDNS Web Fabric DB">

-      <description>Deploys a demonstration web application to JBoss clusters around the world</description>

-      <iconUrl>http://downloads.cloudsoftcorp.com/brooklyn/catalog/logos/JBoss_by_Red_Hat.png</iconUrl>

-    </template>

-    

-    <classpath>

-      <entry>https://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&amp;g=io.brooklyn.example&amp;a=brooklyn-example-simple-web-cluster&amp;v=0.7.0-SNAPSHOT&amp;e=jar</entry> <!-- BROOKLYN_VERSION -->

-      <entry>https://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&amp;g=io.brooklyn.example&amp;a=brooklyn-example-global-web-fabric&amp;v=0.7.0-SNAPSHOT&amp;e=jar</entry> <!-- BROOKLYN_VERSION -->

-    </classpath>

-

-

-</catalog>

-

diff --git a/quickstart/images/add-application-catalog-web-cluster-with-db-large.png b/quickstart/images/add-application-catalog-web-cluster-with-db-large.png
deleted file mode 100644
index b566b1a..0000000
--- a/quickstart/images/add-application-catalog-web-cluster-with-db-large.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/add-application-catalog-web-cluster-with-db-location-large.png b/quickstart/images/add-application-catalog-web-cluster-with-db-location-large.png
deleted file mode 100644
index 05e9b0c..0000000
--- a/quickstart/images/add-application-catalog-web-cluster-with-db-location-large.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/add-application-catalog-web-cluster-with-db-location.png b/quickstart/images/add-application-catalog-web-cluster-with-db-location.png
deleted file mode 100644
index c13fdd8..0000000
--- a/quickstart/images/add-application-catalog-web-cluster-with-db-location.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/add-application-catalog-web-cluster-with-db.png b/quickstart/images/add-application-catalog-web-cluster-with-db.png
deleted file mode 100644
index ebb6f42..0000000
--- a/quickstart/images/add-application-catalog-web-cluster-with-db.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/add-application-modal-yaml.png b/quickstart/images/add-application-modal-yaml.png
deleted file mode 100644
index c50b7ab..0000000
--- a/quickstart/images/add-application-modal-yaml.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/jboss7-cluster-policies-large.png b/quickstart/images/jboss7-cluster-policies-large.png
deleted file mode 100644
index 3d84477..0000000
--- a/quickstart/images/jboss7-cluster-policies-large.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/jboss7-cluster-policies.png b/quickstart/images/jboss7-cluster-policies.png
deleted file mode 100644
index 2f85328..0000000
--- a/quickstart/images/jboss7-cluster-policies.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-db-activities-large.png b/quickstart/images/my-db-activities-large.png
deleted file mode 100644
index c214d9e..0000000
--- a/quickstart/images/my-db-activities-large.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-db-activities.png b/quickstart/images/my-db-activities.png
deleted file mode 100644
index 0f2327c..0000000
--- a/quickstart/images/my-db-activities.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-web-cluster-starting.png b/quickstart/images/my-web-cluster-starting.png
deleted file mode 100644
index c389b0b..0000000
--- a/quickstart/images/my-web-cluster-starting.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-web-cluster-stop-confirm-large.png b/quickstart/images/my-web-cluster-stop-confirm-large.png
deleted file mode 100644
index c9bdab6..0000000
--- a/quickstart/images/my-web-cluster-stop-confirm-large.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-web-cluster-stop-confirm.png b/quickstart/images/my-web-cluster-stop-confirm.png
deleted file mode 100644
index 179b00a..0000000
--- a/quickstart/images/my-web-cluster-stop-confirm.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-web-summary-large.png b/quickstart/images/my-web-summary-large.png
deleted file mode 100644
index fc4bffe..0000000
--- a/quickstart/images/my-web-summary-large.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-web-summary.png b/quickstart/images/my-web-summary.png
deleted file mode 100644
index e85752f..0000000
--- a/quickstart/images/my-web-summary.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/images/my-web.png b/quickstart/images/my-web.png
deleted file mode 100644
index 2bd6ac3..0000000
--- a/quickstart/images/my-web.png
+++ /dev/null
Binary files differ
diff --git a/quickstart/index.md b/quickstart/index.md
deleted file mode 100644
index 16c2c1f..0000000
--- a/quickstart/index.md
+++ /dev/null
@@ -1,215 +0,0 @@
----
-title: Getting Started
-layout: normal
-children:
-- { path: quickstart/policies-and-catalogs.md }
----
-
-This guide will walk you through deploying an application to a public cloud.
-
-We will be deploying an example 3-tier web application, described using this blueprint: 
-
-{% highlight yaml %}
-{% readj _my-web-cluster.yaml %}
-{% endhighlight %}
-
-(This is written in YAML, following the [camp specification](https://www.oasis-open.org/committees/camp/). )
-
-This tutorial assumes that you are using Linux or Mac OSX.
-
-
-## Verify SSH
-
-Brooklyn uses SSH extensively and therefore it is worth making sure that you have a known working SSH setup before
-starting.
-
-Please check the following items:
-
-- If you are using Mac OSX, open System Preferences, go to the Sharing item, and enable 'Remote Login'
-- You have a files named `~/.ssh/id_rsa` and `~/.ssh/id_rsa.pub`
-- `~/.ssh/id_rsa` is NOT readable by any other user
-  - You can verify this with `ls -l ~/.ssh/id_rsa` - the line should start with `-rw-------` or `-r--------`. If it
-    does not, execute `chmod 0600 ~/.ssh/id_rsa`.
-- The file `~/.ssh/authorized_keys` exists and contains a copy of your public key from `~/.ssh/id_rsa.pub`.
-  - Note that it is normal for it to contain other items as well.
-- The key in `~/.ssh/id_rsa` does *not* have a passphrase.
-  - You can test this by executing `ssh-keygen -y`. If it does *not* ask for a passphrase, then your key is OK.
-  - If your key does have a passphrase, remove it. You can do this by running `ssh-keygen -p`. Enter the passphrase,
-    then when prompted for the new passphrase, hit Enter.
-
-Now verify your setup by running the command: `ssh localhost echo hello world`
-
-If you see a message similar to this:
-
-<pre>
-The authenticity of host 'localhost (::1)' can't be established.
-RSA key fingerprint is 7b:e3:8e:c6:5b:2a:05:a1:7c:8a:cf:d1:6a:83:c2:ad.
-Are you sure you want to continue connecting (yes/no)?
-</pre>
-
-then answer 'yes', and then repeat the command run again.
-
-If the response is `hello world`, with no other output or prompts, then your SSH setup is good and Brooklyn should be
-able to use it without a problem.
-
-If these steps are not working, [these instructions]({{ site.data.brooklyn.url.userguide }}/use/guide/locations/) may be
-useful.
-
-
-## Install Brooklyn
-
-Download the [Brooklyn distribution]({{ site.data.brooklyn.url.dist.tgz }}) and expand it to your home directory ( `~/` ), or in a location of your choice. (Other [download options]({{site.url}}/download.html) are available.)
-
-{% if brooklyn_version contains 'SNAPSHOT' %}
-Expand the `tar.gz` archive (note: as this is a -SNAPSHOT version, your filename will be slightly different):
-{% else %}
-Expand the `tar.gz` archive:
-{% endif %}
-
-{% if brooklyn_version contains 'SNAPSHOT' %}
-{% highlight bash %}
-$ tar -zxf brooklyn-dist-{{ site.data.brooklyn.version }}-timestamp-dist.tar.gz
-{% endhighlight %}
-{% else %}
-{% highlight bash %}
-$ tar -zxf brooklyn-dist-{{ site.data.brooklyn.version }}-dist.tar.gz
-{% endhighlight %}
-{% endif %}
-
-This will create a `brooklyn-{{ site.data.brooklyn.version }}` folder.
-
-Note: You'll need a Java JRE or SDK installed (version 6 or later), as Brooklyn is Java under the covers.
-
-## Launch Brooklyn
-
-Let's setup some paths for easy commands.
-
-(Click the clipboard on these code snippets for easier c&p.)
-
-{% highlight bash %}
-$ cd brooklyn-{{ site.data.brooklyn.version }}
-$ BROOKLYN_DIR="$(pwd)"
-$ export PATH=$PATH:$BROOKLYN_DIR/bin/
-{% endhighlight %}
-
-We can do a quick test drive by launching Brooklyn:
-
-{% highlight bash %}
-$ brooklyn launch
-{% endhighlight %}
-
-Brooklyn will output the address of the management interface:
-
-
-`INFO  Starting brooklyn web-console on loopback interface because no security config is set`
-
-`INFO  Started Brooklyn console at http://127.0.0.1:8081/, running classpath://brooklyn.war and []`
-
-But before we really use Brooklyn, we need to setup some Locations.
- 
-Stop Brooklyn with ctrl-c.
-
-## Configuring a Location
-
-Brooklyn deploys applications to Locations.
-
-Locations can be clouds, machines with fixed IPs or localhost (for testing).
-
-Brooklyn loads Location configuration  from `~/.brooklyn/brooklyn.properties`. 
-
-Create a `.brooklyn` folder in your home directory and download the template [brooklyn.properties](brooklyn.properties) to that folder.
-
-{% highlight bash %}
-$ mkdir ~/.brooklyn
-$ cd ~/.brooklyn
-$ wget {{site.url}}/quickstart/brooklyn.properties
-{% endhighlight %}
-
-Open brooklyn.properties in a text editor and add your cloud credentials.
-
-Restart Brooklyn:
-
-{% highlight bash %}
-$ brooklyn launch
-{% endhighlight %}
-
-## Launching an Application
-
-There are several ways to deploy a YAML blueprint (including specifying the blueprint on the command line or submitting it via the REST API).
-
-For now, we will simply copy-and-paste the raw YAML blueprint into the web console.
-
-Open the web console ([127.0.0.1:8081](http://127.0.0.1:8081)). As Brooklyn is not currently managing any applications the 'Create Application' dialog opens automatically. Select the YAML tab.
-
-![Brooklyn web console, showing the YAML tab of the Add Application dialog.](images/add-application-modal-yaml.png)
-
-
-### Chose your Cloud / Location
-
-Let's look again at our YAML blueprint:
-
-{% highlight yaml %}
-{% readj _my-web-cluster.yaml %}
-{% endhighlight %}
-
-Copy this document into the large text box on the YAML tab, labelled `Enter CAMP Plan YAML code here`. But *before* you
-submit it, we need to make a modification.
-
-Find the line near the top of the blueprint that starts `location:`. Change the line to name a location. For example,
-one of these lines:
-
-{% highlight yaml %}
-location: aws-ec2:us-east-1
-location: rackspace-cloudservers-us:ORD
-location: google-compute-engine:europe-west1-a
-location: localhost
-{% endhighlight %}
-
-**My Web Cluster Blueprint**
-
-With the modified YAML in the dialog, click 'Finish'. The dialog will close and Brooklyn will begin deploying your
-application. Your application will be shown as 'Starting' on the web console's front page.
-
-![My Web Cluster is STARTING.](images/my-web-cluster-starting.png)
-
-
-## Monitoring and Managing Applications
-
-Click on the application name, or open the Applications tab.
-
-We can explore the management hierarchy of the application, which will show us the entities it is composed of.
-
- * My Web Cluster (A `BasicApplication`)
-     * My DB (A `MySqlNode`)
-     * My Web (A `ControlledDynamicWebAppCluster`)
-        * Cluster of JBoss7 Servers (A `DynamicWebAppCluster`)
-        * NginxController (An `NginxController`)
-
-
-
-Clicking on the 'My Web' entity will show the Summary tab. Here we can see if the cluster is ready to serve and, when ready, grab the web address for the front of the loadbalancer.
-
-![Exploring My Web.](images/my-web.png)
-
-
-The Activity tab allows us to drill down into what activities each entity is currently doing or has recently done. It is possible to drill down to all child tasks, and view the commands issued, and any errors or warnings that occured.
-
-Drill into the 'My DB' start operation. Working down through  'Start (processes)', then 'launch', we can discover the ssh command used including the stdin, stdout and stderr.
-
-[![My DB Activities.](images/my-db-activities.png)](images/my-db-activities-large.png)
-
-
-## Stopping the Application
-
-To stop an application, select the application in the tree view (the top/root entity), click on the Effectors tab, and invoke the 'Stop' effector. This will cleanly shutdown all components in the application and return any cloud machines that were being used.
-
-[![My DB Activities.](images/my-web-cluster-stop-confirm.png)](images/my-web-cluster-stop-confirm-large.png)
-
-
-### Next 
-
-So far we have touched on Brooklyn's ability to *deploy* an application blueprint to a cloud provider, but this a very small part of Brooklyn's capabilities!
-
-Brooklyn's real power is in using Policies to automatically *manage* applications. There is also the (very useful) ability to store a catalog of application blueprints, ready to go.
-
-[Getting Started - Policies and Catalogs](policies-and-catalogs.html)
diff --git a/quickstart/policies-and-catalogs.md b/quickstart/policies-and-catalogs.md
deleted file mode 100644
index 06c0d73..0000000
--- a/quickstart/policies-and-catalogs.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: Policies and Catalogs
-layout: normal
----
-
-In the [previous step](index.html) we downloaded Brooklyn and used it to deploy an application to a cloud, but at its heart Brooklyn is a policy driven *management* plane.
-
-Here we will introduce Polices using a simple demo app, which we will load from a Service Catalog.
-
-We strongly advise that you complete [the first tutorial](index.html) before proceeding with this one, to make sure that
-your machine is correctly configured to be able to run Brooklyn applications. Like the previous tutorial, we are also
-assuming that you are running Linux or Mac OSX.
-
-
-## Service Catalogs
-
-Download the template [catalog.xml](catalog.xml) to your `~/.brooklyn/` folder, and relaunch Brooklyn.
-
-{% highlight bash %}
-$ cd ~/.brooklyn
-$ wget {{site.data.brooklyn.url.userguide}}/use/guide/quickstart/catalog.xml
-
-$ brooklyn launch
-{% endhighlight %}
-
-Now when we open the web console, two applications are displayed from the catalog.
-
-Select the 'Demo Web Cluster with DB' and click 'Next'.
-
-[![Viewing Catalog entries in Add Application dialog.](images/add-application-catalog-web-cluster-with-db.png)](add-application-catalog-web-cluster-with-db-largea.png)
-
-Select the Location that Brooklyn should deploy to, and name your application:
-
-[![Selecting a location and application name.](images/add-application-catalog-web-cluster-with-db-location.png)](images/add-application-catalog-web-cluster-with-db-location-large.png)
-
-Click 'Finish' to launch the application as before.
-
-
-### Exploring and Testing Policies
-
-The Demo Web Cluster with DB application is pre-configured with two polices.
-
-The app server cluster has an `AutoScalerPolicy`, and the loadbalancer has a `targets` policy.
-
-Use the Applications tab in the web console to drill down into the Policies section of the ControlledDynamicWebAppCluster's Cluster of JBoss7Servers.
-
-You will see that the `AutoScalerPolicy` is running.
-
-[![Inspecting the jboss7 cluster policies.](images/jboss7-cluster-policies.png)](images/jboss7-cluster-policies-large.png)
-
-
-This policy automatically scales the cluster up or down to be the right size for the cluster's current load. (One server is the minimum size allowed by the policy.)
-
-The loadbalancer's `targets` policy ensures that the loadbalancer is updated as the cluster size changes.
-
-Sitting idle, this cluster will only contain one server, but you can use a tool like [jmeter](http://jmeter.apache.org/) pointed at the nginx endpoint to create load on the cluster. (Download a [jmeter test plan](https://github.com/brooklyncentral/brooklyn/blob/master/examples/simple-web-cluster/resources/jmeter-test-plan.jmx).)
-
-As load is added, Brooklyn requests a new cloud machine, creates a new app server, and adds it to the cluster. As load is removed, servers are removed from the cluster, and the infrastructure is handed back to the cloud.
-
-### Next
-
-The [Elastic Web Cluster Example]({{site.data.brooklyn.url.userguide}}/use/examples/webcluster/index.html) page
-details how to build this demo application from scratch in Java. It shows in more detail how Brooklyn can
-complement your application with policy driven management, and how applications can be
-run from the command line.
-
-
diff --git a/style/css/bootstrap-theme.css b/style/css/bootstrap-theme.css
deleted file mode 100644
index e09b49d..0000000
--- a/style/css/bootstrap-theme.css
+++ /dev/null
@@ -1,347 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-}
-.btn-default {
-  text-shadow: 0 1px 0 #fff;
-  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #dbdbdb;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
-  background-color: #e0e0e0;
-  background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
-  background-color: #e0e0e0;
-  border-color: #dbdbdb;
-}
-.btn-primary {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #3e8f3e;
-}
-.btn-primary:hover,
-.btn-primary:focus {
-  background-color: #419641;
-  background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #419641;
-  border-color: #3e8f3e;
-}
-.btn-success {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #2b669a;
-}
-.btn-success:hover,
-.btn-success:focus {
-  background-color: #2d6ca2;
-  background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #2d6ca2;
-  border-color: #2b669a;
-}
-.btn-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
-  background-color: #2aabd2;
-  background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #2aabd2;
-  border-color: #28a4c9;
-}
-.btn-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
-  background-color: #eb9316;
-  background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #eb9316;
-  border-color: #e38d13;
-}
-.btn-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
-  background-color: #c12e2a;
-  background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #c12e2a;
-  border-color: #b92c28;
-}
-.thumbnail,
-.img-thumbnail {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  background-color: #e8e8e8;
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  background-color: #4cae4c;
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #4cae4c 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #4cae4c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff4cae4c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.navbar-default {
-  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
-  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
-  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-.alert {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #b2dba1;
-}
-.alert-info {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #9acfea;
-}
-.alert-warning {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #f5e79e;
-}
-.alert-danger {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dca7a7;
-}
-.progress {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-success {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.list-group {
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 #449d44;
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #48a648 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #48a648 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff48a648', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #48a648;
-}
-.panel {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #4cae4c 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #4cae4c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff4cae4c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.well {
-  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dcdcdc;
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/style/css/new-style.css b/style/css/new-style.css
deleted file mode 100644
index d9ba412..0000000
--- a/style/css/new-style.css
+++ /dev/null
@@ -1,122 +0,0 @@
-a {
-  text-decoration: none;
-}
-a:hover {
- text-decoration: underline !important;
-}
-.topLevelSection {
-  width: 800px !important;
-  margin: 0 auto !important;
-}
-#topNav {
-  margin-top: 10px !important;
-  height: 45px;
-  position: relative;
-  background-image: url(../images/brooklyn-logo-150px.png), linear-gradient(to bottom, #fff 0%, #eee 100%);
-  background-origin: content-box, content-box;
-  background-position: 12px 8px, 0 0;
-  background-size: 148px 36px, 100% 100%;
-  background-repeat: no-repeat, repeat-x;
-  border: 1px solid #eee;
-  border-radius: 5px;
-  box-shadow: 0 8px 6px -6px #888;
-}
-#topNav ul {
-  position: absolute;
-  right: 10px;
-  top: 0;
-}
-#topNav a {
-  padding: 3px 10px;
-  margin: 0 5px;
-  border-radius: 5px;
-}
-#topNav a:hover {
-  background-color: #e0e7e0;
-  text-decoration: none !important;
-}
-#topNav li {
-  display: inline;
-  list-style-type: none;
-}
-#topNav li.active a {
-  background-color: #4a9e48;
-  color: #fff !important;
-}
-#jumbotron {
-  margin-top: 30px !important;
-  margin-bottom: 27px !important;
-  width: 403px !important; /* excludes padding and border */
-  height: 202px; /* excludes padding and border */
-  padding: 60px 20px 0 373px;
-  background-color: #e0e7e0;
-  background-image: url('../images/bridge-large-no-title.png');
-  background-repeat: no-repeat;
-  background-size: 342px 242px;
-  background-position: 10px center;
-  color: #809080;
-  border: 1px solid #d0e0d0;
-  font-size: 20pt;
-  text-align: center;
-  border-radius: 10px;
-  vertical-align: middle;
-}
-#elevatorPitch {
-  font-size: 12pt;
-  color: #777;
-  padding: 0;
-}
-#elevatorPitch p {
-  display: table-cell;
-  vertical-align: top;
-  width: 236px;
-  margin: 0;
-  padding: 5px 15px;
-  border-right: 1px solid #bbb;
-}
-#elevatorPitch p:last-of-type {
-  border-right: none;
-}
-#callsToAction {
-  text-align: center;
-  margin-top: 20px !important;
-}
-.callToAction {
-  display: inline-block;
-  position: relative;
-  width: 220px;
-  margin: 20px;
-  padding: 30px 0;
-  font-size: 14pt;
-  border-radius: 5px;
-  box-shadow: 0 12px 6px -6px #666;
-  border: 1px solid #484;
-  text-align: center;
-  vertical-align: middle;
-  background: linear-gradient(to bottom, #8a8 0%, #484 100%) repeat-x 0 0;
-  color: white;
-}
-.callToAction:hover {
-  background: linear-gradient(to bottom, #aca 0%, #696 100%) repeat-x 0 0;
-  border-color: #696;
-  text-decoration: none !important;
-}
-#footer {
-  margin-top: 40px !important;
-  position: relative;
-  height: 30pt !important;
-  line-height: 10pt;
-}
-#footer-license {
-  position: absolute;
-  left: 0;
-  top: 5px;
-  font-weight: bold;
-}
-#footer-ip {
-  position: absolute;
-  right: 0;
-  top: 5px;
-  text-align: right;
-}
-
diff --git a/style/css/theme.css b/style/css/theme.css
deleted file mode 100644
index 135c2b0..0000000
--- a/style/css/theme.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Sticky footer styles
--------------------------------------------------- */
-html {
-    position: relative;
-    min-height: 100%;
-}
-
-@media (min-width: 1200px) {
-    .slightlyNarrowContainer {
-        width: 970px;
-    }
-}
-
-.navbar-brand {
-    margin-top: -4px;
-    margin-left: -30px !important;
-}
-
-ul.nav li.dropdown:hover > ul.dropdown-menu {
-    display: block;
-}
-
-#apachebrooklynbanner {
-    background-image: url("../img/apache-brooklyn-logo-817px-wide.png");
-    background-repeat: no-repeat;
-    background-position: center;
-    width: 817px;
-    height: 99px;
-    margin-bottom: 50px;
-}
-
-#brooklynbridge {
-    background-image: url("../img/bridge-large-no-title.png");
-    background-repeat: no-repeat;
-    background-position: center;
-    width: 342px;
-    height: 242px;
-}
-
-#footer {
-    position: absolute;
-    bottom: 0;
-    width: 100%;
-    /* Set the fixed height of the footer here */
-    padding-top: 1em;
-    padding-bottom: 1em;
-    background-color: #f5f5f5;
-    text-align: center;
-}
diff --git a/style/fonts/glyphicons-halflings-regular.eot b/style/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index 4a4ca86..0000000
--- a/style/fonts/glyphicons-halflings-regular.eot
+++ /dev/null
Binary files differ
diff --git a/style/fonts/glyphicons-halflings-regular.svg b/style/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index e3e2dc7..0000000
--- a/style/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/style/fonts/glyphicons-halflings-regular.ttf b/style/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 67fa00b..0000000
--- a/style/fonts/glyphicons-halflings-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/style/fonts/glyphicons-halflings-regular.woff b/style/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 8c54182..0000000
--- a/style/fonts/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ
diff --git a/style/img/apache-brooklyn-logo-244px-wide.png b/style/img/apache-brooklyn-logo-244px-wide.png
deleted file mode 100644
index 7434e7a..0000000
--- a/style/img/apache-brooklyn-logo-244px-wide.png
+++ /dev/null
Binary files differ
diff --git a/style/img/apache-brooklyn-logo-817px-wide.png b/style/img/apache-brooklyn-logo-817px-wide.png
deleted file mode 100644
index 65cfff4..0000000
--- a/style/img/apache-brooklyn-logo-817px-wide.png
+++ /dev/null
Binary files differ
diff --git a/style/img/bridge-large-no-title.png b/style/img/bridge-large-no-title.png
deleted file mode 100644
index 0a7f878..0000000
--- a/style/img/bridge-large-no-title.png
+++ /dev/null
Binary files differ
diff --git a/style/js/selectNav.js b/style/js/selectNav.js
deleted file mode 100644
index 2c97d55..0000000
--- a/style/js/selectNav.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Add the 'active' class to the correct navbar item (<li>) according to the
-   global 'topLevelNav' variable defined by each page.
- */
-
-$(function() {
-    $('#topNav a').each(function(i) {
-        var $this = $(this);
-        if (topLevelNav == $this.text())
-            $this.parent().addClass('active');
-        else
-            $this.parent().removeClass('active');
-    });
-});
-
diff --git a/style/js/underscore-min.js b/style/js/underscore-min.js
deleted file mode 100644
index 11f1d96..0000000
--- a/style/js/underscore-min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-//     Underscore.js 1.7.0
-//     http://underscorejs.org
-//     (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-//     Underscore may be freely distributed under the MIT license.
-(function(){var n=this,t=n._,r=Array.prototype,e=Object.prototype,u=Function.prototype,i=r.push,a=r.slice,o=r.concat,l=e.toString,c=e.hasOwnProperty,f=Array.isArray,s=Object.keys,p=u.bind,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports._=h):n._=h,h.VERSION="1.7.0";var g=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}};h.iteratee=function(n,t,r){return null==n?h.identity:h.isFunction(n)?g(n,t,r):h.isObject(n)?h.matches(n):h.property(n)},h.each=h.forEach=function(n,t,r){if(null==n)return n;t=g(t,r);var e,u=n.length;if(u===+u)for(e=0;u>e;e++)t(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=function(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])<u?i=o+1:a=o}return i},h.toArray=function(n){return n?h.isArray(n)?a.call(n):n.length===+n.length?h.map(n,h.identity):h.values(n):[]},h.size=function(n){return null==n?0:n.length===+n.length?n.length:h.keys(n).length},h.partition=function(n,t,r){t=h.iteratee(t,r);var e=[],u=[];return h.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},h.first=h.head=h.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:0>t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.length-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.push(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.call(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r<arguments.length;)e.push(arguments[r++]);return n.apply(this,e)}},h.bindAll=function(n){var t,r,e=arguments.length;if(1>=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.defer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(arguments,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this);
-//# sourceMappingURL=underscore-min.map
\ No newline at end of file
diff --git a/style/js/underscore-min.map b/style/js/underscore-min.map
deleted file mode 100644
index 73c951e..0000000
--- a/style/js/underscore-min.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"underscore-min.js","sources":["underscore.js"],"names":["root","this","previousUnderscore","_","ArrayProto","Array","prototype","ObjProto","Object","FuncProto","Function","push","slice","concat","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","keys","nativeBind","bind","obj","_wrapped","exports","module","VERSION","createCallback","func","context","argCount","value","call","other","index","collection","accumulator","apply","arguments","iteratee","identity","isFunction","isObject","matches","property","each","forEach","i","length","map","collect","currentKey","results","reduceError","reduce","foldl","inject","memo","TypeError","reduceRight","foldr","find","detect","predicate","result","some","list","filter","select","reject","negate","every","all","any","contains","include","target","values","indexOf","invoke","method","args","isFunc","pluck","key","where","attrs","findWhere","max","computed","Infinity","lastComputed","min","shuffle","rand","set","shuffled","random","sample","n","guard","Math","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","has","indexBy","countBy","sortedIndex","array","low","high","mid","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","output","isArguments","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","item","j","zip","object","lastIndexOf","from","idx","range","start","stop","step","ceil","Ctor","bound","self","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","pairs","invert","functions","methods","names","extend","source","prop","pick","omit","String","defaults","clone","tap","interceptor","eq","aStack","bStack","className","aCtor","constructor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","name","isFinite","isNaN","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","pair","accum","floor","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","text","settings","oldSettings","matcher","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","define","amd"],"mappings":";;;;CAKC,WAMC,GAAIA,GAAOC,KAGPC,EAAqBF,EAAKG,EAG1BC,EAAaC,MAAMC,UAAWC,EAAWC,OAAOF,UAAWG,EAAYC,SAASJ,UAIlFK,EAAmBP,EAAWO,KAC9BC,EAAmBR,EAAWQ,MAC9BC,EAAmBT,EAAWS,OAC9BC,EAAmBP,EAASO,SAC5BC,EAAmBR,EAASQ,eAK5BC,EAAqBX,MAAMY,QAC3BC,EAAqBV,OAAOW,KAC5BC,EAAqBX,EAAUY,KAG7BlB,EAAI,SAASmB,GACf,MAAIA,aAAenB,GAAUmB,EACvBrB,eAAgBE,QACtBF,KAAKsB,SAAWD,GADiB,GAAInB,GAAEmB,GAOlB,oBAAZE,UACa,mBAAXC,SAA0BA,OAAOD,UAC1CA,QAAUC,OAAOD,QAAUrB,GAE7BqB,QAAQrB,EAAIA,GAEZH,EAAKG,EAAIA,EAIXA,EAAEuB,QAAU,OAKZ,IAAIC,GAAiB,SAASC,EAAMC,EAASC,GAC3C,GAAID,QAAiB,GAAG,MAAOD,EAC/B,QAAoB,MAAZE,EAAmB,EAAIA,GAC7B,IAAK,GAAG,MAAO,UAASC,GACtB,MAAOH,GAAKI,KAAKH,EAASE,GAE5B,KAAK,GAAG,MAAO,UAASA,EAAOE,GAC7B,MAAOL,GAAKI,KAAKH,EAASE,EAAOE,GAEnC,KAAK,GAAG,MAAO,UAASF,EAAOG,EAAOC,GACpC,MAAOP,GAAKI,KAAKH,EAASE,EAAOG,EAAOC,GAE1C,KAAK,GAAG,MAAO,UAASC,EAAaL,EAAOG,EAAOC,GACjD,MAAOP,GAAKI,KAAKH,EAASO,EAAaL,EAAOG,EAAOC,IAGzD,MAAO,YACL,MAAOP,GAAKS,MAAMR,EAASS,YAO/BnC,GAAEoC,SAAW,SAASR,EAAOF,EAASC,GACpC,MAAa,OAATC,EAAsB5B,EAAEqC,SACxBrC,EAAEsC,WAAWV,GAAeJ,EAAeI,EAAOF,EAASC,GAC3D3B,EAAEuC,SAASX,GAAe5B,EAAEwC,QAAQZ,GACjC5B,EAAEyC,SAASb,IASpB5B,EAAE0C,KAAO1C,EAAE2C,QAAU,SAASxB,EAAKiB,EAAUV,GAC3C,GAAW,MAAPP,EAAa,MAAOA,EACxBiB,GAAWZ,EAAeY,EAAUV,EACpC,IAAIkB,GAAGC,EAAS1B,EAAI0B,MACpB,IAAIA,KAAYA,EACd,IAAKD,EAAI,EAAOC,EAAJD,EAAYA,IACtBR,EAASjB,EAAIyB,GAAIA,EAAGzB,OAEjB,CACL,GAAIH,GAAOhB,EAAEgB,KAAKG,EAClB,KAAKyB,EAAI,EAAGC,EAAS7B,EAAK6B,OAAYA,EAAJD,EAAYA,IAC5CR,EAASjB,EAAIH,EAAK4B,IAAK5B,EAAK4B,GAAIzB,GAGpC,MAAOA,IAITnB,EAAE8C,IAAM9C,EAAE+C,QAAU,SAAS5B,EAAKiB,EAAUV,GAC1C,GAAW,MAAPP,EAAa,QACjBiB,GAAWpC,EAAEoC,SAASA,EAAUV,EAKhC,KAAK,GADDsB,GAHAhC,EAAOG,EAAI0B,UAAY1B,EAAI0B,QAAU7C,EAAEgB,KAAKG,GAC5C0B,GAAU7B,GAAQG,GAAK0B,OACvBI,EAAU/C,MAAM2C,GAEXd,EAAQ,EAAWc,EAARd,EAAgBA,IAClCiB,EAAahC,EAAOA,EAAKe,GAASA,EAClCkB,EAAQlB,GAASK,EAASjB,EAAI6B,GAAaA,EAAY7B,EAEzD,OAAO8B,GAGT,IAAIC,GAAc,6CAIlBlD,GAAEmD,OAASnD,EAAEoD,MAAQpD,EAAEqD,OAAS,SAASlC,EAAKiB,EAAUkB,EAAM5B,GACjD,MAAPP,IAAaA,MACjBiB,EAAWZ,EAAeY,EAAUV,EAAS,EAC7C,IAEesB,GAFXhC,EAAOG,EAAI0B,UAAY1B,EAAI0B,QAAU7C,EAAEgB,KAAKG,GAC5C0B,GAAU7B,GAAQG,GAAK0B,OACvBd,EAAQ,CACZ,IAAII,UAAUU,OAAS,EAAG,CACxB,IAAKA,EAAQ,KAAM,IAAIU,WAAUL,EACjCI,GAAOnC,EAAIH,EAAOA,EAAKe,KAAWA,KAEpC,KAAec,EAARd,EAAgBA,IACrBiB,EAAahC,EAAOA,EAAKe,GAASA,EAClCuB,EAAOlB,EAASkB,EAAMnC,EAAI6B,GAAaA,EAAY7B,EAErD,OAAOmC,IAITtD,EAAEwD,YAAcxD,EAAEyD,MAAQ,SAAStC,EAAKiB,EAAUkB,EAAM5B,GAC3C,MAAPP,IAAaA,MACjBiB,EAAWZ,EAAeY,EAAUV,EAAS,EAC7C,IAEIsB,GAFAhC,EAAOG,EAAI0B,UAAa1B,EAAI0B,QAAU7C,EAAEgB,KAAKG,GAC7CY,GAASf,GAAQG,GAAK0B,MAE1B,IAAIV,UAAUU,OAAS,EAAG,CACxB,IAAKd,EAAO,KAAM,IAAIwB,WAAUL,EAChCI,GAAOnC,EAAIH,EAAOA,IAAOe,KAAWA,GAEtC,KAAOA,KACLiB,EAAahC,EAAOA,EAAKe,GAASA,EAClCuB,EAAOlB,EAASkB,EAAMnC,EAAI6B,GAAaA,EAAY7B,EAErD,OAAOmC,IAITtD,EAAE0D,KAAO1D,EAAE2D,OAAS,SAASxC,EAAKyC,EAAWlC,GAC3C,GAAImC,EAQJ,OAPAD,GAAY5D,EAAEoC,SAASwB,EAAWlC,GAClC1B,EAAE8D,KAAK3C,EAAK,SAASS,EAAOG,EAAOgC,GACjC,MAAIH,GAAUhC,EAAOG,EAAOgC,IAC1BF,EAASjC,GACF,GAFT,SAKKiC,GAKT7D,EAAEgE,OAAShE,EAAEiE,OAAS,SAAS9C,EAAKyC,EAAWlC,GAC7C,GAAIuB,KACJ,OAAW,OAAP9B,EAAoB8B,GACxBW,EAAY5D,EAAEoC,SAASwB,EAAWlC,GAClC1B,EAAE0C,KAAKvB,EAAK,SAASS,EAAOG,EAAOgC,GAC7BH,EAAUhC,EAAOG,EAAOgC,IAAOd,EAAQzC,KAAKoB,KAE3CqB,IAITjD,EAAEkE,OAAS,SAAS/C,EAAKyC,EAAWlC,GAClC,MAAO1B,GAAEgE,OAAO7C,EAAKnB,EAAEmE,OAAOnE,EAAEoC,SAASwB,IAAalC,IAKxD1B,EAAEoE,MAAQpE,EAAEqE,IAAM,SAASlD,EAAKyC,EAAWlC,GACzC,GAAW,MAAPP,EAAa,OAAO,CACxByC,GAAY5D,EAAEoC,SAASwB,EAAWlC,EAClC,IAEIK,GAAOiB,EAFPhC,EAAOG,EAAI0B,UAAY1B,EAAI0B,QAAU7C,EAAEgB,KAAKG,GAC5C0B,GAAU7B,GAAQG,GAAK0B,MAE3B,KAAKd,EAAQ,EAAWc,EAARd,EAAgBA,IAE9B,GADAiB,EAAahC,EAAOA,EAAKe,GAASA,GAC7B6B,EAAUzC,EAAI6B,GAAaA,EAAY7B,GAAM,OAAO,CAE3D,QAAO,GAKTnB,EAAE8D,KAAO9D,EAAEsE,IAAM,SAASnD,EAAKyC,EAAWlC,GACxC,GAAW,MAAPP,EAAa,OAAO,CACxByC,GAAY5D,EAAEoC,SAASwB,EAAWlC,EAClC,IAEIK,GAAOiB,EAFPhC,EAAOG,EAAI0B,UAAY1B,EAAI0B,QAAU7C,EAAEgB,KAAKG,GAC5C0B,GAAU7B,GAAQG,GAAK0B,MAE3B,KAAKd,EAAQ,EAAWc,EAARd,EAAgBA,IAE9B,GADAiB,EAAahC,EAAOA,EAAKe,GAASA,EAC9B6B,EAAUzC,EAAI6B,GAAaA,EAAY7B,GAAM,OAAO,CAE1D,QAAO,GAKTnB,EAAEuE,SAAWvE,EAAEwE,QAAU,SAASrD,EAAKsD,GACrC,MAAW,OAAPtD,GAAoB,GACpBA,EAAI0B,UAAY1B,EAAI0B,SAAQ1B,EAAMnB,EAAE0E,OAAOvD,IACxCnB,EAAE2E,QAAQxD,EAAKsD,IAAW,IAInCzE,EAAE4E,OAAS,SAASzD,EAAK0D,GACvB,GAAIC,GAAOrE,EAAMoB,KAAKM,UAAW,GAC7B4C,EAAS/E,EAAEsC,WAAWuC,EAC1B,OAAO7E,GAAE8C,IAAI3B,EAAK,SAASS,GACzB,OAAQmD,EAASF,EAASjD,EAAMiD,IAAS3C,MAAMN,EAAOkD,MAK1D9E,EAAEgF,MAAQ,SAAS7D,EAAK8D,GACtB,MAAOjF,GAAE8C,IAAI3B,EAAKnB,EAAEyC,SAASwC,KAK/BjF,EAAEkF,MAAQ,SAAS/D,EAAKgE,GACtB,MAAOnF,GAAEgE,OAAO7C,EAAKnB,EAAEwC,QAAQ2C,KAKjCnF,EAAEoF,UAAY,SAASjE,EAAKgE,GAC1B,MAAOnF,GAAE0D,KAAKvC,EAAKnB,EAAEwC,QAAQ2C,KAI/BnF,EAAEqF,IAAM,SAASlE,EAAKiB,EAAUV,GAC9B,GACIE,GAAO0D,EADPzB,GAAU0B,IAAUC,GAAgBD,GAExC,IAAgB,MAAZnD,GAA2B,MAAPjB,EAAa,CACnCA,EAAMA,EAAI0B,UAAY1B,EAAI0B,OAAS1B,EAAMnB,EAAE0E,OAAOvD,EAClD,KAAK,GAAIyB,GAAI,EAAGC,EAAS1B,EAAI0B,OAAYA,EAAJD,EAAYA,IAC/ChB,EAAQT,EAAIyB,GACRhB,EAAQiC,IACVA,EAASjC,OAIbQ,GAAWpC,EAAEoC,SAASA,EAAUV,GAChC1B,EAAE0C,KAAKvB,EAAK,SAASS,EAAOG,EAAOgC,GACjCuB,EAAWlD,EAASR,EAAOG,EAAOgC,IAC9BuB,EAAWE,GAAgBF,KAAcC,KAAY1B,KAAY0B,OACnE1B,EAASjC,EACT4D,EAAeF,IAIrB,OAAOzB,IAIT7D,EAAEyF,IAAM,SAAStE,EAAKiB,EAAUV,GAC9B,GACIE,GAAO0D,EADPzB,EAAS0B,IAAUC,EAAeD,GAEtC,IAAgB,MAAZnD,GAA2B,MAAPjB,EAAa,CACnCA,EAAMA,EAAI0B,UAAY1B,EAAI0B,OAAS1B,EAAMnB,EAAE0E,OAAOvD,EAClD,KAAK,GAAIyB,GAAI,EAAGC,EAAS1B,EAAI0B,OAAYA,EAAJD,EAAYA,IAC/ChB,EAAQT,EAAIyB,GACAiB,EAARjC,IACFiC,EAASjC,OAIbQ,GAAWpC,EAAEoC,SAASA,EAAUV,GAChC1B,EAAE0C,KAAKvB,EAAK,SAASS,EAAOG,EAAOgC,GACjCuB,EAAWlD,EAASR,EAAOG,EAAOgC,IACnByB,EAAXF,GAAwCC,MAAbD,GAAoCC,MAAX1B,KACtDA,EAASjC,EACT4D,EAAeF,IAIrB,OAAOzB,IAKT7D,EAAE0F,QAAU,SAASvE,GAInB,IAAK,GAAewE,GAHhBC,EAAMzE,GAAOA,EAAI0B,UAAY1B,EAAI0B,OAAS1B,EAAMnB,EAAE0E,OAAOvD,GACzD0B,EAAS+C,EAAI/C,OACbgD,EAAW3F,MAAM2C,GACZd,EAAQ,EAAiBc,EAARd,EAAgBA,IACxC4D,EAAO3F,EAAE8F,OAAO,EAAG/D,GACf4D,IAAS5D,IAAO8D,EAAS9D,GAAS8D,EAASF,IAC/CE,EAASF,GAAQC,EAAI7D,EAEvB,OAAO8D,IAMT7F,EAAE+F,OAAS,SAAS5E,EAAK6E,EAAGC,GAC1B,MAAS,OAALD,GAAaC,GACX9E,EAAI0B,UAAY1B,EAAI0B,SAAQ1B,EAAMnB,EAAE0E,OAAOvD,IACxCA,EAAInB,EAAE8F,OAAO3E,EAAI0B,OAAS,KAE5B7C,EAAE0F,QAAQvE,GAAKV,MAAM,EAAGyF,KAAKb,IAAI,EAAGW,KAI7ChG,EAAEmG,OAAS,SAAShF,EAAKiB,EAAUV,GAEjC,MADAU,GAAWpC,EAAEoC,SAASA,EAAUV,GACzB1B,EAAEgF,MAAMhF,EAAE8C,IAAI3B,EAAK,SAASS,EAAOG,EAAOgC,GAC/C,OACEnC,MAAOA,EACPG,MAAOA,EACPqE,SAAUhE,EAASR,EAAOG,EAAOgC,MAElCsC,KAAK,SAASC,EAAMC,GACrB,GAAIC,GAAIF,EAAKF,SACTK,EAAIF,EAAMH,QACd,IAAII,IAAMC,EAAG,CACX,GAAID,EAAIC,GAAKD,QAAW,GAAG,MAAO,EAClC,IAAQC,EAAJD,GAASC,QAAW,GAAG,OAAQ,EAErC,MAAOH,GAAKvE,MAAQwE,EAAMxE,QACxB,SAIN,IAAI2E,GAAQ,SAASC,GACnB,MAAO,UAASxF,EAAKiB,EAAUV,GAC7B,GAAImC,KAMJ,OALAzB,GAAWpC,EAAEoC,SAASA,EAAUV,GAChC1B,EAAE0C,KAAKvB,EAAK,SAASS,EAAOG,GAC1B,GAAIkD,GAAM7C,EAASR,EAAOG,EAAOZ,EACjCwF,GAAS9C,EAAQjC,EAAOqD,KAEnBpB,GAMX7D,GAAE4G,QAAUF,EAAM,SAAS7C,EAAQjC,EAAOqD,GACpCjF,EAAE6G,IAAIhD,EAAQoB,GAAMpB,EAAOoB,GAAKzE,KAAKoB,GAAaiC,EAAOoB,IAAQrD,KAKvE5B,EAAE8G,QAAUJ,EAAM,SAAS7C,EAAQjC,EAAOqD,GACxCpB,EAAOoB,GAAOrD,IAMhB5B,EAAE+G,QAAUL,EAAM,SAAS7C,EAAQjC,EAAOqD,GACpCjF,EAAE6G,IAAIhD,EAAQoB,GAAMpB,EAAOoB,KAAapB,EAAOoB,GAAO,IAK5DjF,EAAEgH,YAAc,SAASC,EAAO9F,EAAKiB,EAAUV,GAC7CU,EAAWpC,EAAEoC,SAASA,EAAUV,EAAS,EAGzC,KAFA,GAAIE,GAAQQ,EAASjB,GACjB+F,EAAM,EAAGC,EAAOF,EAAMpE,OACbsE,EAAND,GAAY,CACjB,GAAIE,GAAMF,EAAMC,IAAS,CACrB/E,GAAS6E,EAAMG,IAAQxF,EAAOsF,EAAME,EAAM,EAAQD,EAAOC,EAE/D,MAAOF,IAITlH,EAAEqH,QAAU,SAASlG,GACnB,MAAKA,GACDnB,EAAEc,QAAQK,GAAaV,EAAMoB,KAAKV,GAClCA,EAAI0B,UAAY1B,EAAI0B,OAAe7C,EAAE8C,IAAI3B,EAAKnB,EAAEqC,UAC7CrC,EAAE0E,OAAOvD,OAIlBnB,EAAEsH,KAAO,SAASnG,GAChB,MAAW,OAAPA,EAAoB,EACjBA,EAAI0B,UAAY1B,EAAI0B,OAAS1B,EAAI0B,OAAS7C,EAAEgB,KAAKG,GAAK0B,QAK/D7C,EAAEuH,UAAY,SAASpG,EAAKyC,EAAWlC,GACrCkC,EAAY5D,EAAEoC,SAASwB,EAAWlC,EAClC,IAAI8F,MAAWC,IAIf,OAHAzH,GAAE0C,KAAKvB,EAAK,SAASS,EAAOqD,EAAK9D,IAC9ByC,EAAUhC,EAAOqD,EAAK9D,GAAOqG,EAAOC,GAAMjH,KAAKoB,MAE1C4F,EAAMC,IAShBzH,EAAE0H,MAAQ1H,EAAE2H,KAAO3H,EAAE4H,KAAO,SAASX,EAAOjB,EAAGC,GAC7C,MAAa,OAATgB,MAA2B,GACtB,MAALjB,GAAaC,EAAcgB,EAAM,GAC7B,EAAJjB,KACGvF,EAAMoB,KAAKoF,EAAO,EAAGjB,IAO9BhG,EAAE6H,QAAU,SAASZ,EAAOjB,EAAGC,GAC7B,MAAOxF,GAAMoB,KAAKoF,EAAO,EAAGf,KAAKb,IAAI,EAAG4B,EAAMpE,QAAe,MAALmD,GAAaC,EAAQ,EAAID,MAKnFhG,EAAE8H,KAAO,SAASb,EAAOjB,EAAGC,GAC1B,MAAa,OAATgB,MAA2B,GACtB,MAALjB,GAAaC,EAAcgB,EAAMA,EAAMpE,OAAS,GAC7CpC,EAAMoB,KAAKoF,EAAOf,KAAKb,IAAI4B,EAAMpE,OAASmD,EAAG,KAOtDhG,EAAE+H,KAAO/H,EAAEgI,KAAOhI,EAAEiI,KAAO,SAAShB,EAAOjB,EAAGC,GAC5C,MAAOxF,GAAMoB,KAAKoF,EAAY,MAALjB,GAAaC,EAAQ,EAAID,IAIpDhG,EAAEkI,QAAU,SAASjB,GACnB,MAAOjH,GAAEgE,OAAOiD,EAAOjH,EAAEqC,UAI3B,IAAI8F,GAAU,SAASC,EAAOC,EAASC,EAAQC,GAC7C,GAAIF,GAAWrI,EAAEoE,MAAMgE,EAAOpI,EAAEc,SAC9B,MAAOJ,GAAOwB,MAAMqG,EAAQH,EAE9B,KAAK,GAAIxF,GAAI,EAAGC,EAASuF,EAAMvF,OAAYA,EAAJD,EAAYA,IAAK,CACtD,GAAIhB,GAAQwG,EAAMxF,EACb5C,GAAEc,QAAQc,IAAW5B,EAAEwI,YAAY5G,GAE7ByG,EACT7H,EAAK0B,MAAMqG,EAAQ3G,GAEnBuG,EAAQvG,EAAOyG,EAASC,EAAQC,GAJ3BD,GAAQC,EAAO/H,KAAKoB,GAO7B,MAAO2G,GAITvI,GAAEmI,QAAU,SAASlB,EAAOoB,GAC1B,MAAOF,GAAQlB,EAAOoB,GAAS,OAIjCrI,EAAEyI,QAAU,SAASxB,GACnB,MAAOjH,GAAE0I,WAAWzB,EAAOxG,EAAMoB,KAAKM,UAAW,KAMnDnC,EAAE2I,KAAO3I,EAAE4I,OAAS,SAAS3B,EAAO4B,EAAUzG,EAAUV,GACtD,GAAa,MAATuF,EAAe,QACdjH,GAAE8I,UAAUD,KACfnH,EAAUU,EACVA,EAAWyG,EACXA,GAAW,GAEG,MAAZzG,IAAkBA,EAAWpC,EAAEoC,SAASA,EAAUV,GAGtD,KAAK,GAFDmC,MACAkF,KACKnG,EAAI,EAAGC,EAASoE,EAAMpE,OAAYA,EAAJD,EAAYA,IAAK,CACtD,GAAIhB,GAAQqF,EAAMrE,EAClB,IAAIiG,EACGjG,GAAKmG,IAASnH,GAAOiC,EAAOrD,KAAKoB,GACtCmH,EAAOnH,MACF,IAAIQ,EAAU,CACnB,GAAIkD,GAAWlD,EAASR,EAAOgB,EAAGqE,EAC9BjH,GAAE2E,QAAQoE,EAAMzD,GAAY,IAC9ByD,EAAKvI,KAAK8E,GACVzB,EAAOrD,KAAKoB,QAEL5B,GAAE2E,QAAQd,EAAQjC,GAAS,GACpCiC,EAAOrD,KAAKoB,GAGhB,MAAOiC,IAKT7D,EAAEgJ,MAAQ,WACR,MAAOhJ,GAAE2I,KAAKR,EAAQhG,WAAW,GAAM,QAKzCnC,EAAEiJ,aAAe,SAAShC,GACxB,GAAa,MAATA,EAAe,QAGnB,KAAK,GAFDpD,MACAqF,EAAa/G,UAAUU,OAClBD,EAAI,EAAGC,EAASoE,EAAMpE,OAAYA,EAAJD,EAAYA,IAAK,CACtD,GAAIuG,GAAOlC,EAAMrE,EACjB,KAAI5C,EAAEuE,SAASV,EAAQsF,GAAvB,CACA,IAAK,GAAIC,GAAI,EAAOF,EAAJE,GACTpJ,EAAEuE,SAASpC,UAAUiH,GAAID,GADAC,KAG5BA,IAAMF,GAAYrF,EAAOrD,KAAK2I,IAEpC,MAAOtF,IAKT7D,EAAE0I,WAAa,SAASzB,GACtB,GAAIc,GAAOI,EAAQ1H,EAAMoB,KAAKM,UAAW,IAAI,GAAM,KACnD,OAAOnC,GAAEgE,OAAOiD,EAAO,SAASrF,GAC9B,OAAQ5B,EAAEuE,SAASwD,EAAMnG,MAM7B5B,EAAEqJ,IAAM,SAASpC,GACf,GAAa,MAATA,EAAe,QAGnB,KAAK,GAFDpE,GAAS7C,EAAEqF,IAAIlD,UAAW,UAAUU,OACpCI,EAAU/C,MAAM2C,GACXD,EAAI,EAAOC,EAAJD,EAAYA,IAC1BK,EAAQL,GAAK5C,EAAEgF,MAAM7C,UAAWS,EAElC,OAAOK,IAMTjD,EAAEsJ,OAAS,SAASvF,EAAMW,GACxB,GAAY,MAARX,EAAc,QAElB,KAAK,GADDF,MACKjB,EAAI,EAAGC,EAASkB,EAAKlB,OAAYA,EAAJD,EAAYA,IAC5C8B,EACFb,EAAOE,EAAKnB,IAAM8B,EAAO9B,GAEzBiB,EAAOE,EAAKnB,GAAG,IAAMmB,EAAKnB,GAAG,EAGjC,OAAOiB,IAOT7D,EAAE2E,QAAU,SAASsC,EAAOkC,EAAMN,GAChC,GAAa,MAAT5B,EAAe,OAAQ,CAC3B,IAAIrE,GAAI,EAAGC,EAASoE,EAAMpE,MAC1B,IAAIgG,EAAU,CACZ,GAAuB,gBAAZA,GAIT,MADAjG,GAAI5C,EAAEgH,YAAYC,EAAOkC,GAClBlC,EAAMrE,KAAOuG,EAAOvG,GAAK,CAHhCA,GAAe,EAAXiG,EAAe3C,KAAKb,IAAI,EAAGxC,EAASgG,GAAYA,EAMxD,KAAWhG,EAAJD,EAAYA,IAAK,GAAIqE,EAAMrE,KAAOuG,EAAM,MAAOvG,EACtD,QAAQ,GAGV5C,EAAEuJ,YAAc,SAAStC,EAAOkC,EAAMK,GACpC,GAAa,MAATvC,EAAe,OAAQ,CAC3B,IAAIwC,GAAMxC,EAAMpE,MAIhB,KAHmB,gBAAR2G,KACTC,EAAa,EAAPD,EAAWC,EAAMD,EAAO,EAAItD,KAAKT,IAAIgE,EAAKD,EAAO,MAEhDC,GAAO,GAAG,GAAIxC,EAAMwC,KAASN,EAAM,MAAOM,EACnD,QAAQ,GAMVzJ,EAAE0J,MAAQ,SAASC,EAAOC,EAAMC,GAC1B1H,UAAUU,QAAU,IACtB+G,EAAOD,GAAS,EAChBA,EAAQ,GAEVE,EAAOA,GAAQ,CAKf,KAAK,GAHDhH,GAASqD,KAAKb,IAAIa,KAAK4D,MAAMF,EAAOD,GAASE,GAAO,GACpDH,EAAQxJ,MAAM2C,GAET4G,EAAM,EAAS5G,EAAN4G,EAAcA,IAAOE,GAASE,EAC9CH,EAAMD,GAAOE,CAGf,OAAOD,GAOT,IAAIK,GAAO,YAKX/J,GAAEkB,KAAO,SAASO,EAAMC,GACtB,GAAIoD,GAAMkF,CACV,IAAI/I,GAAcQ,EAAKP,OAASD,EAAY,MAAOA,GAAWiB,MAAMT,EAAMhB,EAAMoB,KAAKM,UAAW,GAChG,KAAKnC,EAAEsC,WAAWb,GAAO,KAAM,IAAI8B,WAAU,oCAW7C,OAVAuB,GAAOrE,EAAMoB,KAAKM,UAAW,GAC7B6H,EAAQ,WACN,KAAMlK,eAAgBkK,IAAQ,MAAOvI,GAAKS,MAAMR,EAASoD,EAAKpE,OAAOD,EAAMoB,KAAKM,YAChF4H,GAAK5J,UAAYsB,EAAKtB,SACtB,IAAI8J,GAAO,GAAIF,EACfA,GAAK5J,UAAY,IACjB,IAAI0D,GAASpC,EAAKS,MAAM+H,EAAMnF,EAAKpE,OAAOD,EAAMoB,KAAKM,YACrD,OAAInC,GAAEuC,SAASsB,GAAgBA,EACxBoG,IAQXjK,EAAEkK,QAAU,SAASzI,GACnB,GAAI0I,GAAY1J,EAAMoB,KAAKM,UAAW,EACtC,OAAO,YAGL,IAAK,GAFDiI,GAAW,EACXtF,EAAOqF,EAAU1J,QACZmC,EAAI,EAAGC,EAASiC,EAAKjC,OAAYA,EAAJD,EAAYA,IAC5CkC,EAAKlC,KAAO5C,IAAG8E,EAAKlC,GAAKT,UAAUiI,KAEzC,MAAOA,EAAWjI,UAAUU,QAAQiC,EAAKtE,KAAK2B,UAAUiI,KACxD,OAAO3I,GAAKS,MAAMpC,KAAMgF,KAO5B9E,EAAEqK,QAAU,SAASlJ,GACnB,GAAIyB,GAA8BqC,EAA3BpC,EAASV,UAAUU,MAC1B,IAAc,GAAVA,EAAa,KAAM,IAAIyH,OAAM,wCACjC,KAAK1H,EAAI,EAAOC,EAAJD,EAAYA,IACtBqC,EAAM9C,UAAUS,GAChBzB,EAAI8D,GAAOjF,EAAEkB,KAAKC,EAAI8D,GAAM9D,EAE9B,OAAOA,IAITnB,EAAEuK,QAAU,SAAS9I,EAAM+I,GACzB,GAAID,GAAU,SAAStF,GACrB,GAAIwF,GAAQF,EAAQE,MAChBC,EAAUF,EAASA,EAAOtI,MAAMpC,KAAMqC,WAAa8C,CAEvD,OADKjF,GAAE6G,IAAI4D,EAAOC,KAAUD,EAAMC,GAAWjJ,EAAKS,MAAMpC,KAAMqC,YACvDsI,EAAMC,GAGf,OADAH,GAAQE,SACDF,GAKTvK,EAAE2K,MAAQ,SAASlJ,EAAMmJ,GACvB,GAAI9F,GAAOrE,EAAMoB,KAAKM,UAAW,EACjC,OAAO0I,YAAW,WAChB,MAAOpJ,GAAKS,MAAM,KAAM4C,IACvB8F,IAKL5K,EAAE8K,MAAQ,SAASrJ,GACjB,MAAOzB,GAAE2K,MAAMzI,MAAMlC,GAAIyB,EAAM,GAAGf,OAAOD,EAAMoB,KAAKM,UAAW,MAQjEnC,EAAE+K,SAAW,SAAStJ,EAAMmJ,EAAMI,GAChC,GAAItJ,GAASoD,EAAMjB,EACfoH,EAAU,KACVC,EAAW,CACVF,KAASA,KACd,IAAIG,GAAQ,WACVD,EAAWF,EAAQI,WAAY,EAAQ,EAAIpL,EAAEqL,MAC7CJ,EAAU,KACVpH,EAASpC,EAAKS,MAAMR,EAASoD,GACxBmG,IAASvJ,EAAUoD,EAAO,MAEjC,OAAO,YACL,GAAIuG,GAAMrL,EAAEqL,KACPH,IAAYF,EAAQI,WAAY,IAAOF,EAAWG,EACvD,IAAIC,GAAYV,GAAQS,EAAMH,EAY9B,OAXAxJ,GAAU5B,KACVgF,EAAO3C,UACU,GAAbmJ,GAAkBA,EAAYV,GAChCW,aAAaN,GACbA,EAAU,KACVC,EAAWG,EACXxH,EAASpC,EAAKS,MAAMR,EAASoD,GACxBmG,IAASvJ,EAAUoD,EAAO,OACrBmG,GAAWD,EAAQQ,YAAa,IAC1CP,EAAUJ,WAAWM,EAAOG,IAEvBzH,IAQX7D,EAAEyL,SAAW,SAAShK,EAAMmJ,EAAMc,GAChC,GAAIT,GAASnG,EAAMpD,EAASiK,EAAW9H,EAEnCsH,EAAQ,WACV,GAAIrD,GAAO9H,EAAEqL,MAAQM,CAEVf,GAAP9C,GAAeA,EAAO,EACxBmD,EAAUJ,WAAWM,EAAOP,EAAO9C,IAEnCmD,EAAU,KACLS,IACH7H,EAASpC,EAAKS,MAAMR,EAASoD,GACxBmG,IAASvJ,EAAUoD,EAAO,QAKrC,OAAO,YACLpD,EAAU5B,KACVgF,EAAO3C,UACPwJ,EAAY3L,EAAEqL,KACd,IAAIO,GAAUF,IAAcT,CAO5B,OANKA,KAASA,EAAUJ,WAAWM,EAAOP,IACtCgB,IACF/H,EAASpC,EAAKS,MAAMR,EAASoD,GAC7BpD,EAAUoD,EAAO,MAGZjB,IAOX7D,EAAE6L,KAAO,SAASpK,EAAMqK,GACtB,MAAO9L,GAAEkK,QAAQ4B,EAASrK,IAI5BzB,EAAEmE,OAAS,SAASP,GAClB,MAAO,YACL,OAAQA,EAAU1B,MAAMpC,KAAMqC,aAMlCnC,EAAE+L,QAAU,WACV,GAAIjH,GAAO3C,UACPwH,EAAQ7E,EAAKjC,OAAS,CAC1B,OAAO,YAGL,IAFA,GAAID,GAAI+G,EACJ9F,EAASiB,EAAK6E,GAAOzH,MAAMpC,KAAMqC,WAC9BS,KAAKiB,EAASiB,EAAKlC,GAAGf,KAAK/B,KAAM+D,EACxC,OAAOA,KAKX7D,EAAEgM,MAAQ,SAASC,EAAOxK,GACxB,MAAO,YACL,QAAMwK,EAAQ,EACLxK,EAAKS,MAAMpC,KAAMqC,WAD1B,SAOJnC,EAAEkM,OAAS,SAASD,EAAOxK,GACzB,GAAI6B,EACJ,OAAO,YAML,QALM2I,EAAQ,EACZ3I,EAAO7B,EAAKS,MAAMpC,KAAMqC,WAExBV,EAAO,KAEF6B,IAMXtD,EAAEmM,KAAOnM,EAAEkK,QAAQlK,EAAEkM,OAAQ,GAO7BlM,EAAEgB,KAAO,SAASG,GAChB,IAAKnB,EAAEuC,SAASpB,GAAM,QACtB,IAAIJ,EAAY,MAAOA,GAAWI,EAClC,IAAIH,KACJ,KAAK,GAAIiE,KAAO9D,GAASnB,EAAE6G,IAAI1F,EAAK8D,IAAMjE,EAAKR,KAAKyE,EACpD,OAAOjE,IAIThB,EAAE0E,OAAS,SAASvD,GAIlB,IAAK,GAHDH,GAAOhB,EAAEgB,KAAKG,GACd0B,EAAS7B,EAAK6B,OACd6B,EAASxE,MAAM2C,GACVD,EAAI,EAAOC,EAAJD,EAAYA,IAC1B8B,EAAO9B,GAAKzB,EAAIH,EAAK4B,GAEvB,OAAO8B,IAIT1E,EAAEoM,MAAQ,SAASjL,GAIjB,IAAK,GAHDH,GAAOhB,EAAEgB,KAAKG,GACd0B,EAAS7B,EAAK6B,OACduJ,EAAQlM,MAAM2C,GACTD,EAAI,EAAOC,EAAJD,EAAYA,IAC1BwJ,EAAMxJ,IAAM5B,EAAK4B,GAAIzB,EAAIH,EAAK4B,IAEhC,OAAOwJ,IAITpM,EAAEqM,OAAS,SAASlL,GAGlB,IAAK,GAFD0C,MACA7C,EAAOhB,EAAEgB,KAAKG,GACTyB,EAAI,EAAGC,EAAS7B,EAAK6B,OAAYA,EAAJD,EAAYA,IAChDiB,EAAO1C,EAAIH,EAAK4B,KAAO5B,EAAK4B,EAE9B,OAAOiB,IAKT7D,EAAEsM,UAAYtM,EAAEuM,QAAU,SAASpL,GACjC,GAAIqL,KACJ,KAAK,GAAIvH,KAAO9D,GACVnB,EAAEsC,WAAWnB,EAAI8D,KAAOuH,EAAMhM,KAAKyE,EAEzC,OAAOuH,GAAMnG,QAIfrG,EAAEyM,OAAS,SAAStL,GAClB,IAAKnB,EAAEuC,SAASpB,GAAM,MAAOA,EAE7B,KAAK,GADDuL,GAAQC,EACH/J,EAAI,EAAGC,EAASV,UAAUU,OAAYA,EAAJD,EAAYA,IAAK,CAC1D8J,EAASvK,UAAUS,EACnB,KAAK+J,IAAQD,GACP9L,EAAeiB,KAAK6K,EAAQC,KAC5BxL,EAAIwL,GAAQD,EAAOC,IAI3B,MAAOxL,IAITnB,EAAE4M,KAAO,SAASzL,EAAKiB,EAAUV,GAC/B,GAAiBuD,GAAbpB,IACJ,IAAW,MAAP1C,EAAa,MAAO0C,EACxB,IAAI7D,EAAEsC,WAAWF,GAAW,CAC1BA,EAAWZ,EAAeY,EAAUV,EACpC,KAAKuD,IAAO9D,GAAK,CACf,GAAIS,GAAQT,EAAI8D,EACZ7C,GAASR,EAAOqD,EAAK9D,KAAM0C,EAAOoB,GAAOrD,QAE1C,CACL,GAAIZ,GAAON,EAAOwB,SAAUzB,EAAMoB,KAAKM,UAAW,GAClDhB,GAAM,GAAId,QAAOc,EACjB,KAAK,GAAIyB,GAAI,EAAGC,EAAS7B,EAAK6B,OAAYA,EAAJD,EAAYA,IAChDqC,EAAMjE,EAAK4B,GACPqC,IAAO9D,KAAK0C,EAAOoB,GAAO9D,EAAI8D,IAGtC,MAAOpB,IAIT7D,EAAE6M,KAAO,SAAS1L,EAAKiB,EAAUV,GAC/B,GAAI1B,EAAEsC,WAAWF,GACfA,EAAWpC,EAAEmE,OAAO/B,OACf,CACL,GAAIpB,GAAOhB,EAAE8C,IAAIpC,EAAOwB,SAAUzB,EAAMoB,KAAKM,UAAW,IAAK2K,OAC7D1K,GAAW,SAASR,EAAOqD,GACzB,OAAQjF,EAAEuE,SAASvD,EAAMiE,IAG7B,MAAOjF,GAAE4M,KAAKzL,EAAKiB,EAAUV,IAI/B1B,EAAE+M,SAAW,SAAS5L,GACpB,IAAKnB,EAAEuC,SAASpB,GAAM,MAAOA,EAC7B,KAAK,GAAIyB,GAAI,EAAGC,EAASV,UAAUU,OAAYA,EAAJD,EAAYA,IAAK,CAC1D,GAAI8J,GAASvK,UAAUS,EACvB,KAAK,GAAI+J,KAAQD,GACXvL,EAAIwL,SAAe,KAAGxL,EAAIwL,GAAQD,EAAOC,IAGjD,MAAOxL,IAITnB,EAAEgN,MAAQ,SAAS7L,GACjB,MAAKnB,GAAEuC,SAASpB,GACTnB,EAAEc,QAAQK,GAAOA,EAAIV,QAAUT,EAAEyM,UAAWtL,GADtBA,GAO/BnB,EAAEiN,IAAM,SAAS9L,EAAK+L,GAEpB,MADAA,GAAY/L,GACLA,EAIT,IAAIgM,GAAK,SAAS3G,EAAGC,EAAG2G,EAAQC,GAG9B,GAAI7G,IAAMC,EAAG,MAAa,KAAND,GAAW,EAAIA,IAAM,EAAIC,CAE7C,IAAS,MAALD,GAAkB,MAALC,EAAW,MAAOD,KAAMC,CAErCD,aAAaxG,KAAGwG,EAAIA,EAAEpF,UACtBqF,YAAazG,KAAGyG,EAAIA,EAAErF,SAE1B,IAAIkM,GAAY3M,EAASkB,KAAK2E,EAC9B,IAAI8G,IAAc3M,EAASkB,KAAK4E,GAAI,OAAO,CAC3C,QAAQ6G,GAEN,IAAK,kBAEL,IAAK,kBAGH,MAAO,GAAK9G,GAAM,GAAKC,CACzB,KAAK,kBAGH,OAAKD,KAAOA,GAAWC,KAAOA,EAEhB,KAAND,EAAU,GAAKA,IAAM,EAAIC,GAAKD,KAAOC,CAC/C,KAAK,gBACL,IAAK,mBAIH,OAAQD,KAAOC,EAEnB,GAAgB,gBAALD,IAA6B,gBAALC,GAAe,OAAO,CAIzD,KADA,GAAI5D,GAASuK,EAAOvK,OACbA,KAGL,GAAIuK,EAAOvK,KAAY2D,EAAG,MAAO6G,GAAOxK,KAAY4D,CAItD,IAAI8G,GAAQ/G,EAAEgH,YAAaC,EAAQhH,EAAE+G,WACrC,IACED,IAAUE,GAEV,eAAiBjH,IAAK,eAAiBC,MACrCzG,EAAEsC,WAAWiL,IAAUA,YAAiBA,IACxCvN,EAAEsC,WAAWmL,IAAUA,YAAiBA,IAE1C,OAAO,CAGTL,GAAO5M,KAAKgG,GACZ6G,EAAO7M,KAAKiG,EACZ,IAAIa,GAAMzD,CAEV,IAAkB,mBAAdyJ,GAIF,GAFAhG,EAAOd,EAAE3D,OACTgB,EAASyD,IAASb,EAAE5D,OAGlB,KAAOyE,MACCzD,EAASsJ,EAAG3G,EAAEc,GAAOb,EAAEa,GAAO8F,EAAQC,WAG3C,CAEL,GAAsBpI,GAAlBjE,EAAOhB,EAAEgB,KAAKwF,EAIlB,IAHAc,EAAOtG,EAAK6B,OAEZgB,EAAS7D,EAAEgB,KAAKyF,GAAG5D,SAAWyE,EAE5B,KAAOA,MAELrC,EAAMjE,EAAKsG,GACLzD,EAAS7D,EAAE6G,IAAIJ,EAAGxB,IAAQkI,EAAG3G,EAAEvB,GAAMwB,EAAExB,GAAMmI,EAAQC,OAOjE,MAFAD,GAAOM,MACPL,EAAOK,MACA7J,EAIT7D,GAAE2N,QAAU,SAASnH,EAAGC,GACtB,MAAO0G,GAAG3G,EAAGC,UAKfzG,EAAE4N,QAAU,SAASzM,GACnB,GAAW,MAAPA,EAAa,OAAO,CACxB,IAAInB,EAAEc,QAAQK,IAAQnB,EAAE6N,SAAS1M,IAAQnB,EAAEwI,YAAYrH,GAAM,MAAsB,KAAfA,EAAI0B,MACxE,KAAK,GAAIoC,KAAO9D,GAAK,GAAInB,EAAE6G,IAAI1F,EAAK8D,GAAM,OAAO,CACjD,QAAO,GAITjF,EAAE8N,UAAY,SAAS3M,GACrB,SAAUA,GAAwB,IAAjBA,EAAI4M,WAKvB/N,EAAEc,QAAUD,GAAiB,SAASM,GACpC,MAA8B,mBAAvBR,EAASkB,KAAKV,IAIvBnB,EAAEuC,SAAW,SAASpB,GACpB,GAAI6M,SAAc7M,EAClB,OAAgB,aAAT6M,GAAgC,WAATA,KAAuB7M,GAIvDnB,EAAE0C,MAAM,YAAa,WAAY,SAAU,SAAU,OAAQ,UAAW,SAASuL,GAC/EjO,EAAE,KAAOiO,GAAQ,SAAS9M,GACxB,MAAOR,GAASkB,KAAKV,KAAS,WAAa8M,EAAO,OAMjDjO,EAAEwI,YAAYrG,aACjBnC,EAAEwI,YAAc,SAASrH,GACvB,MAAOnB,GAAE6G,IAAI1F,EAAK,YAKH,kBAAR,MACTnB,EAAEsC,WAAa,SAASnB,GACtB,MAAqB,kBAAPA,KAAqB,IAKvCnB,EAAEkO,SAAW,SAAS/M,GACpB,MAAO+M,UAAS/M,KAASgN,MAAMC,WAAWjN,KAI5CnB,EAAEmO,MAAQ,SAAShN,GACjB,MAAOnB,GAAEqO,SAASlN,IAAQA,KAASA,GAIrCnB,EAAE8I,UAAY,SAAS3H,GACrB,MAAOA,MAAQ,GAAQA,KAAQ,GAAgC,qBAAvBR,EAASkB,KAAKV,IAIxDnB,EAAEsO,OAAS,SAASnN,GAClB,MAAe,QAARA,GAITnB,EAAEuO,YAAc,SAASpN,GACvB,MAAOA,SAAa,IAKtBnB,EAAE6G,IAAM,SAAS1F,EAAK8D,GACpB,MAAc,OAAP9D,GAAeP,EAAeiB,KAAKV,EAAK8D,IAQjDjF,EAAEwO,WAAa,WAEb,MADA3O,GAAKG,EAAID,EACFD,MAITE,EAAEqC,SAAW,SAAST,GACpB,MAAOA,IAGT5B,EAAEyO,SAAW,SAAS7M,GACpB,MAAO,YACL,MAAOA,KAIX5B,EAAE0O,KAAO,aAET1O,EAAEyC,SAAW,SAASwC,GACpB,MAAO,UAAS9D,GACd,MAAOA,GAAI8D,KAKfjF,EAAEwC,QAAU,SAAS2C,GACnB,GAAIiH,GAAQpM,EAAEoM,MAAMjH,GAAQtC,EAASuJ,EAAMvJ,MAC3C,OAAO,UAAS1B,GACd,GAAW,MAAPA,EAAa,OAAQ0B,CACzB1B,GAAM,GAAId,QAAOc,EACjB,KAAK,GAAIyB,GAAI,EAAOC,EAAJD,EAAYA,IAAK,CAC/B,GAAI+L,GAAOvC,EAAMxJ,GAAIqC,EAAM0J,EAAK,EAChC,IAAIA,EAAK,KAAOxN,EAAI8D,MAAUA,IAAO9D,IAAM,OAAO,EAEpD,OAAO,IAKXnB,EAAEiM,MAAQ,SAASjG,EAAG5D,EAAUV,GAC9B,GAAIkN,GAAQ1O,MAAMgG,KAAKb,IAAI,EAAGW,GAC9B5D,GAAWZ,EAAeY,EAAUV,EAAS,EAC7C,KAAK,GAAIkB,GAAI,EAAOoD,EAAJpD,EAAOA,IAAKgM,EAAMhM,GAAKR,EAASQ,EAChD,OAAOgM,IAIT5O,EAAE8F,OAAS,SAASL,EAAKJ,GAKvB,MAJW,OAAPA,IACFA,EAAMI,EACNA,EAAM,GAEDA,EAAMS,KAAK2I,MAAM3I,KAAKJ,UAAYT,EAAMI,EAAM,KAIvDzF,EAAEqL,IAAMyD,KAAKzD,KAAO,WAClB,OAAO,GAAIyD,OAAOC,UAIpB,IAAIC,IACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAEHC,EAAcvP,EAAEqM,OAAO2C,GAGvBQ,EAAgB,SAAS1M,GAC3B,GAAI2M,GAAU,SAASC,GACrB,MAAO5M,GAAI4M,IAGThD,EAAS,MAAQ1M,EAAEgB,KAAK8B,GAAK6M,KAAK,KAAO,IACzCC,EAAaC,OAAOnD,GACpBoD,EAAgBD,OAAOnD,EAAQ,IACnC,OAAO,UAASqD,GAEd,MADAA,GAAmB,MAAVA,EAAiB,GAAK,GAAKA,EAC7BH,EAAWI,KAAKD,GAAUA,EAAOE,QAAQH,EAAeL,GAAWM,GAG9E/P,GAAEkQ,OAASV,EAAcR,GACzBhP,EAAEmQ,SAAWX,EAAcD,GAI3BvP,EAAE6D,OAAS,SAASyF,EAAQ7G,GAC1B,GAAc,MAAV6G,EAAgB,WAAY,EAChC,IAAI1H,GAAQ0H,EAAO7G,EACnB,OAAOzC,GAAEsC,WAAWV,GAAS0H,EAAO7G,KAAcb,EAKpD,IAAIwO,GAAY,CAChBpQ,GAAEqQ,SAAW,SAASC,GACpB,GAAIC,KAAOH,EAAY,EACvB,OAAOE,GAASA,EAASC,EAAKA,GAKhCvQ,EAAEwQ,kBACAC,SAAc,kBACdC,YAAc,mBACdR,OAAc,mBAMhB,IAAIS,GAAU,OAIVC,GACFvB,IAAU,IACVwB,KAAU,KACVC,KAAU,IACVC,KAAU,IACVC,SAAU,QACVC,SAAU,SAGRxB,EAAU,4BAEVyB,EAAa,SAASxB,GACxB,MAAO,KAAOkB,EAAQlB,GAOxB1P,GAAEmR,SAAW,SAASC,EAAMC,EAAUC,IAC/BD,GAAYC,IAAaD,EAAWC,GACzCD,EAAWrR,EAAE+M,YAAasE,EAAUrR,EAAEwQ,iBAGtC,IAAIe,GAAU1B,SACXwB,EAASnB,QAAUS,GAASjE,QAC5B2E,EAASX,aAAeC,GAASjE,QACjC2E,EAASZ,UAAYE,GAASjE,QAC/BiD,KAAK,KAAO,KAAM,KAGhB5N,EAAQ,EACR2K,EAAS,QACb0E,GAAKnB,QAAQsB,EAAS,SAAS7B,EAAOQ,EAAQQ,EAAaD,EAAUe,GAanE,MAZA9E,IAAU0E,EAAK3Q,MAAMsB,EAAOyP,GAAQvB,QAAQR,EAASyB,GACrDnP,EAAQyP,EAAS9B,EAAM7M,OAEnBqN,EACFxD,GAAU,cAAgBwD,EAAS,iCAC1BQ,EACThE,GAAU,cAAgBgE,EAAc,uBAC/BD,IACT/D,GAAU,OAAS+D,EAAW,YAIzBf,IAEThD,GAAU,OAGL2E,EAASI,WAAU/E,EAAS,mBAAqBA,EAAS,OAE/DA,EAAS,2CACP,oDACAA,EAAS,eAEX,KACE,GAAIgF,GAAS,GAAInR,UAAS8Q,EAASI,UAAY,MAAO,IAAK/E,GAC3D,MAAOiF,GAEP,KADAA,GAAEjF,OAASA,EACLiF,EAGR,GAAIR,GAAW,SAASS,GACtB,MAAOF,GAAO7P,KAAK/B,KAAM8R,EAAM5R,IAI7B6R,EAAWR,EAASI,UAAY,KAGpC,OAFAN,GAASzE,OAAS,YAAcmF,EAAW,OAASnF,EAAS,IAEtDyE,GAITnR,EAAE8R,MAAQ,SAAS3Q,GACjB,GAAI4Q,GAAW/R,EAAEmB,EAEjB,OADA4Q,GAASC,QAAS,EACXD,EAUT,IAAIlO,GAAS,SAAS1C,GACpB,MAAOrB,MAAKkS,OAAShS,EAAEmB,GAAK2Q,QAAU3Q,EAIxCnB,GAAEiS,MAAQ,SAAS9Q,GACjBnB,EAAE0C,KAAK1C,EAAEsM,UAAUnL,GAAM,SAAS8M,GAChC,GAAIxM,GAAOzB,EAAEiO,GAAQ9M,EAAI8M,EACzBjO,GAAEG,UAAU8N,GAAQ,WAClB,GAAInJ,IAAQhF,KAAKsB,SAEjB,OADAZ,GAAK0B,MAAM4C,EAAM3C,WACV0B,EAAOhC,KAAK/B,KAAM2B,EAAKS,MAAMlC,EAAG8E,QAM7C9E,EAAEiS,MAAMjS,GAGRA,EAAE0C,MAAM,MAAO,OAAQ,UAAW,QAAS,OAAQ,SAAU,WAAY,SAASuL,GAChF,GAAIpJ,GAAS5E,EAAWgO,EACxBjO,GAAEG,UAAU8N,GAAQ,WAClB,GAAI9M,GAAMrB,KAAKsB,QAGf,OAFAyD,GAAO3C,MAAMf,EAAKgB,WACJ,UAAT8L,GAA6B,WAATA,GAAqC,IAAf9M,EAAI0B,cAAqB1B,GAAI,GACrE0C,EAAOhC,KAAK/B,KAAMqB,MAK7BnB,EAAE0C,MAAM,SAAU,OAAQ,SAAU,SAASuL,GAC3C,GAAIpJ,GAAS5E,EAAWgO,EACxBjO,GAAEG,UAAU8N,GAAQ,WAClB,MAAOpK,GAAOhC,KAAK/B,KAAM+E,EAAO3C,MAAMpC,KAAKsB,SAAUe,eAKzDnC,EAAEG,UAAUyB,MAAQ,WAClB,MAAO9B,MAAKsB,UAUQ,kBAAX8Q,SAAyBA,OAAOC,KACzCD,OAAO,gBAAkB,WACvB,MAAOlS,OAGX6B,KAAK/B"}
\ No newline at end of file