
                                 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.

   END OF TERMS AND CONDITIONS

   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 2016-present The Apache Software Foundation

   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.


========================================================================
MIT License
========================================================================

This distribution has binary dependencies on the following components, which are available under an MIT License (https://opensource.org/licenses/MIT).
Node.js 6.14.1 and 8.1.1 (Node.js - https://github.com/nodejs/node/)
  License included at licenses/LICENSE-node.txt, or https://github.com/nodejs/node/blob/master/LICENSE
  Copyright Node.js contributors. All rights reserved.

Body-parser 1.15.2 and 1.18.2 (body-parser - https://github.com/expressjs/body-parser/)
  License included at licenses/LICENSE-bodyparser.txt, or https://github.com/expressjs/body-parser/blob/master/LICENSE
  Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
  Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>

Express 4.14.0 and 4.16.2 (express - https://github.com/expressjs/express/)
  License included at licenses/LICENSE-express.txt, or https://github.com/expressjs/express/blob/master/LICENSE
  Copyright (c) 2009-2014 TJ Holowaychuk <tj@vision-media.ca>
  Copyright (c) 2013-2014 Roman Shtylman <shtylman+expressjs@gmail.com>
  Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>


This distribution depends on the following components, which are available under an MIT License (https://opensource.org/licenses/MIT).
Apn 2.1.2 (node-apn - https://github.com/node-apn/node-apn/)
  License included at licenses/LICENSE-apn.txt, or https://github.com/node-apn/node-apn/blob/master/LICENSE
  Copyright (c) 2010 Andrew Naylor

Async 2.1.4 (async - https://github.com/caolan/async/)
  License included at licenses/LICENSE-async.txt, or https://github.com/caolan/async/blob/master/LICENSE
  Copyright (c) 2010-2018 Caolan McMahon

Cheerio 0.22.0 (cheerio - https://github.com/cheeriojs/cheerio/)
  License included at licenses/LICENSE-cheerio.txt, or https://github.com/cheeriojs/cheerio/blob/master/LICENSE
  Copyright (c) 2016 Matt Mueller

Commander 2.9.0 (commander - https://github.com/tj/commander.js/)
  License included at licenses/LICENSE-commander.txt, or https://github.com/tj/commander.js/blob/master/LICENSE
  Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>

Node consul 0.27.0 (consul - https://github.com/silas/node-consul/)
  License included at licenses/LICENSE-consul.txt, or https://github.com/silas/node-consul/blob/master/LICENSE
  Copyright (c) 2014 Silas Sewell

Cookie parser 1.4.3 (cookie-parser - https://github.com/expressjs/cookie-parser/)
  License included at licenses/LICENSE-cookieparser.txt, or https://github.com/expressjs/cookie-parser/blob/master/LICENSE
  Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
  Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>

Cradle 0.7.1 (cradle - https://github.com/flatiron/cradle/)
  License included at licenses/LICENSE-cradle.txt, or https://github.com/flatiron/cradle/blob/master/LICENSE
  Copyright (c) 2009 cloudhead

Errorhandler 1.5.0 (errorhandler - https://github.com/expressjs/errorhandler/)
  License included at licenses/LICENSE-errorhandler.txt, or https://github.com/expressjs/errorhandler/blob/master/LICENSE
  Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
  Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>

Express session 1.14.2 (express-session - https://github.com/expressjs/session/)
  License included at licenses/LICENSE-expresssession.txt, or https://github.com/expressjs/session/blob/master/LICENSE
  Copyright (c) 2010 Sencha Inc.
  Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
  Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>

GraphicsMagick and ImageMagick for node 1.23.0 (gm - https://github.com/aheckmann/gm/)
  License included at licenses/LICENSE-gm.txt, or https://github.com/aheckmann/gm#license
  Copyright (c) 2010 Aaron Heckmann

lodash 4.17.2 (lodash - https://github.com/lodash/lodash/)
  License included at licenses/LICENSE-lodash.txt, or https://github.com/lodash/lodash/blob/master/LICENSE
  Copyright (c) JS Foundation and other contributors <https://js.foundation/>

Pure JS character encoding conversion 0.4.15 (iconv-lite - https://github.com/ashtuchkin/iconv-lite/)
  License included at licenses/LICENSE-iconvlite.txt, or https://github.com/ashtuchkin/iconv-lite/blob/master/LICENSE
  Copyright (c) 2011 Alexander Shtuchkin

Marked 0.4.15 (marked - https://github.com/markedjs/marked/)
  License included at licenses/LICENSE-marked.txt, or https://github.com/markedjs/marked/blob/master/LICENSE.md
  Copyright (c) 2011-2018, Christopher Jeffrey.

Merge 1.2.0 (merge - https://github.com/yeikos/js.merge/)
  License included at licenses/LICENSE-merge.txt, or https://github.com/yeikos/js.merge/blob/master/LICENSE
  Copyright (c) 2014 yeikos - http://www.yeikos.com

Moment 2.17.0 (moment - https://github.com/moment/moment/)
  License included at licenses/LICENSE-moment.txt, or https://github.com/moment/moment/blob/develop/LICENSE
  Copyright (c) JS Foundation and other contributors

Mustache 2.3.0 (mustache - https://github.com/janl/mustache.js/)
  License included at licenses/LICENSE-mustache.txt, or https://github.com/janl/mustache.js/blob/master/LICENSE
  Copyright (c) 2009 Chris Wanstrath (Ruby)
  Copyright (c) 2010-2014 Jan Lehnardt (JavaScript)
  Copyright (c) 2010-2015 The mustache.js community

Node uuid 1.4.7 (node-uuid - https://github.com/broofa/node-uuid/)
  License included at licenses/LICENSE-nodeuuid.txt, or https://github.com/broofa/node-uuid/blob/master/LICENSE.md
  Copyright (c) 2010-2016 Robert Kieffer and other contributors

Nodemailer 2.6.4 (nodemailer - https://github.com/nodemailer/nodemailer/)
  License included at licenses/LICENSE-nodemailer.txt, or https://github.com/nodemailer/nodemailer/blob/master/LICENSE
  Copyright (c) 2011-2017 Andris Reinman

Oauth2 server 2.4.1 (oauth2-server - https://github.com/oauthjs/node-oauth2-server/)
  License included at licenses/LICENSE-nodeserver.txt, or https://github.com/oauthjs/node-oauth2-server/blob/master/LICENSE
  Copyright (c) 2016 oauthJs

Pkgcloud 1.4.0 (pkgcloud - https://github.com/pkgcloud/pkgcloud/)
  License included at licenses/LICENSE-pkgcloud.txt, or https://github.com/pkgcloud/pkgcloud/blob/master/LICENSE
  Copyright (C) 2011 Charlie Robbins, Ken Perkins, Ross Kukulinski & the Contributors.

Process 0.11.9 (process - https://github.com/defunctzombie/node-process/)
  License included at licenses/LICENSE-process.txt, or https://github.com/defunctzombie/node-process/blob/master/LICENSE
  Copyright (c) 2013 Roman Shtylman <shtylman@gmail.com>

Pug 2.0.0-beta6 (pug - https://github.com/pugjs/pug/)
  License included at https://github.com/pugjs/pug#license

Redis 2.6.3 (redis - https://github.com/NodeRedis/node_redis/)
  License included at licenses/LICENSE-redis.txt, or https://github.com/NodeRedis/node_redis/blob/master/LICENSE
  Copyright (c) 2016 by NodeRedis

Sendgrid 4.7.1 (redis - https://github.com/sendgrid/sendgrid-nodejs/)
  License included at licenses/LICENSE-sendgrid.txt, or https://github.com/sendgrid/sendgrid-nodejs/blob/master/LICENSE.md
  Copyright (c) 2012-2018 SendGrid, Inc.

Serve favicon 2.3.2 (serve-favicon - https://github.com/expressjs/serve-favicon/)
  License included at licenses/LICENSE-servefavicon.txt, or https://github.com/expressjs/serve-favicon/blob/master/LICENSE
  Copyright (c) 2010 Sencha Inc.
  Copyright (c) 2011 LearnBoost
  Copyright (c) 2011 TJ Holowaychuk
  Copyright (c) 2014-2017 Douglas Christopher Wilson

Socket.io 1.6.0 (socket.io - https://github.com/socketio/socket.io/)
  License included at licenses/LICENSE-socketio.txt, or https://github.com/socketio/socket.io/blob/master/LICENSE
  Copyright (c) 2014-2018 Automattic <dev@cloudup.com>

Socket.io-client 1.6.0 (socket.io-client - https://github.com/socketio/socket.io-client/)
  License included at licenses/LICENSE-socketioclient.txt, or https://github.com/socketio/socket.io-client/blob/master/LICENSE
  Copyright (c) 2014 Guillermo Rauch

Superagent 3.0.0 (superagent - https://github.com/visionmedia/superagent/)
  License included at licenses/LICENSE-superagent.txt, or https://github.com/visionmedia/superagent/blob/master/LICENSE
  Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca>

Swagger tools 0.10.1 (swagger-tools - https://github.com/apigee-127/swagger-tools/)
  License included at licenses/LICENSE-swaggertools.txt, or https://github.com/apigee-127/swagger-tools/blob/master/LICENSE
  Copyright (c) 2014 Apigee Corporation

Tmp 0.0.31 (node-tmp - https://github.com/raszi/node-tmp/)
  License included at licenses/LICENSE-tmp.txt, or https://github.com/raszi/node-tmp/blob/master/LICENSE
  Copyright (c) 2014 KARASZI István

Twilio 2.11.1 (twilio-node - https://github.com/twilio/twilio-node/)
  License included at licenses/LICENSE-twilio.txt, or https://github.com/twilio/twilio-node/blob/master/LICENSE.md
  Copyright (C) 2018, Twilio, Inc. help@twilio.com

Underscore 1.8.3 (underscore - https://github.com/jashkenas/underscore/)
  License included at licenses/LICENSE-underscore.txt, or https://github.com/jashkenas/underscore/blob/master/LICENSE
  Copyright (c) 2009-2017 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors

Uuid 3.0.0 (uuid - https://github.com/kelektiv/node-uuid/)
  License included at licenses/LICENSE-uuid.txt, or https://github.com/kelektiv/node-uuid/blob/master/LICENSE.md
  Copyright (c) 2010-2016 Robert Kieffer and other contributors

Validator 6.1.0 (validator - https://github.com/chriso/validator.js/)
  License included at licenses/LICENSE-validator.txt, or https://github.com/chriso/validator.js/blob/master/LICENSE
  Copyright (c) 2016 Chris O'Hara <cohara87@gmail.com>

When 3.7.7 (when - https://github.com/cujojs/when/)
  License included at licenses/LICENSE-when.txt, or https://github.com/cujojs/when/blob/master/LICENSE.txt
  Copyright (c) 2011 Brian Cavalier

Winston 2.3.0 (winston - https://github.com/winstonjs/winston/)
  License included at licenses/LICENSE-winston.txt, or https://github.com/winstonjs/winston/blob/master/LICENSE
  Copyright (c) 2010 Charlie Robbins

WS 1.1.1 (ws - https://github.com/websockets/ws/)
  License included at licenses/LICENSE-ws.txt, or https://github.com/websockets/ws/blob/master/LICENSE
  Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>

Node-xml2js 0.4.17 (node-xml2js - https://github.com/Leonidas-from-XIV/node-xml2js/)
  License included at licenses/LICENSE-xml2js.txt, or https://github.com/Leonidas-from-XIV/node-xml2js/blob/master/LICENSE
  Copyright 2010, 2011, 2012, 2013. All rights reserved.

XMLHttpRequest 1.8.0 (node-XMLHttpRequest - https://github.com/driverdan/node-XMLHttpRequest/)
  License included at licenses/LICENSE-XMLHttpRequest.txt, or https://github.com/driverdan/node-XMLHttpRequest/blob/master/LICENSE
  Copyright (c) 2010 passive.ly LLC

Yauzl 2.7.0 (yauzl - https://github.com/thejoshwolfe/yauzl/)
  License included at licenses/LICENSE-yauzl.txt, or https://github.com/thejoshwolfe/yauzl/blob/master/LICENSE
  Copyright (c) 2014 Josh Wolfe


========================================================================
Apache License 2.0
========================================================================

This distribution has binary dependencies on the following components, which are available under an Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Btoa 1.1.2 (btoa - https://git.coolaj86.com/coolaj86/btoa.js/)
  License included at licenses/LICENSE-btoa.txt, or https://git.coolaj86.com/coolaj86/btoa.js/src/branch/master/LICENSE
  Copyright (c) 2012-2018 AJ ONeal

Log4js 0.6.38 (log4js - https://github.com/log4js-node/log4js-node/)
  License included at licenses/LICENSE-log4js.txt, or https://github.com/log4js-node/log4js-node/blob/master/LICENSE
  Copyright 2015 Gareth Jones (with contributions from many other people)

Request 2.79.0 (request - https://github.com/request/request/)
  License included at licenses/LICENSE-request.txt, or https://github.com/request/request/blob/master/LICENSE


This distribution depends on the following components, which are available under an Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Cloudant Node.js Client 1.6.2 (cloudant - https://github.com/cloudant/nodejs-cloudant/)
  License included at licenses/LICENSE-cloudant.txt, or https://github.com/cloudant/nodejs-cloudant/blob/master/LICENSE.md
  Copyright (c) 2016 IBM Cloudant, Inc. All rights reserved.

MongoDB Node.JS Driver 2.2.11 (node-mongodb-native - https://github.com/mongodb/node-mongodb-native/)
  License included at licenses/LICENSE-mongodb.txt, or https://github.com/mongodb/node-mongodb-native/blob/master/LICENSE

Apache CouchDB Nano 6.2.0 (nano - https://github.com/apache/couchdb-nano/)
  License included at licenses/LICENSE-nano.txt, or https://github.com/apache/couchdb-nano/blob/master/LICENSE
  Copyright (c) 2016 IBM Cloudant, Inc. All rights reserved.

OpenWhisk Client for JavaScript 3.15.0 (openwhisk - https://github.com/apache/incubator-openwhisk-client-js/)
  License included at licenses/LICENSE-openwhisk.txt, or https://github.com/apache/incubator-openwhisk-client-js/blob/master/LICENSE.txt
  Copyright 2015-2016  IBM Corporation

Watson APIs Node.js SDK 2.29.0 (watson-developer-cloud - https://github.com/watson-developer-cloud/node-sdk/)
  License included at licenses/LICENSE-watsondevelopercloud.txt, or https://github.com/watson-developer-cloud/node-sdk/blob/master/LICENSE


========================================================================
ISC License
========================================================================

This distribution has binary dependencies on the following components, which are available under an ISC License (https://opensource.org/licenses/ISC).
Glob 7.1.1 (glob - https://github.com/isaacs/node-glob/)
  License included at licenses/LICENSE-glob.txt, or https://github.com/isaacs/node-glob/blob/master/LICENSE
  Copyright (c) Isaac Z. Schlueter and Contributors

Request promise 4.1.1 (request-promise - https://github.com/request/request-promise/)
  License included at licenses/LICENSE-requestpromise.txt, or https://github.com/request/request-promise/blob/master/LICENSE
  Copyright (c) 2017, Nicolai Kamenzky, Ty Abonil, and contributors

Rimraf 2.5.4 (rimraf - https://github.com/isaacs/rimraf/)
  License included at licenses/LICENSE-rimraf.txt, or https://github.com/isaacs/rimraf/blob/master/LICENSE
  Copyright (c) Isaac Z. Schlueter and Contributors

Semver 5.3.0 (semver - https://github.com/npm/node-semver/)
  License included at licenses/LICENSE-semver.txt, or https://github.com/npm/node-semver/blob/master/LICENSE
  Copyright (c) Isaac Z. Schlueter and Contributors
