diff --git a/LICENSE b/LICENSE
index f01776f..49b7255 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,22 +1,8 @@
+Apache License: |
 
-This software is distributed under the Apache License, version 2.0. See (1) below.
-This software is copyright (c) The Apache Software Foundation and contributors.
-
-Contents:
-
-  (1) This software license: Apache License, version 2.0
-  (2) Notices for bundled software
-  (3) Licenses for bundled software
-
-
----------------------------------------------------
-
-(1) This software license: Apache License, version 2.0
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
+   Apache License
+   Version 2.0, January 2004
+   http://www.apache.org/licenses/
 
    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 
@@ -190,501 +176,29 @@
       of your accepting any such warranty or additional liability.
 
 
----------------------------------------------------
+   END OF TERMS AND CONDITIONS
 
-(2) Notices for bundled software
-
-This project includes the software: async.js
-  Available at: https://github.com/p15martin/google-maps-hello-world/blob/master/js/libs/async.js
-  Developed by: Miller Medeiros (https://github.com/millermedeiros/)
-  Version used: 0.1.1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Miller Medeiros (2011)
-
-This project includes the software: backbone.js
-  Available at: http://backbonejs.org
-  Developed by: DocumentCloud Inc. (http://www.documentcloud.org/)
-  Version used: 1.0.0
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Jeremy Ashkenas, DocumentCloud Inc. (2010-2013)
-
-This project includes the software: bootstrap.js
-  Available at: http://twitter.github.com/bootstrap/javascript.html#transitions
-  Version used: 2.0.4
-  Used under the following license: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
-  Copyright (c) Twitter, Inc. (2012)
-
-This project includes the software: codemirror.js
-  Available at: http://codemirror.net/
-  Inclusive of: codemirror.{js,css}, show-hint.{js,css}, placeholder.js, anyword-hint.js, yaml.js
-  Version used: 5.11.1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  CodeMirror (c) Marijn Haverbeke and others
-
-This project includes the software: Font Awesome (code)
-  Available at: http://fontawesome.io/
-  Inclusive of: font-awesome/{css,scss,less}/*
-  Version used: 4.5.0
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Dave Gandy (2016)
-
-This project includes the software: Font Awesome (fonts)
-  Available at: http://fontawesome.io/
-  Inclusive of: font-awesome/fonts/*
-  Version used: 4.5.0
-  Used under the following license: SIL OFL 1.1 (http://scripts.sil.org/OFL)
-  Copyright (c) Dave Gandy (2016)
-
-This project includes the software: github.com/NodePrime/jsonpath/cli/jsonpath
-  Available at: github.com/NodePrime/jsonpath/
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) 2015 NodePrime Inc.
-
-This project includes the software: github.com/urfave/cli
-  Available at: https://github.com/urfave/cli
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) 2016 Jeremy Saenz & Contributors
-
-This project includes the software: golang.org/x/crypto/ssh
-  Available at: https://godoc.org/golang.org/x/crypto/ssh
-  Used under the following license: The BSD 3-Clause (New BSD) License (http://opensource.org/licenses/BSD-3-Clause)
-  Copyright (c) 2009 The Go Authors. All rights reserved.
-
-This project includes the software: handlebars.js
-  Available at: https://github.com/wycats/handlebars.js
-  Developed by: Yehuda Katz (https://github.com/wycats/)
-  Inclusive of: handlebars*.js
-  Version used: 1.0-rc1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Yehuda Katz (2012)
-
-This project includes the software: jQuery JavaScript Library
-  Available at: http://jquery.com/
-  Developed by: The jQuery Foundation (http://jquery.org/)
-  Inclusive of: jquery.js
-  Version used: 1.7.2
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) John Resig (2005-2011)
-  Includes code fragments from sizzle.js:
-    Copyright (c) The Dojo Foundation
-    Available at http://sizzlejs.com
-    Used under the MIT license
-
-This project includes the software: jQuery BBQ: Back Button & Query Library
-  Available at: http://benalman.com/projects/jquery-bbq-plugin/
-  Developed by: "Cowboy" Ben Alman (http://benalman.com/)
-  Inclusive of: jquery.ba-bbq*.js
-  Version used: 1.2.1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) "Cowboy" Ben Alman (2010)"
-
-This project includes the software: jQuery hashchange event
-  Available at: http://benalman.com/projects/jquery-hashchange-plugin/
-  Developed by: "Cowboy" Ben Alman (http://benalman.com/)
-  Inclusive of: jquery.ba-bbq*.js
-  Version used: 1.2
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) "Cowboy" Ben Alman (2010)"
-
-This project includes the software: DataTables Table plug-in for jQuery
-  Available at: http://www.datatables.net/
-  Developed by: SpryMedia Ltd (http://sprymedia.co.uk/)
-  Inclusive of: jquery.dataTables.{js,css}
-  Version used: 1.9.4
-  Used under the following license: The BSD 3-Clause (New BSD) License (http://opensource.org/licenses/BSD-3-Clause)
-  Copyright (c) Allan Jardine (2008-2012)
-
-This project includes the software: jquery.easy-autocomplete.js
-  Available at: https://github.com/pawelczak/EasyAutocomplete
-  Version used: 1.3.3
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Łukasz Pawełczak (2015)
-
-This project includes the software: jQuery Form Plugin
-  Available at: https://github.com/malsup/form
-  Developed by: Mike Alsup (http://malsup.com/)
-  Inclusive of: jquery.form.js
-  Version used: 3.09
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) M. Alsup (2006-2013)
-
-This project includes the software: jQuery Wiggle
-  Available at: https://github.com/jordanthomas/jquery-wiggle
-  Inclusive of: jquery.wiggle.min.js
-  Version used: swagger-ui:1.0.1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) WonderGroup and Jordan Thomas (2010)
-  Previously online at http://labs.wondergroup.com/demos/mini-ui/index.html.
-  The version included here is from the Swagger UI distribution.
-
-This project includes the software: js-uri
-  Available at: http://code.google.com/p/js-uri/
-  Developed by: js-uri contributors (https://code.google.com/js-uri)
-  Inclusive of: URI.js
-  Version used: 0.1
-  Used under the following license: The BSD 3-Clause (New BSD) License (http://opensource.org/licenses/BSD-3-Clause)
-  Copyright (c) js-uri contributors (2013)
-
-This project includes the software: js-yaml.js
-  Available at: https://github.com/nodeca/
-  Developed by: Vitaly Puzrin (https://github.com/nodeca/)
-  Version used: 3.5.2
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Vitaly Puzrin (2011-2015)
-
-This project includes the software: marked.js
-  Available at: https://github.com/chjj/marked
-  Developed by: Christopher Jeffrey (https://github.com/chjj)
-  Version used: 0.3.1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Christopher Jeffrey (2011-2014)
-
-This project includes the software: moment.js
-  Available at: http://momentjs.com
-  Developed by: Tim Wood (http://momentjs.com)
-  Version used: 2.1.0
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Tim Wood, Iskren Chernev, Moment.js contributors (2011-2014)
-
-This project includes the software: RequireJS
-  Available at: http://requirejs.org/
-  Developed by: The Dojo Foundation (http://dojofoundation.org/)
-  Inclusive of: require.js, text.js
-  Version used: 2.0.6
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) The Dojo Foundation (2010-2012)
-
-This project includes the software: RequireJS (r.js maven plugin)
-  Available at: http://github.com/jrburke/requirejs
-  Developed by: The Dojo Foundation (http://dojofoundation.org/)
-  Inclusive of: r.js
-  Version used: 2.1.6
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) The Dojo Foundation (2009-2013)
-  Includes code fragments for source-map and other functionality:
-    Copyright (c) The Mozilla Foundation and contributors (2011)
-    Used under the BSD 2-Clause license.
-  Includes code fragments for parse-js and other functionality:
-    Copyright (c) Mihai Bazon (2010, 2012)
-    Used under the BSD 2-Clause license.
-  Includes code fragments for uglifyjs/consolidator:
-    Copyright (c) Robert Gust-Bardon (2012)
-    Used under the BSD 2-Clause license.
-  Includes code fragments for the esprima parser:
-    Copyright (c):
-      Ariya Hidayat (2011, 2012)
-      Mathias Bynens (2012)
-      Joost-Wim Boekesteijn (2012)
-      Kris Kowal (2012)
-      Yusuke Suzuki (2012)
-      Arpad Borsos (2012)
-    Used under the BSD 2-Clause license.
-
-This project includes the software: Swagger UI
-  Available at: https://github.com/swagger-api/swagger-ui
-  Inclusive of: swagger*.{js,css,html}
-  Version used: 2.1.4
-  Used under the following license: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
-  Copyright (c) SmartBear Software (2011-2015)
-
-This project includes the software: Tango Project Icons
-  Available at: https://commons.wikimedia.org/wiki/File:Network-server.svg
-  Inclusive of: tango-project-icons
-  Used under the following license: Public Domain (https://en.wikipedia.org/wiki/en:public_domain)
-  Released into the public domain by the people from the Tango! project (The Tango! Desktop Project), via Wikimedia Commons
-
-This project includes the software: typeahead.js
-  Available at: https://github.com/twitter/typeahead.js
-  Developed by: Twitter, Inc (http://twitter.com)
-  Version used: 0.10.5
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Twitter, Inc. and other contributors (2013-2014)
-
-This project includes the software: underscore.js
-  Available at: http://underscorejs.org
-  Developed by: DocumentCloud Inc. (http://www.documentcloud.org/)
-  Inclusive of: underscore*.{js,map}
-  Version used: 1.4.4
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Jeremy Ashkenas, DocumentCloud Inc. (2009-2013)
-
-This project includes the software: underscore.js:1.7.0
-  Available at: http://underscorejs.org
-  Developed by: DocumentCloud Inc. (http://www.documentcloud.org/)
-  Inclusive of: underscore*.{js,map}
-  Version used: 1.7.0
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors (2009-2014)
-
-This project includes the software: ZeroClipboard
-  Available at: http://zeroclipboard.org/
-  Developed by: ZeroClipboard contributors (https://github.com/zeroclipboard)
-  Inclusive of: ZeroClipboard.*
-  Version used: 1.3.1
-  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
-  Copyright (c) Jon Rohan, James M. Greene (2014)
-
-
----------------------------------------------------
-
-(3) Licenses for bundled software
-
-Contents:
-
-  Apache License, Version 2.0
-  The BSD 2-Clause License
-  The BSD 3-Clause License ("New BSD")
-  The MIT License ("MIT")
-
-
-Apache License, Version 2.0
-
-  Apache License
-  Version 2.0, January 2004
-  http://www.apache.org/licenses/
-  
-  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-  
-  1. Definitions.
-  
-  "License" shall mean the terms and conditions for use, reproduction,
-  and distribution as defined by Sections 1 through 9 of this document.
-  
-  "Licensor" shall mean the copyright owner or entity authorized by
-  the copyright owner that is granting the License.
-  
-  "Legal Entity" shall mean the union of the acting entity and all
-  other entities that control, are controlled by, or are under common
-  control with that entity. For the purposes of this definition,
-  "control" means (i) the power, direct or indirect, to cause the
-  direction or management of such entity, whether by contract or
-  otherwise, or (ii) ownership of fifty percent (50%) or more of the
-  outstanding shares, or (iii) beneficial ownership of such entity.
-  
-  "You" (or "Your") shall mean an individual or Legal Entity
-  exercising permissions granted by this License.
-  
-  "Source" form shall mean the preferred form for making modifications,
-  including but not limited to software source code, documentation
-  source, and configuration files.
-  
-  "Object" form shall mean any form resulting from mechanical
-  transformation or translation of a Source form, including but
-  not limited to compiled object code, generated documentation,
-  and conversions to other media types.
-  
-  "Work" shall mean the work of authorship, whether in Source or
-  Object form, made available under the License, as indicated by a
-  copyright notice that is included in or attached to the work
-  (an example is provided in the Appendix below).
-  
-  "Derivative Works" shall mean any work, whether in Source or Object
-  form, that is based on (or derived from) the Work and for which the
-  editorial revisions, annotations, elaborations, or other modifications
-  represent, as a whole, an original work of authorship. For the purposes
-  of this License, Derivative Works shall not include works that remain
-  separable from, or merely link (or bind by name) to the interfaces of,
-  the Work and Derivative Works thereof.
-  
-  "Contribution" shall mean any work of authorship, including
-  the original version of the Work and any modifications or additions
-  to that Work or Derivative Works thereof, that is intentionally
-  submitted to Licensor for inclusion in the Work by the copyright owner
-  or by an individual or Legal Entity authorized to submit on behalf of
-  the copyright owner. For the purposes of this definition, "submitted"
-  means any form of electronic, verbal, or written communication sent
-  to the Licensor or its representatives, including but not limited to
-  communication on electronic mailing lists, source code control systems,
-  and issue tracking systems that are managed by, or on behalf of, the
-  Licensor for the purpose of discussing and improving the Work, but
-  excluding communication that is conspicuously marked or otherwise
-  designated in writing by the copyright owner as "Not a Contribution."
-  
-  "Contributor" shall mean Licensor and any individual or Legal Entity
-  on behalf of whom a Contribution has been received by Licensor and
-  subsequently incorporated within the Work.
-  
-  2. Grant of Copyright License. Subject to the terms and conditions of
-  this License, each Contributor hereby grants to You a perpetual,
-  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-  copyright license to reproduce, prepare Derivative Works of,
-  publicly display, publicly perform, sublicense, and distribute the
-  Work and such Derivative Works in Source or Object form.
-  
-  3. Grant of Patent License. Subject to the terms and conditions of
-  this License, each Contributor hereby grants to You a perpetual,
-  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-  (except as stated in this section) patent license to make, have made,
-  use, offer to sell, sell, import, and otherwise transfer the Work,
-  where such license applies only to those patent claims licensable
-  by such Contributor that are necessarily infringed by their
-  Contribution(s) alone or by combination of their Contribution(s)
-  with the Work to which such Contribution(s) was submitted. If You
-  institute patent litigation against any entity (including a
-  cross-claim or counterclaim in a lawsuit) alleging that the Work
-  or a Contribution incorporated within the Work constitutes direct
-  or contributory patent infringement, then any patent licenses
-  granted to You under this License for that Work shall terminate
-  as of the date such litigation is filed.
-  
-  4. Redistribution. You may reproduce and distribute copies of the
-  Work or Derivative Works thereof in any medium, with or without
-  modifications, and in Source or Object form, provided that You
-  meet the following conditions:
-  
-  (a) You must give any other recipients of the Work or
-  Derivative Works a copy of this License; and
-  
-  (b) You must cause any modified files to carry prominent notices
-  stating that You changed the files; and
-  
-  (c) You must retain, in the Source form of any Derivative Works
-  that You distribute, all copyright, patent, trademark, and
-  attribution notices from the Source form of the Work,
-  excluding those notices that do not pertain to any part of
-  the Derivative Works; and
-  
-  (d) If the Work includes a "NOTICE" text file as part of its
-  distribution, then any Derivative Works that You distribute must
-  include a readable copy of the attribution notices contained
-  within such NOTICE file, excluding those notices that do not
-  pertain to any part of the Derivative Works, in at least one
-  of the following places: within a NOTICE text file distributed
-  as part of the Derivative Works; within the Source form or
-  documentation, if provided along with the Derivative Works; or,
-  within a display generated by the Derivative Works, if and
-  wherever such third-party notices normally appear. The contents
-  of the NOTICE file are for informational purposes only and
-  do not modify the License. You may add Your own attribution
-  notices within Derivative Works that You distribute, alongside
-  or as an addendum to the NOTICE text from the Work, provided
-  that such additional attribution notices cannot be construed
-  as modifying the License.
-  
-  You may add Your own copyright statement to Your modifications and
-  may provide additional or different license terms and conditions
-  for use, reproduction, or distribution of Your modifications, or
-  for any such Derivative Works as a whole, provided Your use,
-  reproduction, and distribution of the Work otherwise complies with
-  the conditions stated in this License.
-  
-  5. Submission of Contributions. Unless You explicitly state otherwise,
-  any Contribution intentionally submitted for inclusion in the Work
-  by You to the Licensor shall be under the terms and conditions of
-  this License, without any additional terms or conditions.
-  Notwithstanding the above, nothing herein shall supersede or modify
-  the terms of any separate license agreement you may have executed
-  with Licensor regarding such Contributions.
-  
-  6. Trademarks. This License does not grant permission to use the trade
-  names, trademarks, service marks, or product names of the Licensor,
-  except as required for reasonable and customary use in describing the
-  origin of the Work and reproducing the content of the NOTICE file.
-  
-  7. Disclaimer of Warranty. Unless required by applicable law or
-  agreed to in writing, Licensor provides the Work (and each
-  Contributor provides its Contributions) on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-  implied, including, without limitation, any warranties or conditions
-  of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-  PARTICULAR PURPOSE. You are solely responsible for determining the
-  appropriateness of using or redistributing the Work and assume any
-  risks associated with Your exercise of permissions under this License.
-  
-  8. Limitation of Liability. In no event and under no legal theory,
-  whether in tort (including negligence), contract, or otherwise,
-  unless required by applicable law (such as deliberate and grossly
-  negligent acts) or agreed to in writing, shall any Contributor be
-  liable to You for damages, including any direct, indirect, special,
-  incidental, or consequential damages of any character arising as a
-  result of this License or out of the use or inability to use the
-  Work (including but not limited to damages for loss of goodwill,
-  work stoppage, computer failure or malfunction, or any and all
-  other commercial damages or losses), even if such Contributor
-  has been advised of the possibility of such damages.
-  
-  9. Accepting Warranty or Additional Liability. While redistributing
-  the Work or Derivative Works thereof, You may choose to offer,
-  and charge a fee for, acceptance of support, warranty, indemnity,
-  or other liability obligations and/or rights consistent with this
-  License. However, in accepting such obligations, You may act only
-  on Your own behalf and on Your sole responsibility, not on behalf
-  of any other Contributor, and only if You agree to indemnify,
-  defend, and hold each Contributor harmless for any liability
-  incurred by, or claims asserted against, such Contributor by reason
-  of your accepting any such warranty or additional liability.
-  
-
-The BSD 2-Clause License
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-  
-  1. Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-  
-  2. Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-  
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  
-
-The BSD 3-Clause License ("New BSD")
-
-  Redistribution and use in source and binary forms, with or without modification,
-  are permitted provided that the following conditions are met:
-  
-  1. Redistributions of source code must retain the above copyright notice, 
-  this list of conditions and the following disclaimer.
-  
-  2. Redistributions in binary form must reproduce the above copyright notice, 
-  this list of conditions and the following disclaimer in the documentation 
-  and/or other materials provided with the distribution.
-  
-  3. Neither the name of the copyright holder nor the names of its contributors 
-  may be used to endorse or promote products derived from this software without 
-  specific prior written permission.
-  
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
-  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-  POSSIBILITY OF SUCH DAMAGE.
-  
-
-The MIT License ("MIT")
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-  
-  The above copyright notice and this permission notice shall be included in
-  all copies or substantial portions of the Software.
-  
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-  THE SOFTWARE.
-  
-
+   APPENDIX - HOW TO APPLY THE APACHE LICENSE TO YOUR WORK
+   
+   To apply the Apache License to your work, attach the following boilerplate 
+   notice, with the fields enclosed by brackets "[]" replaced with your own 
+   identifying information. (Don't include the brackets!) The text should be 
+   enclosed in the appropriate comment syntax for the file format. We also 
+   recommend that a file or class name and description of purpose be included 
+   on the same "printed page" as the copyright notice for easier 
+   identification within third-party archives.
+   
+   Copyright [yyyy] [name of copyright owner]
+   
+   Licensed 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.
+   
diff --git a/NOTICE b/NOTICE
index 6d1f608..6af9b09 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,24 @@
-Apache Brooklyn
-Copyright 2014-2016 The Apache Software Foundation
+Notice: |
 
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
+  Apache Brooklyn
+  Copyright 2014-2018 The Apache Software Foundation
+
+  This product includes software developed at
+  The Apache Software Foundation (http://www.apache.org/).
+
+
+Bundled dependencies:
+
+  # This software includes the following bundled third-party components.
+  # Referenced licenses can be found in the accompanying LICENSE file.
+
+  # No such dependencies
+
+
+Runtime dependencies:
+
+  # This artifact depends on additional third-party components at runtime.
+  # These are not bundled here but may be included as part of a build.
+
+  # No such dependencies
+
