Lorenzob commited on
Commit
19605ab
·
verified ·
1 Parent(s): bfe7ab9

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. run.sh +72 -0
  2. web/app.js +78 -0
  3. web/appSettings.js +145 -0
  4. web/config/basePath.json +1 -0
  5. web/config/settings.json +8 -0
  6. web/json_rpc.js +137 -0
  7. web/jupyter.js +214 -0
  8. web/logging.js +130 -0
  9. web/lsp/capabilities_node.js +3 -0
  10. web/lsp/extensions_node.js +3 -0
  11. web/lsp/protocol_node.js +186 -0
  12. web/lsp/settings_node.js +44 -0
  13. web/lsp/text_document_node.js +313 -0
  14. web/lsp/window_node.js +24 -0
  15. web/lsp/workspace_node.js +41 -0
  16. web/node_modules/.bin/bunyan +3 -0
  17. web/node_modules/.bin/mkdirp +3 -0
  18. web/node_modules/.bin/ncp +3 -0
  19. web/node_modules/.bin/rimraf +3 -0
  20. web/node_modules/.bin/semver +3 -0
  21. web/node_modules/accepts/HISTORY.md +224 -0
  22. web/node_modules/accepts/LICENSE +23 -0
  23. web/node_modules/accepts/README.md +143 -0
  24. web/node_modules/accepts/index.js +238 -0
  25. web/node_modules/accepts/package.json +50 -0
  26. web/node_modules/after/.npmignore +2 -0
  27. web/node_modules/after/.travis.yml +12 -0
  28. web/node_modules/after/LICENCE +19 -0
  29. web/node_modules/after/README.md +115 -0
  30. web/node_modules/after/index.js +28 -0
  31. web/node_modules/after/package.json +32 -0
  32. web/node_modules/after/test/after-test.js +120 -0
  33. web/node_modules/arraybuffer.slice/.npmignore +17 -0
  34. web/node_modules/arraybuffer.slice/LICENCE +18 -0
  35. web/node_modules/arraybuffer.slice/Makefile +8 -0
  36. web/node_modules/arraybuffer.slice/README.md +17 -0
  37. web/node_modules/arraybuffer.slice/index.js +29 -0
  38. web/node_modules/arraybuffer.slice/package.json +20 -0
  39. web/node_modules/arraybuffer.slice/test/slice-buffer.js +227 -0
  40. web/node_modules/async-limiter/.travis.yml +7 -0
  41. web/node_modules/async-limiter/LICENSE +8 -0
  42. web/node_modules/async-limiter/coverage/coverage.json +1 -0
  43. web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html +73 -0
  44. web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html +246 -0
  45. web/node_modules/async-limiter/coverage/lcov-report/base.css +182 -0
  46. web/node_modules/async-limiter/coverage/lcov-report/index.html +73 -0
  47. web/node_modules/async-limiter/coverage/lcov-report/prettify.css +1 -0
  48. web/node_modules/async-limiter/coverage/lcov-report/prettify.js +1 -0
  49. web/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  50. web/node_modules/async-limiter/coverage/lcov-report/sorter.js +156 -0
run.sh ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash -e
2
+
3
+ # Copyright 2017 Google Inc. All rights reserved.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # At least one GPU is considered available iff COLAB_GPU=1.
18
+ export COLAB_GPU="$([[ -c /dev/nvidiactl ]] && echo 1)"
19
+
20
+ if [[ -e /customize_for_vm_type.sh ]]; then
21
+ /customize_for_vm_type.sh
22
+ fi
23
+
24
+ /usr/local/colab/bin/oom_monitor.sh &
25
+
26
+ # Start the Colab proxy to the Jupyter kernel manager.
27
+ # TODO(b/267667580): Evaluate use of tcmalloc here and possibly other places.
28
+ ( while true; do
29
+ GCE_METADATA_HOST="${VM_GCE_METADATA_HOST}" \
30
+ LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4' \
31
+ /usr/colab/bin/kernel_manager_proxy \
32
+ --listen_port="${KMP_LISTEN_PORT}" \
33
+ --target_port="${KMP_TARGET_PORT}" \
34
+ ${KMP_EXTRA_ARGS} || true
35
+ sleep 1
36
+ done & )
37
+
38
+ # Start fresh to isolate user-initiated actions from VM build & startup events.
39
+ for f in /var/log/apt/history.log /var/log/pip.log; do
40
+ mv "$f" "${f}.bak-run.sh" 2>/dev/null || true # Ignore missing files.
41
+ done
42
+
43
+ # Warm disk buffers for modules we need for kernel startup. (cf: b/116536906)
44
+ if [[ "${COLAB_WARMUP_DEFAULTS}" == "1" ]]; then
45
+ python3 -c "import google.colab._kernel"
46
+ python3 -c "import matplotlib"
47
+ python3 -c "import tensorflow" &
48
+ fi
49
+
50
+ # Start the server to handle /files and /api/contents requests.
51
+ /usr/local/bin/colab-fileshim.py ${COLAB_FILESHIM_EXTRA_ARGS} &
52
+
53
+ # Link NVidia tools from a read-only volume mount.
54
+ for f in $(ls /opt/bin/.nvidia 2>/dev/null); do
55
+ ln -st /opt/bin "/opt/bin/.nvidia/${f}"
56
+ ln -st /usr/bin "/opt/bin/.nvidia/${f}"
57
+ done
58
+
59
+ cd /
60
+
61
+ # Start the node server.
62
+ if [[ "${COLAB_HUMAN_READABLE_NODE_LOGS}" == "1" ]]; then
63
+ PIPE=/tmp/.node.out
64
+ if ! [[ -p "${PIPE}" ]]; then
65
+ mkfifo "${PIPE}"
66
+ fi
67
+ /datalab/web/node_modules/bunyan/bin/bunyan \
68
+ -l "${COLAB_NODE_LOG_LEVEL:-info}" < "${PIPE}" &
69
+ exec >& "${PIPE}"
70
+ fi
71
+ exec /tools/node/bin/node /datalab/web/app.js
72
+
web/app.js ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2015 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ var fs = require("fs");
19
+ var path = require("path");
20
+ var appSettings_1 = require("./appSettings");
21
+ var logging = require("./logging");
22
+ var server = require("./server");
23
+ /**
24
+ * Loads the configuration settings for the application to use.
25
+ * On first run, this generates any dynamic settings and merges them into the
26
+ * settings result.
27
+ * @return the settings object for the application to use.
28
+ */
29
+ function loadAppSettings() {
30
+ var settingsPath = path.join(__dirname, 'config', 'settings.json');
31
+ if (!fs.existsSync(settingsPath)) {
32
+ var msg = "App settings file \"".concat(settingsPath, "\" not found.");
33
+ console.error(msg);
34
+ throw new Error(msg);
35
+ }
36
+ try {
37
+ var settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8') || '{}');
38
+ (0, appSettings_1.applyEnvironmentVariables)(settings);
39
+ return settings;
40
+ }
41
+ catch (e) {
42
+ console.error(e);
43
+ throw new Error("Error parsing settings overrides: ".concat(e));
44
+ }
45
+ }
46
+ /**
47
+ * Load the configuration settings, and then start the server, which
48
+ * runs indefinitely, listening to and processing incoming HTTP requests.
49
+ */
50
+ var appSettings = loadAppSettings();
51
+ if (appSettings != null) {
52
+ logging.initializeLoggers(appSettings);
53
+ logging.getLogger().info('app: starting with settings: %s', JSON.stringify(appSettings));
54
+ server.run(appSettings);
55
+ }
56
+ /**
57
+ * Handle shutdown of this process, to also stop the server, which will in turn
58
+ * stop the associated Jupyter server process.
59
+ */
60
+ function exit() {
61
+ logging.getLogger().info('app: exit');
62
+ server.stop();
63
+ logging.getLogger().info('app: exit: stopped');
64
+ process.exit(0);
65
+ }
66
+ /**
67
+ * Handle uncaught exceptions to log them.
68
+ */
69
+ function errorHandler(e) {
70
+ console.error(e.stack);
71
+ logging.getLogger().error(e, 'Unhandled exception');
72
+ process.exit(1);
73
+ }
74
+ process.on('uncaughtException', errorHandler);
75
+ process.on('exit', exit);
76
+ process.on('SIGINT', exit);
77
+ process.on('SIGTERM', exit);
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOztBQUVILHVCQUF5QjtBQUN6QiwyQkFBNkI7QUFFN0IsNkNBQXFFO0FBQ3JFLG1DQUFxQztBQUNyQyxpQ0FBbUM7QUFFbkM7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXJFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDakMsSUFBTSxHQUFHLEdBQUcsOEJBQXNCLFlBQVksa0JBQWMsQ0FBQztRQUM3RCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILElBQU0sUUFBUSxHQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUM3QyxDQUFDO1FBQ2hCLElBQUEsdUNBQXlCLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQXFDLENBQUMsQ0FBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxJQUFNLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQztBQUN0QyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN4QixPQUFPLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDcEIsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUdEOzs7R0FHRztBQUNILFNBQVMsSUFBSTtJQUNYLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsQ0FBUTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2QixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVELE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDOUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdFxuICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2ZcbiAqIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4gKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge2FwcGx5RW52aXJvbm1lbnRWYXJpYWJsZXMsIEFwcFNldHRpbmdzfSBmcm9tICcuL2FwcFNldHRpbmdzJztcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSAnLi9sb2dnaW5nJztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL3NlcnZlcic7XG5cbi8qKlxuICogTG9hZHMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UuXG4gKiBPbiBmaXJzdCBydW4sIHRoaXMgZ2VuZXJhdGVzIGFueSBkeW5hbWljIHNldHRpbmdzIGFuZCBtZXJnZXMgdGhlbSBpbnRvIHRoZVxuICogc2V0dGluZ3MgcmVzdWx0LlxuICogQHJldHVybiB0aGUgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYXBwbGljYXRpb24gdG8gdXNlLlxuICovXG5mdW5jdGlvbiBsb2FkQXBwU2V0dGluZ3MoKTogQXBwU2V0dGluZ3Mge1xuICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY29uZmlnJywgJ3NldHRpbmdzLmpzb24nKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgIGNvbnN0IG1zZyA9IGBBcHAgc2V0dGluZ3MgZmlsZSBcIiR7c2V0dGluZ3NQYXRofVwiIG5vdCBmb3VuZC5gO1xuICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPVxuICAgICAgICBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsICd1dGY4JykgfHwgJ3t9JykgYXNcbiAgICAgICAgQXBwU2V0dGluZ3M7XG4gICAgYXBwbHlFbnZpcm9ubWVudFZhcmlhYmxlcyhzZXR0aW5ncyk7XG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgc2V0dGluZ3Mgb3ZlcnJpZGVzOiAke2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBhbmQgdGhlbiBzdGFydCB0aGUgc2VydmVyLCB3aGljaFxuICogcnVucyBpbmRlZmluaXRlbHksIGxpc3RlbmluZyB0byBhbmQgcHJvY2Vzc2luZyBpbmNvbWluZyBIVFRQIHJlcXVlc3RzLlxuICovXG5jb25zdCBhcHBTZXR0aW5ncyA9IGxvYWRBcHBTZXR0aW5ncygpO1xuaWYgKGFwcFNldHRpbmdzICE9IG51bGwpIHtcbiAgbG9nZ2luZy5pbml0aWFsaXplTG9nZ2VycyhhcHBTZXR0aW5ncyk7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbyhcbiAgICAgICdhcHA6IHN0YXJ0aW5nIHdpdGggc2V0dGluZ3M6ICVzJywgSlNPTi5zdHJpbmdpZnkoYXBwU2V0dGluZ3MpKTtcbiAgc2VydmVyLnJ1bihhcHBTZXR0aW5ncyk7XG59XG5cblxuLyoqXG4gKiBIYW5kbGUgc2h1dGRvd24gb2YgdGhpcyBwcm9jZXNzLCB0byBhbHNvIHN0b3AgdGhlIHNlcnZlciwgd2hpY2ggd2lsbCBpbiB0dXJuXG4gKiBzdG9wIHRoZSBhc3NvY2lhdGVkIEp1cHl0ZXIgc2VydmVyIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIGV4aXQoKSB7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbygnYXBwOiBleGl0Jyk7XG4gIHNlcnZlci5zdG9wKCk7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbygnYXBwOiBleGl0OiBzdG9wcGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgdW5jYXVnaHQgZXhjZXB0aW9ucyB0byBsb2cgdGhlbS5cbiAqL1xuZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGU6IEVycm9yKTogdm9pZCB7XG4gIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5lcnJvcihlLCAnVW5oYW5kbGVkIGV4Y2VwdGlvbicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyb3JIYW5kbGVyKTtcbnByb2Nlc3Mub24oJ2V4aXQnLCBleGl0KTtcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGV4aXQpO1xucHJvY2Vzcy5vbignU0lHVEVSTScsIGV4aXQpO1xuIl19
web/appSettings.js ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2018 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ var __read = (this && this.__read) || function (o, n) {
29
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
30
+ if (!m) return o;
31
+ var i = m.call(o), r, ar = [], e;
32
+ try {
33
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
34
+ }
35
+ catch (error) { e = { error: error }; }
36
+ finally {
37
+ try {
38
+ if (r && !r.done && (m = i["return"])) m.call(i);
39
+ }
40
+ finally { if (e) throw e.error; }
41
+ }
42
+ return ar;
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.applyEnvironmentVariables = void 0;
46
+ var environmentVariables = {
47
+ 'COLAB_ROOT_REDIRECT': function (settings, value) {
48
+ settings.colabRedirect = value;
49
+ },
50
+ 'COLAB_SERVER_PORT': function (settings, value) {
51
+ settings.serverPort = Number(value);
52
+ },
53
+ 'COLAB_LANGUAGE_SERVER_PROXY': function (settings, value) {
54
+ settings.languageServerProxy = value;
55
+ },
56
+ 'COLAB_SERVER_HOST': function (settings, value) {
57
+ settings.serverHost = value;
58
+ },
59
+ 'COLAB_NEXT_JUPYTER_PORT': function (settings, value) {
60
+ settings.nextJupyterPort = Number(value);
61
+ },
62
+ 'COLAB_DEBUG_ADAPTER_MUX_PATH': function (settings, value) {
63
+ settings.debugAdapterMultiplexerPath = value;
64
+ },
65
+ 'COLAB_DATALAB_ROOT': function (settings, value) {
66
+ settings.datalabRoot = value;
67
+ },
68
+ 'COLAB_KERNEL_MANAGER_PROXY_PORT': function (settings, value) {
69
+ settings.kernelManagerProxyPort = Number(value);
70
+ },
71
+ 'COLAB_KERNEL_MANAGER_PROXY_HOST': function (settings, value) {
72
+ settings.kernelManagerProxyHost = value;
73
+ },
74
+ 'COLAB_LANGUAGE_SERVER_PROXY_LSP_DIRS': function (settings, value) {
75
+ settings.languageServerProxyArgs = settings.languageServerProxyArgs || [];
76
+ settings.languageServerProxyArgs.push("--lsp_search_dirs=".concat(value));
77
+ },
78
+ 'COLAB_LANGUAGE_SERVER_PROXY_ROOT_URL': function (settings, value) {
79
+ settings.languageServerProxyArgs = settings.languageServerProxyArgs || [];
80
+ settings.languageServerProxyArgs.push("--language_services_request_root_url=".concat(value));
81
+ },
82
+ 'COLAB_LANGUAGE_SERVER_PROXY_REQUEST_TIMEOUT': function (settings, value) {
83
+ settings.languageServerProxyArgs = settings.languageServerProxyArgs || [];
84
+ settings.languageServerProxyArgs.push("--language_services_request_timeout=".concat(value));
85
+ },
86
+ 'COLAB_JUPYTER_ALLOW_ORIGIN_PAT': function (settings, value) {
87
+ settings.jupyterArgs = settings.jupyterArgs || [];
88
+ settings.jupyterArgs.push("--NotebookApp.allow_origin_pat=\"".concat(value, "\""));
89
+ settings.jupyterArgs.push("--NotebookApp.allow_origin=");
90
+ settings.jupyterArgs.push("--NotebookApp.allow_credentials=True");
91
+ },
92
+ 'COLAB_JUPYTER_DEBUG': function (settings) {
93
+ settings.jupyterArgs = settings.jupyterArgs || [];
94
+ settings.jupyterArgs.push("--debug");
95
+ },
96
+ 'COLAB_JUPYTER_TRANSPORT': function (settings, value) {
97
+ settings.jupyterArgs = settings.jupyterArgs || [];
98
+ settings.jupyterArgs.push("--transport=\"".concat(value, "\""));
99
+ },
100
+ 'COLAB_JUPYTER_IP': function (settings, value) {
101
+ settings.jupyterArgs = settings.jupyterArgs || [];
102
+ settings.jupyterArgs.push("--ip=".concat(value));
103
+ },
104
+ 'COLAB_GATEWAY_CLIENT_URL': function (settings, value) {
105
+ settings.jupyterArgs = settings.jupyterArgs || [];
106
+ settings.jupyterArgs.push("--GatewayClient.url=".concat(value));
107
+ },
108
+ 'COLAB_JUPYTER_ALLOW_REMOTE_ACCESS': function (settings, value) {
109
+ settings.jupyterArgs = settings.jupyterArgs || [];
110
+ settings.jupyterArgs.push("--NotebookApp.allow_remote_access=".concat(value));
111
+ },
112
+ 'COLAB_JUPYTER_TOKEN': function (settings, value) {
113
+ settings.jupyterArgs = settings.jupyterArgs || [];
114
+ settings.jupyterArgs.push("--NotebookApp.token=".concat(value));
115
+ },
116
+ 'COLAB_JUPYTER_DISABLE_CHECK_XSRF': function (settings, value) {
117
+ settings.jupyterArgs = settings.jupyterArgs || [];
118
+ settings.jupyterArgs.push("--NotebookApp.disable_check_xsrf=".concat(value));
119
+ },
120
+ 'COLAB_FILE_HANDLER_ADDR': function (settings, value) {
121
+ settings.fileHandlerAddr = value;
122
+ },
123
+ };
124
+ /** Applies any environment variable overrides. */
125
+ function applyEnvironmentVariables(settings) {
126
+ var e_1, _a;
127
+ try {
128
+ for (var _b = __values(Object.entries(environmentVariables)), _c = _b.next(); !_c.done; _c = _b.next()) {
129
+ var _d = __read(_c.value, 2), key = _d[0], apply = _d[1];
130
+ var override = process.env[key];
131
+ if (override !== undefined) {
132
+ apply(settings, override);
133
+ }
134
+ }
135
+ }
136
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
137
+ finally {
138
+ try {
139
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
140
+ }
141
+ finally { if (e_1) throw e_1.error; }
142
+ }
143
+ }
144
+ exports.applyEnvironmentVariables = applyEnvironmentVariables;
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwU2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2FwcFNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0VILElBQU0sb0JBQW9CLEdBQUc7SUFDM0IscUJBQXFCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDMUQsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUNELG1CQUFtQixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3hELFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCw2QkFBNkIsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUNsRSxRQUFRLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxtQkFBbUIsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUN4RCxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QseUJBQXlCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDOUQsUUFBUSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELDhCQUE4QixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ25FLFFBQVEsQ0FBQywyQkFBMkIsR0FBRyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUNELG9CQUFvQixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3pELFFBQVEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDRCxpQ0FBaUMsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUN0RSxRQUFRLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxpQ0FBaUMsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUN0RSxRQUFRLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFDRCxzQ0FBc0MsRUFBRSxVQUNwQyxRQUFxQixFQUFFLEtBQWE7UUFDdEMsUUFBUSxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUM7UUFDMUUsUUFBUSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyw0QkFBcUIsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0Qsc0NBQXNDLEVBQUUsVUFDcEMsUUFBcUIsRUFBRSxLQUFhO1FBQ3RDLFFBQVEsQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1FBQzFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQ2pDLCtDQUF3QyxLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCw2Q0FBNkMsRUFBRSxVQUMzQyxRQUFxQixFQUFFLEtBQWE7UUFDdEMsUUFBUSxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUM7UUFDMUUsUUFBUSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FDakMsOENBQXVDLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELGdDQUFnQyxFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3JFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMkNBQW1DLEtBQUssT0FBRyxDQUFDLENBQUM7UUFDdkUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN6RCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxxQkFBcUIsRUFBRSxVQUFDLFFBQXFCO1FBQzNDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELHlCQUF5QixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQzlELFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQWdCLEtBQUssT0FBRyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELGtCQUFrQixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3ZELFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBUSxLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCwwQkFBMEIsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUMvRCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLDhCQUF1QixLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxtQ0FBbUMsRUFDL0IsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDbkMsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyw0Q0FBcUMsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0wscUJBQXFCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDMUQsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyw4QkFBdUIsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0Qsa0NBQWtDLEVBQzlCLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ25DLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMkNBQW9DLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNMLHlCQUF5QixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQzlELFFBQVEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7Q0FDRixDQUFDO0FBRUYsa0RBQWtEO0FBQ2xELFNBQWdCLHlCQUF5QixDQUFDLFFBQXFCOzs7UUFDN0QsS0FBMkIsSUFBQSxLQUFBLFNBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBLGdCQUFBLDRCQUFFLENBQUM7WUFBdkQsSUFBQSxLQUFBLG1CQUFZLEVBQVgsR0FBRyxRQUFBLEVBQUUsS0FBSyxRQUFBO1lBQ3BCLElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7Ozs7Ozs7OztBQUNILENBQUM7QUFQRCw4REFPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90XG4gKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZlxuICogdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVRcbiAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZVxuICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXJcbiAqIHRoZSBMaWNlbnNlLlxuICovXG5cblxuLyoqIENvbmZpZ3VyYXRpb24gdmFsdWVzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIGFwcC4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBcHBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgcG9ydCB0aGF0IHRoZSBzZXJ2ZXIgc2hvdWxkIGxpc3RlbiB0by5cbiAgICovXG4gIHNlcnZlclBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgc2V0LCBsaXN0ZW4gb24gdGhpcyBob3N0bmFtZS5cbiAgICovXG4gIHNlcnZlckhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHN0YXRpYyBhcmd1bWVudHMgdG8gYmUgdXNlZCB3aGVuIGxhdW5jaGluZyBganVweXRlciBub3RlYm9va2AuXG4gICAqL1xuICBqdXB5dGVyQXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgdXNlIHRoaXMgYXMgYSBwcmVmaXggdG8gYWxsIGZpbGUgcGF0aHMgb3BlbmVkIG9uIHRoZVxuICAgKiBzZXJ2ZXIgc2lkZS4gVXNlZnVsIGZvciB0ZXN0aW5nIG91dHNpZGUgYSBEb2NrZXIgY29udGFpbmVyLlxuICAgKi9cbiAgZGF0YWxhYlJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogSW5pdGlhbCBwb3J0IHRvIHVzZSB3aGVuIHNlYXJjaGluZyBmb3IgYSBmcmVlIEp1cHl0ZXIgcG9ydC5cbiAgICovXG4gIG5leHRKdXB5dGVyUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMb2NhbCBkaXJlY3Rvcnkgd2hlcmUga2VybmVscyBhcmUgc3RhcnRlZC5cbiAgICovXG4gIGNvbnRlbnREaXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgdG8gdXNlIHRvIHByb3h5IGtlcm5lbCBtYW5hZ2VyIHdlYnNvY2tldCByZXF1ZXN0cy4gQSB2YWx1ZSBvZiAwXG4gICAqIGRpc2FibGVzIHByb3h5aW5nLlxuICAgKi9cbiAga2VybmVsTWFuYWdlclByb3h5UG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdG5hbWUgKG9yIElQKSB0byB1c2UgdG8gcHJveHkga2VybmVsIG1hbmFnZXIgd2Vic29ja2V0IHJlcXVlc3RzLlxuICAgKiBBbiBlbXB0eSB2YWx1ZSB1c2VzIGxvY2FsaG9zdC5cbiAgICovXG4gIGtlcm5lbE1hbmFnZXJQcm94eUhvc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0LCB0aGUgcGF0aCB0byB0aGUgREFQIG11bHRpcGxleGVyLlxuICAgKi9cbiAgZGVidWdBZGFwdGVyTXVsdGlwbGV4ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgcmVkaXJlY3QgLyByZXF1ZXN0cyB0byBDb2xhYiwgd2l0aCB7anVweXRlcl9ob3N0fSByZXBsYWNlZCB3aXRoIHRoZVxuICAgKiBzZXJ2ZXIgaG9zdC5cbiAgICovXG4gIGNvbGFiUmVkaXJlY3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgdGhlIHBhdGggYSBsYW5ndWFnZSBzZXJ2ZXIgcHJveHkgd2hpY2ggY2FuIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVzXG4gICAqIG9mIHRoZSBkZWZhdWx0IGxhbmd1YWdlIHNlcnZlci5cbiAgICovXG4gIGxhbmd1YWdlU2VydmVyUHJveHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgdGhlIGFyZ3MgdG8gcGFzcyB0byB0aGUgbGFuZ3VhZ2Ugc2VydmVyIHByb3h5LlxuICAgKiBUaGlzIGlzIG9ubHkgY29uc3VtZWQgaWYgYSBub24tZW1wdHkgcGF0aCBpcyBzZXQgZm9yIHRoZVxuICAgKiBsYW5ndWFnZVNlcnZlclByb3h5IHNldHRpbmcuXG4gICAqL1xuICBsYW5ndWFnZVNlcnZlclByb3h5QXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdDpwb3J0IGFkZHJlc3MgdG8gdXNlIGZvciBzZXJ2aW5nIGZpbGUgcmVxdWVzdHMuIEFuIGVtcHR5IHZhbHVlIHVzZXNcbiAgICogSnVweXRlcidzIGZpbGUgc2VydmVyLlxuICAgKi9cbiAgZmlsZUhhbmRsZXJBZGRyOiBzdHJpbmc7XG59XG5cbmNvbnN0IGVudmlyb25tZW50VmFyaWFibGVzID0ge1xuICAnQ09MQUJfUk9PVF9SRURJUkVDVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5jb2xhYlJlZGlyZWN0ID0gdmFsdWU7XG4gIH0sXG4gICdDT0xBQl9TRVJWRVJfUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5zZXJ2ZXJQb3J0ID0gTnVtYmVyKHZhbHVlKTtcbiAgfSxcbiAgJ0NPTEFCX0xBTkdVQUdFX1NFUlZFUl9QUk9YWSc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5ID0gdmFsdWU7XG4gIH0sXG4gICdDT0xBQl9TRVJWRVJfSE9TVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5zZXJ2ZXJIb3N0ID0gdmFsdWU7XG4gIH0sXG4gICdDT0xBQl9ORVhUX0pVUFlURVJfUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5uZXh0SnVweXRlclBvcnQgPSBOdW1iZXIodmFsdWUpO1xuICB9LFxuICAnQ09MQUJfREVCVUdfQURBUFRFUl9NVVhfUEFUSCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5kZWJ1Z0FkYXB0ZXJNdWx0aXBsZXhlclBhdGggPSB2YWx1ZTtcbiAgfSxcbiAgJ0NPTEFCX0RBVEFMQUJfUk9PVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5kYXRhbGFiUm9vdCA9IHZhbHVlO1xuICB9LFxuICAnQ09MQUJfS0VSTkVMX01BTkFHRVJfUFJPWFlfUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5rZXJuZWxNYW5hZ2VyUHJveHlQb3J0ID0gTnVtYmVyKHZhbHVlKTtcbiAgfSxcbiAgJ0NPTEFCX0tFUk5FTF9NQU5BR0VSX1BST1hZX0hPU1QnOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3Mua2VybmVsTWFuYWdlclByb3h5SG9zdCA9IHZhbHVlO1xuICB9LFxuICAnQ09MQUJfTEFOR1VBR0VfU0VSVkVSX1BST1hZX0xTUF9ESVJTJzogKFxuICAgICAgc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MubGFuZ3VhZ2VTZXJ2ZXJQcm94eUFyZ3MgPSBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncy5wdXNoKGAtLWxzcF9zZWFyY2hfZGlycz0ke3ZhbHVlfWApO1xuICB9LFxuICAnQ09MQUJfTEFOR1VBR0VfU0VSVkVSX1BST1hZX1JPT1RfVVJMJzogKFxuICAgICAgc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MubGFuZ3VhZ2VTZXJ2ZXJQcm94eUFyZ3MgPSBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncy5wdXNoKFxuICAgICAgICBgLS1sYW5ndWFnZV9zZXJ2aWNlc19yZXF1ZXN0X3Jvb3RfdXJsPSR7dmFsdWV9YCk7XG4gIH0sXG4gICdDT0xBQl9MQU5HVUFHRV9TRVJWRVJfUFJPWFlfUkVRVUVTVF9USU1FT1VUJzogKFxuICAgICAgc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MubGFuZ3VhZ2VTZXJ2ZXJQcm94eUFyZ3MgPSBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncy5wdXNoKFxuICAgICAgICBgLS1sYW5ndWFnZV9zZXJ2aWNlc19yZXF1ZXN0X3RpbWVvdXQ9JHt2YWx1ZX1gKTtcbiAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfQUxMT1dfT1JJR0lOX1BBVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tTm90ZWJvb2tBcHAuYWxsb3dfb3JpZ2luX3BhdD1cIiR7dmFsdWV9XCJgKTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLU5vdGVib29rQXBwLmFsbG93X29yaWdpbj1gKTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLU5vdGVib29rQXBwLmFsbG93X2NyZWRlbnRpYWxzPVRydWVgKTtcbiAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfREVCVUcnOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzKSA9PiB7XG4gICAgc2V0dGluZ3MuanVweXRlckFyZ3MgPSBzZXR0aW5ncy5qdXB5dGVyQXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLWRlYnVnYCk7XG4gIH0sXG4gICdDT0xBQl9KVVBZVEVSX1RSQU5TUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tdHJhbnNwb3J0PVwiJHt2YWx1ZX1cImApO1xuICB9LFxuICAnQ09MQUJfSlVQWVRFUl9JUCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0taXA9JHt2YWx1ZX1gKTtcbiAgfSxcbiAgJ0NPTEFCX0dBVEVXQVlfQ0xJRU5UX1VSTCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tR2F0ZXdheUNsaWVudC51cmw9JHt2YWx1ZX1gKTtcbiAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfQUxMT1dfUkVNT1RFX0FDQ0VTUyc6XG4gICAgICAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzID0gc2V0dGluZ3MuanVweXRlckFyZ3MgfHwgW107XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tTm90ZWJvb2tBcHAuYWxsb3dfcmVtb3RlX2FjY2Vzcz0ke3ZhbHVlfWApO1xuICAgICAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfVE9LRU4nOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MuanVweXRlckFyZ3MgPSBzZXR0aW5ncy5qdXB5dGVyQXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLU5vdGVib29rQXBwLnRva2VuPSR7dmFsdWV9YCk7XG4gIH0sXG4gICdDT0xBQl9KVVBZVEVSX0RJU0FCTEVfQ0hFQ0tfWFNSRic6XG4gICAgICAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzID0gc2V0dGluZ3MuanVweXRlckFyZ3MgfHwgW107XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tTm90ZWJvb2tBcHAuZGlzYWJsZV9jaGVja194c3JmPSR7dmFsdWV9YCk7XG4gICAgICB9LFxuICAnQ09MQUJfRklMRV9IQU5ETEVSX0FERFInOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MuZmlsZUhhbmRsZXJBZGRyID0gdmFsdWU7XG4gIH0sXG59O1xuXG4vKiogQXBwbGllcyBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RW52aXJvbm1lbnRWYXJpYWJsZXMoc2V0dGluZ3M6IEFwcFNldHRpbmdzKSB7XG4gIGZvciAoY29uc3QgW2tleSwgYXBwbHldIG9mIE9iamVjdC5lbnRyaWVzKGVudmlyb25tZW50VmFyaWFibGVzKSkge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXBwbHkoc2V0dGluZ3MsIG92ZXJyaWRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
web/config/basePath.json ADDED
@@ -0,0 +1 @@
 
 
1
+ ""
web/config/settings.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "contentDir": "/content",
3
+ "datalabRoot": "",
4
+ "jupyterArgs": ["--debug"],
5
+ "nextJupyterPort": 9000,
6
+ "serverHost": "",
7
+ "serverPort": 8080
8
+ }
web/json_rpc.js ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.encodeJsonRpc = exports.JsonRpcReader = void 0;
15
+ var CR = 13;
16
+ var LF = 10;
17
+ /**
18
+ * JSON RPC reader following the Debug Adapter Protocol message
19
+ * format which itself follows Chrome's V8 debugger protocol, originally
20
+ * documented at
21
+ * https://github.com/buggerjs/bugger-v8-client/blob/master/PROTOCOL.md#v8-debugger-protocol
22
+ */
23
+ var JsonRpcReader = /** @class */ (function () {
24
+ function JsonRpcReader(callback) {
25
+ this.callback = callback;
26
+ this.position = 0;
27
+ this.allocationSize = 4096;
28
+ this.decoder = new TextDecoder();
29
+ this.buffer = new Uint8Array(this.allocationSize);
30
+ }
31
+ JsonRpcReader.prototype.append = function (data) {
32
+ // Grow the buffer if necessary to hold the data.
33
+ if (data.byteLength > (this.buffer.byteLength - this.position)) {
34
+ var requiredSize = this.position + data.byteLength;
35
+ var newSize = Math.ceil(requiredSize / this.allocationSize) * this.allocationSize;
36
+ var newBuffer = new Uint8Array(newSize);
37
+ newBuffer.set(this.buffer, 0);
38
+ this.buffer = newBuffer;
39
+ }
40
+ // Push new data onto end of the buffer.
41
+ this.buffer.set(data, this.position);
42
+ this.position += data.byteLength;
43
+ var parsedMessages = [];
44
+ while (true) {
45
+ // Parse all messages out of the buffer.
46
+ var message = this.tryReadMessage();
47
+ if (!message) {
48
+ break;
49
+ }
50
+ parsedMessages.push(message);
51
+ this.callback(message);
52
+ }
53
+ return parsedMessages;
54
+ };
55
+ JsonRpcReader.prototype.tryReadMessage = function () {
56
+ var e_1, _a;
57
+ // Loop through looking for \r\n\r\n in the buffer.
58
+ for (var i = 0; i < this.position - 4; ++i) {
59
+ // First \r\n indicates the end of the headers.
60
+ if (this.buffer[i] === CR && this.buffer[i + 1] === LF &&
61
+ this.buffer[i + 2] === CR && this.buffer[i + 3] === LF) {
62
+ // Parse each of the header lines out of the header block.
63
+ var headerLength = i + 4;
64
+ var headerBytes = this.buffer.subarray(0, headerLength);
65
+ var headerString = this.decoder.decode(headerBytes);
66
+ var headerLines = headerString.split('\r\n');
67
+ var headers = {};
68
+ try {
69
+ for (var headerLines_1 = (e_1 = void 0, __values(headerLines)), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {
70
+ var line = headerLines_1_1.value;
71
+ if (!line.trim()) {
72
+ continue;
73
+ }
74
+ var pair = line.split(':');
75
+ if (pair.length !== 2) {
76
+ throw new Error("Illegal header value: ".concat(line));
77
+ }
78
+ headers[pair[0]] = pair[1].trim();
79
+ }
80
+ }
81
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
82
+ finally {
83
+ try {
84
+ if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);
85
+ }
86
+ finally { if (e_1) throw e_1.error; }
87
+ }
88
+ var contentLengthString = headers['Content-Length'];
89
+ if (!contentLengthString) {
90
+ throw new Error('Missing Content-Length header.');
91
+ }
92
+ var contentLength = Number(contentLengthString);
93
+ if (isNaN(contentLength)) {
94
+ throw new Error("Header Content-Length not a number: ".concat(contentLengthString, "."));
95
+ }
96
+ var requiredLength = headerLength + contentLength;
97
+ if (requiredLength <= this.position) {
98
+ // This is just a view onto the current buffer.
99
+ var contentBytes = this.buffer.subarray(headerLength, headerLength + contentLength);
100
+ var content = this.decoder.decode(contentBytes);
101
+ this.buffer.copyWithin(0, headerLength + contentLength, this.position);
102
+ this.position = this.position - (headerLength + contentLength);
103
+ return { headers: headers, content: content };
104
+ }
105
+ }
106
+ }
107
+ return null;
108
+ };
109
+ return JsonRpcReader;
110
+ }());
111
+ exports.JsonRpcReader = JsonRpcReader;
112
+ /** Encodes the string content to a JSON RPC message. */
113
+ function encodeJsonRpc(content) {
114
+ var e_2, _a;
115
+ var headers = {
116
+ 'Content-Length': String(new TextEncoder().encode(content).byteLength),
117
+ };
118
+ var requestString = '';
119
+ try {
120
+ for (var _b = __values(Object.keys(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {
121
+ var key = _c.value;
122
+ requestString += "".concat(key, ": ").concat(headers[key], "\r\n");
123
+ }
124
+ }
125
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
126
+ finally {
127
+ try {
128
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
129
+ }
130
+ finally { if (e_2) throw e_2.error; }
131
+ }
132
+ requestString += '\r\n';
133
+ requestString += content;
134
+ return requestString;
135
+ }
136
+ exports.encodeJsonRpc = encodeJsonRpc;
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbl9ycGMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2pzb25fcnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2QsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBUWQ7Ozs7O0dBS0c7QUFDSDtJQU1FLHVCQUFxQixRQUEyQztRQUEzQyxhQUFRLEdBQVIsUUFBUSxDQUFtQztRQUp4RCxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ1osbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsWUFBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFHM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELDhCQUFNLEdBQU4sVUFBTyxJQUFnQjtRQUNyQixpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0QsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3JELElBQU0sT0FBTyxHQUNULElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3hFLElBQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBQ0Qsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWpDLElBQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osd0NBQXdDO1lBQ3hDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLENBQUM7WUFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQ0FBYyxHQUFkOztRQUNFLG1EQUFtRDtRQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQywrQ0FBK0M7WUFDL0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzNELDBEQUEwRDtnQkFDMUQsSUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUMxRCxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEQsSUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0MsSUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQzs7b0JBQzVDLEtBQW1CLElBQUEsK0JBQUEsU0FBQSxXQUFXLENBQUEsQ0FBQSx3Q0FBQSxpRUFBRSxDQUFDO3dCQUE1QixJQUFNLElBQUksd0JBQUE7d0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOzRCQUNqQixTQUFTO3dCQUNYLENBQUM7d0JBQ0QsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUF5QixJQUFJLENBQUUsQ0FBQyxDQUFDO3dCQUNuRCxDQUFDO3dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BDLENBQUM7Ozs7Ozs7OztnQkFDRCxJQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO2dCQUNELElBQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLDhDQUF1QyxtQkFBbUIsTUFBRyxDQUFDLENBQUM7Z0JBQ3JFLENBQUM7Z0JBQ0QsSUFBTSxjQUFjLEdBQUcsWUFBWSxHQUFHLGFBQWEsQ0FBQztnQkFDcEQsSUFBSSxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQywrQ0FBK0M7b0JBQy9DLElBQU0sWUFBWSxHQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBQ3JFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQyxFQUFFLFlBQVksR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBQy9ELE9BQU8sRUFBQyxPQUFPLFNBQUEsRUFBRSxPQUFPLFNBQUEsRUFBQyxDQUFDO2dCQUM1QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUMsQUFuRkQsSUFtRkM7QUFuRlksc0NBQWE7QUFxRjFCLHdEQUF3RDtBQUN4RCxTQUFnQixhQUFhLENBQUMsT0FBZTs7SUFDM0MsSUFBTSxPQUFPLEdBQTRCO1FBQ3ZDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7S0FDdkUsQ0FBQztJQUNGLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQzs7UUFDdkIsS0FBa0IsSUFBQSxLQUFBLFNBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQSxnQkFBQSw0QkFBRSxDQUFDO1lBQXBDLElBQU0sR0FBRyxXQUFBO1lBQ1osYUFBYSxJQUFJLFVBQUcsR0FBRyxlQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBTSxDQUFDO1FBQ2pELENBQUM7Ozs7Ozs7OztJQUNELGFBQWEsSUFBSSxNQUFNLENBQUM7SUFDeEIsYUFBYSxJQUFJLE9BQU8sQ0FBQztJQUN6QixPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBWEQsc0NBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDUiA9IDEzO1xuY29uc3QgTEYgPSAxMDtcblxuLyoqIE1lc3NhZ2VzIHJlY2VpdmVkIHZpYSB0aGUgcmVhZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uUnBjTWVzc2FnZSB7XG4gIHJlYWRvbmx5IGhlYWRlcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBSUEMgcmVhZGVyIGZvbGxvd2luZyB0aGUgRGVidWcgQWRhcHRlciBQcm90b2NvbCBtZXNzYWdlXG4gKiBmb3JtYXQgd2hpY2ggaXRzZWxmIGZvbGxvd3MgQ2hyb21lJ3MgVjggZGVidWdnZXIgcHJvdG9jb2wsIG9yaWdpbmFsbHlcbiAqIGRvY3VtZW50ZWQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9idWdnZXJqcy9idWdnZXItdjgtY2xpZW50L2Jsb2IvbWFzdGVyL1BST1RPQ09MLm1kI3Y4LWRlYnVnZ2VyLXByb3RvY29sXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uUnBjUmVhZGVyIHtcbiAgcHJpdmF0ZSBidWZmZXI6IFVpbnQ4QXJyYXk7XG4gIHByaXZhdGUgcG9zaXRpb246IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb2NhdGlvblNpemUgPSA0MDk2O1xuICBwcml2YXRlIHJlYWRvbmx5IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjYWxsYmFjazogKG1lc3NhZ2U6IEpzb25ScGNNZXNzYWdlKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSh0aGlzLmFsbG9jYXRpb25TaXplKTtcbiAgfVxuXG4gIGFwcGVuZChkYXRhOiBVaW50OEFycmF5KTogSnNvblJwY01lc3NhZ2VbXSB7XG4gICAgLy8gR3JvdyB0aGUgYnVmZmVyIGlmIG5lY2Vzc2FyeSB0byBob2xkIHRoZSBkYXRhLlxuICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggPiAodGhpcy5idWZmZXIuYnl0ZUxlbmd0aCAtIHRoaXMucG9zaXRpb24pKSB7XG4gICAgICBjb25zdCByZXF1aXJlZFNpemUgPSB0aGlzLnBvc2l0aW9uICsgZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgY29uc3QgbmV3U2l6ZSA9XG4gICAgICAgICAgTWF0aC5jZWlsKHJlcXVpcmVkU2l6ZSAvIHRoaXMuYWxsb2NhdGlvblNpemUpICogdGhpcy5hbGxvY2F0aW9uU2l6ZTtcbiAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld1NpemUpO1xuICAgICAgbmV3QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciwgMCk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IG5ld0J1ZmZlcjtcbiAgICB9XG4gICAgLy8gUHVzaCBuZXcgZGF0YSBvbnRvIGVuZCBvZiB0aGUgYnVmZmVyLlxuICAgIHRoaXMuYnVmZmVyLnNldChkYXRhLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGRhdGEuYnl0ZUxlbmd0aDtcblxuICAgIGNvbnN0IHBhcnNlZE1lc3NhZ2VzID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIFBhcnNlIGFsbCBtZXNzYWdlcyBvdXQgb2YgdGhlIGJ1ZmZlci5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyeVJlYWRNZXNzYWdlKCk7XG4gICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwYXJzZWRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5jYWxsYmFjayhtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZE1lc3NhZ2VzO1xuICB9XG5cbiAgdHJ5UmVhZE1lc3NhZ2UoKTogSnNvblJwY01lc3NhZ2V8bnVsbCB7XG4gICAgLy8gTG9vcCB0aHJvdWdoIGxvb2tpbmcgZm9yIFxcclxcblxcclxcbiBpbiB0aGUgYnVmZmVyLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvbiAtIDQ7ICsraSkge1xuICAgICAgLy8gRmlyc3QgXFxyXFxuIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBoZWFkZXJzLlxuICAgICAgaWYgKHRoaXMuYnVmZmVyW2ldID09PSBDUiAmJiB0aGlzLmJ1ZmZlcltpICsgMV0gPT09IExGICYmXG4gICAgICAgICAgdGhpcy5idWZmZXJbaSArIDJdID09PSBDUiAmJiB0aGlzLmJ1ZmZlcltpICsgM10gPT09IExGKSB7XG4gICAgICAgIC8vIFBhcnNlIGVhY2ggb2YgdGhlIGhlYWRlciBsaW5lcyBvdXQgb2YgdGhlIGhlYWRlciBibG9jay5cbiAgICAgICAgY29uc3QgaGVhZGVyTGVuZ3RoID0gaSArIDQ7XG4gICAgICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gdGhpcy5idWZmZXIuc3ViYXJyYXkoMCwgaGVhZGVyTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaGVhZGVyU3RyaW5nID0gdGhpcy5kZWNvZGVyLmRlY29kZShoZWFkZXJCeXRlcyk7XG4gICAgICAgIGNvbnN0IGhlYWRlckxpbmVzID0gaGVhZGVyU3RyaW5nLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgY29uc3QgaGVhZGVyczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGhlYWRlckxpbmVzKSB7XG4gICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhaXIgPSBsaW5lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgaWYgKHBhaXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElsbGVnYWwgaGVhZGVyIHZhbHVlOiAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhlYWRlcnNbcGFpclswXV0gPSBwYWlyWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoU3RyaW5nID0gaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXTtcbiAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoU3RyaW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIENvbnRlbnQtTGVuZ3RoIGhlYWRlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gTnVtYmVyKGNvbnRlbnRMZW5ndGhTdHJpbmcpO1xuICAgICAgICBpZiAoaXNOYU4oY29udGVudExlbmd0aCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBIZWFkZXIgQ29udGVudC1MZW5ndGggbm90IGEgbnVtYmVyOiAke2NvbnRlbnRMZW5ndGhTdHJpbmd9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkTGVuZ3RoID0gaGVhZGVyTGVuZ3RoICsgY29udGVudExlbmd0aDtcbiAgICAgICAgaWYgKHJlcXVpcmVkTGVuZ3RoIDw9IHRoaXMucG9zaXRpb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYSB2aWV3IG9udG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRCeXRlcyA9XG4gICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnN1YmFycmF5KGhlYWRlckxlbmd0aCwgaGVhZGVyTGVuZ3RoICsgY29udGVudExlbmd0aCk7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZGVjb2Rlci5kZWNvZGUoY29udGVudEJ5dGVzKTtcbiAgICAgICAgICB0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKFxuICAgICAgICAgICAgICAwLCBoZWFkZXJMZW5ndGggKyBjb250ZW50TGVuZ3RoLCB0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiAtIChoZWFkZXJMZW5ndGggKyBjb250ZW50TGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4ge2hlYWRlcnMsIGNvbnRlbnR9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKiBFbmNvZGVzIHRoZSBzdHJpbmcgY29udGVudCB0byBhIEpTT04gUlBDIG1lc3NhZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSnNvblJwYyhjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoZWFkZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHtcbiAgICAnQ29udGVudC1MZW5ndGgnOiBTdHJpbmcobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGNvbnRlbnQpLmJ5dGVMZW5ndGgpLFxuICB9O1xuICBsZXQgcmVxdWVzdFN0cmluZyA9ICcnO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgIHJlcXVlc3RTdHJpbmcgKz0gYCR7a2V5fTogJHtoZWFkZXJzW2tleV19XFxyXFxuYDtcbiAgfVxuICByZXF1ZXN0U3RyaW5nICs9ICdcXHJcXG4nO1xuICByZXF1ZXN0U3RyaW5nICs9IGNvbnRlbnQ7XG4gIHJldHVybiByZXF1ZXN0U3RyaW5nO1xufVxuIl19
web/jupyter.js ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2015 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.handleRequest = exports.handleSocket = exports.close = exports.init = void 0;
30
+ var childProcess = require("child_process");
31
+ var httpProxy = require("http-proxy");
32
+ var path = require("path");
33
+ var logging = require("./logging");
34
+ /**
35
+ * Singleton tracking the jupyter server instance we manage.
36
+ */
37
+ var jupyterServer = null;
38
+ /**
39
+ * The maximum number of times we'll restart jupyter; we set a limit to avoid
40
+ * users being stuck with a slow-crash-looping server.
41
+ */
42
+ var remainingJupyterServerRestarts = 20;
43
+ /**
44
+ * The application settings instance.
45
+ */
46
+ var appSettings;
47
+ /*
48
+ * This list of levels should match the ones used by Python:
49
+ * https://docs.python.org/3/library/logging.html#logging-levels
50
+ */
51
+ var LogLevels;
52
+ (function (LogLevels) {
53
+ LogLevels["CRITICAL"] = "CRITICAL";
54
+ LogLevels["ERROR"] = "ERROR";
55
+ LogLevels["WARNING"] = "WARNING";
56
+ LogLevels["INFO"] = "INFO";
57
+ LogLevels["DEBUG"] = "DEBUG";
58
+ LogLevels["NOTSET"] = "NOTSET";
59
+ })(LogLevels || (LogLevels = {}));
60
+ function pipeOutput(stream) {
61
+ stream.setEncoding('utf8');
62
+ // The format we parse here corresponds to the log format we set in our
63
+ // jupyter configuration.
64
+ var logger = logging.getJupyterLogger();
65
+ stream.on('data', function (data) {
66
+ var e_1, _a;
67
+ try {
68
+ for (var _b = __values(data.split('\n')), _c = _b.next(); !_c.done; _c = _b.next()) {
69
+ var line = _c.value;
70
+ if (line.trim().length === 0) {
71
+ continue;
72
+ }
73
+ var parts = line.split('|', 3);
74
+ if (parts.length !== 3) {
75
+ // Non-logging messages (eg tracebacks) get logged as warnings.
76
+ logger.warn(line);
77
+ continue;
78
+ }
79
+ var level = parts[1];
80
+ var message = parts[2];
81
+ // We need to map Python's log levels to those used by bunyan.
82
+ if (level === LogLevels.CRITICAL || level === LogLevels.ERROR) {
83
+ logger.error(message);
84
+ }
85
+ else if (level === LogLevels.WARNING) {
86
+ logger.warn(message);
87
+ }
88
+ else if (level === LogLevels.INFO) {
89
+ logger.info(message);
90
+ }
91
+ else {
92
+ // We map DEBUG, NOTSET, and any unknown log levels to debug.
93
+ logger.debug(message);
94
+ }
95
+ }
96
+ }
97
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
98
+ finally {
99
+ try {
100
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
101
+ }
102
+ finally { if (e_1) throw e_1.error; }
103
+ }
104
+ });
105
+ }
106
+ function createJupyterServer() {
107
+ var e_2, _a;
108
+ if (!remainingJupyterServerRestarts) {
109
+ logging.getLogger().error('No jupyter restart attempts remaining.');
110
+ return;
111
+ }
112
+ remainingJupyterServerRestarts -= 1;
113
+ var port = appSettings.nextJupyterPort;
114
+ logging.getLogger().info('Launching Jupyter server at %d', port);
115
+ var jupyterArgs = appSettings.jupyterArgs || [];
116
+ function exitHandler(code, signal) {
117
+ if (jupyterServer) {
118
+ logging.getLogger().error('Jupyter process %d exited due to signal: %s', jupyterServer.childProcess.pid, signal);
119
+ }
120
+ else {
121
+ logging.getLogger().error('Jupyter process exit before server creation finished due to signal: %s', signal);
122
+ }
123
+ // We want to restart jupyter whenever it terminates.
124
+ createJupyterServer();
125
+ }
126
+ var contentDir = path.join(appSettings.datalabRoot, appSettings.contentDir);
127
+ var processArgs = ['notebook'].concat(jupyterArgs || []).concat([
128
+ "--port=".concat(port),
129
+ "--FileContentsManager.root_dir=".concat(appSettings.datalabRoot, "/"),
130
+ // TODO(b/136659627): Delete this line.
131
+ "--MappingKernelManager.root_dir=".concat(contentDir),
132
+ ]);
133
+ var jupyterServerAddr = 'localhost';
134
+ try {
135
+ for (var jupyterArgs_1 = __values(jupyterArgs), jupyterArgs_1_1 = jupyterArgs_1.next(); !jupyterArgs_1_1.done; jupyterArgs_1_1 = jupyterArgs_1.next()) {
136
+ var flag = jupyterArgs_1_1.value;
137
+ // Extracts a string like '1.2.3.4' from the string '--ip=1.2.3.4'
138
+ var match = flag.match(/--ip=([^ ]+)/);
139
+ if (match) {
140
+ jupyterServerAddr = match[1];
141
+ break;
142
+ }
143
+ }
144
+ }
145
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
146
+ finally {
147
+ try {
148
+ if (jupyterArgs_1_1 && !jupyterArgs_1_1.done && (_a = jupyterArgs_1.return)) _a.call(jupyterArgs_1);
149
+ }
150
+ finally { if (e_2) throw e_2.error; }
151
+ }
152
+ logging.getLogger().info('Using jupyter server address %s', jupyterServerAddr);
153
+ var processOptions = {
154
+ detached: false,
155
+ env: process.env,
156
+ };
157
+ var serverProcess = childProcess.spawn('jupyter', processArgs, processOptions);
158
+ serverProcess.on('exit', exitHandler);
159
+ logging.getLogger().info('Jupyter process started with pid %d and args %j', serverProcess.pid, processArgs);
160
+ // Capture the output, so it can be piped for logging.
161
+ pipeOutput(serverProcess.stdout);
162
+ pipeOutput(serverProcess.stderr);
163
+ // Create the proxy.
164
+ var proxyTargetHost = appSettings.kernelManagerProxyHost || jupyterServerAddr;
165
+ var proxyTargetPort = appSettings.kernelManagerProxyPort || port;
166
+ var proxy = httpProxy.createProxyServer({ target: "http://".concat(proxyTargetHost, ":").concat(proxyTargetPort) });
167
+ proxy.on('error', errorHandler);
168
+ jupyterServer = { port: port, proxy: proxy, childProcess: serverProcess };
169
+ }
170
+ /**
171
+ * Initializes the Jupyter server manager.
172
+ */
173
+ function init(settings) {
174
+ appSettings = settings;
175
+ createJupyterServer();
176
+ }
177
+ exports.init = init;
178
+ /**
179
+ * Closes the Jupyter server manager.
180
+ */
181
+ function close() {
182
+ if (!jupyterServer) {
183
+ return;
184
+ }
185
+ var pid = jupyterServer.childProcess.pid;
186
+ logging.getLogger().info("jupyter close: PID: ".concat(pid));
187
+ jupyterServer.childProcess.kill('SIGHUP');
188
+ }
189
+ exports.close = close;
190
+ /** Proxy this socket request to jupyter. */
191
+ function handleSocket(request, socket, head) {
192
+ if (!jupyterServer) {
193
+ logging.getLogger().error('Jupyter server is not running.');
194
+ return;
195
+ }
196
+ jupyterServer.proxy.ws(request, socket, head);
197
+ }
198
+ exports.handleSocket = handleSocket;
199
+ /** Proxy this HTTP request to jupyter. */
200
+ function handleRequest(request, response) {
201
+ if (!jupyterServer) {
202
+ response.statusCode = 500;
203
+ response.end();
204
+ return;
205
+ }
206
+ jupyterServer.proxy.web(request, response, null);
207
+ }
208
+ exports.handleRequest = handleRequest;
209
+ function errorHandler(error, request, response) {
210
+ logging.getLogger().error(error, 'Jupyter server returned error.');
211
+ response.writeHead(500, 'Internal Server Error');
212
+ response.end();
213
+ }
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVweXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvanVweXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7Ozs7O0FBRUgsNENBQThDO0FBRTlDLHNDQUF3QztBQUV4QywyQkFBNkI7QUFHN0IsbUNBQXFDO0FBUXJDOztHQUVHO0FBQ0gsSUFBSSxhQUFhLEdBQXVCLElBQUksQ0FBQztBQUU3Qzs7O0dBR0c7QUFDSCxJQUFJLDhCQUE4QixHQUFXLEVBQUUsQ0FBQztBQUVoRDs7R0FFRztBQUNILElBQUksV0FBd0IsQ0FBQztBQUU3Qjs7O0dBR0c7QUFDSCxJQUFLLFNBT0o7QUFQRCxXQUFLLFNBQVM7SUFDWixrQ0FBcUIsQ0FBQTtJQUNyQiw0QkFBZSxDQUFBO0lBQ2YsZ0NBQW1CLENBQUE7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLDRCQUFlLENBQUE7SUFDZiw4QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUEksU0FBUyxLQUFULFNBQVMsUUFPYjtBQUVELFNBQVMsVUFBVSxDQUFDLE1BQTZCO0lBQy9DLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsdUVBQXVFO0lBQ3ZFLHlCQUF5QjtJQUN6QixJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFDLElBQVk7OztZQUM3QixLQUFtQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBLGdCQUFBLDRCQUFFLENBQUM7Z0JBQWpDLElBQU0sSUFBSSxXQUFBO2dCQUNiLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZCLCtEQUErRDtvQkFDL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEIsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6Qiw4REFBOEQ7Z0JBQzlELElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsQ0FBQztxQkFBTSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUM7cUJBQU0sSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sNkRBQTZEO29CQUM3RCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQzs7Ozs7Ozs7O0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUI7O0lBQzFCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUNwRSxPQUFPO0lBQ1QsQ0FBQztJQUNELDhCQUE4QixJQUFJLENBQUMsQ0FBQztJQUNwQyxJQUFNLElBQUksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsSUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFFbEQsU0FBUyxXQUFXLENBQUMsSUFBWSxFQUFFLE1BQWM7UUFDL0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUNyQiw2Q0FBNkMsRUFDN0MsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUNyQix3RUFBd0UsRUFDeEUsTUFBTSxDQUFDLENBQUM7UUFDZCxDQUFDO1FBQ0QscURBQXFEO1FBQ3JELG1CQUFtQixFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUUsSUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRSxpQkFBVSxJQUFJLENBQUU7UUFDaEIseUNBQWtDLFdBQVcsQ0FBQyxXQUFXLE1BQUc7UUFDNUQsdUNBQXVDO1FBQ3ZDLDBDQUFtQyxVQUFVLENBQUU7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxpQkFBaUIsR0FBRyxXQUFXLENBQUM7O1FBQ3BDLEtBQW1CLElBQUEsZ0JBQUEsU0FBQSxXQUFXLENBQUEsd0NBQUEsaUVBQUUsQ0FBQztZQUE1QixJQUFNLElBQUksd0JBQUE7WUFDYixrRUFBa0U7WUFDbEUsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDOzs7Ozs7Ozs7SUFDRCxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUNwQixpQ0FBaUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRTFELElBQU0sY0FBYyxHQUFHO1FBQ3JCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0tBQ2pCLENBQUM7SUFFRixJQUFNLGFBQWEsR0FDZixZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0QsYUFBYSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDcEIsaURBQWlELEVBQUUsYUFBYSxDQUFDLEdBQUksRUFDckUsV0FBVyxDQUFDLENBQUM7SUFFakIsc0RBQXNEO0lBQ3RELFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxvQkFBb0I7SUFDcEIsSUFBTSxlQUFlLEdBQ2pCLFdBQVcsQ0FBQyxzQkFBc0IsSUFBSSxpQkFBaUIsQ0FBQztJQUM1RCxJQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDO0lBRW5FLElBQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDckMsRUFBQyxNQUFNLEVBQUUsaUJBQVUsZUFBZSxjQUFJLGVBQWUsQ0FBRSxFQUFDLENBQUMsQ0FBQztJQUM5RCxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoQyxhQUFhLEdBQUcsRUFBQyxJQUFJLE1BQUEsRUFBRSxLQUFLLE9BQUEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFDLFFBQXFCO0lBQ3hDLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFDdkIsbUJBQW1CLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBSEQsb0JBR0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLEtBQUs7SUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDM0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyw4QkFBdUIsR0FBRyxDQUFFLENBQUMsQ0FBQztJQUN2RCxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBUkQsc0JBUUM7QUFFRCw0Q0FBNEM7QUFDNUMsU0FBZ0IsWUFBWSxDQUN4QixPQUE2QixFQUFFLE1BQWtCLEVBQUUsSUFBWTtJQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzVELE9BQU87SUFDVCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBUEQsb0NBT0M7QUFFRCwwQ0FBMEM7QUFDMUMsU0FBZ0IsYUFBYSxDQUN6QixPQUE2QixFQUFFLFFBQTZCO0lBQzlELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixRQUFRLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUMxQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPO0lBQ1QsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQVRELHNDQVNDO0FBRUQsU0FBUyxZQUFZLENBQ2pCLEtBQVksRUFBRSxPQUE2QixFQUMzQyxRQUE2QjtJQUMvQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDakQsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdFxuICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2ZcbiAqIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4gKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZFByb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0ICogYXMgaHR0cFByb3h5IGZyb20gJ2h0dHAtcHJveHknO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0FwcFNldHRpbmdzfSBmcm9tICcuL2FwcFNldHRpbmdzJztcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSAnLi9sb2dnaW5nJztcblxuaW50ZXJmYWNlIEp1cHl0ZXJTZXJ2ZXIge1xuICBwb3J0OiBudW1iZXI7XG4gIGNoaWxkUHJvY2VzczogY2hpbGRQcm9jZXNzLkNoaWxkUHJvY2VzcztcbiAgcHJveHk6IGh0dHBQcm94eS5Qcm94eVNlcnZlcjtcbn1cblxuLyoqXG4gKiBTaW5nbGV0b24gdHJhY2tpbmcgdGhlIGp1cHl0ZXIgc2VydmVyIGluc3RhbmNlIHdlIG1hbmFnZS5cbiAqL1xubGV0IGp1cHl0ZXJTZXJ2ZXI6IEp1cHl0ZXJTZXJ2ZXJ8bnVsbCA9IG51bGw7XG5cbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHdlJ2xsIHJlc3RhcnQganVweXRlcjsgd2Ugc2V0IGEgbGltaXQgdG8gYXZvaWRcbiAqIHVzZXJzIGJlaW5nIHN0dWNrIHdpdGggYSBzbG93LWNyYXNoLWxvb3Bpbmcgc2VydmVyLlxuICovXG5sZXQgcmVtYWluaW5nSnVweXRlclNlcnZlclJlc3RhcnRzOiBudW1iZXIgPSAyMDtcblxuLyoqXG4gKiBUaGUgYXBwbGljYXRpb24gc2V0dGluZ3MgaW5zdGFuY2UuXG4gKi9cbmxldCBhcHBTZXR0aW5nczogQXBwU2V0dGluZ3M7XG5cbi8qXG4gKiBUaGlzIGxpc3Qgb2YgbGV2ZWxzIHNob3VsZCBtYXRjaCB0aGUgb25lcyB1c2VkIGJ5IFB5dGhvbjpcbiAqICAgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLWxldmVsc1xuICovXG5lbnVtIExvZ0xldmVscyB7XG4gIENSSVRJQ0FMID0gJ0NSSVRJQ0FMJyxcbiAgRVJST1IgPSAnRVJST1InLFxuICBXQVJOSU5HID0gJ1dBUk5JTkcnLFxuICBJTkZPID0gJ0lORk8nLFxuICBERUJVRyA9ICdERUJVRycsXG4gIE5PVFNFVCA9ICdOT1RTRVQnLFxufVxuXG5mdW5jdGlvbiBwaXBlT3V0cHV0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKSB7XG4gIHN0cmVhbS5zZXRFbmNvZGluZygndXRmOCcpO1xuXG4gIC8vIFRoZSBmb3JtYXQgd2UgcGFyc2UgaGVyZSBjb3JyZXNwb25kcyB0byB0aGUgbG9nIGZvcm1hdCB3ZSBzZXQgaW4gb3VyXG4gIC8vIGp1cHl0ZXIgY29uZmlndXJhdGlvbi5cbiAgY29uc3QgbG9nZ2VyID0gbG9nZ2luZy5nZXRKdXB5dGVyTG9nZ2VyKCk7XG4gIHN0cmVhbS5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgIGlmIChsaW5lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0cyA9IGxpbmUuc3BsaXQoJ3wnLCAzKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgLy8gTm9uLWxvZ2dpbmcgbWVzc2FnZXMgKGVnIHRyYWNlYmFja3MpIGdldCBsb2dnZWQgYXMgd2FybmluZ3MuXG4gICAgICAgIGxvZ2dlci53YXJuKGxpbmUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxldmVsID0gcGFydHNbMV07XG4gICAgICBjb25zdCBtZXNzYWdlID0gcGFydHNbMl07XG4gICAgICAvLyBXZSBuZWVkIHRvIG1hcCBQeXRob24ncyBsb2cgbGV2ZWxzIHRvIHRob3NlIHVzZWQgYnkgYnVueWFuLlxuICAgICAgaWYgKGxldmVsID09PSBMb2dMZXZlbHMuQ1JJVElDQUwgfHwgbGV2ZWwgPT09IExvZ0xldmVscy5FUlJPUikge1xuICAgICAgICBsb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKGxldmVsID09PSBMb2dMZXZlbHMuV0FSTklORykge1xuICAgICAgICBsb2dnZXIud2FybihtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IExvZ0xldmVscy5JTkZPKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgbWFwIERFQlVHLCBOT1RTRVQsIGFuZCBhbnkgdW5rbm93biBsb2cgbGV2ZWxzIHRvIGRlYnVnLlxuICAgICAgICBsb2dnZXIuZGVidWcobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSnVweXRlclNlcnZlcigpIHtcbiAgaWYgKCFyZW1haW5pbmdKdXB5dGVyU2VydmVyUmVzdGFydHMpIHtcbiAgICBsb2dnaW5nLmdldExvZ2dlcigpLmVycm9yKCdObyBqdXB5dGVyIHJlc3RhcnQgYXR0ZW1wdHMgcmVtYWluaW5nLicpO1xuICAgIHJldHVybjtcbiAgfVxuICByZW1haW5pbmdKdXB5dGVyU2VydmVyUmVzdGFydHMgLT0gMTtcbiAgY29uc3QgcG9ydCA9IGFwcFNldHRpbmdzLm5leHRKdXB5dGVyUG9ydDtcbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5pbmZvKCdMYXVuY2hpbmcgSnVweXRlciBzZXJ2ZXIgYXQgJWQnLCBwb3J0KTtcbiAgY29uc3QganVweXRlckFyZ3MgPSBhcHBTZXR0aW5ncy5qdXB5dGVyQXJncyB8fCBbXTtcblxuICBmdW5jdGlvbiBleGl0SGFuZGxlcihjb2RlOiBudW1iZXIsIHNpZ25hbDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGp1cHl0ZXJTZXJ2ZXIpIHtcbiAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuZXJyb3IoXG4gICAgICAgICAgJ0p1cHl0ZXIgcHJvY2VzcyAlZCBleGl0ZWQgZHVlIHRvIHNpZ25hbDogJXMnLFxuICAgICAgICAgIGp1cHl0ZXJTZXJ2ZXIuY2hpbGRQcm9jZXNzLnBpZCEsIHNpZ25hbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuZXJyb3IoXG4gICAgICAgICAgJ0p1cHl0ZXIgcHJvY2VzcyBleGl0IGJlZm9yZSBzZXJ2ZXIgY3JlYXRpb24gZmluaXNoZWQgZHVlIHRvIHNpZ25hbDogJXMnLFxuICAgICAgICAgIHNpZ25hbCk7XG4gICAgfVxuICAgIC8vIFdlIHdhbnQgdG8gcmVzdGFydCBqdXB5dGVyIHdoZW5ldmVyIGl0IHRlcm1pbmF0ZXMuXG4gICAgY3JlYXRlSnVweXRlclNlcnZlcigpO1xuICB9XG5cbiAgY29uc3QgY29udGVudERpciA9IHBhdGguam9pbihhcHBTZXR0aW5ncy5kYXRhbGFiUm9vdCwgYXBwU2V0dGluZ3MuY29udGVudERpcik7XG4gIGNvbnN0IHByb2Nlc3NBcmdzID0gWydub3RlYm9vayddLmNvbmNhdChqdXB5dGVyQXJncyB8fCBbXSkuY29uY2F0KFtcbiAgICBgLS1wb3J0PSR7cG9ydH1gLFxuICAgIGAtLUZpbGVDb250ZW50c01hbmFnZXIucm9vdF9kaXI9JHthcHBTZXR0aW5ncy5kYXRhbGFiUm9vdH0vYCxcbiAgICAvLyBUT0RPKGIvMTM2NjU5NjI3KTogRGVsZXRlIHRoaXMgbGluZS5cbiAgICBgLS1NYXBwaW5nS2VybmVsTWFuYWdlci5yb290X2Rpcj0ke2NvbnRlbnREaXJ9YCxcbiAgXSk7XG5cbiAgbGV0IGp1cHl0ZXJTZXJ2ZXJBZGRyID0gJ2xvY2FsaG9zdCc7XG4gIGZvciAoY29uc3QgZmxhZyBvZiBqdXB5dGVyQXJncykge1xuICAgIC8vIEV4dHJhY3RzIGEgc3RyaW5nIGxpa2UgJzEuMi4zLjQnIGZyb20gdGhlIHN0cmluZyAnLS1pcD0xLjIuMy40J1xuICAgIGNvbnN0IG1hdGNoID0gZmxhZy5tYXRjaCgvLS1pcD0oW14gXSspLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBqdXB5dGVyU2VydmVyQWRkciA9IG1hdGNoWzFdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbyhcbiAgICAgICdVc2luZyBqdXB5dGVyIHNlcnZlciBhZGRyZXNzICVzJywganVweXRlclNlcnZlckFkZHIpO1xuXG4gIGNvbnN0IHByb2Nlc3NPcHRpb25zID0ge1xuICAgIGRldGFjaGVkOiBmYWxzZSxcbiAgICBlbnY6IHByb2Nlc3MuZW52LFxuICB9O1xuXG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPVxuICAgICAgY2hpbGRQcm9jZXNzLnNwYXduKCdqdXB5dGVyJywgcHJvY2Vzc0FyZ3MsIHByb2Nlc3NPcHRpb25zKTtcbiAgc2VydmVyUHJvY2Vzcy5vbignZXhpdCcsIGV4aXRIYW5kbGVyKTtcbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5pbmZvKFxuICAgICAgJ0p1cHl0ZXIgcHJvY2VzcyBzdGFydGVkIHdpdGggcGlkICVkIGFuZCBhcmdzICVqJywgc2VydmVyUHJvY2Vzcy5waWQhLFxuICAgICAgcHJvY2Vzc0FyZ3MpO1xuXG4gIC8vIENhcHR1cmUgdGhlIG91dHB1dCwgc28gaXQgY2FuIGJlIHBpcGVkIGZvciBsb2dnaW5nLlxuICBwaXBlT3V0cHV0KHNlcnZlclByb2Nlc3Muc3Rkb3V0KTtcbiAgcGlwZU91dHB1dChzZXJ2ZXJQcm9jZXNzLnN0ZGVycik7XG5cbiAgLy8gQ3JlYXRlIHRoZSBwcm94eS5cbiAgY29uc3QgcHJveHlUYXJnZXRIb3N0ID1cbiAgICAgIGFwcFNldHRpbmdzLmtlcm5lbE1hbmFnZXJQcm94eUhvc3QgfHwganVweXRlclNlcnZlckFkZHI7XG4gIGNvbnN0IHByb3h5VGFyZ2V0UG9ydCA9IGFwcFNldHRpbmdzLmtlcm5lbE1hbmFnZXJQcm94eVBvcnQgfHwgcG9ydDtcblxuICBjb25zdCBwcm94eSA9IGh0dHBQcm94eS5jcmVhdGVQcm94eVNlcnZlcihcbiAgICAgIHt0YXJnZXQ6IGBodHRwOi8vJHtwcm94eVRhcmdldEhvc3R9OiR7cHJveHlUYXJnZXRQb3J0fWB9KTtcbiAgcHJveHkub24oJ2Vycm9yJywgZXJyb3JIYW5kbGVyKTtcblxuICBqdXB5dGVyU2VydmVyID0ge3BvcnQsIHByb3h5LCBjaGlsZFByb2Nlc3M6IHNlcnZlclByb2Nlc3N9O1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBKdXB5dGVyIHNlcnZlciBtYW5hZ2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdChzZXR0aW5nczogQXBwU2V0dGluZ3MpOiB2b2lkIHtcbiAgYXBwU2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgY3JlYXRlSnVweXRlclNlcnZlcigpO1xufVxuXG4vKipcbiAqIENsb3NlcyB0aGUgSnVweXRlciBzZXJ2ZXIgbWFuYWdlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICBpZiAoIWp1cHl0ZXJTZXJ2ZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwaWQgPSBqdXB5dGVyU2VydmVyLmNoaWxkUHJvY2Vzcy5waWQ7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbyhganVweXRlciBjbG9zZTogUElEOiAke3BpZH1gKTtcbiAganVweXRlclNlcnZlci5jaGlsZFByb2Nlc3Mua2lsbCgnU0lHSFVQJyk7XG59XG5cbi8qKiBQcm94eSB0aGlzIHNvY2tldCByZXF1ZXN0IHRvIGp1cHl0ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU29ja2V0KFxuICAgIHJlcXVlc3Q6IGh0dHAuSW5jb21pbmdNZXNzYWdlLCBzb2NrZXQ6IG5ldC5Tb2NrZXQsIGhlYWQ6IEJ1ZmZlcikge1xuICBpZiAoIWp1cHl0ZXJTZXJ2ZXIpIHtcbiAgICBsb2dnaW5nLmdldExvZ2dlcigpLmVycm9yKCdKdXB5dGVyIHNlcnZlciBpcyBub3QgcnVubmluZy4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAganVweXRlclNlcnZlci5wcm94eS53cyhyZXF1ZXN0LCBzb2NrZXQsIGhlYWQpO1xufVxuXG4vKiogUHJveHkgdGhpcyBIVFRQIHJlcXVlc3QgdG8ganVweXRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KFxuICAgIHJlcXVlc3Q6IGh0dHAuSW5jb21pbmdNZXNzYWdlLCByZXNwb25zZTogaHR0cC5TZXJ2ZXJSZXNwb25zZSkge1xuICBpZiAoIWp1cHl0ZXJTZXJ2ZXIpIHtcbiAgICByZXNwb25zZS5zdGF0dXNDb2RlID0gNTAwO1xuICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGp1cHl0ZXJTZXJ2ZXIucHJveHkud2ViKHJlcXVlc3QsIHJlc3BvbnNlLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gZXJyb3JIYW5kbGVyKFxuICAgIGVycm9yOiBFcnJvciwgcmVxdWVzdDogaHR0cC5JbmNvbWluZ01lc3NhZ2UsXG4gICAgcmVzcG9uc2U6IGh0dHAuU2VydmVyUmVzcG9uc2UpIHtcbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5lcnJvcihlcnJvciwgJ0p1cHl0ZXIgc2VydmVyIHJldHVybmVkIGVycm9yLicpO1xuXG4gIHJlc3BvbnNlLndyaXRlSGVhZCg1MDAsICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcbiAgcmVzcG9uc2UuZW5kKCk7XG59XG4iXX0=
web/logging.js ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2015 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.initializeLoggers = exports.logRequest = exports.getJupyterLogger = exports.getLogger = void 0;
30
+ var bunyan = require("bunyan");
31
+ var path = require("path");
32
+ // We import the bunyan-rotating-file-stream package, which exports a
33
+ // constructor as a single object; we use lint disables here to make the usage
34
+ // below look reasonable.
35
+ //
36
+ // tslint:disable-next-line:no-require-imports variable-name enforce-name-casing
37
+ var RotatingFileStream = require('bunyan-rotating-file-stream');
38
+ var logger = null;
39
+ var requestLogger = null;
40
+ var jupyterLogger = null;
41
+ /**
42
+ * Gets the logger for generating debug logs.
43
+ * @returns the logger configured for debugging logging.
44
+ */
45
+ function getLogger() {
46
+ return logger;
47
+ }
48
+ exports.getLogger = getLogger;
49
+ /**
50
+ * Gets the logger for generating Jupyter logs.
51
+ * @returns the logger configured for Jupyter logging.
52
+ */
53
+ function getJupyterLogger() {
54
+ return jupyterLogger;
55
+ }
56
+ exports.getJupyterLogger = getJupyterLogger;
57
+ /**
58
+ * Logs a request and the corresponding response.
59
+ * @param request the request to be logged.
60
+ * @param response the response to be logged.
61
+ */
62
+ function logRequest(request, response) {
63
+ requestLogger.debug({ url: request.url, method: request.method }, 'Received a new request');
64
+ response.on('finish', function () {
65
+ requestLogger.debug({
66
+ url: request.url,
67
+ method: request.method,
68
+ status: response.statusCode
69
+ });
70
+ });
71
+ }
72
+ exports.logRequest = logRequest;
73
+ /**
74
+ * Initializes loggers used within the application.
75
+ */
76
+ function initializeLoggers(settings) {
77
+ var e_1, _a;
78
+ // We configure our loggers as follows:
79
+ // * our base logger tags all log records with `"name":"app"`, and sends logs
80
+ // to stderr (including logs of all children)
81
+ // * one child logger adds `"type":"request"`, and records method/URL for all
82
+ // HTTP requests to the app, and method/URL/response code for all responses
83
+ // * one child logger adds `"type":"jupyter"`, and records all messages from
84
+ // the jupyter notebook server. These logs are also sent to a file on disk
85
+ // (to assist user debugging).
86
+ //
87
+ // For more about bunyan, see:
88
+ // https://github.com/trentm/node-bunyan/tree/f21007d46c0e64072617380b70d3f542368318a8
89
+ var jupyterLogPath = path.join(settings.datalabRoot, '/var/colab/app.log');
90
+ logger = bunyan.createLogger({
91
+ name: 'app',
92
+ streams: [
93
+ { level: 'debug', type: 'stream', stream: process.stderr },
94
+ ]
95
+ });
96
+ requestLogger = logger.child({ type: 'request' });
97
+ jupyterLogger = logger.child({
98
+ type: 'jupyter',
99
+ streams: [{
100
+ level: 'info',
101
+ type: 'stream',
102
+ stream: new RotatingFileStream({
103
+ path: jupyterLogPath,
104
+ rotateExisting: false,
105
+ threshold: '2m',
106
+ totalSize: '20m'
107
+ }),
108
+ }]
109
+ });
110
+ // Omit superfluous fields, unless using the bunyan CLI to make logs human
111
+ // readable, because the CLI requires them.
112
+ if (process.env['COLAB_HUMAN_READABLE_NODE_LOGS'] !== '1') {
113
+ try {
114
+ for (var _b = __values([logger, jupyterLogger, requestLogger]), _c = _b.next(); !_c.done; _c = _b.next()) {
115
+ var logs = _c.value;
116
+ delete logs.fields['hostname'];
117
+ delete logs.fields['name'];
118
+ }
119
+ }
120
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
121
+ finally {
122
+ try {
123
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
124
+ }
125
+ finally { if (e_1) throw e_1.error; }
126
+ }
127
+ }
128
+ }
129
+ exports.initializeLoggers = initializeLoggers;
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7Ozs7O0FBRUgsK0JBQWlDO0FBRWpDLDJCQUE2QjtBQUk3QixxRUFBcUU7QUFDckUsOEVBQThFO0FBQzlFLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0YsZ0ZBQWdGO0FBQ2hGLElBQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFbEUsSUFBSSxNQUFNLEdBQXdCLElBQUksQ0FBQztBQUN2QyxJQUFJLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0FBQzlDLElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUM7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixPQUFPLE1BQU8sQ0FBQztBQUNqQixDQUFDO0FBRkQsOEJBRUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsT0FBTyxhQUFjLENBQUM7QUFDeEIsQ0FBQztBQUZELDRDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FDdEIsT0FBNkIsRUFBRSxRQUE2QjtJQUM5RCxhQUFjLENBQUMsS0FBSyxDQUNoQixFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFDLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUMxRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNwQixhQUFjLENBQUMsS0FBSyxDQUFDO1lBQ25CLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVhELGdDQVdDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFxQjs7SUFDckQsdUNBQXVDO0lBQ3ZDLDhFQUE4RTtJQUM5RSxnREFBZ0Q7SUFDaEQsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLGlDQUFpQztJQUNqQyxFQUFFO0lBQ0YsOEJBQThCO0lBQzlCLHdGQUF3RjtJQUN4RixJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUM3RSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUMzQixJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRTtZQUNQLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFDO1NBQ3pEO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxJQUFJLGtCQUFrQixDQUFDO29CQUM3QixJQUFJLEVBQUUsY0FBYztvQkFDcEIsY0FBYyxFQUFFLEtBQUs7b0JBQ3JCLFNBQVMsRUFBRSxJQUFJO29CQUNmLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDO2FBQ0gsQ0FBQztLQUNILENBQUMsQ0FBQztJQUNILDBFQUEwRTtJQUMxRSwyQ0FBMkM7SUFDM0MsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O1lBQzFELEtBQW1CLElBQUEsS0FBQSxTQUFBLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQSxnQkFBQSw0QkFBRSxDQUFDO2dCQUF2RCxJQUFNLElBQUksV0FBQTtnQkFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixDQUFDOzs7Ozs7Ozs7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQXpDRCw4Q0F5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdFxuICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2ZcbiAqIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4gKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBidW55YW4gZnJvbSAnYnVueWFuJztcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0FwcFNldHRpbmdzfSBmcm9tICcuL2FwcFNldHRpbmdzJztcblxuLy8gV2UgaW1wb3J0IHRoZSBidW55YW4tcm90YXRpbmctZmlsZS1zdHJlYW0gcGFja2FnZSwgd2hpY2ggZXhwb3J0cyBhXG4vLyBjb25zdHJ1Y3RvciBhcyBhIHNpbmdsZSBvYmplY3Q7IHdlIHVzZSBsaW50IGRpc2FibGVzIGhlcmUgdG8gbWFrZSB0aGUgdXNhZ2Vcbi8vIGJlbG93IGxvb2sgcmVhc29uYWJsZS5cbi8vXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcmVxdWlyZS1pbXBvcnRzIHZhcmlhYmxlLW5hbWUgZW5mb3JjZS1uYW1lLWNhc2luZ1xuY29uc3QgUm90YXRpbmdGaWxlU3RyZWFtID0gcmVxdWlyZSgnYnVueWFuLXJvdGF0aW5nLWZpbGUtc3RyZWFtJyk7XG5cbmxldCBsb2dnZXI6IGJ1bnlhbi5JTG9nZ2VyfG51bGwgPSBudWxsO1xubGV0IHJlcXVlc3RMb2dnZXI6IGJ1bnlhbi5JTG9nZ2VyfG51bGwgPSBudWxsO1xubGV0IGp1cHl0ZXJMb2dnZXI6IGJ1bnlhbi5JTG9nZ2VyfG51bGwgPSBudWxsO1xuXG4vKipcbiAqIEdldHMgdGhlIGxvZ2dlciBmb3IgZ2VuZXJhdGluZyBkZWJ1ZyBsb2dzLlxuICogQHJldHVybnMgdGhlIGxvZ2dlciBjb25maWd1cmVkIGZvciBkZWJ1Z2dpbmcgbG9nZ2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpOiBidW55YW4uSUxvZ2dlciB7XG4gIHJldHVybiBsb2dnZXIhO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxvZ2dlciBmb3IgZ2VuZXJhdGluZyBKdXB5dGVyIGxvZ3MuXG4gKiBAcmV0dXJucyB0aGUgbG9nZ2VyIGNvbmZpZ3VyZWQgZm9yIEp1cHl0ZXIgbG9nZ2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEp1cHl0ZXJMb2dnZXIoKTogYnVueWFuLklMb2dnZXIge1xuICByZXR1cm4ganVweXRlckxvZ2dlciE7XG59XG5cbi8qKlxuICogTG9ncyBhIHJlcXVlc3QgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlLlxuICogQHBhcmFtIHJlcXVlc3QgdGhlIHJlcXVlc3QgdG8gYmUgbG9nZ2VkLlxuICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXNwb25zZSB0byBiZSBsb2dnZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dSZXF1ZXN0KFxuICAgIHJlcXVlc3Q6IGh0dHAuSW5jb21pbmdNZXNzYWdlLCByZXNwb25zZTogaHR0cC5TZXJ2ZXJSZXNwb25zZSk6IHZvaWQge1xuICByZXF1ZXN0TG9nZ2VyIS5kZWJ1ZyhcbiAgICAgIHt1cmw6IHJlcXVlc3QudXJsLCBtZXRob2Q6IHJlcXVlc3QubWV0aG9kfSwgJ1JlY2VpdmVkIGEgbmV3IHJlcXVlc3QnKTtcbiAgcmVzcG9uc2Uub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICByZXF1ZXN0TG9nZ2VyIS5kZWJ1Zyh7XG4gICAgICB1cmw6IHJlcXVlc3QudXJsLFxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBsb2dnZXJzIHVzZWQgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVMb2dnZXJzKHNldHRpbmdzOiBBcHBTZXR0aW5ncyk6IHZvaWQge1xuICAvLyBXZSBjb25maWd1cmUgb3VyIGxvZ2dlcnMgYXMgZm9sbG93czpcbiAgLy8gICogb3VyIGJhc2UgbG9nZ2VyIHRhZ3MgYWxsIGxvZyByZWNvcmRzIHdpdGggYFwibmFtZVwiOlwiYXBwXCJgLCBhbmQgc2VuZHMgbG9nc1xuICAvLyAgICB0byBzdGRlcnIgKGluY2x1ZGluZyBsb2dzIG9mIGFsbCBjaGlsZHJlbilcbiAgLy8gICogb25lIGNoaWxkIGxvZ2dlciBhZGRzIGBcInR5cGVcIjpcInJlcXVlc3RcImAsIGFuZCByZWNvcmRzIG1ldGhvZC9VUkwgZm9yIGFsbFxuICAvLyAgICBIVFRQIHJlcXVlc3RzIHRvIHRoZSBhcHAsIGFuZCBtZXRob2QvVVJML3Jlc3BvbnNlIGNvZGUgZm9yIGFsbCByZXNwb25zZXNcbiAgLy8gICogb25lIGNoaWxkIGxvZ2dlciBhZGRzIGBcInR5cGVcIjpcImp1cHl0ZXJcImAsIGFuZCByZWNvcmRzIGFsbCBtZXNzYWdlcyBmcm9tXG4gIC8vICAgIHRoZSBqdXB5dGVyIG5vdGVib29rIHNlcnZlci4gVGhlc2UgbG9ncyBhcmUgYWxzbyBzZW50IHRvIGEgZmlsZSBvbiBkaXNrXG4gIC8vICAgICh0byBhc3Npc3QgdXNlciBkZWJ1Z2dpbmcpLlxuICAvL1xuICAvLyBGb3IgbW9yZSBhYm91dCBidW55YW4sIHNlZTpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vdHJlbnRtL25vZGUtYnVueWFuL3RyZWUvZjIxMDA3ZDQ2YzBlNjQwNzI2MTczODBiNzBkM2Y1NDIzNjgzMThhOFxuICBjb25zdCBqdXB5dGVyTG9nUGF0aCA9IHBhdGguam9pbihzZXR0aW5ncy5kYXRhbGFiUm9vdCwgJy92YXIvY29sYWIvYXBwLmxvZycpO1xuICBsb2dnZXIgPSBidW55YW4uY3JlYXRlTG9nZ2VyKHtcbiAgICBuYW1lOiAnYXBwJyxcbiAgICBzdHJlYW1zOiBbXG4gICAgICB7bGV2ZWw6ICdkZWJ1ZycsIHR5cGU6ICdzdHJlYW0nLCBzdHJlYW06IHByb2Nlc3Muc3RkZXJyfSxcbiAgICBdXG4gIH0pO1xuICByZXF1ZXN0TG9nZ2VyID0gbG9nZ2VyLmNoaWxkKHt0eXBlOiAncmVxdWVzdCd9KTtcbiAganVweXRlckxvZ2dlciA9IGxvZ2dlci5jaGlsZCh7XG4gICAgdHlwZTogJ2p1cHl0ZXInLFxuICAgIHN0cmVhbXM6IFt7XG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgdHlwZTogJ3N0cmVhbScsXG4gICAgICBzdHJlYW06IG5ldyBSb3RhdGluZ0ZpbGVTdHJlYW0oe1xuICAgICAgICBwYXRoOiBqdXB5dGVyTG9nUGF0aCxcbiAgICAgICAgcm90YXRlRXhpc3Rpbmc6IGZhbHNlLFxuICAgICAgICB0aHJlc2hvbGQ6ICcybScsXG4gICAgICAgIHRvdGFsU2l6ZTogJzIwbSdcbiAgICAgIH0pLFxuICAgIH1dXG4gIH0pO1xuICAvLyBPbWl0IHN1cGVyZmx1b3VzIGZpZWxkcywgdW5sZXNzIHVzaW5nIHRoZSBidW55YW4gQ0xJIHRvIG1ha2UgbG9ncyBodW1hblxuICAvLyByZWFkYWJsZSwgYmVjYXVzZSB0aGUgQ0xJIHJlcXVpcmVzIHRoZW0uXG4gIGlmIChwcm9jZXNzLmVudlsnQ09MQUJfSFVNQU5fUkVBREFCTEVfTk9ERV9MT0dTJ10gIT09ICcxJykge1xuICAgIGZvciAoY29uc3QgbG9ncyBvZiBbbG9nZ2VyLCBqdXB5dGVyTG9nZ2VyLCByZXF1ZXN0TG9nZ2VyXSkge1xuICAgICAgZGVsZXRlIGxvZ3MuZmllbGRzWydob3N0bmFtZSddO1xuICAgICAgZGVsZXRlIGxvZ3MuZmllbGRzWyduYW1lJ107XG4gICAgfVxuICB9XG59XG4iXX0=
web/lsp/capabilities_node.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzX25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9nZW5maWxlcy90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2xzcC9jYXBhYmlsaXRpZXNfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvdG9jb2wgZnJvbSAnLi9wcm90b2NvbF9ub2RlJztcbmltcG9ydCAqIGFzIHRleHREb2N1bWVudCBmcm9tICcuL3RleHRfZG9jdW1lbnRfbm9kZSc7XG5pbXBvcnQgKiBhcyB3b3Jrc3BhY2UgZnJvbSAnLi93b3Jrc3BhY2Vfbm9kZSc7XG5cbmludGVyZmFjZSBDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV29ya3NwYWNlIHNwZWNpZmljIGNsaWVudCBjYXBhYmlsaXRpZXMuXG4gICAqL1xuICB3b3Jrc3BhY2U/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBhcHBseWluZyBiYXRjaCBlZGl0c1xuICAgICAqIHRvIHRoZSB3b3Jrc3BhY2UgYnkgc3VwcG9ydGluZyB0aGUgcmVxdWVzdFxuICAgICAqICd3b3Jrc3BhY2UvYXBwbHlFZGl0J1xuICAgICAqL1xuICAgIGFwcGx5RWRpdD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gYFdvcmtzcGFjZUVkaXRgc1xuICAgICAqL1xuICAgIHdvcmtzcGFjZUVkaXQ/OiBwcm90b2NvbC5Xb3Jrc3BhY2VFZGl0Q2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gICAgLyoqXG4gICAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgd29ya3NwYWNlL2RpZENoYW5nZUNvbmZpZ3VyYXRpb25gXG4gICAgICogbm90aWZpY2F0aW9uLlxuICAgICAqL1xuICAgIGRpZENoYW5nZUNvbmZpZ3VyYXRpb24/OiB3b3Jrc3BhY2UuRGlkQ2hhbmdlQ29uZmlndXJhdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAgIC8qKlxuICAgICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHdvcmtzcGFjZS9kaWRDaGFuZ2VXYXRjaGVkRmlsZXNgXG4gICAgICogbm90aWZpY2F0aW9uLlxuICAgICAqL1xuICAgIGRpZENoYW5nZVdhdGNoZWRGaWxlcz86IHdvcmtzcGFjZS5EaWRDaGFuZ2VXYXRjaGVkRmlsZXNDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgICAvKipcbiAgICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB3b3Jrc3BhY2Uvc3ltYm9sYCByZXF1ZXN0LlxuICAgICAqL1xuICAgIHN5bWJvbD86IHdvcmtzcGFjZS5Xb3Jrc3BhY2VTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgICAvKipcbiAgICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB3b3Jrc3BhY2UvZXhlY3V0ZUNvbW1hbmRgIHJlcXVlc3QuXG4gICAgICovXG4gICAgZXhlY3V0ZUNvbW1hbmQ/OiBwcm90b2NvbC5FeGVjdXRlQ29tbWFuZENsaWVudENhcGFiaWxpdGllcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgaGFzIHN1cHBvcnQgZm9yIHdvcmtzcGFjZSBmb2xkZXJzLlxuICAgICAqXG4gICAgICogU2luY2UgMy42LjBcbiAgICAgKi9cbiAgICB3b3Jrc3BhY2VGb2xkZXJzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYHdvcmtzcGFjZS9jb25maWd1cmF0aW9uYCByZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIFNpbmNlIDMuNi4wXG4gICAgICovXG4gICAgY29uZmlndXJhdGlvbj86IGJvb2xlYW47XG4gIH07XG5cbiAgLyoqXG4gICAqIFRleHQgZG9jdW1lbnQgc3BlY2lmaWMgY2xpZW50IGNhcGFiaWxpdGllcy5cbiAgICovXG4gIHRleHREb2N1bWVudD86IHRleHREb2N1bWVudC5UZXh0RG9jdW1lbnRDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIFdpbmRvdyBzcGVjaWZpYyBjbGllbnQgY2FwYWJpbGl0aWVzLlxuICAgKi9cbiAgd2luZG93Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY2xpZW50IHN1cHBvcnRzIGhhbmRsaW5nIHByb2dyZXNzIG5vdGlmaWNhdGlvbnMuXG4gICAgICogSWYgc2V0LCBzZXJ2ZXJzIGFyZSBhbGxvd2VkIHRvIHJlcG9ydCBpbiBgd29ya0RvbmVQcm9ncmVzc2AgcHJvcGVydHlcbiAgICAgKiBpbiB0aGUgcmVxdWVzdCBzcGVjaWZpYyBzZXJ2ZXIgY2FwYWJpbGl0aWVzLlxuICAgICAqXG4gICAgICogU2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgd29ya0RvbmVQcm9ncmVzcz86IGJvb2xlYW47XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4cGVyaW1lbnRhbCBjbGllbnQgY2FwYWJpbGl0aWVzLlxuICAgKi9cbiAgZXhwZXJpbWVudGFsPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jaW5pdGlhbGl6ZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5pdGlhbGl6ZSBleHRlbmRzXG4gICAgcHJvdG9jb2wuUmVxdWVzdE1lc3NhZ2U8SW5pdGlhbGl6ZVBhcmFtcz4ge1xuICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5Jbml0aWFsaXplO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNpbml0aWFsaXplXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJbml0aWFsaXplUGFyYW1zIGV4dGVuZHNcbiAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9jZXNzIElEIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgdGhlIHNlcnZlci5cbiAgICogSXMgbnVsbCBpZiB0aGUgcHJvY2VzcyBoYXMgbm90IGJlZW4gc3RhcnRlZCBieSBhbm90aGVyIHByb2Nlc3MuXG4gICAqIElmIHRoZSBwYXJlbnQgcHJvY2VzcyBpcyBub3QgYWxpdmUsIHRoZW4gdGhlIHNlcnZlciBzaG91bGQgZXhpdFxuICAgKiAoc2VlIGV4aXQgbm90aWZpY2F0aW9uKSBpdHMgcHJvY2Vzcy5cbiAgICovXG4gIHByb2Nlc3NJZDogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGllbnRcbiAgICpcbiAgICogQHNpbmNlIDMuMTUuMFxuICAgKi9cbiAgY2xpZW50SW5mbz86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY2xpZW50IGFzIGRlZmluZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50J3MgdmVyc2lvbiBhcyBkZWZpbmVkIGJ5IHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHJvb3RQYXRoIG9mIHRoZSB3b3Jrc3BhY2UuIElzIG51bGxcbiAgICogaWYgbm8gZm9sZGVyIGlzIG9wZW4uXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIGluIGZhdm91ciBvZiByb290VXJpLlxuICAgKi9cbiAgcm9vdFBhdGg/OiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogVGhlIHJvb3RVcmkgb2YgdGhlIHdvcmtzcGFjZS4gSXMgbnVsbCBpZiBub1xuICAgKiBmb2xkZXIgaXMgb3Blbi4gSWYgYm90aCBgcm9vdFBhdGhgIGFuZCBgcm9vdFVyaWAgYXJlIHNldFxuICAgKiBgcm9vdFVyaWAgd2lucy5cbiAgICovXG4gIHJvb3RVcmk6IHByb3RvY29sLkRvY3VtZW50VXJpfG51bGw7XG5cbiAgLyoqXG4gICAqIFVzZXIgcHJvdmlkZWQgaW5pdGlhbGl6YXRpb24gb3B0aW9ucy5cbiAgICovXG4gIGluaXRpYWxpemF0aW9uT3B0aW9ucz86IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCAoZWRpdG9yIG9yIHRvb2wpXG4gICAqL1xuICBjYXBhYmlsaXRpZXM6IENsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgdHJhY2Ugc2V0dGluZy4gSWYgb21pdHRlZCB0cmFjZSBpcyBkaXNhYmxlZCAoJ29mZicpLlxuICAgKi9cbiAgdHJhY2U/OiAnb2ZmJ3wnbWVzc2FnZXMnfCd2ZXJib3NlJztcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBmb2xkZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIGNsaWVudCB3aGVuIHRoZSBzZXJ2ZXIgc3RhcnRzLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjbGllbnQgc3VwcG9ydHMgd29ya3NwYWNlIGZvbGRlcnMuXG4gICAqIEl0IGNhbiBiZSBgbnVsbGAgaWYgdGhlIGNsaWVudCBzdXBwb3J0cyB3b3Jrc3BhY2UgZm9sZGVycyBidXQgbm9uZSBhcmVcbiAgICogY29uZmlndXJlZC5cbiAgICpcbiAgICogQHNpbmNlIDMuNi4wXG4gICAqL1xuICB3b3Jrc3BhY2VGb2xkZXJzPzogd29ya3NwYWNlLldvcmtzcGFjZUZvbGRlcltdfG51bGw7XG59XG4iXX0=
web/lsp/extensions_node.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uc19ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZ2VuZmlsZXMvdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9sc3AvZXh0ZW5zaW9uc19ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAqIGFzIGNhcGFiaWxpdGllcyBmcm9tICcuL2NhcGFiaWxpdGllc19ub2RlJztcbmltcG9ydCAqIGFzIHRleHREb2N1bWVudCBmcm9tICcuL3RleHRfZG9jdW1lbnRfbm9kZSc7XG5cbi8vIHRzbGludDpkaXNhYmxlOmVuZm9yY2UtbmFtZS1jYXNpbmdcblxuLyoqXG4gKiBQYXJhbWV0ZXIgZm9yIGBpbml0aWFsaXplYCBtZXNzYWdlcy5cbiAqIEFkZHMgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZXRoZXIgd2UgcnVuIEF1dG9GaXguXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJbml0aWFsaXplUGFyYW1zIGV4dGVuZHNcbiAgICBjYXBhYmlsaXRpZXMuSW5pdGlhbGl6ZVBhcmFtcyB7XG4gIGF1dG9GaXg6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVyIGZvciBgdGV4dERvY3VtZW50L2RpZE9wZW5gIG1lc3NhZ2VzLlxuICogQWRkcyBhIHByZWFtYmxlIHN0cmluZy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZE9wZW5UZXh0RG9jdW1lbnRQYXJhbXMgZXh0ZW5kc1xuICAgIHRleHREb2N1bWVudC5EaWRPcGVuVGV4dERvY3VtZW50UGFyYW1zIHtcbiAgcmVhZG9ubHkgcHJlYW1ibGU6IHN0cmluZztcbn1cbiJdfQ==
web/lsp/protocol_node.js ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ // tslint:disable:enforce-name-casing
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SymbolTag = exports.SymbolKind = exports.DiagnosticSeverity = exports.DiagnosticTag = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.ErrorCode = exports.Method = void 0;
5
+ /**
6
+ * JSON-RPC Methods.
7
+ */
8
+ var Method;
9
+ (function (Method) {
10
+ Method["CancelRequest"] = "$/cancelRequest";
11
+ Method["ClientRegisterCapability"] = "client/registerCapability";
12
+ Method["ColabPipLogChanged"] = "colab/pipLogChanged";
13
+ Method["CompletionItemResolve"] = "completionItem/resolve";
14
+ Method["Initialize"] = "initialize";
15
+ Method["Initialized"] = "initialized";
16
+ Method["TextDocumentAutoExecuteCheck"] = "textDocument/autoExecuteCheck";
17
+ Method["TextDocumentCodeAction"] = "textDocument/codeAction";
18
+ Method["TextDocumentCompletion"] = "textDocument/completion";
19
+ Method["TextDocumentDefinition"] = "textDocument/definition";
20
+ Method["TextDocumentDidChange"] = "textDocument/didChange";
21
+ Method["TextDocumentDidClose"] = "textDocument/didClose";
22
+ Method["TextDocumentDidOpen"] = "textDocument/didOpen";
23
+ Method["TextDocumentEchoDocument"] = "textDocument/echoDocument";
24
+ Method["TextDocumentHover"] = "textDocument/hover";
25
+ Method["TextDocumentPublishDiagnostics"] = "textDocument/publishDiagnostics";
26
+ Method["TextDocumentRename"] = "textDocument/rename";
27
+ Method["TextDocumentSignatureHelp"] = "textDocument/signatureHelp";
28
+ Method["WindowLogMessage"] = "window/logMessage";
29
+ Method["WorkspaceConfiguration"] = "workspace/configuration";
30
+ Method["WorkspaceDidChangeConfiguration"] = "workspace/didChangeConfiguration";
31
+ Method["WorkspaceDidChangeWatchedFiles"] = "workspace/didChangeWatchedFiles";
32
+ })(Method || (exports.Method = Method = {}));
33
+ /**
34
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#responseMessage
35
+ */
36
+ var ErrorCode;
37
+ (function (ErrorCode) {
38
+ // Defined by JSON RPC
39
+ ErrorCode[ErrorCode["ParseError"] = -32700] = "ParseError";
40
+ ErrorCode[ErrorCode["InvalidRequest"] = -32600] = "InvalidRequest";
41
+ ErrorCode[ErrorCode["MethodNotFound"] = -32601] = "MethodNotFound";
42
+ ErrorCode[ErrorCode["InvalidParams"] = -32602] = "InvalidParams";
43
+ ErrorCode[ErrorCode["InternalError"] = -32603] = "InternalError";
44
+ ErrorCode[ErrorCode["ServerErrorStart"] = -32099] = "ServerErrorStart";
45
+ ErrorCode[ErrorCode["ServerErrorEnd"] = -32000] = "ServerErrorEnd";
46
+ ErrorCode[ErrorCode["ServerNotInitialized"] = -32002] = "ServerNotInitialized";
47
+ ErrorCode[ErrorCode["UnknownErrorCode"] = -32001] = "UnknownErrorCode";
48
+ // Defined by the protocol.
49
+ ErrorCode[ErrorCode["RequestCancelled"] = -32800] = "RequestCancelled";
50
+ ErrorCode[ErrorCode["ContentModified"] = -32801] = "ContentModified";
51
+ })(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
52
+ /**
53
+ * The kind of resource operations supported by the client.
54
+ */
55
+ var ResourceOperationKind;
56
+ (function (ResourceOperationKind) {
57
+ /**
58
+ * Supports creating new files and folders.
59
+ */
60
+ ResourceOperationKind["CREATE"] = "create";
61
+ /**
62
+ * Supports renaming existing files and folders.
63
+ */
64
+ ResourceOperationKind["RENAME"] = "rename";
65
+ /**
66
+ * Supports deleting existing files and folders.
67
+ */
68
+ ResourceOperationKind["DELETE"] = "delete";
69
+ })(ResourceOperationKind || (exports.ResourceOperationKind = ResourceOperationKind = {}));
70
+ /**
71
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspaceEditClientCapabilities
72
+ */
73
+ var FailureHandlingKind;
74
+ (function (FailureHandlingKind) {
75
+ /**
76
+ * Applying the workspace change is simply aborted if one of the changes
77
+ * provided fails.
78
+ * All operations executed before the failing operation stay executed.
79
+ */
80
+ FailureHandlingKind["Abort"] = "abort";
81
+ /**
82
+ * All operations are executed transactional. That means they either all
83
+ * succeed or no changes at all are applied to the workspace.
84
+ */
85
+ FailureHandlingKind["Transactional"] = "transactional";
86
+ /**
87
+ * If the workspace edit contains only textual file changes, they are
88
+ * executed transactionally.
89
+ * If resource changes (create, rename or delete file) are part of the
90
+ * change, the failure handling strategy is abort.
91
+ */
92
+ FailureHandlingKind["TextOnlyTransactional"] = "textOnlyTransactional";
93
+ /**
94
+ * The client tries to undo the operations already executed. But there is no
95
+ * guarantee that this is succeeding.
96
+ */
97
+ FailureHandlingKind["Undo"] = "undo";
98
+ })(FailureHandlingKind || (exports.FailureHandlingKind = FailureHandlingKind = {}));
99
+ /**
100
+ * The diagnostic tags.
101
+ *
102
+ * @since 3.15.0
103
+ */
104
+ var DiagnosticTag;
105
+ (function (DiagnosticTag) {
106
+ /**
107
+ * Unused or unnecessary code.
108
+ *
109
+ * Clients are allowed to render diagnostics with this tag faded out
110
+ * instead of having an error squiggle.
111
+ */
112
+ DiagnosticTag[DiagnosticTag["Unnecessary"] = 1] = "Unnecessary";
113
+ /**
114
+ * Deprecated or obsolete code.
115
+ *
116
+ * Clients are allowed to rendered diagnostics with this tag strike through.
117
+ */
118
+ DiagnosticTag[DiagnosticTag["Deprecated"] = 2] = "Deprecated";
119
+ })(DiagnosticTag || (exports.DiagnosticTag = DiagnosticTag = {}));
120
+ /**
121
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#diagnostic
122
+ */
123
+ var DiagnosticSeverity;
124
+ (function (DiagnosticSeverity) {
125
+ /**
126
+ * Reports an error.
127
+ */
128
+ DiagnosticSeverity[DiagnosticSeverity["Error"] = 1] = "Error";
129
+ /**
130
+ * Reports a warning.
131
+ */
132
+ DiagnosticSeverity[DiagnosticSeverity["Warning"] = 2] = "Warning";
133
+ /**
134
+ * Reports an information.
135
+ */
136
+ DiagnosticSeverity[DiagnosticSeverity["Information"] = 3] = "Information";
137
+ /**
138
+ * Reports a hint.
139
+ */
140
+ DiagnosticSeverity[DiagnosticSeverity["Hint"] = 4] = "Hint";
141
+ })(DiagnosticSeverity || (exports.DiagnosticSeverity = DiagnosticSeverity = {}));
142
+ /**
143
+ * A symbol kind.
144
+ */
145
+ var SymbolKind;
146
+ (function (SymbolKind) {
147
+ SymbolKind[SymbolKind["File"] = 1] = "File";
148
+ SymbolKind[SymbolKind["Module"] = 2] = "Module";
149
+ SymbolKind[SymbolKind["Namespace"] = 3] = "Namespace";
150
+ SymbolKind[SymbolKind["Package"] = 4] = "Package";
151
+ SymbolKind[SymbolKind["Class"] = 5] = "Class";
152
+ SymbolKind[SymbolKind["Method"] = 6] = "Method";
153
+ SymbolKind[SymbolKind["Property"] = 7] = "Property";
154
+ SymbolKind[SymbolKind["Field"] = 8] = "Field";
155
+ SymbolKind[SymbolKind["Constructor"] = 9] = "Constructor";
156
+ SymbolKind[SymbolKind["Enum"] = 10] = "Enum";
157
+ SymbolKind[SymbolKind["Interface"] = 11] = "Interface";
158
+ SymbolKind[SymbolKind["Function"] = 12] = "Function";
159
+ SymbolKind[SymbolKind["Variable"] = 13] = "Variable";
160
+ SymbolKind[SymbolKind["Constant"] = 14] = "Constant";
161
+ SymbolKind[SymbolKind["String"] = 15] = "String";
162
+ SymbolKind[SymbolKind["Number"] = 16] = "Number";
163
+ SymbolKind[SymbolKind["Boolean"] = 17] = "Boolean";
164
+ SymbolKind[SymbolKind["Array"] = 18] = "Array";
165
+ SymbolKind[SymbolKind["Object"] = 19] = "Object";
166
+ SymbolKind[SymbolKind["Key"] = 20] = "Key";
167
+ SymbolKind[SymbolKind["Null"] = 21] = "Null";
168
+ SymbolKind[SymbolKind["EnumMember"] = 22] = "EnumMember";
169
+ SymbolKind[SymbolKind["Struct"] = 23] = "Struct";
170
+ SymbolKind[SymbolKind["Event"] = 24] = "Event";
171
+ SymbolKind[SymbolKind["Operator"] = 25] = "Operator";
172
+ SymbolKind[SymbolKind["TypeParameter"] = 26] = "TypeParameter";
173
+ })(SymbolKind || (exports.SymbolKind = SymbolKind = {}));
174
+ /**
175
+ * Symbol tags are extra annotations that tweak the rendering of a symbol.
176
+ *
177
+ * @since 3.16
178
+ */
179
+ var SymbolTag;
180
+ (function (SymbolTag) {
181
+ /**
182
+ * Render a symbol as obsolete, usually using a strike-out.
183
+ */
184
+ SymbolTag[SymbolTag["Deprecated"] = 1] = "Deprecated";
185
+ })(SymbolTag || (exports.SymbolTag = SymbolTag = {}));
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2xfbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2dlbmZpbGVzL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvbHNwL3Byb3RvY29sX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFxQzs7O0FBRXJDOztHQUVHO0FBQ0gsSUFBWSxNQXVCWDtBQXZCRCxXQUFZLE1BQU07SUFDaEIsMkNBQWlDLENBQUE7SUFDakMsZ0VBQXNELENBQUE7SUFDdEQsb0RBQTBDLENBQUE7SUFDMUMsMERBQWdELENBQUE7SUFDaEQsbUNBQXlCLENBQUE7SUFDekIscUNBQTJCLENBQUE7SUFDM0Isd0VBQThELENBQUE7SUFDOUQsNERBQWtELENBQUE7SUFDbEQsNERBQWtELENBQUE7SUFDbEQsNERBQWtELENBQUE7SUFDbEQsMERBQWdELENBQUE7SUFDaEQsd0RBQThDLENBQUE7SUFDOUMsc0RBQTRDLENBQUE7SUFDNUMsZ0VBQXNELENBQUE7SUFDdEQsa0RBQXdDLENBQUE7SUFDeEMsNEVBQWtFLENBQUE7SUFDbEUsb0RBQTBDLENBQUE7SUFDMUMsa0VBQXdELENBQUE7SUFDeEQsZ0RBQXNDLENBQUE7SUFDdEMsNERBQWtELENBQUE7SUFDbEQsOEVBQW9FLENBQUE7SUFDcEUsNEVBQWtFLENBQUE7QUFDcEUsQ0FBQyxFQXZCVyxNQUFNLHNCQUFOLE1BQU0sUUF1QmpCO0FBcUVEOztHQUVHO0FBQ0gsSUFBWSxTQWVYO0FBZkQsV0FBWSxTQUFTO0lBQ25CLHNCQUFzQjtJQUN0QiwwREFBbUIsQ0FBQTtJQUNuQixrRUFBdUIsQ0FBQTtJQUN2QixrRUFBdUIsQ0FBQTtJQUN2QixnRUFBc0IsQ0FBQTtJQUN0QixnRUFBc0IsQ0FBQTtJQUN0QixzRUFBeUIsQ0FBQTtJQUN6QixrRUFBdUIsQ0FBQTtJQUN2Qiw4RUFBNkIsQ0FBQTtJQUM3QixzRUFBeUIsQ0FBQTtJQUV6QiwyQkFBMkI7SUFDM0Isc0VBQXlCLENBQUE7SUFDekIsb0VBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQWZXLFNBQVMseUJBQVQsU0FBUyxRQWVwQjtBQStLRDs7R0FFRztBQUNILElBQVkscUJBYVg7QUFiRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILDBDQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gsMENBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBYlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFhaEM7QUFFRDs7R0FFRztBQUNILElBQVksbUJBMkJYO0FBM0JELFdBQVksbUJBQW1CO0lBQzdCOzs7O09BSUc7SUFDSCxzQ0FBZSxDQUFBO0lBRWY7OztPQUdHO0lBQ0gsc0RBQStCLENBQUE7SUFFL0I7Ozs7O09BS0c7SUFDSCxzRUFBK0MsQ0FBQTtJQUUvQzs7O09BR0c7SUFDSCxvQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQTNCVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQTJCOUI7QUF3RUQ7Ozs7R0FJRztBQUNILElBQVksYUFjWDtBQWRELFdBQVksYUFBYTtJQUN2Qjs7Ozs7T0FLRztJQUNILCtEQUFlLENBQUE7SUFDZjs7OztPQUlHO0lBQ0gsNkRBQWMsQ0FBQTtBQUNoQixDQUFDLEVBZFcsYUFBYSw2QkFBYixhQUFhLFFBY3hCO0FBK0NEOztHQUVHO0FBQ0gsSUFBWSxrQkFpQlg7QUFqQkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCw2REFBUyxDQUFBO0lBQ1Q7O09BRUc7SUFDSCxpRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5RUFBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCwyREFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWpCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQWlCN0I7QUFtQkQ7O0dBRUc7QUFDSCxJQUFZLFVBMkJYO0FBM0JELFdBQVksVUFBVTtJQUNwQiwyQ0FBUSxDQUFBO0lBQ1IsK0NBQVUsQ0FBQTtJQUNWLHFEQUFhLENBQUE7SUFDYixpREFBVyxDQUFBO0lBQ1gsNkNBQVMsQ0FBQTtJQUNULCtDQUFVLENBQUE7SUFDVixtREFBWSxDQUFBO0lBQ1osNkNBQVMsQ0FBQTtJQUNULHlEQUFlLENBQUE7SUFDZiw0Q0FBUyxDQUFBO0lBQ1Qsc0RBQWMsQ0FBQTtJQUNkLG9EQUFhLENBQUE7SUFDYixvREFBYSxDQUFBO0lBQ2Isb0RBQWEsQ0FBQTtJQUNiLGdEQUFXLENBQUE7SUFDWCxnREFBVyxDQUFBO0lBQ1gsa0RBQVksQ0FBQTtJQUNaLDhDQUFVLENBQUE7SUFDVixnREFBVyxDQUFBO0lBQ1gsMENBQVEsQ0FBQTtJQUNSLDRDQUFTLENBQUE7SUFDVCx3REFBZSxDQUFBO0lBQ2YsZ0RBQVcsQ0FBQTtJQUNYLDhDQUFVLENBQUE7SUFDVixvREFBYSxDQUFBO0lBQ2IsOERBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQTNCVyxVQUFVLDBCQUFWLFVBQVUsUUEyQnJCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksU0FNWDtBQU5ELFdBQVksU0FBUztJQUVuQjs7T0FFRztJQUNILHFEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQU5XLFNBQVMseUJBQVQsU0FBUyxRQU1wQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOmVuZm9yY2UtbmFtZS1jYXNpbmdcblxuLyoqXG4gKiBKU09OLVJQQyBNZXRob2RzLlxuICovXG5leHBvcnQgZW51bSBNZXRob2Qge1xuICBDYW5jZWxSZXF1ZXN0ID0gJyQvY2FuY2VsUmVxdWVzdCcsXG4gIENsaWVudFJlZ2lzdGVyQ2FwYWJpbGl0eSA9ICdjbGllbnQvcmVnaXN0ZXJDYXBhYmlsaXR5JyxcbiAgQ29sYWJQaXBMb2dDaGFuZ2VkID0gJ2NvbGFiL3BpcExvZ0NoYW5nZWQnLFxuICBDb21wbGV0aW9uSXRlbVJlc29sdmUgPSAnY29tcGxldGlvbkl0ZW0vcmVzb2x2ZScsXG4gIEluaXRpYWxpemUgPSAnaW5pdGlhbGl6ZScsXG4gIEluaXRpYWxpemVkID0gJ2luaXRpYWxpemVkJyxcbiAgVGV4dERvY3VtZW50QXV0b0V4ZWN1dGVDaGVjayA9ICd0ZXh0RG9jdW1lbnQvYXV0b0V4ZWN1dGVDaGVjaycsXG4gIFRleHREb2N1bWVudENvZGVBY3Rpb24gPSAndGV4dERvY3VtZW50L2NvZGVBY3Rpb24nLFxuICBUZXh0RG9jdW1lbnRDb21wbGV0aW9uID0gJ3RleHREb2N1bWVudC9jb21wbGV0aW9uJyxcbiAgVGV4dERvY3VtZW50RGVmaW5pdGlvbiA9ICd0ZXh0RG9jdW1lbnQvZGVmaW5pdGlvbicsXG4gIFRleHREb2N1bWVudERpZENoYW5nZSA9ICd0ZXh0RG9jdW1lbnQvZGlkQ2hhbmdlJyxcbiAgVGV4dERvY3VtZW50RGlkQ2xvc2UgPSAndGV4dERvY3VtZW50L2RpZENsb3NlJyxcbiAgVGV4dERvY3VtZW50RGlkT3BlbiA9ICd0ZXh0RG9jdW1lbnQvZGlkT3BlbicsXG4gIFRleHREb2N1bWVudEVjaG9Eb2N1bWVudCA9ICd0ZXh0RG9jdW1lbnQvZWNob0RvY3VtZW50JyxcbiAgVGV4dERvY3VtZW50SG92ZXIgPSAndGV4dERvY3VtZW50L2hvdmVyJyxcbiAgVGV4dERvY3VtZW50UHVibGlzaERpYWdub3N0aWNzID0gJ3RleHREb2N1bWVudC9wdWJsaXNoRGlhZ25vc3RpY3MnLFxuICBUZXh0RG9jdW1lbnRSZW5hbWUgPSAndGV4dERvY3VtZW50L3JlbmFtZScsXG4gIFRleHREb2N1bWVudFNpZ25hdHVyZUhlbHAgPSAndGV4dERvY3VtZW50L3NpZ25hdHVyZUhlbHAnLFxuICBXaW5kb3dMb2dNZXNzYWdlID0gJ3dpbmRvdy9sb2dNZXNzYWdlJyxcbiAgV29ya3NwYWNlQ29uZmlndXJhdGlvbiA9ICd3b3Jrc3BhY2UvY29uZmlndXJhdGlvbicsXG4gIFdvcmtzcGFjZURpZENoYW5nZUNvbmZpZ3VyYXRpb24gPSAnd29ya3NwYWNlL2RpZENoYW5nZUNvbmZpZ3VyYXRpb24nLFxuICBXb3Jrc3BhY2VEaWRDaGFuZ2VXYXRjaGVkRmlsZXMgPSAnd29ya3NwYWNlL2RpZENoYW5nZVdhdGNoZWRGaWxlcycsXG59XG5cbi8qKiBCYXNlIEpTT04tUlBDIDIuMCB0eXBlLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICBqc29ucnBjOiAnMi4wJztcbn1cblxuLyoqXG4gKiBKU09OLVJQQyAyLjAgcmVxdWVzdC5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNyZXF1ZXN0TWVzc2FnZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVxdWVzdE1lc3NhZ2U8VD4gZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGlkLlxuICAgKi9cbiAgaWQ6IG51bWJlcnxzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIHRvIGJlIGludm9rZWQuXG4gICAqL1xuICBtZXRob2Q6IE1ldGhvZDtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QncyBwYXJhbXMuXG4gICAqL1xuICBwYXJhbXM6IFQ7XG59XG5cbi8qKlxuICogSlNPTi1SUEMgMi4wIHJlc3BvbnNlLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3Jlc3BvbnNlTWVzc2FnZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVzcG9uc2VNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBpZC5cbiAgICovXG4gIGlkOiBudW1iZXJ8c3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHQgb2YgYSByZXF1ZXN0LiBUaGlzIG1lbWJlciBpcyBSRVFVSVJFRCBvbiBzdWNjZXNzLlxuICAgKiBUaGlzIG1lbWJlciBNVVNUIE5PVCBleGlzdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW52b2tpbmcgdGhlIG1ldGhvZC5cbiAgICovXG4gIHJlc3VsdD86IHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxvYmplY3R8bnVsbDtcblxuICAvKipcbiAgICogVGhlIGVycm9yIG9iamVjdCBpbiBjYXNlIGEgcmVxdWVzdCBmYWlscy5cbiAgICovXG4gIGVycm9yPzogUmVzcG9uc2VFcnJvcjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jcmVzcG9uc2VNZXNzYWdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZXNwb25zZUVycm9yIHtcbiAgLyoqXG4gICAqIEEgbnVtYmVyIGluZGljYXRpbmcgdGhlIGVycm9yIHR5cGUgdGhhdCBvY2N1cnJlZC5cbiAgICovXG4gIGNvZGU6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzdHJpbmcgcHJvdmlkaW5nIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHByaW1pdGl2ZSBvciBzdHJ1Y3R1cmVkIHZhbHVlIHRoYXQgY29udGFpbnMgYWRkaXRpb25hbFxuICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IuIENhbiBiZSBvbWl0dGVkLlxuICAgKi9cbiAgZGF0YT86IHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnx1bmtub3duW118b2JqZWN0fG51bGw7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3Jlc3BvbnNlTWVzc2FnZVxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBEZWZpbmVkIGJ5IEpTT04gUlBDXG4gIFBhcnNlRXJyb3IgPSAtMzI3MDAsXG4gIEludmFsaWRSZXF1ZXN0ID0gLTMyNjAwLFxuICBNZXRob2ROb3RGb3VuZCA9IC0zMjYwMSxcbiAgSW52YWxpZFBhcmFtcyA9IC0zMjYwMixcbiAgSW50ZXJuYWxFcnJvciA9IC0zMjYwMyxcbiAgU2VydmVyRXJyb3JTdGFydCA9IC0zMjA5OSxcbiAgU2VydmVyRXJyb3JFbmQgPSAtMzIwMDAsXG4gIFNlcnZlck5vdEluaXRpYWxpemVkID0gLTMyMDAyLFxuICBVbmtub3duRXJyb3JDb2RlID0gLTMyMDAxLFxuXG4gIC8vIERlZmluZWQgYnkgdGhlIHByb3RvY29sLlxuICBSZXF1ZXN0Q2FuY2VsbGVkID0gLTMyODAwLFxuICBDb250ZW50TW9kaWZpZWQgPSAtMzI4MDEsXG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI25vdGlmaWNhdGlvbk1lc3NhZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbk1lc3NhZ2U8VD4gZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gYmUgaW52b2tlZC5cbiAgICovXG4gIG1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWZpY2F0aW9uJ3MgcGFyYW1zLlxuICAgKi9cbiAgcGFyYW1zOiBUO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNjYW5jZWxSZXF1ZXN0XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDYW5jZWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJlcXVlc3QgaWQgdG8gY2FuY2VsLlxuICAgKi9cbiAgaWQ6IG51bWJlcnxzdHJpbmc7XG59XG5cbnR5cGUgUHJvZ3Jlc3NUb2tlbiA9IG51bWJlcnxzdHJpbmc7XG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNwcm9ncmVzc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUHJvZ3Jlc3NQYXJhbXM8VD4ge1xuICAvKipcbiAgICogVGhlIHByb2dyZXNzIHRva2VuIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgb3Igc2VydmVyLlxuICAgKi9cbiAgdG9rZW46IFByb2dyZXNzVG9rZW47XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9ncmVzcyBkYXRhLlxuICAgKi9cbiAgdmFsdWU6IFQ7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3VyaVxuICovXG5leHBvcnQgdHlwZSBEb2N1bWVudFVyaSA9IHN0cmluZztcblxuLyoqXG4gKiBQb3NpdGlvbiBpbiBhIHRleHQgZG9jdW1lbnQgZXhwcmVzc2VkIGFzIHplcm8tYmFzZWQgbGluZSBhbmQgemVyby1iYXNlZFxuICogY2hhcmFjdGVyIG9mZnNldC4gQSBwb3NpdGlvbiBpcyBiZXR3ZWVuIHR3byBjaGFyYWN0ZXJzIGxpa2UgYW4g4oCYaW5zZXJ04oCZXG4gKiBjdXJzb3IgaW4gYSBlZGl0b3IuIFNwZWNpYWwgdmFsdWVzIGxpa2UgZm9yIGV4YW1wbGUgLTEgdG8gZGVub3RlIHRoZSBlbmQgb2ZcbiAqIGEgbGluZSBhcmUgbm90IHN1cHBvcnRlZC5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNwb3NpdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICAvKipcbiAgICogTGluZSBwb3NpdGlvbiBpbiBhIGRvY3VtZW50ICh6ZXJvLWJhc2VkKS5cbiAgICovXG4gIGxpbmU6IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hhcmFjdGVyIG9mZnNldCBvbiBhIGxpbmUgaW4gYSBkb2N1bWVudCAoemVyby1iYXNlZCkuIEFzc3VtaW5nIHRoYXQgdGhlXG4gICAqIGxpbmUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcsIHRoZSBgY2hhcmFjdGVyYCB2YWx1ZSByZXByZXNlbnRzIHRoZSBnYXBcbiAgICogYmV0d2VlbiB0aGUgYGNoYXJhY3RlcmAgYW5kIGBjaGFyYWN0ZXIgKyAxYC5cbiAgICpcbiAgICogSWYgdGhlIGNoYXJhY3RlciB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbmUgbGVuZ3RoIGl0IGRlZmF1bHRzIGJhY2tcbiAgICogdG8gdGhlIGxpbmUgbGVuZ3RoLlxuICAgKi9cbiAgY2hhcmFjdGVyOiBudW1iZXI7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3JhbmdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbi5cbiAgICovXG4gIHN0YXJ0OiBQb3NpdGlvbjtcblxuICAvKipcbiAgICogVGhlIHJhbmdlJ3MgZW5kIHBvc2l0aW9uLlxuICAgKi9cbiAgZW5kOiBQb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jbG9jYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIExvY2F0aW9uIHtcbiAgdXJpOiBEb2N1bWVudFVyaTtcbiAgcmFuZ2U6IFJhbmdlO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNsb2NhdGlvbkxpbmtcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIExvY2F0aW9uTGluayB7XG4gIC8qKlxuICAgKiBTcGFuIG9mIHRoZSBvcmlnaW4gb2YgdGhpcyBsaW5rLlxuICAgKlxuICAgKiBVc2VkIGFzIHRoZSB1bmRlcmxpbmVkIHNwYW4gZm9yIG1vdXNlIGludGVyYWN0aW9uLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgd29yZCByYW5nZSBhdCB0aGUgbW91c2UgcG9zaXRpb24uXG4gICAqL1xuICBvcmlnaW5TZWxlY3Rpb25SYW5nZT86IFJhbmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IHJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhpcyBsaW5rLlxuICAgKi9cbiAgdGFyZ2V0VXJpOiBEb2N1bWVudFVyaTtcblxuICAvKipcbiAgICogVGhlIGZ1bGwgdGFyZ2V0IHJhbmdlIG9mIHRoaXMgbGluay5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSB0YXJnZXQgaXMgYSBzeW1ib2wsIHRoZW4gdGFyZ2V0IHJhbmdlIGlzIHRoZSByYW5nZVxuICAgKiBlbmNsb3NpbmcgdGhpcyBzeW1ib2wgbm90IGluY2x1ZGluZyBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgYnV0XG4gICAqIGV2ZXJ5dGhpbmcgZWxzZSBsaWtlIGNvbW1lbnRzLlxuICAgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHR5cGljYWxseSB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgcmFuZ2UgaW4gdGhlIGVkaXRvci5cbiAgICovXG4gIHRhcmdldFJhbmdlOiBSYW5nZTtcblxuICAvKipcbiAgICogVGhlIHJhbmdlIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkIGFuZCByZXZlYWxlZCB3aGVuIHRoaXMgbGluayBpcyBiZWluZ1xuICAgKiBmb2xsb3dlZCwgZm9yIGV4YW1wbGUsIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24uXG4gICAqIE11c3QgYmUgY29udGFpbmVkIGJ5IHRoZSBgdGFyZ2V0UmFuZ2VgLlxuICAgKiBTZWUgYWxzbyBgRG9jdW1lbnRTeW1ib2wjcmFuZ2VgXG4gICAqL1xuICB0YXJnZXRTZWxlY3Rpb25SYW5nZTogUmFuZ2U7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2NvbW1hbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kIHtcbiAgLyoqXG4gICAqIFRpdGxlIG9mIHRoZSBjb21tYW5kLCBsaWtlIGBzYXZlYC5cbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgYWN0dWFsIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEFyZ3VtZW50cyB0aGF0IHRoZSBjb21tYW5kIGhhbmRsZXIgc2hvdWxkIGJlXG4gICAqIGludm9rZWQgd2l0aC5cbiAgICovXG4gIGFyZ3VtZW50cz86IHVua25vd25bXTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlRWRpdENsaWVudENhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgV29ya3NwYWNlRWRpdENsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHZlcnNpb25lZCBkb2N1bWVudCBjaGFuZ2VzIGluIGBXb3Jrc3BhY2VFZGl0YHNcbiAgICovXG4gIGRvY3VtZW50Q2hhbmdlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBvcGVyYXRpb25zIHRoZSBjbGllbnQgc3VwcG9ydHMuIENsaWVudHMgc2hvdWxkIGF0IGxlYXN0XG4gICAqIHN1cHBvcnQgJ2NyZWF0ZScsICdyZW5hbWUnIGFuZCAnZGVsZXRlJyBmaWxlcyBhbmQgZm9sZGVycy5cbiAgICpcbiAgICogQHNpbmNlIDMuMTMuMFxuICAgKi9cbiAgcmVzb3VyY2VPcGVyYXRpb25zPzogUmVzb3VyY2VPcGVyYXRpb25LaW5kW107XG5cbiAgLyoqXG4gICAqIFRoZSBmYWlsdXJlIGhhbmRsaW5nIHN0cmF0ZWd5IG9mIGEgY2xpZW50IGlmIGFwcGx5aW5nIHRoZSB3b3Jrc3BhY2UgZWRpdFxuICAgKiBmYWlscy5cbiAgICpcbiAgICogQHNpbmNlIDMuMTMuMFxuICAgKi9cbiAgZmFpbHVyZUhhbmRsaW5nPzogRmFpbHVyZUhhbmRsaW5nS2luZDtcbn1cblxuLyoqXG4gKiBUaGUga2luZCBvZiByZXNvdXJjZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgZW51bSBSZXNvdXJjZU9wZXJhdGlvbktpbmQge1xuICAvKipcbiAgICogU3VwcG9ydHMgY3JlYXRpbmcgbmV3IGZpbGVzIGFuZCBmb2xkZXJzLlxuICAgKi9cbiAgQ1JFQVRFID0gJ2NyZWF0ZScsXG4gIC8qKlxuICAgKiBTdXBwb3J0cyByZW5hbWluZyBleGlzdGluZyBmaWxlcyBhbmQgZm9sZGVycy5cbiAgICovXG4gIFJFTkFNRSA9ICdyZW5hbWUnLFxuICAvKipcbiAgICogU3VwcG9ydHMgZGVsZXRpbmcgZXhpc3RpbmcgZmlsZXMgYW5kIGZvbGRlcnMuXG4gICAqL1xuICBERUxFVEUgPSAnZGVsZXRlJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlRWRpdENsaWVudENhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZW51bSBGYWlsdXJlSGFuZGxpbmdLaW5kIHtcbiAgLyoqXG4gICAqIEFwcGx5aW5nIHRoZSB3b3Jrc3BhY2UgY2hhbmdlIGlzIHNpbXBseSBhYm9ydGVkIGlmIG9uZSBvZiB0aGUgY2hhbmdlc1xuICAgKiBwcm92aWRlZCBmYWlscy5cbiAgICogQWxsIG9wZXJhdGlvbnMgZXhlY3V0ZWQgYmVmb3JlIHRoZSBmYWlsaW5nIG9wZXJhdGlvbiBzdGF5IGV4ZWN1dGVkLlxuICAgKi9cbiAgQWJvcnQgPSAnYWJvcnQnLFxuXG4gIC8qKlxuICAgKiBBbGwgb3BlcmF0aW9ucyBhcmUgZXhlY3V0ZWQgdHJhbnNhY3Rpb25hbC4gVGhhdCBtZWFucyB0aGV5IGVpdGhlciBhbGxcbiAgICogc3VjY2VlZCBvciBubyBjaGFuZ2VzIGF0IGFsbCBhcmUgYXBwbGllZCB0byB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcblxuICAvKipcbiAgICogSWYgdGhlIHdvcmtzcGFjZSBlZGl0IGNvbnRhaW5zIG9ubHkgdGV4dHVhbCBmaWxlIGNoYW5nZXMsIHRoZXkgYXJlXG4gICAqIGV4ZWN1dGVkIHRyYW5zYWN0aW9uYWxseS5cbiAgICogSWYgcmVzb3VyY2UgY2hhbmdlcyAoY3JlYXRlLCByZW5hbWUgb3IgZGVsZXRlIGZpbGUpIGFyZSBwYXJ0IG9mIHRoZVxuICAgKiBjaGFuZ2UsIHRoZSBmYWlsdXJlIGhhbmRsaW5nIHN0cmF0ZWd5IGlzIGFib3J0LlxuICAgKi9cbiAgVGV4dE9ubHlUcmFuc2FjdGlvbmFsID0gJ3RleHRPbmx5VHJhbnNhY3Rpb25hbCcsXG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgdHJpZXMgdG8gdW5kbyB0aGUgb3BlcmF0aW9ucyBhbHJlYWR5IGV4ZWN1dGVkLiBCdXQgdGhlcmUgaXMgbm9cbiAgICogZ3VhcmFudGVlIHRoYXQgdGhpcyBpcyBzdWNjZWVkaW5nLlxuICAgKi9cbiAgVW5kbyA9ICd1bmRvJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jZG9jdW1lbnRGaWx0ZXJcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50RmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgbGFuZ3VhZ2UgaWQsIGxpa2UgYHR5cGVzY3JpcHRgLlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVXJpIFtzY2hlbWVdKCNVcmkuc2NoZW1lKSwgbGlrZSBgZmlsZWAgb3IgYHVudGl0bGVkYC5cbiAgICovXG4gIHNjaGVtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBnbG9iIHBhdHRlcm4sIGxpa2UgYCoue3RzLGpzfWAuXG4gICAqXG4gICAqIEdsb2IgcGF0dGVybnMgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBzeW50YXg6XG4gICAqIC0gYCpgIHRvIG1hdGNoIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgaW4gYSBwYXRoIHNlZ21lbnRcbiAgICogLSBgP2AgdG8gbWF0Y2ggb24gb25lIGNoYXJhY3RlciBpbiBhIHBhdGggc2VnbWVudFxuICAgKiAtIGAqKmAgdG8gbWF0Y2ggYW55IG51bWJlciBvZiBwYXRoIHNlZ21lbnRzLCBpbmNsdWRpbmcgbm9uZVxuICAgKiAtIGB7fWAgdG8gZ3JvdXAgY29uZGl0aW9uc1xuICAgKiAgIChlLmcuIGAqKuKAiy8qLnt0cyxqc31gIG1hdGNoZXMgYWxsIFR5cGVTY3JpcHQgYW5kIEphdmFTY3JpcHQgZmlsZXMpXG4gICAqIC0gYFtdYCB0byBkZWNsYXJlIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyB0byBtYXRjaCBpbiBhIHBhdGggc2VnbWVudFxuICAgKiAgIChlLmcuLCBgZXhhbXBsZS5bMC05XWAgdG8gbWF0Y2ggb24gYGV4YW1wbGUuMGAsIGBleGFtcGxlLjFgLCDigKYpXG4gICAqIC0gYFshLi4uXWAgdG8gbmVnYXRlIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyB0byBtYXRjaCBpbiBhIHBhdGggc2VnbWVudFxuICAgKiAgIChlLmcuLCBgZXhhbXBsZS5bITAtOV1gIHRvIG1hdGNoIG9uIGBleGFtcGxlLmFgLCBgZXhhbXBsZS5iYCxcbiAgICogICAgYnV0IG5vdCBgZXhhbXBsZS4wYClcbiAgICovXG4gIHBhdHRlcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2RvY3VtZW50RmlsdGVyXG4gKi9cbmV4cG9ydCB0eXBlIERvY3VtZW50U2VsZWN0b3IgPSBEb2N1bWVudEZpbHRlcltdO1xuXG4vKipcbiAqIFN0YXRpYyByZWdpc3RyYXRpb24gb3B0aW9ucyB0byBiZSByZXR1cm5lZCBpbiB0aGUgaW5pdGlhbGl6ZSByZXF1ZXN0LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU3RhdGljUmVnaXN0cmF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgdXNlZCB0byByZWdpc3RlciB0aGUgcmVxdWVzdC4gVGhlIGlkIGNhbiBiZSB1c2VkIHRvIGRlcmVnaXN0ZXJcbiAgICogdGhlIHJlcXVlc3QgYWdhaW4uIFNlZSBhbHNvIFJlZ2lzdHJhdGlvbiNpZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdlbmVyYWwgdGV4dCBkb2N1bWVudCByZWdpc3RyYXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFRleHREb2N1bWVudFJlZ2lzdHJhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogQSBkb2N1bWVudCBzZWxlY3RvciB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhlIHJlZ2lzdHJhdGlvbi5cbiAgICogSWYgc2V0IHRvIG51bGwsIHRoZSBkb2N1bWVudCBzZWxlY3RvciBwcm92aWRlZCBvbiB0aGUgY2xpZW50IHNpZGVcbiAgICogd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgZG9jdW1lbnRTZWxlY3RvcjogRG9jdW1lbnRTZWxlY3RvcnxudWxsO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNpbml0aWF0aW5nV29ya0RvbmVQcm9ncmVzc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgV29ya0RvbmVQcm9ncmVzc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0aGF0IGEgc2VydmVyIGNhbiB1c2UgdG8gcmVwb3J0IHdvcmsgZG9uZSBwcm9ncmVzcy5cbiAgICovXG4gIHdvcmtEb25lVG9rZW4/OiBQcm9ncmVzc1Rva2VuO1xufVxuXG4vKipcbiAqIFRoZSBkaWFnbm9zdGljIHRhZ3MuXG4gKlxuICogQHNpbmNlIDMuMTUuMFxuICovXG5leHBvcnQgZW51bSBEaWFnbm9zdGljVGFnIHtcbiAgLyoqXG4gICAqIFVudXNlZCBvciB1bm5lY2Vzc2FyeSBjb2RlLlxuICAgKlxuICAgKiBDbGllbnRzIGFyZSBhbGxvd2VkIHRvIHJlbmRlciBkaWFnbm9zdGljcyB3aXRoIHRoaXMgdGFnIGZhZGVkIG91dFxuICAgKiBpbnN0ZWFkIG9mIGhhdmluZyBhbiBlcnJvciBzcXVpZ2dsZS5cbiAgICovXG4gIFVubmVjZXNzYXJ5ID0gMSxcbiAgLyoqXG4gICAqIERlcHJlY2F0ZWQgb3Igb2Jzb2xldGUgY29kZS5cbiAgICpcbiAgICogQ2xpZW50cyBhcmUgYWxsb3dlZCB0byByZW5kZXJlZCBkaWFnbm9zdGljcyB3aXRoIHRoaXMgdGFnIHN0cmlrZSB0aHJvdWdoLlxuICAgKi9cbiAgRGVwcmVjYXRlZCA9IDIsXG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2RpYWdub3N0aWNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpYWdub3N0aWMge1xuICAvKipcbiAgICogVGhlIHJhbmdlIGF0IHdoaWNoIHRoZSBtZXNzYWdlIGFwcGxpZXMuXG4gICAqL1xuICByYW5nZTogUmFuZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuIENhbiBiZSBvbWl0dGVkLiBJZiBvbWl0dGVkIGl0IGlzIHVwIHRvIHRoZVxuICAgKiBjbGllbnQgdG8gaW50ZXJwcmV0IGRpYWdub3N0aWNzIGFzIGVycm9yLCB3YXJuaW5nLCBpbmZvIG9yIGhpbnQuXG4gICAqL1xuICBzZXZlcml0eT86IERpYWdub3N0aWNTZXZlcml0eTtcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMncyBjb2RlLCB3aGljaCBtaWdodCBhcHBlYXIgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLlxuICAgKi9cbiAgY29kZT86IG51bWJlcnxzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNvdXJjZSBvZiB0aGlzXG4gICAqIGRpYWdub3N0aWMsIGUuZy4gJ3R5cGVzY3JpcHQnIG9yICdzdXBlciBsaW50Jy5cbiAgICovXG4gIHNvdXJjZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMncyBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIGFib3V0IHRoZSBkaWFnbm9zdGljLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB0YWdzPzogRGlhZ25vc3RpY1RhZ1tdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiByZWxhdGVkIGRpYWdub3N0aWMgaW5mb3JtYXRpb24sIGUuZy4gd2hlbiBzeW1ib2wtbmFtZXMgd2l0aGluXG4gICAqIGEgc2NvcGUgY29sbGlkZSBhbGwgZGVmaW5pdGlvbnMgY2FuIGJlIG1hcmtlZCB2aWEgdGhpcyBwcm9wZXJ0eS5cbiAgICovXG4gIHJlbGF0ZWRJbmZvcm1hdGlvbj86IERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb25bXTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jZGlhZ25vc3RpY1xuICovXG5leHBvcnQgZW51bSBEaWFnbm9zdGljU2V2ZXJpdHkge1xuICAvKipcbiAgICogUmVwb3J0cyBhbiBlcnJvci5cbiAgICovXG4gIEVycm9yID0gMSxcbiAgLyoqXG4gICAqIFJlcG9ydHMgYSB3YXJuaW5nLlxuICAgKi9cbiAgV2FybmluZyA9IDIsXG4gIC8qKlxuICAgKiBSZXBvcnRzIGFuIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgSW5mb3JtYXRpb24gPSAzLFxuICAvKipcbiAgICogUmVwb3J0cyBhIGhpbnQuXG4gICAqL1xuICBIaW50ID0gNCxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVsYXRlZCBtZXNzYWdlIGFuZCBzb3VyY2UgY29kZSBsb2NhdGlvbiBmb3IgYSBkaWFnbm9zdGljLlxuICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byBwb2ludCB0byBjb2RlIGxvY2F0aW9ucyB0aGF0IGNhdXNlIG9yIGFyZSByZWxhdGVkXG4gKiB0byBhIGRpYWdub3N0aWNzLCBmb3IgZXhhbXBsZSwgd2hlbiBkdXBsaWNhdGluZyBhIHN5bWJvbCBpbiBhIHNjb3BlLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGlhZ25vc3RpY1JlbGF0ZWRJbmZvcm1hdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhpcyByZWxhdGVkIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uXG4gICAqL1xuICBsb2NhdGlvbjogTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIG9mIHRoaXMgcmVsYXRlZCBkaWFnbm9zdGljIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3ltYm9sIGtpbmQuXG4gKi9cbmV4cG9ydCBlbnVtIFN5bWJvbEtpbmQge1xuICBGaWxlID0gMSxcbiAgTW9kdWxlID0gMixcbiAgTmFtZXNwYWNlID0gMyxcbiAgUGFja2FnZSA9IDQsXG4gIENsYXNzID0gNSxcbiAgTWV0aG9kID0gNixcbiAgUHJvcGVydHkgPSA3LFxuICBGaWVsZCA9IDgsXG4gIENvbnN0cnVjdG9yID0gOSxcbiAgRW51bSA9IDEwLFxuICBJbnRlcmZhY2UgPSAxMSxcbiAgRnVuY3Rpb24gPSAxMixcbiAgVmFyaWFibGUgPSAxMyxcbiAgQ29uc3RhbnQgPSAxNCxcbiAgU3RyaW5nID0gMTUsXG4gIE51bWJlciA9IDE2LFxuICBCb29sZWFuID0gMTcsXG4gIEFycmF5ID0gMTgsXG4gIE9iamVjdCA9IDE5LFxuICBLZXkgPSAyMCxcbiAgTnVsbCA9IDIxLFxuICBFbnVtTWVtYmVyID0gMjIsXG4gIFN0cnVjdCA9IDIzLFxuICBFdmVudCA9IDI0LFxuICBPcGVyYXRvciA9IDI1LFxuICBUeXBlUGFyYW1ldGVyID0gMjYsXG59XG5cbi8qKlxuICogU3ltYm9sIHRhZ3MgYXJlIGV4dHJhIGFubm90YXRpb25zIHRoYXQgdHdlYWsgdGhlIHJlbmRlcmluZyBvZiBhIHN5bWJvbC5cbiAqXG4gKiBAc2luY2UgMy4xNlxuICovXG5leHBvcnQgZW51bSBTeW1ib2xUYWcge1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBzeW1ib2wgYXMgb2Jzb2xldGUsIHVzdWFsbHkgdXNpbmcgYSBzdHJpa2Utb3V0LlxuICAgKi9cbiAgRGVwcmVjYXRlZCA9IDEsXG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9leGVjdXRlQ29tbWFuZFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogRXhlY3V0ZSBjb21tYW5kIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3BhcnRpYWxSZXN1bHRQYXJhbXNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFBhcnRpYWxSZXN1bHRQYXJhbXMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdG9rZW4gdGhhdCBhIHNlcnZlciBjYW4gdXNlIHRvIHJlcG9ydCBwYXJ0aWFsIHJlc3VsdHMgKGUuZy5cbiAgICogc3RyZWFtaW5nKSB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcGFydGlhbFJlc3VsdFRva2VuPzogUHJvZ3Jlc3NUb2tlbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVnZXIgbnVtYmVyIGluIHRoZSByYW5nZSBvZiAtMl4zMSB0byAyXjMxIC0gMS5cbiAqL1xuZXhwb3J0IHR5cGUgaW50ZWdlciA9IG51bWJlcjtcbi8qKlxuICogRGVmaW5lcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIG51bWJlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byAyXjMxIC0gMS5cbiAqL1xuZXhwb3J0IHR5cGUgdWludGVnZXIgPSBudW1iZXI7XG4vKipcbiAqIERlZmluZXMgYSBkZWNpbWFsIG51bWJlci4gU2luY2UgZGVjaW1hbCBudW1iZXJzIGFyZSB2ZXJ5XG4gKiByYXJlIGluIHRoZSBsYW5ndWFnZSBzZXJ2ZXIgc3BlY2lmaWNhdGlvbiB3ZSBkZW5vdGUgdGhlXG4gKiBleGFjdCByYW5nZSB3aXRoIGV2ZXJ5IGRlY2ltYWwgdXNpbmcgdGhlIG1hdGhlbWF0aWNzXG4gKiBpbnRlcnZhbCBub3RhdGlvbiAoZS5nLiBbMCwgMV0gZGVub3RlcyBhbGwgZGVjaW1hbHMgZCB3aXRoXG4gKiAwIDw9IGQgPD0gMS5cbiAqL1xuZXhwb3J0IHR5cGUgZGVjaW1hbCA9IG51bWJlcjtcblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jaW5pdGlhbGl6ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplZCBleHRlbmRzIE5vdGlmaWNhdGlvbk1lc3NhZ2U8SW5pdGlhbGl6ZWRQYXJhbXM+IHtcbiAgbWV0aG9kOiBNZXRob2QuSW5pdGlhbGl6ZWQ7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2luaXRpYWxpemVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZWRQYXJhbXMge31cblxuLyoqXG4gKiBHZW5lcmFsIHBhcmFtZXRlcnMgdG8gcmVnaXN0ZXIgZm9yIGEgY2FwYWJpbGl0eS5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNjbGllbnRfcmVnaXN0ZXJDYXBhYmlsaXR5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBpZCB1c2VkIHRvIHJlZ2lzdGVyIHRoZSByZXF1ZXN0LiBUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVyZWdpc3RlclxuICAgKiB0aGUgcmVxdWVzdCBhZ2Fpbi5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgLyBjYXBhYmlsaXR5IHRvIHJlZ2lzdGVyIGZvci5cbiAgICovXG4gIG1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIG5lY2Vzc2FyeSBmb3IgdGhlIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHJlZ2lzdGVyT3B0aW9ucz86IHVua25vd247XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2NsaWVudF9yZWdpc3RlckNhcGFiaWxpdHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25QYXJhbXMge1xuICByZWdpc3RyYXRpb25zOiBSZWdpc3RyYXRpb25bXTtcbn1cbiJdfQ==
web/lsp/settings_node.js ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.all = void 0;
4
+ /**
5
+ * Settings which may be used by the Python language server.
6
+ * These are from the default preferences from a VSCode client, culled
7
+ * to the LSP-related values.
8
+ *
9
+ * The difficulty here is that LSP only defines a mechanism to provide
10
+ * generic settings and the server expects the client to send all necessary
11
+ * settings. VSCode sends all Python settings to every Python language server.
12
+ * Furthermore the language server may request specific settings later.
13
+ *
14
+ * See:
15
+ * https://github.com/microsoft/pyright/blob/9d4e58d06643dccbfe0f450070334675b6b64724/docs/settings.md
16
+ */
17
+ exports.all = {
18
+ 'python': {
19
+ 'analysis': {
20
+ 'diagnosticPublishDelay': 1000,
21
+ 'errors': [],
22
+ 'warnings': [],
23
+ 'information': [],
24
+ 'disabled': [],
25
+ 'typeshedPaths': [],
26
+ 'cacheFolderPath': '',
27
+ 'memory': { 'keepLibraryAst': false },
28
+ 'logLevel': 'Warning',
29
+ 'symbolsHierarchyDepthLimit': 10,
30
+ 'completeFunctionParens': false,
31
+ 'autoImportCompletions': true,
32
+ 'autoSearchPaths': true,
33
+ 'stubPath': 'typings',
34
+ 'diagnosticMode': 'openFilesOnly',
35
+ 'extraPaths': [],
36
+ 'useLibraryCodeForTypes': true,
37
+ 'typeCheckingMode': 'basic',
38
+ // See diagnostics explanation at:
39
+ // https://github.com/microsoft/pyright/blob/main/docs/configuration.md
40
+ 'diagnosticSeverityOverrides': {},
41
+ },
42
+ },
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Nfbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2dlbmZpbGVzL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvbHNwL3NldHRpbmdzX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ1UsUUFBQSxHQUFHLEdBQTZCO0lBQzNDLFFBQVEsRUFBRTtRQUNSLFVBQVUsRUFBRTtZQUNWLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsRUFBRTtZQUNkLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsZUFBZSxFQUFFLEVBQUU7WUFDbkIsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixRQUFRLEVBQUUsRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUM7WUFDbkMsVUFBVSxFQUFFLFNBQVM7WUFDckIsNEJBQTRCLEVBQUUsRUFBRTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLO1lBQy9CLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixVQUFVLEVBQUUsU0FBUztZQUNyQixnQkFBZ0IsRUFBRSxlQUFlO1lBQ2pDLFlBQVksRUFBRSxFQUFFO1lBQ2hCLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsa0JBQWtCLEVBQUUsT0FBTztZQUMzQixrQ0FBa0M7WUFDbEMsdUVBQXVFO1lBQ3ZFLDZCQUE2QixFQUFFLEVBQUU7U0FDbEM7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNldHRpbmdzIHdoaWNoIG1heSBiZSB1c2VkIGJ5IHRoZSBQeXRob24gbGFuZ3VhZ2Ugc2VydmVyLlxuICogVGhlc2UgYXJlIGZyb20gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZXMgZnJvbSBhIFZTQ29kZSBjbGllbnQsIGN1bGxlZFxuICogdG8gdGhlIExTUC1yZWxhdGVkIHZhbHVlcy5cbiAqXG4gKiBUaGUgZGlmZmljdWx0eSBoZXJlIGlzIHRoYXQgTFNQIG9ubHkgZGVmaW5lcyBhIG1lY2hhbmlzbSB0byBwcm92aWRlXG4gKiBnZW5lcmljIHNldHRpbmdzIGFuZCB0aGUgc2VydmVyIGV4cGVjdHMgdGhlIGNsaWVudCB0byBzZW5kIGFsbCBuZWNlc3NhcnlcbiAqIHNldHRpbmdzLiBWU0NvZGUgc2VuZHMgYWxsIFB5dGhvbiBzZXR0aW5ncyB0byBldmVyeSBQeXRob24gbGFuZ3VhZ2Ugc2VydmVyLlxuICogRnVydGhlcm1vcmUgdGhlIGxhbmd1YWdlIHNlcnZlciBtYXkgcmVxdWVzdCBzcGVjaWZpYyBzZXR0aW5ncyBsYXRlci5cbiAqXG4gKiBTZWU6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3B5cmlnaHQvYmxvYi85ZDRlNThkMDY2NDNkY2NiZmUwZjQ1MDA3MDMzNDY3NWI2YjY0NzI0L2RvY3Mvc2V0dGluZ3MubWRcbiAqL1xuZXhwb3J0IGNvbnN0IGFsbDoge1trZXk6IHN0cmluZ106IHVua25vd259ID0ge1xuICAncHl0aG9uJzoge1xuICAgICdhbmFseXNpcyc6IHtcbiAgICAgICdkaWFnbm9zdGljUHVibGlzaERlbGF5JzogMTAwMCxcbiAgICAgICdlcnJvcnMnOiBbXSxcbiAgICAgICd3YXJuaW5ncyc6IFtdLFxuICAgICAgJ2luZm9ybWF0aW9uJzogW10sXG4gICAgICAnZGlzYWJsZWQnOiBbXSxcbiAgICAgICd0eXBlc2hlZFBhdGhzJzogW10sXG4gICAgICAnY2FjaGVGb2xkZXJQYXRoJzogJycsXG4gICAgICAnbWVtb3J5JzogeydrZWVwTGlicmFyeUFzdCc6IGZhbHNlfSxcbiAgICAgICdsb2dMZXZlbCc6ICdXYXJuaW5nJyxcbiAgICAgICdzeW1ib2xzSGllcmFyY2h5RGVwdGhMaW1pdCc6IDEwLFxuICAgICAgJ2NvbXBsZXRlRnVuY3Rpb25QYXJlbnMnOiBmYWxzZSxcbiAgICAgICdhdXRvSW1wb3J0Q29tcGxldGlvbnMnOiB0cnVlLFxuICAgICAgJ2F1dG9TZWFyY2hQYXRocyc6IHRydWUsXG4gICAgICAnc3R1YlBhdGgnOiAndHlwaW5ncycsXG4gICAgICAnZGlhZ25vc3RpY01vZGUnOiAnb3BlbkZpbGVzT25seScsXG4gICAgICAnZXh0cmFQYXRocyc6IFtdLFxuICAgICAgJ3VzZUxpYnJhcnlDb2RlRm9yVHlwZXMnOiB0cnVlLFxuICAgICAgJ3R5cGVDaGVja2luZ01vZGUnOiAnYmFzaWMnLFxuICAgICAgLy8gU2VlIGRpYWdub3N0aWNzIGV4cGxhbmF0aW9uIGF0OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9weXJpZ2h0L2Jsb2IvbWFpbi9kb2NzL2NvbmZpZ3VyYXRpb24ubWRcbiAgICAgICdkaWFnbm9zdGljU2V2ZXJpdHlPdmVycmlkZXMnOiB7fSxcbiAgICB9LFxuICB9LFxufTtcbiJdfQ==
web/lsp/text_document_node.js ADDED
@@ -0,0 +1,313 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignatureHelpTriggerKind = exports.InsertTextMode = exports.InsertTextFormat = exports.CodeActionKind = exports.TextDocumentSyncKind = exports.CompletionTriggerKind = exports.LanguageIdentifier = exports.CompletionItemKind = exports.CompletionItemTag = exports.MarkupKind = void 0;
4
+ /**
5
+ * Describes the content type that a client supports in various
6
+ * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
7
+ *
8
+ * Please note that `MarkupKinds` must not start with a `$`. This kinds
9
+ * are reserved for internal usage.
10
+ */
11
+ var MarkupKind;
12
+ (function (MarkupKind) {
13
+ /**
14
+ * Plain text is supported as a content format
15
+ */
16
+ MarkupKind["PlainText"] = "plaintext";
17
+ /**
18
+ * Markdown is supported as a content format
19
+ */
20
+ MarkupKind["Markdown"] = "markdown";
21
+ })(MarkupKind || (exports.MarkupKind = MarkupKind = {}));
22
+ /**
23
+ * Completion item tags are extra annotations that tweak the rendering of
24
+ * a completion item.
25
+ *
26
+ * @since 3.15.0
27
+ */
28
+ var CompletionItemTag;
29
+ (function (CompletionItemTag) {
30
+ /**
31
+ * Render a completion as obsolete, usually using a strike-out.
32
+ */
33
+ CompletionItemTag[CompletionItemTag["Deprecated"] = 1] = "Deprecated";
34
+ })(CompletionItemTag || (exports.CompletionItemTag = CompletionItemTag = {}));
35
+ /**
36
+ * The kind of a completion entry.
37
+ */
38
+ var CompletionItemKind;
39
+ (function (CompletionItemKind) {
40
+ CompletionItemKind[CompletionItemKind["Text"] = 1] = "Text";
41
+ CompletionItemKind[CompletionItemKind["Method"] = 2] = "Method";
42
+ CompletionItemKind[CompletionItemKind["Function"] = 3] = "Function";
43
+ CompletionItemKind[CompletionItemKind["Constructor"] = 4] = "Constructor";
44
+ CompletionItemKind[CompletionItemKind["Field"] = 5] = "Field";
45
+ CompletionItemKind[CompletionItemKind["Variable"] = 6] = "Variable";
46
+ CompletionItemKind[CompletionItemKind["Class"] = 7] = "Class";
47
+ CompletionItemKind[CompletionItemKind["Interface"] = 8] = "Interface";
48
+ CompletionItemKind[CompletionItemKind["Module"] = 9] = "Module";
49
+ CompletionItemKind[CompletionItemKind["Property"] = 10] = "Property";
50
+ CompletionItemKind[CompletionItemKind["Unit"] = 11] = "Unit";
51
+ CompletionItemKind[CompletionItemKind["Value"] = 12] = "Value";
52
+ CompletionItemKind[CompletionItemKind["Enum"] = 13] = "Enum";
53
+ CompletionItemKind[CompletionItemKind["Keyword"] = 14] = "Keyword";
54
+ CompletionItemKind[CompletionItemKind["Snippet"] = 15] = "Snippet";
55
+ CompletionItemKind[CompletionItemKind["Color"] = 16] = "Color";
56
+ CompletionItemKind[CompletionItemKind["File"] = 17] = "File";
57
+ CompletionItemKind[CompletionItemKind["Reference"] = 18] = "Reference";
58
+ CompletionItemKind[CompletionItemKind["Folder"] = 19] = "Folder";
59
+ CompletionItemKind[CompletionItemKind["EnumMember"] = 20] = "EnumMember";
60
+ CompletionItemKind[CompletionItemKind["Constant"] = 21] = "Constant";
61
+ CompletionItemKind[CompletionItemKind["Struct"] = 22] = "Struct";
62
+ CompletionItemKind[CompletionItemKind["Event"] = 23] = "Event";
63
+ CompletionItemKind[CompletionItemKind["Operator"] = 24] = "Operator";
64
+ CompletionItemKind[CompletionItemKind["TypeParameter"] = 25] = "TypeParameter";
65
+ })(CompletionItemKind || (exports.CompletionItemKind = CompletionItemKind = {}));
66
+ /**
67
+ * Known language identifiers.
68
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentItem
69
+ */
70
+ var LanguageIdentifier;
71
+ (function (LanguageIdentifier) {
72
+ LanguageIdentifier["ABAP"] = "abap";
73
+ LanguageIdentifier["WindowsBat"] = "bat";
74
+ LanguageIdentifier["BibTeX"] = "bibtex";
75
+ LanguageIdentifier["Clojure"] = "clojure";
76
+ LanguageIdentifier["Coffeescript"] = "coffeescript";
77
+ LanguageIdentifier["C"] = "c";
78
+ LanguageIdentifier["CPlusPlus"] = "cpp";
79
+ LanguageIdentifier["CSharp"] = "csharp";
80
+ LanguageIdentifier["CSS"] = "css";
81
+ LanguageIdentifier["Diff"] = "diff";
82
+ LanguageIdentifier["Dart"] = "dart";
83
+ LanguageIdentifier["Dockerfile"] = "dockerfile";
84
+ LanguageIdentifier["Elixir"] = "elixir";
85
+ LanguageIdentifier["Erlang"] = "erlang";
86
+ LanguageIdentifier["FSharp"] = "fsharp";
87
+ LanguageIdentifier["GitCommit"] = "git-commit";
88
+ LanguageIdentifier["GitRebase"] = "git-rebase";
89
+ LanguageIdentifier["Go"] = "go";
90
+ LanguageIdentifier["Groovy"] = "groovy";
91
+ LanguageIdentifier["Handlebars"] = "handlebars";
92
+ LanguageIdentifier["HTML"] = "html";
93
+ LanguageIdentifier["Ini"] = "ini";
94
+ LanguageIdentifier["Java"] = "java";
95
+ LanguageIdentifier["JavaScript"] = "javascript";
96
+ LanguageIdentifier["JavaScriptReact"] = "javascriptreact";
97
+ LanguageIdentifier["JSON"] = "json";
98
+ LanguageIdentifier["LaTeX"] = "latex";
99
+ LanguageIdentifier["Less"] = "less";
100
+ LanguageIdentifier["Lua"] = "lua";
101
+ LanguageIdentifier["Makefile"] = "makefile";
102
+ LanguageIdentifier["Markdown"] = "markdown";
103
+ LanguageIdentifier["ObjectiveC"] = "c";
104
+ LanguageIdentifier["ObjectiveCPlusPlus"] = "cpp";
105
+ LanguageIdentifier["Perl"] = "perl";
106
+ LanguageIdentifier["Perl6"] = "perl6";
107
+ LanguageIdentifier["PHP"] = "php";
108
+ LanguageIdentifier["Powershell"] = "powershell";
109
+ LanguageIdentifier["Pug"] = "jade";
110
+ LanguageIdentifier["Python"] = "python";
111
+ LanguageIdentifier["R"] = "r";
112
+ LanguageIdentifier["Razor"] = "razor";
113
+ LanguageIdentifier["Ruby"] = "ruby";
114
+ LanguageIdentifier["Rust"] = "rust";
115
+ LanguageIdentifier["SCSS"] = "scss";
116
+ LanguageIdentifier["Sass"] = "syntax";
117
+ LanguageIdentifier["Scala"] = "scala";
118
+ LanguageIdentifier["ShaderLab"] = "shaderlab";
119
+ LanguageIdentifier["Shell"] = "shellscript";
120
+ LanguageIdentifier["SQL"] = "sql";
121
+ LanguageIdentifier["Swift"] = "swift";
122
+ LanguageIdentifier["TypeScript"] = "typescript";
123
+ LanguageIdentifier["TypeScriptReact"] = "typescriptreact";
124
+ LanguageIdentifier["TeX"] = "tex";
125
+ LanguageIdentifier["VisualBasic"] = "vb";
126
+ LanguageIdentifier["XML"] = "xml";
127
+ LanguageIdentifier["XSL"] = "xsl";
128
+ LanguageIdentifier["YAML"] = "yaml";
129
+ })(LanguageIdentifier || (exports.LanguageIdentifier = LanguageIdentifier = {}));
130
+ /**
131
+ * How a completion was triggered
132
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_completion
133
+ */
134
+ var CompletionTriggerKind;
135
+ (function (CompletionTriggerKind) {
136
+ /**
137
+ * Completion was triggered by typing an identifier (24x7 code
138
+ * complete), manual invocation (e.g Ctrl+Space) or via API.
139
+ */
140
+ CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
141
+ /**
142
+ * Completion was triggered by a trigger character specified by
143
+ * the `triggerCharacters` properties of the
144
+ * `CompletionRegistrationOptions`.
145
+ */
146
+ CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
147
+ /**
148
+ * Completion was re-triggered as the current completion list is incomplete.
149
+ */
150
+ CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
151
+ })(CompletionTriggerKind || (exports.CompletionTriggerKind = CompletionTriggerKind = {}));
152
+ /**
153
+ * Defines how the host (editor) should sync document changes
154
+ * to the language server.
155
+ */
156
+ var TextDocumentSyncKind;
157
+ (function (TextDocumentSyncKind) {
158
+ /**
159
+ * Documents should not be synced at all.
160
+ */
161
+ TextDocumentSyncKind[TextDocumentSyncKind["None"] = 0] = "None";
162
+ /**
163
+ * Documents are synced by always sending the full content
164
+ * of the document.
165
+ */
166
+ TextDocumentSyncKind[TextDocumentSyncKind["Full"] = 1] = "Full";
167
+ /**
168
+ * Documents are synced by sending the full content on open.
169
+ * After that only incremental updates to the document are
170
+ * send.
171
+ */
172
+ TextDocumentSyncKind[TextDocumentSyncKind["Incremental"] = 2] = "Incremental";
173
+ })(TextDocumentSyncKind || (exports.TextDocumentSyncKind = TextDocumentSyncKind = {}));
174
+ /**
175
+ * The kind of a code action.
176
+ *
177
+ * Kinds are a hierarchical list of identifiers separated by `.`,
178
+ * e.g. `"refactor.extract.function"`.
179
+ *
180
+ * The set of kinds is open and the client needs to announce the kinds it
181
+ * supports to the server during initialization.
182
+ */
183
+ var CodeActionKind;
184
+ (function (CodeActionKind) {
185
+ /**
186
+ * Empty kind.
187
+ */
188
+ CodeActionKind["Empty"] = "";
189
+ /**
190
+ * Base kind for quickfix actions: 'quickfix'.
191
+ */
192
+ CodeActionKind["QuickFix"] = "quickfix";
193
+ /**
194
+ * Base kind for refactoring actions: 'refactor'.
195
+ */
196
+ CodeActionKind["Refactor"] = "refactor";
197
+ /**
198
+ * Base kind for refactoring extraction actions: 'refactor.extract'.
199
+ *
200
+ * Example extract actions:
201
+ *
202
+ * - Extract method
203
+ * - Extract function
204
+ * - Extract variable
205
+ * - Extract interface from class
206
+ * - ...
207
+ */
208
+ CodeActionKind["RefactorExtract"] = "refactor.extract";
209
+ /**
210
+ * Base kind for refactoring inline actions: 'refactor.inline'.
211
+ *
212
+ * Example inline actions:
213
+ *
214
+ * - Inline function
215
+ * - Inline variable
216
+ * - Inline constant
217
+ * - ...
218
+ */
219
+ CodeActionKind["RefactorInline"] = "refactor.inline";
220
+ /**
221
+ * Base kind for refactoring rewrite actions: 'refactor.rewrite'.
222
+ *
223
+ * Example rewrite actions:
224
+ *
225
+ * - Convert JavaScript function to class
226
+ * - Add or remove parameter
227
+ * - Encapsulate field
228
+ * - Make method static
229
+ * - Move method to base class
230
+ * - ...
231
+ */
232
+ CodeActionKind["RefactorRewrite"] = "refactor.rewrite";
233
+ /**
234
+ * Base kind for source actions: `source`.
235
+ *
236
+ * Source code actions apply to the entire file.
237
+ */
238
+ CodeActionKind["Source"] = "source";
239
+ /**
240
+ * Base kind for an organize imports source action `source.organizeImports`.
241
+ */
242
+ CodeActionKind["SourceOrganizeImports"] = "source.organizeImports";
243
+ })(CodeActionKind || (exports.CodeActionKind = CodeActionKind = {}));
244
+ /**
245
+ * Defines whether the insert text in a completion item should be interpreted as
246
+ * plain text or a snippet.
247
+ */
248
+ var InsertTextFormat;
249
+ (function (InsertTextFormat) {
250
+ /**
251
+ * The primary text to be inserted is treated as a plain string.
252
+ */
253
+ InsertTextFormat[InsertTextFormat["PlainText"] = 1] = "PlainText";
254
+ /**
255
+ * The primary text to be inserted is treated as a snippet.
256
+ *
257
+ * A snippet can define tab stops and placeholders with `$1`, `$2`
258
+ * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
259
+ * the end of the snippet. Placeholders with equal identifiers are linked,
260
+ * that is typing in one will update others too.
261
+ */
262
+ InsertTextFormat[InsertTextFormat["Snippet"] = 2] = "Snippet";
263
+ })(InsertTextFormat || (exports.InsertTextFormat = InsertTextFormat = {}));
264
+ /**
265
+ * How whitespace and indentation is handled during completion
266
+ * item insertion.
267
+ *
268
+ * @since 3.16.0
269
+ */
270
+ var InsertTextMode;
271
+ (function (InsertTextMode) {
272
+ /**
273
+ * The insertion or replace strings is taken as it is. If the
274
+ * value is multi line the lines below the cursor will be
275
+ * inserted using the indentation defined in the string value.
276
+ * The client will not apply any kind of adjustments to the
277
+ * string.
278
+ */
279
+ InsertTextMode[InsertTextMode["asIs"] = 1] = "asIs";
280
+ /**
281
+ * The editor adjusts leading whitespace of new lines so that
282
+ * they match the indentation up to the cursor of the line for
283
+ * which the item is accepted.
284
+ *
285
+ * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a
286
+ * multi line completion item is indented using 2 tabs and all
287
+ * following lines inserted will be indented using 2 tabs as well.
288
+ */
289
+ InsertTextMode[InsertTextMode["adjustIndentation"] = 2] = "adjustIndentation";
290
+ })(InsertTextMode || (exports.InsertTextMode = InsertTextMode = {}));
291
+ /**
292
+ * How a signature help was triggered.
293
+ *
294
+ * @since 3.15.0
295
+ */
296
+ var SignatureHelpTriggerKind;
297
+ (function (SignatureHelpTriggerKind) {
298
+ /**
299
+ * Signature help was invoked manually by the user or by a command.
300
+ */
301
+ SignatureHelpTriggerKind[SignatureHelpTriggerKind["Invoked"] = 1] = "Invoked";
302
+ /**
303
+ * Signature help was triggered by a trigger character.
304
+ */
305
+ SignatureHelpTriggerKind[SignatureHelpTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
306
+ /**
307
+ * Signature help was triggered by the cursor moving or by the document
308
+ * content changing.
309
+ */
310
+ SignatureHelpTriggerKind[SignatureHelpTriggerKind["ContentChange"] = 3] = "ContentChange";
311
+ })(SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {}));
312
+ // tslint:enable:enforce-name-casing
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dF9kb2N1bWVudF9ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZ2VuZmlsZXMvdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9sc3AvdGV4dF9kb2N1bWVudF9ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVOQTs7Ozs7O0dBTUc7QUFDSCxJQUFZLFVBVVg7QUFWRCxXQUFZLFVBQVU7SUFDcEI7O09BRUc7SUFDSCxxQ0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWVyxVQUFVLDBCQUFWLFVBQVUsUUFVckI7QUFrQkQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxxRUFBYyxDQUFBO0FBQ2hCLENBQUMsRUFMVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQUs1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxrQkEwQlg7QUExQkQsV0FBWSxrQkFBa0I7SUFDNUIsMkRBQVEsQ0FBQTtJQUNSLCtEQUFVLENBQUE7SUFDVixtRUFBWSxDQUFBO0lBQ1oseUVBQWUsQ0FBQTtJQUNmLDZEQUFTLENBQUE7SUFDVCxtRUFBWSxDQUFBO0lBQ1osNkRBQVMsQ0FBQTtJQUNULHFFQUFhLENBQUE7SUFDYiwrREFBVSxDQUFBO0lBQ1Ysb0VBQWEsQ0FBQTtJQUNiLDREQUFTLENBQUE7SUFDVCw4REFBVSxDQUFBO0lBQ1YsNERBQVMsQ0FBQTtJQUNULGtFQUFZLENBQUE7SUFDWixrRUFBWSxDQUFBO0lBQ1osOERBQVUsQ0FBQTtJQUNWLDREQUFTLENBQUE7SUFDVCxzRUFBYyxDQUFBO0lBQ2QsZ0VBQVcsQ0FBQTtJQUNYLHdFQUFlLENBQUE7SUFDZixvRUFBYSxDQUFBO0lBQ2IsZ0VBQVcsQ0FBQTtJQUNYLDhEQUFVLENBQUE7SUFDVixvRUFBYSxDQUFBO0lBQ2IsOEVBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQTFCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBCN0I7QUEwREQ7OztHQUdHO0FBQ0gsSUFBWSxrQkEwRFg7QUExREQsV0FBWSxrQkFBa0I7SUFDNUIsbUNBQWEsQ0FBQTtJQUNiLHdDQUFrQixDQUFBO0lBQ2xCLHVDQUFpQixDQUFBO0lBQ2pCLHlDQUFtQixDQUFBO0lBQ25CLG1EQUE2QixDQUFBO0lBQzdCLDZCQUFPLENBQUE7SUFDUCx1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQixpQ0FBVyxDQUFBO0lBQ1gsbUNBQWEsQ0FBQTtJQUNiLG1DQUFhLENBQUE7SUFDYiwrQ0FBeUIsQ0FBQTtJQUN6Qix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQiw4Q0FBd0IsQ0FBQTtJQUN4Qiw4Q0FBd0IsQ0FBQTtJQUN4QiwrQkFBUyxDQUFBO0lBQ1QsdUNBQWlCLENBQUE7SUFDakIsK0NBQXlCLENBQUE7SUFDekIsbUNBQWEsQ0FBQTtJQUNiLGlDQUFXLENBQUE7SUFDWCxtQ0FBYSxDQUFBO0lBQ2IsK0NBQXlCLENBQUE7SUFDekIseURBQW1DLENBQUE7SUFDbkMsbUNBQWEsQ0FBQTtJQUNiLHFDQUFlLENBQUE7SUFDZixtQ0FBYSxDQUFBO0lBQ2IsaUNBQVcsQ0FBQTtJQUNYLDJDQUFxQixDQUFBO0lBQ3JCLDJDQUFxQixDQUFBO0lBQ3JCLHNDQUFnQixDQUFBO0lBQ2hCLGdEQUEwQixDQUFBO0lBQzFCLG1DQUFhLENBQUE7SUFDYixxQ0FBZSxDQUFBO0lBQ2YsaUNBQVcsQ0FBQTtJQUNYLCtDQUF5QixDQUFBO0lBQ3pCLGtDQUFZLENBQUE7SUFDWix1Q0FBaUIsQ0FBQTtJQUNqQiw2QkFBTyxDQUFBO0lBQ1AscUNBQWUsQ0FBQTtJQUNmLG1DQUFhLENBQUE7SUFDYixtQ0FBYSxDQUFBO0lBQ2IsbUNBQWEsQ0FBQTtJQUNiLHFDQUFlLENBQUE7SUFDZixxQ0FBZSxDQUFBO0lBQ2YsNkNBQXVCLENBQUE7SUFDdkIsMkNBQXFCLENBQUE7SUFDckIsaUNBQVcsQ0FBQTtJQUNYLHFDQUFlLENBQUE7SUFDZiwrQ0FBeUIsQ0FBQTtJQUN6Qix5REFBbUMsQ0FBQTtJQUNuQyxpQ0FBVyxDQUFBO0lBQ1gsd0NBQWtCLENBQUE7SUFDbEIsaUNBQVcsQ0FBQTtJQUNYLGlDQUFXLENBQUE7SUFDWCxtQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQTFEVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBEN0I7QUF1TEQ7OztHQUdHO0FBQ0gsSUFBWSxxQkFrQlg7QUFsQkQsV0FBWSxxQkFBcUI7SUFDL0I7OztPQUdHO0lBQ0gsdUVBQVcsQ0FBQTtJQUVYOzs7O09BSUc7SUFDSCx5RkFBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILHVIQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFsQlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFrQmhDO0FBb1REOzs7R0FHRztBQUNILElBQVksb0JBa0JYO0FBbEJELFdBQVksb0JBQW9CO0lBQzlCOztPQUVHO0lBQ0gsK0RBQVEsQ0FBQTtJQUVSOzs7T0FHRztJQUNILCtEQUFRLENBQUE7SUFFUjs7OztPQUlHO0lBQ0gsNkVBQWUsQ0FBQTtBQUNqQixDQUFDLEVBbEJXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBa0IvQjtBQW1RRDs7Ozs7Ozs7R0FRRztBQUNILElBQVksY0FtRVg7QUFuRUQsV0FBWSxjQUFjO0lBRXhCOztPQUVHO0lBQ0gsNEJBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsdUNBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCx1Q0FBcUIsQ0FBQTtJQUVyQjs7Ozs7Ozs7OztPQVVHO0lBQ0gsc0RBQW9DLENBQUE7SUFFcEM7Ozs7Ozs7OztPQVNHO0lBQ0gsb0RBQWtDLENBQUE7SUFFbEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxzREFBb0MsQ0FBQTtJQUVwQzs7OztPQUlHO0lBQ0gsbUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxrRUFBZ0QsQ0FBQTtBQUNsRCxDQUFDLEVBbkVXLGNBQWMsOEJBQWQsY0FBYyxRQW1FekI7QUEwRUQ7OztHQUdHO0FBQ0gsSUFBWSxnQkFlWDtBQWZELFdBQVksZ0JBQWdCO0lBQzFCOztPQUVHO0lBQ0gsaUVBQWEsQ0FBQTtJQUViOzs7Ozs7O09BT0c7SUFDSCw2REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWZXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBZTNCO0FBd0JEOzs7OztHQUtHO0FBQ0gsSUFBWSxjQW9CWDtBQXBCRCxXQUFZLGNBQWM7SUFDeEI7Ozs7OztPQU1HO0lBQ0gsbURBQVEsQ0FBQTtJQUVSOzs7Ozs7OztPQVFHO0lBQ0gsNkVBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQXBCVyxjQUFjLDhCQUFkLGNBQWMsUUFvQnpCO0FBbU5EOzs7O0dBSUc7QUFDSCxJQUFZLHdCQWNYO0FBZEQsV0FBWSx3QkFBd0I7SUFDbEM7O09BRUc7SUFDSCw2RUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCwrRkFBb0IsQ0FBQTtJQUNwQjs7O09BR0c7SUFDSCx5RkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBZFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFjbkM7QUFvU0Qsb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvdG9jb2wgZnJvbSAnLi9wcm90b2NvbF9ub2RlJztcbmltcG9ydCAqIGFzIHdvcmtzcGFjZSBmcm9tICcuL3dvcmtzcGFjZV9ub2RlJztcblxuLy8gdHNsaW50OmRpc2FibGU6ZW5mb3JjZS1uYW1lLWNhc2luZ1xuXG4vKipcbiAqIFRleHQgZG9jdW1lbnQgc3BlY2lmaWMgY2xpZW50IGNhcGFiaWxpdGllcy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFRleHREb2N1bWVudENsaWVudENhcGFiaWxpdGllcyB7XG4gIHN5bmNocm9uaXphdGlvbj86IFRleHREb2N1bWVudFN5bmNDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9jb21wbGV0aW9uYCByZXF1ZXN0LlxuICAgKi9cbiAgY29tcGxldGlvbj86IENvbXBsZXRpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9ob3ZlcmAgcmVxdWVzdC5cbiAgICovXG4gIGhvdmVyPzogSG92ZXJDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9zaWduYXR1cmVIZWxwYCByZXF1ZXN0LlxuICAgKi9cbiAgc2lnbmF0dXJlSGVscD86IFNpZ25hdHVyZUhlbHBDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kZWNsYXJhdGlvbmAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuMTQuMFxuICAgKi9cbiAgZGVjbGFyYXRpb24/OiBEZWNsYXJhdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RlZmluaXRpb25gIHJlcXVlc3QuXG4gICAqL1xuICBkZWZpbml0aW9uPzogRGVmaW5pdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3R5cGVEZWZpbml0aW9uYCByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2luY2UgMy42LjBcbiAgICovXG4gIHR5cGVEZWZpbml0aW9uPzogVHlwZURlZmluaXRpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9pbXBsZW1lbnRhdGlvbmAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuNi4wXG4gICAqL1xuICBpbXBsZW1lbnRhdGlvbj86IEltcGxlbWVudGF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvcmVmZXJlbmNlc2AgcmVxdWVzdC5cbiAgICovXG4gIHJlZmVyZW5jZXM/OiBSZWZlcmVuY2VDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudEhpZ2hsaWdodGAgcmVxdWVzdC5cbiAgICovXG4gIGRvY3VtZW50SGlnaGxpZ2h0PzogRG9jdW1lbnRIaWdobGlnaHRDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudFN5bWJvbGAgcmVxdWVzdC5cbiAgICovXG4gIGRvY3VtZW50U3ltYm9sPzogRG9jdW1lbnRTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9jb2RlQWN0aW9uYCByZXF1ZXN0LlxuICAgKi9cbiAgY29kZUFjdGlvbj86IENvZGVBY3Rpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9jb2RlTGVuc2AgcmVxdWVzdC5cbiAgICovXG4gIGNvZGVMZW5zPzogQ29kZUxlbnNDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudExpbmtgIHJlcXVlc3QuXG4gICAqL1xuICBkb2N1bWVudExpbms/OiBEb2N1bWVudExpbmtDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudENvbG9yYCBhbmQgdGhlXG4gICAqIGB0ZXh0RG9jdW1lbnQvY29sb3JQcmVzZW50YXRpb25gIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzaW5jZSAzLjYuMFxuICAgKi9cbiAgY29sb3JQcm92aWRlcj86IERvY3VtZW50Q29sb3JDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9mb3JtYXR0aW5nYCByZXF1ZXN0LlxuICAgKi9cbiAgZm9ybWF0dGluZz86IERvY3VtZW50Rm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3JhbmdlRm9ybWF0dGluZ2AgcmVxdWVzdC5cbiAgICovXG4gIHJhbmdlRm9ybWF0dGluZz86IERvY3VtZW50UmFuZ2VGb3JtYXR0aW5nQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiByZXF1ZXN0LlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvb25UeXBlRm9ybWF0dGluZ2AgcmVxdWVzdC5cbiAgICovXG4gIG9uVHlwZUZvcm1hdHRpbmc/OiBEb2N1bWVudE9uVHlwZUZvcm1hdHRpbmdDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9yZW5hbWVgIHJlcXVlc3QuXG4gICAqL1xuICByZW5hbWU/OiBSZW5hbWVDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9wdWJsaXNoRGlhZ25vc3RpY3NgXG4gICAqIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHB1Ymxpc2hEaWFnbm9zdGljcz86IFB1Ymxpc2hEaWFnbm9zdGljc0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2ZvbGRpbmdSYW5nZWAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuMTAuMFxuICAgKi9cbiAgZm9sZGluZ1JhbmdlPzogRm9sZGluZ1JhbmdlQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvc2VsZWN0aW9uUmFuZ2VgIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE1LjBcbiAgICovXG4gIHNlbGVjdGlvblJhbmdlPzogU2VsZWN0aW9uUmFuZ2VDbGllbnRDYXBhYmlsaXRpZXM7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb21wbGV0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgY29tcGxldGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYENvbXBsZXRpb25JdGVtYCBzcGVjaWZpY1xuICAgKiBjYXBhYmlsaXRpZXMuXG4gICAqL1xuICBjb21wbGV0aW9uSXRlbT86IHtcbiAgICAvKipcbiAgICAgKiBDbGllbnQgc3VwcG9ydHMgc25pcHBldHMgYXMgaW5zZXJ0IHRleHQuXG4gICAgICpcbiAgICAgKiBBIHNuaXBwZXQgY2FuIGRlZmluZSB0YWIgc3RvcHMgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGAkMWAsIGAkMmBcbiAgICAgKiBhbmQgYCR7Mzpmb299YC4gYCQwYCBkZWZpbmVzIHRoZSBmaW5hbCB0YWIgc3RvcCwgaXQgZGVmYXVsdHMgdG9cbiAgICAgKiB0aGUgZW5kIG9mIHRoZSBzbmlwcGV0LlxuICAgICAqIFBsYWNlaG9sZGVycyB3aXRoIGVxdWFsIGlkZW50aWZpZXJzIGFyZSBsaW5rZWQsIHNvIHRoYXQgdHlwaW5nIGluXG4gICAgICogb25lIHdpbGwgdXBkYXRlIG90aGVycyBhcyB3ZWxsLlxuICAgICAqL1xuICAgIHNuaXBwZXRTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyBjb21taXQgY2hhcmFjdGVycyBvbiBhIGNvbXBsZXRpb24gaXRlbS5cbiAgICAgKi9cbiAgICBjb21taXRDaGFyYWN0ZXJzU3VwcG9ydD86IGJvb2xlYW5cblxuICAvKipcbiAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3cgY29udGVudCBmb3JtYXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvblxuICAgKiBwcm9wZXJ0eS4gVGhlIG9yZGVyIGRlc2NyaWJlcyB0aGUgcHJlZmVycmVkIGZvcm1hdCBvZiB0aGUgY2xpZW50LlxuICAgKi9cbiAgICBkb2N1bWVudGF0aW9uRm9ybWF0PzogTWFya3VwS2luZFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBkZXByZWNhdGVkIHByb3BlcnR5IG9uIGEgY29tcGxldGlvbiBpdGVtLlxuICAgICAqL1xuICAgIGRlcHJlY2F0ZWRTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgcHJlc2VsZWN0IHByb3BlcnR5IG9uIGEgY29tcGxldGlvbiBpdGVtLlxuICAgICAqL1xuICAgIHByZXNlbGVjdFN1cHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSB0YWcgcHJvcGVydHkgb24gYSBjb21wbGV0aW9uIGl0ZW0uXG4gICAgICogQ2xpZW50cyBzdXBwb3J0aW5nIHRhZ3MgaGF2ZSB0byBoYW5kbGUgdW5rbm93biB0YWdzIGdyYWNlZnVsbHkuXG4gICAgICogQ2xpZW50cyBlc3BlY2lhbGx5IG5lZWQgdG8gcHJlc2VydmUgdW5rbm93biB0YWdzIHdoZW4gc2VuZGluZ1xuICAgICAqIGEgY29tcGxldGlvbiBpdGVtIGJhY2sgdG8gdGhlIHNlcnZlciBpbiBhIHJlc29sdmUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB0YWdTdXBwb3J0Pzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ6IENvbXBsZXRpb25JdGVtVGFnW11cbiAgICB9XG4gIH07XG5cbiAgICBjb21wbGV0aW9uSXRlbUtpbmQ/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjb21wbGV0aW9uIGl0ZW0ga2luZCB2YWx1ZXMgdGhlIGNsaWVudCBzdXBwb3J0cy4gV2hlbiB0aGlzXG4gICAgICAgKiBwcm9wZXJ0eSBleGlzdHMgdGhlIGNsaWVudCBhbHNvIGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsXG4gICAgICAgKiBoYW5kbGUgdmFsdWVzIG91dHNpZGUgaXRzIHNldCBncmFjZWZ1bGx5IGFuZCBmYWxscyBiYWNrXG4gICAgICAgKiB0byBhIGRlZmF1bHQgdmFsdWUgd2hlbiB1bmtub3duLlxuICAgICAgICpcbiAgICAgICAqIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQgdGhlIGNsaWVudCBvbmx5IHN1cHBvcnRzXG4gICAgICAgKiB0aGUgY29tcGxldGlvbiBpdGVtcyBraW5kcyBmcm9tIGBUZXh0YCB0byBgUmVmZXJlbmNlYCBhcyBkZWZpbmVkIGluXG4gICAgICAgKiB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ/OiBDb21wbGV0aW9uSXRlbUtpbmRbXTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyB0byBzZW5kIGFkZGl0aW9uYWwgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgYVxuICAgICAqIGB0ZXh0RG9jdW1lbnQvY29tcGxldGlvbmAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBjb250ZXh0U3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBjb250ZW50IHR5cGUgdGhhdCBhIGNsaWVudCBzdXBwb3J0cyBpbiB2YXJpb3VzXG4gKiByZXN1bHQgbGl0ZXJhbHMgbGlrZSBgSG92ZXJgLCBgUGFyYW1ldGVySW5mb2Agb3IgYENvbXBsZXRpb25JdGVtYC5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IGBNYXJrdXBLaW5kc2AgbXVzdCBub3Qgc3RhcnQgd2l0aCBhIGAkYC4gVGhpcyBraW5kc1xuICogYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZS5cbiAqL1xuZXhwb3J0IGVudW0gTWFya3VwS2luZCB7XG4gIC8qKlxuICAgKiBQbGFpbiB0ZXh0IGlzIHN1cHBvcnRlZCBhcyBhIGNvbnRlbnQgZm9ybWF0XG4gICAqL1xuICBQbGFpblRleHQgPSAncGxhaW50ZXh0JyxcblxuICAvKipcbiAgICogTWFya2Rvd24gaXMgc3VwcG9ydGVkIGFzIGEgY29udGVudCBmb3JtYXRcbiAgICovXG4gIE1hcmtkb3duID0gJ21hcmtkb3duJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2hvdmVyXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBIb3ZlckNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBob3ZlciBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgZm9sbG93IGNvbnRlbnQgZm9ybWF0cyBmb3IgdGhlIGNvbnRlbnRcbiAgICAgKiBwcm9wZXJ0eS4gVGhlIG9yZGVyIGRlc2NyaWJlcyB0aGUgcHJlZmVycmVkIGZvcm1hdCBvZiB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIGNvbnRlbnRGb3JtYXQ/OiBNYXJrdXBLaW5kW107XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBpdGVtIHRhZ3MgYXJlIGV4dHJhIGFubm90YXRpb25zIHRoYXQgdHdlYWsgdGhlIHJlbmRlcmluZyBvZlxuICogYSBjb21wbGV0aW9uIGl0ZW0uXG4gKlxuICogQHNpbmNlIDMuMTUuMFxuICovXG5leHBvcnQgZW51bSBDb21wbGV0aW9uSXRlbVRhZyB7XG4gIC8qKlxuICAgKiBSZW5kZXIgYSBjb21wbGV0aW9uIGFzIG9ic29sZXRlLCB1c3VhbGx5IHVzaW5nIGEgc3RyaWtlLW91dC5cbiAgICovXG4gIERlcHJlY2F0ZWQgPSAxLFxufVxuXG4vKipcbiAqIFRoZSBraW5kIG9mIGEgY29tcGxldGlvbiBlbnRyeS5cbiAqL1xuZXhwb3J0IGVudW0gQ29tcGxldGlvbkl0ZW1LaW5kIHtcbiAgVGV4dCA9IDEsXG4gIE1ldGhvZCA9IDIsXG4gIEZ1bmN0aW9uID0gMyxcbiAgQ29uc3RydWN0b3IgPSA0LFxuICBGaWVsZCA9IDUsXG4gIFZhcmlhYmxlID0gNixcbiAgQ2xhc3MgPSA3LFxuICBJbnRlcmZhY2UgPSA4LFxuICBNb2R1bGUgPSA5LFxuICBQcm9wZXJ0eSA9IDEwLFxuICBVbml0ID0gMTEsXG4gIFZhbHVlID0gMTIsXG4gIEVudW0gPSAxMyxcbiAgS2V5d29yZCA9IDE0LFxuICBTbmlwcGV0ID0gMTUsXG4gIENvbG9yID0gMTYsXG4gIEZpbGUgPSAxNyxcbiAgUmVmZXJlbmNlID0gMTgsXG4gIEZvbGRlciA9IDE5LFxuICBFbnVtTWVtYmVyID0gMjAsXG4gIENvbnN0YW50ID0gMjEsXG4gIFN0cnVjdCA9IDIyLFxuICBFdmVudCA9IDIzLFxuICBPcGVyYXRvciA9IDI0LFxuICBUeXBlUGFyYW1ldGVyID0gMjUsXG59XG5cblxuLyoqXG4gKiBBbiBpdGVtIHRvIHRyYW5zZmVyIGEgdGV4dCBkb2N1bWVudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRJdGVtXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRJdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkb2N1bWVudCdzIFVSSS5cbiAgICAgKi9cbiAgICB1cmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgZG9jdW1lbnQncyBsYW5ndWFnZSBpZGVudGlmaWVyLlxuICAgICAqL1xuICAgIGxhbmd1YWdlSWQ6IExhbmd1YWdlSWRlbnRpZmllcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGRvY3VtZW50IChpdCB3aWxsIGluY3JlYXNlIGFmdGVyIGVhY2hcbiAgICAgKiBjaGFuZ2UsIGluY2x1ZGluZyB1bmRvL3JlZG8pLlxuICAgICAqL1xuICAgIHZlcnNpb246IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBvcGVuZWQgdGV4dCBkb2N1bWVudC5cbiAgICAgKi9cbiAgICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRPcGVuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRPcGVuVGV4dERvY3VtZW50UGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZG9jdW1lbnQgdGhhdCB3YXMgb3BlbmVkLlxuICAgICAqL1xuICAgIHRleHREb2N1bWVudDogVGV4dERvY3VtZW50SXRlbTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZE9wZW5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZE9wZW5UZXh0RG9jdW1lbnQgZXh0ZW5kc1xuICAgIHByb3RvY29sLk5vdGlmaWNhdGlvbk1lc3NhZ2U8RGlkT3BlblRleHREb2N1bWVudFBhcmFtcz4ge1xuICAgIG1ldGhvZDogcHJvdG9jb2wuTWV0aG9kLlRleHREb2N1bWVudERpZE9wZW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRDbG9zZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGlkQ2xvc2VUZXh0RG9jdW1lbnRQYXJhbXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBkb2N1bWVudCB0aGF0IHdhcyBjbG9zZWQuXG4gICAgICovXG4gICAgdGV4dERvY3VtZW50OiBUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xufVxuXG4vKipcbiAqIEtub3duIGxhbmd1YWdlIGlkZW50aWZpZXJzLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudEl0ZW1cbiAqL1xuZXhwb3J0IGVudW0gTGFuZ3VhZ2VJZGVudGlmaWVyIHtcbiAgQUJBUCA9ICdhYmFwJyxcbiAgV2luZG93c0JhdCA9ICdiYXQnLFxuICBCaWJUZVggPSAnYmlidGV4JyxcbiAgQ2xvanVyZSA9ICdjbG9qdXJlJyxcbiAgQ29mZmVlc2NyaXB0ID0gJ2NvZmZlZXNjcmlwdCcsXG4gIEMgPSAnYycsXG4gIENQbHVzUGx1cyA9ICdjcHAnLFxuICBDU2hhcnAgPSAnY3NoYXJwJyxcbiAgQ1NTID0gJ2NzcycsXG4gIERpZmYgPSAnZGlmZicsXG4gIERhcnQgPSAnZGFydCcsXG4gIERvY2tlcmZpbGUgPSAnZG9ja2VyZmlsZScsXG4gIEVsaXhpciA9ICdlbGl4aXInLFxuICBFcmxhbmcgPSAnZXJsYW5nJyxcbiAgRlNoYXJwID0gJ2ZzaGFycCcsXG4gIEdpdENvbW1pdCA9ICdnaXQtY29tbWl0JyxcbiAgR2l0UmViYXNlID0gJ2dpdC1yZWJhc2UnLFxuICBHbyA9ICdnbycsXG4gIEdyb292eSA9ICdncm9vdnknLFxuICBIYW5kbGViYXJzID0gJ2hhbmRsZWJhcnMnLFxuICBIVE1MID0gJ2h0bWwnLFxuICBJbmkgPSAnaW5pJyxcbiAgSmF2YSA9ICdqYXZhJyxcbiAgSmF2YVNjcmlwdCA9ICdqYXZhc2NyaXB0JyxcbiAgSmF2YVNjcmlwdFJlYWN0ID0gJ2phdmFzY3JpcHRyZWFjdCcsXG4gIEpTT04gPSAnanNvbicsXG4gIExhVGVYID0gJ2xhdGV4JyxcbiAgTGVzcyA9ICdsZXNzJyxcbiAgTHVhID0gJ2x1YScsXG4gIE1ha2VmaWxlID0gJ21ha2VmaWxlJyxcbiAgTWFya2Rvd24gPSAnbWFya2Rvd24nLFxuICBPYmplY3RpdmVDID0gJ2MnLFxuICBPYmplY3RpdmVDUGx1c1BsdXMgPSAnY3BwJyxcbiAgUGVybCA9ICdwZXJsJyxcbiAgUGVybDYgPSAncGVybDYnLFxuICBQSFAgPSAncGhwJyxcbiAgUG93ZXJzaGVsbCA9ICdwb3dlcnNoZWxsJyxcbiAgUHVnID0gJ2phZGUnLFxuICBQeXRob24gPSAncHl0aG9uJyxcbiAgUiA9ICdyJyxcbiAgUmF6b3IgPSAncmF6b3InLFxuICBSdWJ5ID0gJ3J1YnknLFxuICBSdXN0ID0gJ3J1c3QnLFxuICBTQ1NTID0gJ3Njc3MnLFxuICBTYXNzID0gJ3N5bnRheCcsXG4gIFNjYWxhID0gJ3NjYWxhJyxcbiAgU2hhZGVyTGFiID0gJ3NoYWRlcmxhYicsXG4gIFNoZWxsID0gJ3NoZWxsc2NyaXB0JyxcbiAgU1FMID0gJ3NxbCcsXG4gIFN3aWZ0ID0gJ3N3aWZ0JyxcbiAgVHlwZVNjcmlwdCA9ICd0eXBlc2NyaXB0JyxcbiAgVHlwZVNjcmlwdFJlYWN0ID0gJ3R5cGVzY3JpcHRyZWFjdCcsXG4gIFRlWCA9ICd0ZXgnLFxuICBWaXN1YWxCYXNpYyA9ICd2YicsXG4gIFhNTCA9ICd4bWwnLFxuICBYU0wgPSAneHNsJyxcbiAgWUFNTCA9ICd5YW1sJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3B1Ymxpc2hEaWFnbm9zdGljc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUHVibGlzaERpYWdub3N0aWNzQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjbGllbnRzIGFjY2VwdHMgZGlhZ25vc3RpY3Mgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHJlbGF0ZWRJbmZvcm1hdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDbGllbnQgc3VwcG9ydHMgdGhlIHRhZyBwcm9wZXJ0eSB0byBwcm92aWRlIG1ldGEgZGF0YSBhYm91dCBhIGRpYWdub3N0aWMuXG4gICAgICogQ2xpZW50cyBzdXBwb3J0aW5nIHRhZ3MgaGF2ZSB0byBoYW5kbGUgdW5rbm93biB0YWdzIGdyYWNlZnVsbHkuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgdGFnU3VwcG9ydD86IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBjbGllbnQuXG4gICAgICAgKi9cbiAgICAgIHZhbHVlU2V0OiBwcm90b2NvbC5EaWFnbm9zdGljVGFnW107XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBpbnRlcnByZXRzIHRoZSB2ZXJzaW9uIHByb3BlcnR5IG9mIHRoZVxuICAgICAqIGB0ZXh0RG9jdW1lbnQvcHVibGlzaERpYWdub3N0aWNzYCBub3RpZmljYXRpb24ncyBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgdmVyc2lvblN1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERpYWdub3N0aWNzIG5vdGlmaWNhdGlvbiBhcmUgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCB0byBzaWduYWxcbiAqIHJlc3VsdHMgb2YgdmFsaWRhdGlvbiBydW5zLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9wdWJsaXNoRGlhZ25vc3RpY3NcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFB1Ymxpc2hEaWFnbm9zdGljcyBleHRlbmRzXG4gICAgcHJvdG9jb2wuTm90aWZpY2F0aW9uTWVzc2FnZTxQdWJsaXNoRGlhZ25vc3RpY3NQYXJhbXM+IHtcbiAgICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5UZXh0RG9jdW1lbnRQdWJsaXNoRGlhZ25vc3RpY3M7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9wdWJsaXNoRGlhZ25vc3RpY3NcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFB1Ymxpc2hEaWFnbm9zdGljc1BhcmFtcyB7XG4gICAgLyoqXG4gICAgICogVGhlIFVSSSBmb3Igd2hpY2ggZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZC5cbiAgICAgKi9cbiAgICB1cmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkb2N1bWVudCB0aGUgZGlhZ25vc3RpY3MgYXJlIHB1Ymxpc2hlZCBmb3IuXG4gICAgICogT3B0aW9uYWwuXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIHZlcnNpb24/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGl0ZW1zLlxuICAgICAqL1xuICAgIGRpYWdub3N0aWNzOiBwcm90b2NvbC5EaWFnbm9zdGljW107XG59XG5cbi8qKlxuICogVGV4dCBkb2N1bWVudHMgYXJlIGlkZW50aWZpZWQgdXNpbmcgYSBVUkkuIE9uIHRoZSBwcm90b2NvbCBsZXZlbCwgVVJJcyBhcmVcbiAqIHBhc3NlZCBhcyBzdHJpbmdzLiBUaGUgY29ycmVzcG9uZGluZyBKU09OIHN0cnVjdHVyZSBsb29rcyBsaWtlIHRoaXM6XG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50SWRlbnRpZmllclxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50SWRlbnRpZmllciB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgZG9jdW1lbnQncyBVUkkuXG4gICAgICovXG4gICAgdXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbn1cblxuLyoqXG4gKiBBbiBpZGVudGlmaWVyIHRvIGRlbm90ZSBhIHNwZWNpZmljIHZlcnNpb24gb2YgYSB0ZXh0IGRvY3VtZW50LiBUaGlzXG4gKiBpbmZvcm1hdGlvbiB1c3VhbGx5IGZsb3dzIGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyLlxuICovXG5pbnRlcmZhY2UgVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciBleHRlbmRzIFRleHREb2N1bWVudElkZW50aWZpZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgZG9jdW1lbnQgd2lsbCBpbmNyZWFzZSBhZnRlciBlYWNoIGNoYW5nZSxcbiAgICAgKiBpbmNsdWRpbmcgdW5kby9yZWRvLiBUaGUgbnVtYmVyIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25zZWN1dGl2ZS5cbiAgICAgKi9cbiAgICB2ZXJzaW9uOiBwcm90b2NvbC5pbnRlZ2VyO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkb2N1bWVudC5cbiAgICAgKi9cbiAgICB0ZXh0RG9jdW1lbnQ6IFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gaW5zaWRlIHRoZSB0ZXh0IGRvY3VtZW50LlxuICAgICAqL1xuICAgIHBvc2l0aW9uOiBwcm90b2NvbC5Qb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgQ29tcGxldGlvbiByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gY29tcHV0ZVxuICogY29tcGxldGlvbiBpdGVtcyBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbi4gQ29tcGxldGlvbiBpdGVtcyBhcmUgcHJlc2VudGVkXG4gKiBpbiB0aGUgSW50ZWxsaVNlbnNlIHVzZXIgaW50ZXJmYWNlLiBJZiBjb21wdXRpbmcgZnVsbCBjb21wbGV0aW9uIGl0ZW1zIGlzXG4gKiBleHBlbnNpdmUsIHNlcnZlcnMgY2FuIGFkZGl0aW9uYWxseSBwcm92aWRlIGEgaGFuZGxlciBmb3IgdGhlIGNvbXBsZXRpb25cbiAqIGl0ZW0gcmVzb2x2ZSByZXF1ZXN0IChgY29tcGxldGlvbkl0ZW0vcmVzb2x2ZWApLiBUaGlzIHJlcXVlc3QgaXMgc2VudCB3aGVuIGFcbiAqIGNvbXBsZXRpb24gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuIEEgdHlwaWNhbCB1c2UgY2FzZSBpcyBmb3JcbiAqIGV4YW1wbGU6IHRoZSBgdGV4dERvY3VtZW50L2NvbXBsZXRpb25gIHJlcXVlc3QgZG9lc27igJl0IGZpbGwgaW4gdGhlXG4gKiBkb2N1bWVudGF0aW9uIHByb3BlcnR5IGZvciByZXR1cm5lZCBjb21wbGV0aW9uIGl0ZW1zIHNpbmNlIGl0IGlzIGV4cGVuc2l2ZVxuICogdG8gY29tcHV0ZS4gV2hlbiB0aGUgaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UgdGhlbiBhXG4gKiBgY29tcGxldGlvbkl0ZW0vcmVzb2x2ZWAgcmVxdWVzdCBpcyBzZW50IHdpdGggdGhlIHNlbGVjdGVkIGNvbXBsZXRpb24gaXRlbVxuICogYXMgYSBwYXJhbWV0ZXIuIFRoZSByZXR1cm5lZCBjb21wbGV0aW9uIGl0ZW0gc2hvdWxkIGhhdmUgdGhlIGRvY3VtZW50YXRpb25cbiAqIHByb3BlcnR5IGZpbGxlZCBpbi4gQnkgZGVmYXVsdCB0aGUgcmVxdWVzdCBjYW4gb25seSBkZWxheSB0aGUgY29tcHV0YXRpb24gb2ZcbiAqIHRoZSBkZXRhaWwgYW5kIGRvY3VtZW50YXRpb24gcHJvcGVydGllcy4gU2luY2UgMy4xNi4wIHRoZSBjbGllbnQgY2FuIHNpZ25hbFxuICogdGhhdCBpdCBjYW4gcmVzb2x2ZSBtb3JlIHByb3BlcnRpZXMgbGF6aWx5LiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlXG4gKiBjb21wbGV0aW9uSXRlbSNyZXNvbHZlU3VwcG9ydCBjbGllbnQgY2FwYWJpbGl0eSB3aGljaCBsaXN0cyBhbGwgcHJvcGVydGllc1xuICogdGhhdCBjYW4gYmUgZmlsbGVkIGluIGR1cmluZyBhIGBjb21wbGV0aW9uSXRlbS9yZXNvbHZlYCByZXF1ZXN0LiBBbGwgb3RoZXJcbiAqIHByb3BlcnRpZXMgKHVzdWFsbHkgc29ydFRleHQsIGZpbHRlclRleHQsIGluc2VydFRleHQgYW5kIHRleHRFZGl0KSBtdXN0IGJlXG4gKiBwcm92aWRlZCBpbiB0aGUgdGV4dERvY3VtZW50L2NvbXBsZXRpb24gcmVzcG9uc2UgYW5kIG11c3Qgbm90IGJlIGNoYW5nZWRcbiAqIGR1cmluZyByZXNvbHZlLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb21wbGV0aW9uIGV4dGVuZHNcbiAgICBwcm90b2NvbC5SZXF1ZXN0TWVzc2FnZTxDb21wbGV0aW9uUGFyYW1zPiB7XG4gICAgbWV0aG9kOiBwcm90b2NvbC5NZXRob2QuVGV4dERvY3VtZW50Q29tcGxldGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHRoZSBhdXRvRXhlY3V0ZUNoZWNrIGNhbGwuIFRoaXMgaXMgYSBjdXN0b20gTFNQIGNvbW1hbmQgdGhhdFxuICogdmVyaWZpZXMgdGhhdCB0aGUgcHJvdmlkZWQgY29kZSBwYXNzZXMgYSBudW1iZXIgb2YgTFNQLXJlbGF0ZWQgY2hlY2tzLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQXV0b0V4ZWN1dGVDaGVja1BhcmFtcyBleHRlbmRzIFRleHREb2N1bWVudElkZW50aWZpZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIHRvIGNoZWNrIHdoZXRoZXIgaXQgY2FuIGJlIGF1dG8gZXhlY3V0ZWQgaW4gdGhlIGN1cnJlbnRcbiAgICAgKiBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBjb2RlVG9DaGVjazogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgY29kZSBhdC4gSWYgbm90IHNldCwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlXG4gICAgICogbm90ZWJvb2suXG4gICAgICovXG4gICAgcG9zaXRpb24/OiBwcm90b2NvbC5Qb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGF1dG9FeGVjdXRlQ2hlY2sgY2FsbC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEF1dG9FeGVjdXRlQ2hlY2tSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogRXJyb3JzIGZvdW5kIHdoZW4gY2hlY2tpbmcgdGhlIGNvZGUgaW4gdGhlIHJlcXVlc3QuIEFuIGVtcHR5IGxpc3QgbWVhbnNcbiAgICAgKiB0aGF0IGFsbCBjaGVja3MgcGFzc2VkIGFuZCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgKi9cbiAgICBlcnJvcnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdHVhbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkLiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY29kZVxuICAgICAqIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdCwgYnV0IG1heSBpbmNsdWRlIGFkZGl0aW9uYWwgZWRpdHMgdG8gbWFrZVxuICAgICAqIHRoZSBjb2RlIHNhZmVyIHRvIHJ1bi5cbiAgICAgKi9cbiAgICBjb2RlVG9FeGVjdXRlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb21wbGV0aW9uUGFyYW1zIGV4dGVuZHNcbiAgICBUZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtcywgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyxcbiAgICBwcm90b2NvbC5QYXJ0aWFsUmVzdWx0UGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29tcGxldGlvbiBjb250ZXh0LiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjbGllbnQgc3BlY2lmaWVzXG4gICAgICogdG8gc2VuZCB0aGlzIHVzaW5nIHRoZSBjbGllbnQgY2FwYWJpbGl0eVxuICAgICAqIGBjb21wbGV0aW9uLmNvbnRleHRTdXBwb3J0ID09PSB0cnVlYFxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBDb21wbGV0aW9uQ29udGV4dDtcbn1cblxuLyoqXG4gKiBIb3cgYSBjb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWRcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgZW51bSBDb21wbGV0aW9uVHJpZ2dlcktpbmQge1xuICAvKipcbiAgICogQ29tcGxldGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHR5cGluZyBhbiBpZGVudGlmaWVyICgyNHg3IGNvZGVcbiAgICogY29tcGxldGUpLCBtYW51YWwgaW52b2NhdGlvbiAoZS5nIEN0cmwrU3BhY2UpIG9yIHZpYSBBUEkuXG4gICAqL1xuICBJbnZva2VkID0gMSxcblxuICAvKipcbiAgICogQ29tcGxldGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgdHJpZ2dlciBjaGFyYWN0ZXIgc3BlY2lmaWVkIGJ5XG4gICAqIHRoZSBgdHJpZ2dlckNoYXJhY3RlcnNgIHByb3BlcnRpZXMgb2YgdGhlXG4gICAqIGBDb21wbGV0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc2AuXG4gICAqL1xuICBUcmlnZ2VyQ2hhcmFjdGVyID0gMixcblxuICAvKipcbiAgICogQ29tcGxldGlvbiB3YXMgcmUtdHJpZ2dlcmVkIGFzIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gbGlzdCBpcyBpbmNvbXBsZXRlLlxuICAgKi9cbiAgVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyA9IDMsXG59XG5cblxuLyoqXG4gKiBDb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIGEgY29tcGxldGlvblxuICogcmVxdWVzdCBpcyB0cmlnZ2VyZWQuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvbXBsZXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbXBsZXRpb25Db250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIb3cgdGhlIGNvbXBsZXRpb24gd2FzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICB0cmlnZ2VyS2luZDogQ29tcGxldGlvblRyaWdnZXJLaW5kO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRyaWdnZXIgY2hhcmFjdGVyIChhIHNpbmdsZSBjaGFyYWN0ZXIpIHRoYXQgaGFzIHRyaWdnZXIgY29kZVxuICAgICAqIGNvbXBsZXRlLiBJcyB1bmRlZmluZWQgaWZcbiAgICAgKiBgdHJpZ2dlcktpbmQgIT09IENvbXBsZXRpb25UcmlnZ2VyS2luZC5UcmlnZ2VyQ2hhcmFjdGVyYFxuICAgICAqL1xuICAgIHRyaWdnZXJDaGFyYWN0ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGNoYW5nZSBub3RpZmljYXRpb24gaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB0b1xuICogc2lnbmFsIGNoYW5nZXMgdG8gYSB0ZXh0IGRvY3VtZW50LiBCZWZvcmUgYSBjbGllbnQgY2FuIGNoYW5nZSBhIHRleHRcbiAqIGRvY3VtZW50IGl0IG11c3QgY2xhaW0gb3duZXJzaGlwIG9mIGl0cyBjb250ZW50IHVzaW5nIHRoZVxuICogdGV4dERvY3VtZW50L2RpZE9wZW4gbm90aWZpY2F0aW9uLiBJbiAyLjAgdGhlIHNoYXBlIG9mIHRoZSBwYXJhbXMgaGFzXG4gKiBjaGFuZ2VkIHRvIGluY2x1ZGUgcHJvcGVyIHZlcnNpb24gbnVtYmVycyBhbmQgbGFuZ3VhZ2UgaWRzLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRDaGFuZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWRDaGFuZ2VUZXh0RG9jdW1lbnRQYXJhbXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBkb2N1bWVudCB0aGF0IGRpZCBjaGFuZ2UuIFRoZSB2ZXJzaW9uIG51bWJlciBwb2ludHNcbiAgICAgKiB0byB0aGUgdmVyc2lvbiBhZnRlciBhbGwgcHJvdmlkZWQgY29udGVudCBjaGFuZ2VzIGhhdmVcbiAgICAgKiBiZWVuIGFwcGxpZWQuXG4gICAgICovXG4gICAgdGV4dERvY3VtZW50OiBWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdHVhbCBjb250ZW50IGNoYW5nZXMuIFRoZSBjb250ZW50IGNoYW5nZXMgZGVzY3JpYmUgc2luZ2xlIHN0YXRlXG4gICAgICogY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQuIFNvIGlmIHRoZXJlIGFyZSB0d28gY29udGVudCBjaGFuZ2VzIGMxIChhdFxuICAgICAqIGFycmF5IGluZGV4IDApIGFuZCBjMiAoYXQgYXJyYXkgaW5kZXggMSkgZm9yIGEgZG9jdW1lbnQgaW4gc3RhdGUgUyB0aGVuXG4gICAgICogYzEgbW92ZXMgdGhlIGRvY3VtZW50IGZyb20gUyB0byBTJyBhbmQgYzIgZnJvbSBTJyB0byBTJycuIFNvIGMxIGlzXG4gICAgICogY29tcHV0ZWQgb24gdGhlIHN0YXRlIFMgYW5kIGMyIGlzIGNvbXB1dGVkIG9uIHRoZSBzdGF0ZSBTJy5cbiAgICAgKlxuICAgICAqIFRvIG1pcnJvciB0aGUgY29udGVudCBvZiBhIGRvY3VtZW50IHVzaW5nIGNoYW5nZSBldmVudHMgdXNlIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBhcHByb2FjaDpcbiAgICAgKiAtIHN0YXJ0IHdpdGggdGhlIHNhbWUgaW5pdGlhbCBjb250ZW50XG4gICAgICogLSBhcHBseSB0aGUgJ3RleHREb2N1bWVudC9kaWRDaGFuZ2UnIG5vdGlmaWNhdGlvbnMgaW4gdGhlIG9yZGVyIHlvdVxuICAgICAqICAgcmVjZWl2ZSB0aGVtLlxuICAgICAqIC0gYXBwbHkgdGhlIGBUZXh0RG9jdW1lbnRDb250ZW50Q2hhbmdlRXZlbnRgcyBpbiBhIHNpbmdsZSBub3RpZmljYXRpb25cbiAgICAgKiAgIGluIHRoZSBvcmRlciB5b3UgcmVjZWl2ZSB0aGVtLlxuICAgICAqL1xuICAgIGNvbnRlbnRDaGFuZ2VzOiBUZXh0RG9jdW1lbnRDb250ZW50Q2hhbmdlRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBBbiBldmVudCBkZXNjcmliaW5nIGEgY2hhbmdlIHRvIGEgdGV4dCBkb2N1bWVudC4gSWYgcmFuZ2UgYW5kIHJhbmdlTGVuZ3RoIGFyZVxuICogb21pdHRlZCB0aGUgbmV3IHRleHQgaXMgY29uc2lkZXJlZCB0byBiZSB0aGUgZnVsbCBjb250ZW50IG9mIHRoZSBkb2N1bWVudC5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfZGlkQ2hhbmdlXG4gKi9cbmV4cG9ydCB0eXBlIFRleHREb2N1bWVudENvbnRlbnRDaGFuZ2VFdmVudCA9IHtcbiAgLyoqXG4gICAqIFRoZSByYW5nZSBvZiB0aGUgZG9jdW1lbnQgdGhhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmFuZ2U6IHByb3RvY29sLlJhbmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgbGVuZ3RoIG9mIHRoZSByYW5nZSB0aGF0IGdvdCByZXBsYWNlZC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHJhbmdlIGluc3RlYWQuXG4gICAqL1xuICByYW5nZUxlbmd0aD86IHByb3RvY29sLnVpbnRlZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHRleHQgZm9yIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcbn18e1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgdGV4dCBvZiB0aGUgd2hvbGUgZG9jdW1lbnQuXG4gICAgICovXG4gICAgdGV4dDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50RWRpdFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50RWRpdCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgZG9jdW1lbnQgdG8gY2hhbmdlLlxuICAgICAqL1xuICAgIHRleHREb2N1bWVudDogVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlZGl0cyB0byBiZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGVkaXRzOiBUZXh0RWRpdFtdO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RWRpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRFZGl0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcmFuZ2Ugb2YgdGhlIHRleHQgZG9jdW1lbnQgdG8gYmUgbWFuaXB1bGF0ZWQuIFRvIGluc2VydFxuICAgICAqIHRleHQgaW50byBhIGRvY3VtZW50IGNyZWF0ZSBhIHJhbmdlIHdoZXJlIHN0YXJ0ID09PSBlbmQuXG4gICAgICovXG4gICAgcmFuZ2U6IHByb3RvY29sLlJhbmdlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyB0byBiZSBpbnNlcnRlZC4gRm9yIGRlbGV0ZSBvcGVyYXRpb25zIHVzZSBhblxuICAgICAqIGVtcHR5IHN0cmluZy5cbiAgICAgKi9cbiAgICBuZXdUZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9mb2xkaW5nUmFuZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEZvbGRpbmdSYW5nZUNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24gZm9yXG4gICAgICogZm9sZGluZyByYW5nZSBwcm92aWRlcnMuXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2xpZW50IHN1cHBvcnRzIHRoZSBuZXdcbiAgICAgKiBgRm9sZGluZ1JhbmdlUmVnaXN0cmF0aW9uT3B0aW9uc2AgcmV0dXJuIHZhbHVlIGZvciB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZvbGRpbmcgcmFuZ2VzIHRoYXQgdGhlIGNsaWVudCBwcmVmZXJzIHRvXG4gICAgICogcmVjZWl2ZSBwZXIgZG9jdW1lbnQuXG4gICAgICogVGhlIHZhbHVlIHNlcnZlcyBhcyBhIGhpbnQsIHNlcnZlcnMgYXJlIGZyZWUgdG8gZm9sbG93IHRoZSBsaW1pdC5cbiAgICAgKi9cbiAgICByYW5nZUxpbWl0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIElmIHNldCwgdGhlIGNsaWVudCBzaWduYWxzIHRoYXQgaXQgb25seSBzdXBwb3J0cyBmb2xkaW5nIGNvbXBsZXRlIGxpbmVzLlxuICAgICAqIElmIHNldCwgdGhlIGNsaWVudCB3aWxsIGlnbm9yZSBzcGVjaWZpZWQgYHN0YXJ0Q2hhcmFjdGVyYCBhbmRcbiAgICAgKiBgZW5kQ2hhcmFjdGVyYCBwcm9wZXJ0aWVzIGluIGEgRm9sZGluZ1JhbmdlLlxuICAgICAqL1xuICAgIGxpbmVGb2xkaW5nT25seT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IHJhbmdlIGZvcm1hdHRpbmcgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyXG4gKiB0byBmb3JtYXQgYSBnaXZlbiByYW5nZSBpbiBhIGRvY3VtZW50LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRSYW5nZUZvcm1hdHRpbmdDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZm9ybWF0dGluZyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3NlbGVjdGlvblJhbmdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBTZWxlY3Rpb25SYW5nZUNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbiBmb3Igc2VsZWN0aW9uXG4gICAgICogcmFuZ2UgcHJvdmlkZXJzLlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIG5ld1xuICAgICAqIGBTZWxlY3Rpb25SYW5nZVJlZ2lzdHJhdGlvbk9wdGlvbnNgIHJldHVybiB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAgKiBzZXJ2ZXIgY2FwYWJpbGl0eSBhcyB3ZWxsLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfc2lnbmF0dXJlSGVscFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU2lnbmF0dXJlSGVscENsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzaWduYXR1cmUgaGVscCBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBgU2lnbmF0dXJlSW5mb3JtYXRpb25gXG4gICAgICogc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBzaWduYXR1cmVJbmZvcm1hdGlvbj86IHtcbiAgICAgIC8qKlxuICAgICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3cgY29udGVudCBmb3JtYXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvblxuICAgICAgICogcHJvcGVydHkuIFRoZSBvcmRlciBkZXNjcmliZXMgdGhlIHByZWZlcnJlZCBmb3JtYXQgb2YgdGhlIGNsaWVudC5cbiAgICAgICAqL1xuICAgICAgZG9jdW1lbnRhdGlvbkZvcm1hdD86IE1hcmt1cEtpbmRbXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBDbGllbnQgY2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHBhcmFtZXRlciBpbmZvcm1hdGlvbi5cbiAgICAgICAqL1xuICAgICAgcGFyYW1ldGVySW5mb3JtYXRpb24/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHByb2Nlc3NpbmcgbGFiZWwgb2Zmc2V0cyBpbnN0ZWFkIG9mIGFcbiAgICAgICAgICogc2ltcGxlIGxhYmVsIHN0cmluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNpbmNlIDMuMTQuMFxuICAgICAgICAgKi9cbiAgICAgICAgbGFiZWxPZmZzZXRTdXBwb3J0PzogYm9vbGVhbjtcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgYGFjdGl2ZVBhcmFtZXRlcmAgcHJvcGVydHkgb25cbiAgICAgICAqIGBTaWduYXR1cmVJbmZvcm1hdGlvbmAgbGl0ZXJhbC5cbiAgICAgICAqXG4gICAgICAgKiBAc2luY2UgMy4xNi4wIC0gcHJvcG9zZWQgc3RhdGVcbiAgICAgICAqL1xuICAgICAgYWN0aXZlUGFyYW1ldGVyU3VwcG9ydD86IGJvb2xlYW47XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdG8gc2VuZCBhZGRpdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGFcbiAgICAgKiBgdGV4dERvY3VtZW50L3NpZ25hdHVyZUhlbHBgIHJlcXVlc3QuIEEgY2xpZW50IHRoYXQgb3B0cyBpbnRvXG4gICAgICogY29udGV4dFN1cHBvcnQgd2lsbCBhbHNvIHN1cHBvcnQgdGhlIGByZXRyaWdnZXJDaGFyYWN0ZXJzYCBvblxuICAgICAqIGBTaWduYXR1cmVIZWxwT3B0aW9uc2AuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgY29udGV4dFN1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEltcGxlbWVudGF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqIElmIHRoaXMgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgbmV3XG4gICAgICogYEltcGxlbWVudGF0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc2AgcmV0dXJuIHZhbHVlIGZvciB0aGVcbiAgICAgKiBjb3JyZXNwb25kaW5nIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGFkZGl0aW9uYWwgbWV0YWRhdGEgaW4gdGhlIGZvcm0gb2YgZGVmaW5pdGlvbiBsaW5rcy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE0LjBcbiAgICAgKi9cbiAgICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlbmFtZSByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gYXNrIHRoZSBzZXJ2ZXIgdG9cbiAqIGNvbXB1dGUgYSB3b3Jrc3BhY2UgY2hhbmdlIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gcGVyZm9ybSBhIHdvcmtzcGFjZS13aWRlXG4gKiByZW5hbWUgb2YgYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZW5hbWVDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcmVuYW1lIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRlc3RpbmcgZm9yIHZhbGlkaXR5IG9mIHJlbmFtZSBvcGVyYXRpb25zXG4gICAgICogYmVmb3JlIGV4ZWN1dGlvbi5cbiAgICAgKlxuICAgICAqIEBzaW5jZSB2ZXJzaW9uIDMuMTIuMFxuICAgICAqL1xuICAgIHByZXBhcmVTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3R5cGVEZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUeXBlRGVmaW5pdGlvbkNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKiBJZiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIG5ldyBgXG4gICAgICogVHlwZURlZmluaXRpb25SZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgc2VydmVyIGNhcGFiaWxpdHkgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYWRkaXRpb25hbCBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBkZWZpbml0aW9uIGxpbmtzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTQuMFxuICAgICAqL1xuICAgIGxpbmtTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRTeW5jQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRleHQgZG9jdW1lbnQgc3luY2hyb25pemF0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBzZW5kaW5nIHdpbGwgc2F2ZSBub3RpZmljYXRpb25zLlxuICAgICAqL1xuICAgIHdpbGxTYXZlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgc2VuZGluZyBhIHdpbGwgc2F2ZSByZXF1ZXN0IGFuZFxuICAgICAqIHdhaXRzIGZvciBhIHJlc3BvbnNlIHByb3ZpZGluZyB0ZXh0IGVkaXRzIHdoaWNoIHdpbGxcbiAgICAgKiBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgaXQgaXMgc2F2ZWQuXG4gICAgICovXG4gICAgd2lsbFNhdmVXYWl0VW50aWw/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBkaWQgc2F2ZSBub3RpZmljYXRpb25zLlxuICAgICAqL1xuICAgIGRpZFNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlZmluZXMgaG93IHRoZSBob3N0IChlZGl0b3IpIHNob3VsZCBzeW5jIGRvY3VtZW50IGNoYW5nZXNcbiAqIHRvIHRoZSBsYW5ndWFnZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBlbnVtIFRleHREb2N1bWVudFN5bmNLaW5kIHtcbiAgLyoqXG4gICAqIERvY3VtZW50cyBzaG91bGQgbm90IGJlIHN5bmNlZCBhdCBhbGwuXG4gICAqL1xuICBOb25lID0gMCxcblxuICAvKipcbiAgICogRG9jdW1lbnRzIGFyZSBzeW5jZWQgYnkgYWx3YXlzIHNlbmRpbmcgdGhlIGZ1bGwgY29udGVudFxuICAgKiBvZiB0aGUgZG9jdW1lbnQuXG4gICAqL1xuICBGdWxsID0gMSxcblxuICAvKipcbiAgICogRG9jdW1lbnRzIGFyZSBzeW5jZWQgYnkgc2VuZGluZyB0aGUgZnVsbCBjb250ZW50IG9uIG9wZW4uXG4gICAqIEFmdGVyIHRoYXQgb25seSBpbmNyZW1lbnRhbCB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudCBhcmVcbiAgICogc2VuZC5cbiAgICovXG4gIEluY3JlbWVudGFsID0gMixcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRTeW5jT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogT3BlbiBhbmQgY2xvc2Ugbm90aWZpY2F0aW9ucyBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgICAqIElmIG9taXR0ZWQsIG9wZW4gY2xvc2Ugbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICBvcGVuQ2xvc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIENoYW5nZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogU2VlIFRleHREb2N1bWVudFN5bmNLaW5kLk5vbmUsIFRleHREb2N1bWVudFN5bmNLaW5kLkZ1bGwsXG4gICAgICogYW5kIFRleHREb2N1bWVudFN5bmNLaW5kLkluY3JlbWVudGFsLlxuICAgICAqIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFRleHREb2N1bWVudFN5bmNLaW5kLk5vbmUuXG4gICAgICovXG4gICAgY2hhbmdlPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIElmIHByZXNlbnQgd2lsbCBzYXZlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKiBJZiBvbWl0dGVkLCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICB3aWxsU2F2ZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCB3aWxsIHNhdmUgd2FpdCB1bnRpbCByZXF1ZXN0cyBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgICAqIElmIG9taXR0ZWQsIHRoZSByZXF1ZXN0IHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICB3aWxsU2F2ZVdhaXRVbnRpbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCBzYXZlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKiBJZiBvbWl0dGVkLCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICBzYXZlPzogYm9vbGVhbnxTYXZlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZFNhdmVcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNhdmVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IGlzIHN1cHBvc2VkIHRvIGluY2x1ZGUgdGhlIGNvbnRlbnQgb24gc2F2ZS5cbiAgICAgKi9cbiAgICBpbmNsdWRlVGV4dD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEZWZpbml0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGRlZmluaXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGFkZGl0aW9uYWwgbWV0YWRhdGEgaW4gdGhlIGZvcm0gb2YgZGVmaW5pdGlvbiBsaW5rcy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE0LjBcbiAgICAgKi9cbiAgICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kZWNsYXJhdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGVjbGFyYXRpb25DbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZGVjbGFyYXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2xpZW50IHN1cHBvcnRzIHRoZSBuZXdcbiAgICAgKiBgRGVjbGFyYXRpb25SZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgc2VydmVyIGNhcGFiaWxpdHkgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYWRkaXRpb25hbCBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBkZWNsYXJhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kb2N1bWVudEhpZ2hsaWdodFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRIaWdobGlnaHRDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZG9jdW1lbnQgaGlnaGxpZ2h0IHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfcmVmZXJlbmNlc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVmZXJlbmNlQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlZmVyZW5jZXMgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kb2N1bWVudFN5bWJvbFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZG9jdW1lbnQgc3ltYm9sIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGUgYFN5bWJvbEtpbmRgIGluIHRoZVxuICAgICAqIGB0ZXh0RG9jdW1lbnQvZG9jdW1lbnRTeW1ib2xgIHJlcXVlc3QuXG4gICAgICovXG4gICAgc3ltYm9sS2luZD86IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHN5bWJvbCBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgICAqIHByb3BlcnR5IGV4aXN0cyB0aGUgY2xpZW50IGFsc28gZ3VhcmFudGVlcyB0aGF0IGl0IHdpbGxcbiAgICAgICAqIGhhbmRsZSB2YWx1ZXMgb3V0c2lkZSBpdHMgc2V0IGdyYWNlZnVsbHkgYW5kIGZhbGxzIGJhY2tcbiAgICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICAgKlxuICAgICAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCB0aGUgY2xpZW50IG9ubHkgc3VwcG9ydHNcbiAgICAgICAqIHRoZSBzeW1ib2wga2luZHMgZnJvbSBgRmlsZWAgdG8gYEFycmF5YCBhcyBkZWZpbmVkIGluXG4gICAgICAgKiB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ/OiBwcm90b2NvbC5TeW1ib2xLaW5kW107XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgaGllcmFyY2hpY2FsIGRvY3VtZW50IHN5bWJvbHMuXG4gICAgICovXG4gICAgaGllcmFyY2hpY2FsRG9jdW1lbnRTeW1ib2xTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGFncyBvbiBgU3ltYm9sSW5mb3JtYXRpb25gLiBUYWdzIGFyZSBzdXBwb3J0ZWQgb25cbiAgICAgKiBgRG9jdW1lbnRTeW1ib2xgIGlmIGBoaWVyYXJjaGljYWxEb2N1bWVudFN5bWJvbFN1cHBvcnRgIGlzIHNldCB0byB0cnVlLlxuICAgICAqIENsaWVudHMgc3VwcG9ydGluZyB0YWdzIGhhdmUgdG8gaGFuZGxlIHVua25vd24gdGFncyBncmFjZWZ1bGx5LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMFxuICAgICAqL1xuICAgIHRhZ1N1cHBvcnQ/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0YWdzIHN1cHBvcnRlZCBieSB0aGUgY2xpZW50LlxuICAgICAgICovXG4gICAgICB2YWx1ZVNldDogcHJvdG9jb2wuU3ltYm9sVGFnW11cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBhbiBhZGRpdGlvbmFsIGxhYmVsIHByZXNlbnRlZCBpbiB0aGUgVUkgd2hlblxuICAgICAqIHJlZ2lzdGVyaW5nIGEgZG9jdW1lbnQgc3ltYm9sIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMFxuICAgICAqL1xuICAgIGxhYmVsU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IG9uIHR5cGUgZm9ybWF0dGluZyByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAqIHRvIGZvcm1hdCBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHR5cGluZy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50T25UeXBlRm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvbiB0eXBlIGZvcm1hdHRpbmcgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGZvcm1hdHRpbmcgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHRvXG4gKiBmb3JtYXQgYSB3aG9sZSBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50Rm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBmb3JtYXR0aW5nIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCBjb2xvciByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gbGlzdCBhbGxcbiAqIGNvbG9yIHJlZmVyZW5jZXMgZm91bmQgaW4gYSBnaXZlbiB0ZXh0IGRvY3VtZW50LiBBbG9uZyB3aXRoIHRoZSByYW5nZSwgYVxuICogY29sb3IgdmFsdWUgaW4gUkdCIGlzIHJldHVybmVkLiBDbGllbnRzIGNhbiB1c2UgdGhlIHJlc3VsdCB0byBkZWNvcmF0ZSBjb2xvclxuICogcmVmZXJlbmNlcyBpbiBhbiBlZGl0b3IuIEZvciBleGFtcGxlOiBDb2xvciBib3hlcyBzaG93aW5nIHRoZSBhY3R1YWwgY29sb3JcbiAqIG5leHQgdG8gdGhlIHJlZmVyZW5jZSBTaG93IGEgY29sb3IgcGlja2VyIHdoZW4gYSBjb2xvciByZWZlcmVuY2UgaXMgZWRpdGVkXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEb2N1bWVudENvbG9yQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGRvY3VtZW50IGNvbG9yIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCBsaW5rcyByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gcmVxdWVzdFxuICogdGhlIGxvY2F0aW9uIG9mIGxpbmtzIGluIGEgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEb2N1bWVudExpbmtDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZG9jdW1lbnQgbGluayBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgYHRvb2x0aXBgIHByb3BlcnR5IG9uIGBEb2N1bWVudExpbmtgLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIHRvb2x0aXBTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgQ29kZUxlbnMgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHRvIGNvbXB1dGVcbiAqIENvZGVMZW5zIGZvciBhIGdpdmVuIHRleHQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2RlTGVuc0NsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBDb2RlTGVucyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvZGVBY3Rpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvZGVBY3Rpb25DbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY29kZSBhY3Rpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGNvZGUgYWN0aW9uIGxpdGVyYWxzIGFzIGEgdmFsaWRcbiAgICAgKiByZXNwb25zZSBvZiB0aGUgYHRleHREb2N1bWVudC9jb2RlQWN0aW9uYCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICovXG4gICAgY29kZUFjdGlvbkxpdGVyYWxTdXBwb3J0Pzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY29kZSBhY3Rpb24ga2luZCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhbHVlXG4gICAgICAgKiBzZXQuXG4gICAgICAgKi9cbiAgICAgIGNvZGVBY3Rpb25LaW5kOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBjb2RlIGFjdGlvbiBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgICAgICogcHJvcGVydHkgZXhpc3RzIHRoZSBjbGllbnQgYWxzbyBndWFyYW50ZWVzIHRoYXQgaXQgd2lsbFxuICAgICAgICAgKiBoYW5kbGUgdmFsdWVzIG91dHNpZGUgaXRzIHNldCBncmFjZWZ1bGx5IGFuZCBmYWxscyBiYWNrXG4gICAgICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICAgICAqL1xuICAgICAgICB2YWx1ZVNldDogQ29kZUFjdGlvbktpbmRbXTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY29kZSBhY3Rpb24gc3VwcG9ydHMgdGhlIGBpc1ByZWZlcnJlZGAgcHJvcGVydHkuXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIGlzUHJlZmVycmVkU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgYSBjb2RlIGFjdGlvbi5cbiAqXG4gKiBLaW5kcyBhcmUgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBpZGVudGlmaWVycyBzZXBhcmF0ZWQgYnkgYC5gLFxuICogZS5nLiBgXCJyZWZhY3Rvci5leHRyYWN0LmZ1bmN0aW9uXCJgLlxuICpcbiAqIFRoZSBzZXQgb2Yga2luZHMgaXMgb3BlbiBhbmQgdGhlIGNsaWVudCBuZWVkcyB0byBhbm5vdW5jZSB0aGUga2luZHMgaXRcbiAqIHN1cHBvcnRzIHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZW51bSBDb2RlQWN0aW9uS2luZCB7XG5cbiAgLyoqXG4gICAqIEVtcHR5IGtpbmQuXG4gICAqL1xuICBFbXB0eSA9ICcnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHF1aWNrZml4IGFjdGlvbnM6ICdxdWlja2ZpeCcuXG4gICAqL1xuICBRdWlja0ZpeCA9ICdxdWlja2ZpeCcsXG5cbiAgLyoqXG4gICAqIEJhc2Uga2luZCBmb3IgcmVmYWN0b3JpbmcgYWN0aW9uczogJ3JlZmFjdG9yJy5cbiAgICovXG4gIFJlZmFjdG9yID0gJ3JlZmFjdG9yJyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciByZWZhY3RvcmluZyBleHRyYWN0aW9uIGFjdGlvbnM6ICdyZWZhY3Rvci5leHRyYWN0Jy5cbiAgICpcbiAgICogRXhhbXBsZSBleHRyYWN0IGFjdGlvbnM6XG4gICAqXG4gICAqIC0gRXh0cmFjdCBtZXRob2RcbiAgICogLSBFeHRyYWN0IGZ1bmN0aW9uXG4gICAqIC0gRXh0cmFjdCB2YXJpYWJsZVxuICAgKiAtIEV4dHJhY3QgaW50ZXJmYWNlIGZyb20gY2xhc3NcbiAgICogLSAuLi5cbiAgICovXG4gIFJlZmFjdG9yRXh0cmFjdCA9ICdyZWZhY3Rvci5leHRyYWN0JyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciByZWZhY3RvcmluZyBpbmxpbmUgYWN0aW9uczogJ3JlZmFjdG9yLmlubGluZScuXG4gICAqXG4gICAqIEV4YW1wbGUgaW5saW5lIGFjdGlvbnM6XG4gICAqXG4gICAqIC0gSW5saW5lIGZ1bmN0aW9uXG4gICAqIC0gSW5saW5lIHZhcmlhYmxlXG4gICAqIC0gSW5saW5lIGNvbnN0YW50XG4gICAqIC0gLi4uXG4gICAqL1xuICBSZWZhY3RvcklubGluZSA9ICdyZWZhY3Rvci5pbmxpbmUnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIHJld3JpdGUgYWN0aW9uczogJ3JlZmFjdG9yLnJld3JpdGUnLlxuICAgKlxuICAgKiBFeGFtcGxlIHJld3JpdGUgYWN0aW9uczpcbiAgICpcbiAgICogLSBDb252ZXJ0IEphdmFTY3JpcHQgZnVuY3Rpb24gdG8gY2xhc3NcbiAgICogLSBBZGQgb3IgcmVtb3ZlIHBhcmFtZXRlclxuICAgKiAtIEVuY2Fwc3VsYXRlIGZpZWxkXG4gICAqIC0gTWFrZSBtZXRob2Qgc3RhdGljXG4gICAqIC0gTW92ZSBtZXRob2QgdG8gYmFzZSBjbGFzc1xuICAgKiAtIC4uLlxuICAgKi9cbiAgUmVmYWN0b3JSZXdyaXRlID0gJ3JlZmFjdG9yLnJld3JpdGUnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHNvdXJjZSBhY3Rpb25zOiBgc291cmNlYC5cbiAgICpcbiAgICogU291cmNlIGNvZGUgYWN0aW9ucyBhcHBseSB0byB0aGUgZW50aXJlIGZpbGUuXG4gICAqL1xuICBTb3VyY2UgPSAnc291cmNlJyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciBhbiBvcmdhbml6ZSBpbXBvcnRzIHNvdXJjZSBhY3Rpb24gYHNvdXJjZS5vcmdhbml6ZUltcG9ydHNgLlxuICAgKi9cbiAgU291cmNlT3JnYW5pemVJbXBvcnRzID0gJ3NvdXJjZS5vcmdhbml6ZUltcG9ydHMnLFxufVxuXG4vKipcbiAqIENvbnRhaW5zIGFkZGl0aW9uYWwgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaFxuICogYSBjb2RlIGFjdGlvbiBpcyBydW4uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2RlQWN0aW9uQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgZGlhZ25vc3RpY3Mga25vd24gb24gdGhlIGNsaWVudCBzaWRlIG92ZXJsYXBwaW5nIHRoZSByYW5nZVxuICAgICAqIHByb3ZpZGVkIHRvIHRoZSBgdGV4dERvY3VtZW50L2NvZGVBY3Rpb25gIHJlcXVlc3QuXG4gICAgICogVGhleSBhcmUgcHJvdmlkZWQgc28gdGhhdCB0aGUgc2VydmVyIGtub3dzIHdoaWNoIGVycm9ycyBhcmUgY3VycmVudGx5XG4gICAgICogcHJlc2VudGVkIHRvIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gcmFuZ2UuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0XG4gICAgICogdGhlc2UgYWNjdXJhdGVseSByZWZsZWN0IHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgcmVzb3VyY2UuXG4gICAgICogVGhlIHByaW1hcnkgcGFyYW1ldGVyIHRvIGNvbXB1dGUgY29kZSBhY3Rpb25zIGlzIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICAgKi9cbiAgICBkaWFnbm9zdGljczogcHJvdG9jb2wuRGlhZ25vc3RpY1tdO1xuXG4gICAgLyoqXG4gICAgICogUmVxdWVzdGVkIGtpbmQgb2YgYWN0aW9ucyB0byByZXR1cm4uXG4gICAgICpcbiAgICAgKiBBY3Rpb25zIG5vdCBvZiB0aGlzIGtpbmQgYXJlIGZpbHRlcmVkIG91dCBieSB0aGUgY2xpZW50IGJlZm9yZVxuICAgICAqIGJlaW5nIHNob3duLCBzbyBzZXJ2ZXJzIGNhbiBvbWl0IGNvbXB1dGluZyB0aGVtLlxuICAgICAqL1xuICAgIG9ubHk/OiBDb2RlQWN0aW9uS2luZFtdO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfcHVibGlzaERpYWdub3N0aWNzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBQdWJsaXNoRGlhZ25vc3RpY3NDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudHMgYWNjZXB0cyBkaWFnbm9zdGljcyB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcmVsYXRlZEluZm9ybWF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgdGFnIHByb3BlcnR5IHRvIHByb3ZpZGUgbWV0YSBkYXRhIGFib3V0IGEgZGlhZ25vc3RpYy5cbiAgICAgKiBDbGllbnRzIHN1cHBvcnRpbmcgdGFncyBoYXZlIHRvIGhhbmRsZSB1bmtub3duIHRhZ3MgZ3JhY2VmdWxseS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB0YWdTdXBwb3J0Pzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ6IHByb3RvY29sLkRpYWdub3N0aWNUYWdbXTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY2xpZW50IGludGVycHJldHMgdGhlIHZlcnNpb24gcHJvcGVydHkgb2YgdGhlXG4gICAgICogYHRleHREb2N1bWVudC9wdWJsaXNoRGlhZ25vc3RpY3NgIG5vdGlmaWNhdGlvbidzIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB2ZXJzaW9uU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgW2NvbXBsZXRpb24gaXRlbXNdKCNDb21wbGV0aW9uSXRlbSkgdG8gYmVcbiAqIHByZXNlbnRlZCBpbiB0aGUgZWRpdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25MaXN0IHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGxpc3QgaXQgbm90IGNvbXBsZXRlLiBGdXJ0aGVyIHR5cGluZyBzaG91bGQgcmVzdWx0IGluIHJlY29tcHV0aW5nXG4gICAgICogdGhpcyBsaXN0LlxuICAgICAqL1xuICAgIGlzSW5jb21wbGV0ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wbGV0aW9uIGl0ZW1zLlxuICAgICAqL1xuICAgIGl0ZW1zOiBDb21wbGV0aW9uSXRlbVtdO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hldGhlciB0aGUgaW5zZXJ0IHRleHQgaW4gYSBjb21wbGV0aW9uIGl0ZW0gc2hvdWxkIGJlIGludGVycHJldGVkIGFzXG4gKiBwbGFpbiB0ZXh0IG9yIGEgc25pcHBldC5cbiAqL1xuZXhwb3J0IGVudW0gSW5zZXJ0VGV4dEZvcm1hdCB7XG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSB0ZXh0IHRvIGJlIGluc2VydGVkIGlzIHRyZWF0ZWQgYXMgYSBwbGFpbiBzdHJpbmcuXG4gICAqL1xuICBQbGFpblRleHQgPSAxLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSB0ZXh0IHRvIGJlIGluc2VydGVkIGlzIHRyZWF0ZWQgYXMgYSBzbmlwcGV0LlxuICAgKlxuICAgKiBBIHNuaXBwZXQgY2FuIGRlZmluZSB0YWIgc3RvcHMgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGAkMWAsIGAkMmBcbiAgICogYW5kIGAkezM6Zm9vfWAuIGAkMGAgZGVmaW5lcyB0aGUgZmluYWwgdGFiIHN0b3AsIGl0IGRlZmF1bHRzIHRvXG4gICAqIHRoZSBlbmQgb2YgdGhlIHNuaXBwZXQuIFBsYWNlaG9sZGVycyB3aXRoIGVxdWFsIGlkZW50aWZpZXJzIGFyZSBsaW5rZWQsXG4gICAqIHRoYXQgaXMgdHlwaW5nIGluIG9uZSB3aWxsIHVwZGF0ZSBvdGhlcnMgdG9vLlxuICAgKi9cbiAgU25pcHBldCA9IDIsXG59XG5cbi8qKlxuICogQSBzcGVjaWFsIHRleHQgZWRpdCB0byBwcm92aWRlIGFuIGluc2VydCBhbmQgYSByZXBsYWNlIG9wZXJhdGlvbi5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0UmVwbGFjZUVkaXQge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQuXG4gICAgICovXG4gICAgbmV3VGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJhbmdlIGlmIHRoZSBpbnNlcnQgaXMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgaW5zZXJ0OiBwcm90b2NvbC5SYW5nZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByYW5nZSBpZiB0aGUgcmVwbGFjZSBpcyByZXF1ZXN0ZWQuXG4gICAgICovXG4gICAgcmVwbGFjZTogcHJvdG9jb2wuUmFuZ2U7XG59XG5cbi8qKlxuICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAqIGl0ZW0gaW5zZXJ0aW9uLlxuICpcbiAqIEBzaW5jZSAzLjE2LjBcbiAqL1xuZXhwb3J0IGVudW0gSW5zZXJ0VGV4dE1vZGUge1xuICAvKipcbiAgICogVGhlIGluc2VydGlvbiBvciByZXBsYWNlIHN0cmluZ3MgaXMgdGFrZW4gYXMgaXQgaXMuIElmIHRoZVxuICAgKiB2YWx1ZSBpcyBtdWx0aSBsaW5lIHRoZSBsaW5lcyBiZWxvdyB0aGUgY3Vyc29yIHdpbGwgYmVcbiAgICogaW5zZXJ0ZWQgdXNpbmcgdGhlIGluZGVudGF0aW9uIGRlZmluZWQgaW4gdGhlIHN0cmluZyB2YWx1ZS5cbiAgICogVGhlIGNsaWVudCB3aWxsIG5vdCBhcHBseSBhbnkga2luZCBvZiBhZGp1c3RtZW50cyB0byB0aGVcbiAgICogc3RyaW5nLlxuICAgKi9cbiAgYXNJcyA9IDEsXG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgYWRqdXN0cyBsZWFkaW5nIHdoaXRlc3BhY2Ugb2YgbmV3IGxpbmVzIHNvIHRoYXRcbiAgICogdGhleSBtYXRjaCB0aGUgaW5kZW50YXRpb24gdXAgdG8gdGhlIGN1cnNvciBvZiB0aGUgbGluZSBmb3JcbiAgICogd2hpY2ggdGhlIGl0ZW0gaXMgYWNjZXB0ZWQuXG4gICAqXG4gICAqIENvbnNpZGVyIGEgbGluZSBsaWtlIHRoaXM6IDwydGFicz48Y3Vyc29yPjwzdGFicz5mb28uIEFjY2VwdGluZyBhXG4gICAqIG11bHRpIGxpbmUgY29tcGxldGlvbiBpdGVtIGlzIGluZGVudGVkIHVzaW5nIDIgdGFicyBhbmQgYWxsXG4gICAqIGZvbGxvd2luZyBsaW5lcyBpbnNlcnRlZCB3aWxsIGJlIGluZGVudGVkIHVzaW5nIDIgdGFicyBhcyB3ZWxsLlxuICAgKi9cbiAgYWRqdXN0SW5kZW50YXRpb24gPSAyLFxufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25JdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbGFiZWwgb2YgdGhpcyBjb21wbGV0aW9uIGl0ZW0uIEJ5IGRlZmF1bHRcbiAgICAgKiBhbHNvIHRoZSB0ZXh0IHRoYXQgaXMgaW5zZXJ0ZWQgd2hlbiBzZWxlY3RpbmdcbiAgICAgKiB0aGlzIGNvbXBsZXRpb24uXG4gICAgICovXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBraW5kIG9mIHRoaXMgY29tcGxldGlvbiBpdGVtLiBCYXNlZCBvZiB0aGUga2luZFxuICAgICAqIGFuIGljb24gaXMgY2hvc2VuIGJ5IHRoZSBlZGl0b3IuIFRoZSBzdGFuZGFyZGl6ZWQgc2V0XG4gICAgICogb2YgYXZhaWxhYmxlIHZhbHVlcyBpcyBkZWZpbmVkIGluIGBDb21wbGV0aW9uSXRlbUtpbmRgLlxuICAgICAqL1xuICAgIGtpbmQ/OiBDb21wbGV0aW9uSXRlbUtpbmQ7XG5cbiAgICAvKipcbiAgICAgKiBUYWdzIGZvciB0aGlzIGNvbXBsZXRpb24gaXRlbS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB0YWdzPzogQ29tcGxldGlvbkl0ZW1UYWdbXTtcblxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICAgICAqIGFib3V0IHRoaXMgaXRlbSwgbGlrZSB0eXBlIG9yIHN5bWJvbCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBkZXRhaWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIGh1bWFuLXJlYWRhYmxlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBkb2MtY29tbWVudC5cbiAgICAgKi9cbiAgICBkb2N1bWVudGF0aW9uPzogc3RyaW5nfE1hcmt1cENvbnRlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBpdGVtIGlzIGRlcHJlY2F0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYHRhZ3NgIGluc3RlYWQgaWYgc3VwcG9ydGVkLlxuICAgICAqL1xuICAgIGRlcHJlY2F0ZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IHRoaXMgaXRlbSB3aGVuIHNob3dpbmcuXG4gICAgICpcbiAgICAgKiAqTm90ZSogdGhhdCBvbmx5IG9uZSBjb21wbGV0aW9uIGl0ZW0gY2FuIGJlIHNlbGVjdGVkIGFuZCB0aGF0IHRoZVxuICAgICAqIHRvb2wgLyBjbGllbnQgZGVjaWRlcyB3aGljaCBpdGVtIHRoYXQgaXMuIFRoZSBydWxlIGlzIHRoYXQgdGhlICpmaXJzdCpcbiAgICAgKiBpdGVtIG9mIHRob3NlIHRoYXQgbWF0Y2ggYmVzdCBpcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwcmVzZWxlY3Q/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGNvbXBhcmluZyB0aGlzIGl0ZW1cbiAgICAgKiB3aXRoIG90aGVyIGl0ZW1zLiBXaGVuIGBmYWxzeWAgdGhlIGxhYmVsIGlzIHVzZWQuXG4gICAgICovXG4gICAgc29ydFRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZmlsdGVyaW5nIGEgc2V0IG9mXG4gICAgICogY29tcGxldGlvbiBpdGVtcy4gV2hlbiBgZmFsc3lgIHRoZSBsYWJlbCBpcyB1c2VkLlxuICAgICAqL1xuICAgIGZpbHRlclRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGEgZG9jdW1lbnQgd2hlbiBzZWxlY3RpbmdcbiAgICAgKiB0aGlzIGNvbXBsZXRpb24uIFdoZW4gYGZhbHN5YCB0aGUgbGFiZWwgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqIFRoZSBgaW5zZXJ0VGV4dGAgaXMgc3ViamVjdCB0byBpbnRlcnByZXRhdGlvbiBieSB0aGUgY2xpZW50IHNpZGUuXG4gICAgICogU29tZSB0b29scyBtaWdodCBub3QgdGFrZSB0aGUgc3RyaW5nIGxpdGVyYWxseS4gRm9yIGV4YW1wbGVcbiAgICAgKiBWUyBDb2RlIHdoZW4gY29kZSBjb21wbGV0ZSBpcyByZXF1ZXN0ZWQgaW4gdGhpcyBleGFtcGxlXG4gICAgICogYGNvbjxjdXJzb3IgcG9zaXRpb24+YCBhbmQgYSBjb21wbGV0aW9uIGl0ZW0gd2l0aCBhbiBgaW5zZXJ0VGV4dGAgb2ZcbiAgICAgKiBgY29uc29sZWAgaXMgcHJvdmlkZWQgaXQgd2lsbCBvbmx5IGluc2VydCBgc29sZWAuIFRoZXJlZm9yZSBpdCBpc1xuICAgICAqIHJlY29tbWVuZGVkIHRvIHVzZSBgdGV4dEVkaXRgIGluc3RlYWQgc2luY2UgaXQgYXZvaWRzIGFkZGl0aW9uYWwgY2xpZW50XG4gICAgICogc2lkZSBpbnRlcnByZXRhdGlvbi5cbiAgICAgKi9cbiAgICBpbnNlcnRUZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZvcm1hdCBvZiB0aGUgaW5zZXJ0IHRleHQuIFRoZSBmb3JtYXQgYXBwbGllcyB0byBib3RoIHRoZVxuICAgICAqIGBpbnNlcnRUZXh0YCBwcm9wZXJ0eSBhbmQgdGhlIGBuZXdUZXh0YCBwcm9wZXJ0eSBvZiBhIHByb3ZpZGVkXG4gICAgICogYHRleHRFZGl0YC4gSWYgb21pdHRlZCBkZWZhdWx0cyB0byBgSW5zZXJ0VGV4dEZvcm1hdC5QbGFpblRleHRgLlxuICAgICAqL1xuICAgIGluc2VydFRleHRGb3JtYXQ/OiBJbnNlcnRUZXh0Rm9ybWF0O1xuXG4gICAgLyoqXG4gICAgICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAgICAgKiBpdGVtIGluc2VydGlvbi4gSWYgbm90IHByb3ZpZGVkIHRoZSBjbGllbnQncyBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb25cbiAgICAgKiB0aGUgYHRleHREb2N1bWVudC5jb21wbGV0aW9uLmluc2VydFRleHRNb2RlYCBjbGllbnQgY2FwYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjBcbiAgICAgKi9cbiAgICBpbnNlcnRUZXh0TW9kZT86IEluc2VydFRleHRNb2RlO1xuXG4gICAgLyoqXG4gICAgICogQW4gZWRpdCB3aGljaCBpcyBhcHBsaWVkIHRvIGEgZG9jdW1lbnQgd2hlbiBzZWxlY3RpbmcgdGhpcyBjb21wbGV0aW9uLlxuICAgICAqIFdoZW4gYW4gZWRpdCBpcyBwcm92aWRlZCB0aGUgdmFsdWUgb2YgYGluc2VydFRleHRgIGlzIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiAqTm90ZToqIFRoZSByYW5nZSBvZiB0aGUgZWRpdCBtdXN0IGJlIGEgc2luZ2xlIGxpbmUgcmFuZ2UgYW5kIGl0IG11c3RcbiAgICAgKiBjb250YWluIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBjb21wbGV0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICAgKlxuICAgICAqIE1vc3QgZWRpdG9ycyBzdXBwb3J0IHR3byBkaWZmZXJlbnQgb3BlcmF0aW9ucyB3aGVuIGFjY2VwdGluZyBhIGNvbXBsZXRpb25cbiAgICAgKiBpdGVtLiBPbmUgaXMgdG8gaW5zZXJ0IGEgY29tcGxldGlvbiB0ZXh0IGFuZCB0aGUgb3RoZXIgaXMgdG8gcmVwbGFjZSBhblxuICAgICAqIGV4aXN0aW5nIHRleHQgd2l0aCBhIGNvbXBsZXRpb24gdGV4dC4gU2luY2UgdGhpcyBjYW4gdXN1YWxseSBub3QgYmVcbiAgICAgKiBwcmVkZXRlcm1pbmVkIGJ5IGEgc2VydmVyIGl0IGNhbiByZXBvcnQgYm90aCByYW5nZXMuIENsaWVudHMgbmVlZCB0b1xuICAgICAqIHNpZ25hbCBzdXBwb3J0IGZvciBgSW5zZXJ0UmVwbGFjZUVkaXRzYCB2aWEgdGhlXG4gICAgICogYHRleHREb2N1bWVudC5jb21wbGV0aW9uLmluc2VydFJlcGxhY2VTdXBwb3J0YCBjbGllbnQgY2FwYWJpbGl0eVxuICAgICAqIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogKk5vdGUgMToqIFRoZSB0ZXh0IGVkaXQncyByYW5nZSBhcyB3ZWxsIGFzIGJvdGggcmFuZ2VzIGZyb20gYW4gaW5zZXJ0XG4gICAgICogcmVwbGFjZSBlZGl0IG11c3QgYmUgYSBbc2luZ2xlIGxpbmVdIGFuZCB0aGV5IG11c3QgY29udGFpbiB0aGUgcG9zaXRpb25cbiAgICAgKiBhdCB3aGljaCBjb21wbGV0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICAgKiAqTm90ZSAyOiogSWYgYW4gYEluc2VydFJlcGxhY2VFZGl0YCBpcyByZXR1cm5lZCB0aGUgZWRpdCdzIGluc2VydCByYW5nZVxuICAgICAqIG11c3QgYmUgYSBwcmVmaXggb2YgdGhlIGVkaXQncyByZXBsYWNlIHJhbmdlLCB0aGF0IG1lYW5zIGl0IG11c3QgYmVcbiAgICAgKiBjb250YWluZWQgYW5kIHN0YXJ0aW5nIGF0IHRoZSBzYW1lIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMCBhZGRpdGlvbmFsIHR5cGUgYEluc2VydFJlcGxhY2VFZGl0YFxuICAgICAqL1xuICAgIHRleHRFZGl0PzogVGV4dEVkaXR8SW5zZXJ0UmVwbGFjZUVkaXQ7XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBhcnJheSBvZiBhZGRpdGlvbmFsIHRleHQgZWRpdHMgdGhhdCBhcmUgYXBwbGllZCB3aGVuXG4gICAgICogc2VsZWN0aW5nIHRoaXMgY29tcGxldGlvbi4gRWRpdHMgbXVzdCBub3Qgb3ZlcmxhcCAoaW5jbHVkaW5nIHRoZSBzYW1lXG4gICAgICogaW5zZXJ0IHBvc2l0aW9uKSB3aXRoIHRoZSBtYWluIGVkaXQgbm9yIHdpdGggdGhlbXNlbHZlcy5cbiAgICAgKlxuICAgICAqIEFkZGl0aW9uYWwgdGV4dCBlZGl0cyBzaG91bGQgYmUgdXNlZCB0byBjaGFuZ2UgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlXG4gICAgICogY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKGZvciBleGFtcGxlIGFkZGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IGF0IHRoZVxuICAgICAqIHRvcCBvZiB0aGUgZmlsZSBpZiB0aGUgY29tcGxldGlvbiBpdGVtIHdpbGwgaW5zZXJ0IGFuIHVucXVhbGlmaWVkIHR5cGUpLlxuICAgICAqL1xuICAgIGFkZGl0aW9uYWxUZXh0RWRpdHM/OiBUZXh0RWRpdFtdO1xuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCB3aGVuIHByZXNzZWQgd2hpbGUgdGhpcyBjb21wbGV0aW9uIGlzXG4gICAgICogYWN0aXZlIHdpbGwgYWNjZXB0IGl0IGZpcnN0IGFuZCB0aGVuIHR5cGUgdGhhdCBjaGFyYWN0ZXIuICpOb3RlKiB0aGF0IGFsbFxuICAgICAqIGNvbW1pdCBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIGBsZW5ndGg9MWAgYW5kIHRoYXQgc3VwZXJmbHVvdXMgY2hhcmFjdGVyc1xuICAgICAqIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKi9cbiAgICBjb21taXRDaGFyYWN0ZXJzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBjb21tYW5kIHRoYXQgaXMgZXhlY3V0ZWQgKmFmdGVyKiBpbnNlcnRpbmcgdGhpcyBjb21wbGV0aW9uLlxuICAgICAqICpOb3RlKiB0aGF0IGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgY3VycmVudCBkb2N1bWVudCBzaG91bGQgYmVcbiAgICAgKiBkZXNjcmliZWQgd2l0aCB0aGUgYWRkaXRpb25hbFRleHRFZGl0cy1wcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjb21tYW5kPzogcHJvdG9jb2wuQ29tbWFuZDtcblxuICAgIC8qKlxuICAgICAqIEEgZGF0YSBlbnRyeSBmaWVsZCB0aGF0IGlzIHByZXNlcnZlZCBvbiBhIGNvbXBsZXRpb24gaXRlbSBiZXR3ZWVuXG4gICAgICogYSBjb21wbGV0aW9uIGFuZCBhIGNvbXBsZXRpb24gcmVzb2x2ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIGRhdGE/OiB1bmtub3duO1xufVxuXG5cbi8vIHRzbGludDpkaXNhYmxlOmpzZG9jLWZvcm1hdFxuLyoqXG4gKiBBIGBNYXJrdXBDb250ZW50YCBsaXRlcmFsIHJlcHJlc2VudHMgYSBzdHJpbmcgdmFsdWUgd2hpY2ggY29udGVudCBpc1xuICogaW50ZXJwcmV0ZWQgYmFzZSBvbiBpdHMga2luZCBmbGFnLiBDdXJyZW50bHkgdGhlIHByb3RvY29sIHN1cHBvcnRzXG4gKiBgcGxhaW50ZXh0YCBhbmQgYG1hcmtkb3duYCBhcyBtYXJrdXAga2luZHMuXG4gKlxuICogSWYgdGhlIGtpbmQgaXMgYG1hcmtkb3duYCB0aGVuIHRoZSB2YWx1ZSBjYW4gY29udGFpbiBmZW5jZWQgY29kZSBibG9ja3MgbGlrZVxuICogaW4gR2l0SHViIGlzc3Vlcy5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgaG93IHN1Y2ggYSBzdHJpbmcgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nXG4gKiBKYXZhU2NyaXB0IC8gVHlwZVNjcmlwdDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGxldCBtYXJrZG93bjogTWFya2Rvd25Db250ZW50ID0ge1xuICogIGtpbmQ6IE1hcmt1cEtpbmQuTWFya2Rvd24sXG4gKiAgdmFsdWU6IFtcbiAqICAgICcjIEhlYWRlcicsXG4gKiAgICAnU29tZSB0ZXh0JyxcbiAqICAgICdgYGB0eXBlc2NyaXB0JyxcbiAqICAgICdzb21lQ29kZSgpOycsXG4gKiAgICAnYGBgJ1xuICogIF0uam9pbignXFxuJylcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiAqUGxlYXNlIE5vdGUqIHRoYXQgY2xpZW50cyBtaWdodCBzYW5pdGl6ZSB0aGUgcmV0dXJuIG1hcmtkb3duLiBBIGNsaWVudCBjb3VsZFxuICogZGVjaWRlIHRvIHJlbW92ZSBIVE1MIGZyb20gdGhlIG1hcmtkb3duIHRvIGF2b2lkIHNjcmlwdCBleGVjdXRpb24uXG4gKi9cbi8vIHRzbGludDplbmFibGU6anNkb2MtZm9ybWF0XG5leHBvcnQgaW50ZXJmYWNlIE1hcmt1cENvbnRlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBNYXJrdXBcbiAgICAgKi9cbiAgICBraW5kOiBNYXJrdXBLaW5kO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgaXRzZWxmXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3NpZ25hdHVyZUhlbHBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYXR1cmVIZWxwUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2lnbmF0dXJlIGhlbHAgY29udGV4dC4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgY2xpZW50XG4gICAgICogc3BlY2lmaWVzIHRvIHNlbmQgdGhpcyB1c2luZyB0aGUgY2xpZW50IGNhcGFiaWxpdHlcbiAgICAgKiBgdGV4dERvY3VtZW50LnNpZ25hdHVyZUhlbHAuY29udGV4dFN1cHBvcnQgPT09IHRydWVgXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgY29udGV4dD86IFNpZ25hdHVyZUhlbHBDb250ZXh0O1xufVxuXG4vKipcbiAqIEhvdyBhIHNpZ25hdHVyZSBoZWxwIHdhcyB0cmlnZ2VyZWQuXG4gKlxuICogQHNpbmNlIDMuMTUuMFxuICovXG5leHBvcnQgZW51bSBTaWduYXR1cmVIZWxwVHJpZ2dlcktpbmQge1xuICAvKipcbiAgICogU2lnbmF0dXJlIGhlbHAgd2FzIGludm9rZWQgbWFudWFsbHkgYnkgdGhlIHVzZXIgb3IgYnkgYSBjb21tYW5kLlxuICAgKi9cbiAgSW52b2tlZCA9IDEsXG4gIC8qKlxuICAgKiBTaWduYXR1cmUgaGVscCB3YXMgdHJpZ2dlcmVkIGJ5IGEgdHJpZ2dlciBjaGFyYWN0ZXIuXG4gICAqL1xuICBUcmlnZ2VyQ2hhcmFjdGVyID0gMixcbiAgLyoqXG4gICAqIFNpZ25hdHVyZSBoZWxwIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnNvciBtb3Zpbmcgb3IgYnkgdGhlIGRvY3VtZW50XG4gICAqIGNvbnRlbnQgY2hhbmdpbmcuXG4gICAqL1xuICBDb250ZW50Q2hhbmdlID0gMyxcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIGEgc2lnbmF0dXJlIGhlbHAgcmVxdWVzdFxuICogd2FzIHRyaWdnZXJlZC5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0dXJlSGVscENvbnRleHQge1xuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0aGF0IGNhdXNlZCBzaWduYXR1cmUgaGVscCB0byBiZSB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgdHJpZ2dlcktpbmQ6IFNpZ25hdHVyZUhlbHBUcmlnZ2VyS2luZDtcblxuICAgIC8qKlxuICAgICAqIENoYXJhY3RlciB0aGF0IGNhdXNlZCBzaWduYXR1cmUgaGVscCB0byBiZSB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVuZGVmaW5lZCB3aGVuIHRyaWdnZXJLaW5kICE9PVxuICAgICAqIFNpZ25hdHVyZUhlbHBUcmlnZ2VyS2luZC5UcmlnZ2VyQ2hhcmFjdGVyXG4gICAgICovXG4gICAgdHJpZ2dlckNoYXJhY3Rlcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBzaWduYXR1cmUgaGVscCB3YXMgYWxyZWFkeSBzaG93aW5nIHdoZW4gaXQgd2FzIHRyaWdnZXJlZC5cbiAgICAgKlxuICAgICAqIFJldHJpZ2dlcnMgb2NjdXIgd2hlbiB0aGUgc2lnbmF0dXJlIGhlbHAgaXMgYWxyZWFkeSBhY3RpdmUgYW5kIGNhbiBiZVxuICAgICAqIGNhdXNlZCBieSBhY3Rpb25zIHN1Y2ggYXMgdHlwaW5nIGEgdHJpZ2dlciBjaGFyYWN0ZXIsIGEgY3Vyc29yIG1vdmUsIG9yXG4gICAgICogZG9jdW1lbnQgY29udGVudCBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGlzUmV0cmlnZ2VyOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgYFNpZ25hdHVyZUhlbHBgLlxuICAgICAqXG4gICAgICogVGhlIGBhY3RpdmVTaWduYXR1cmVIZWxwYCBoYXMgaXRzIGBTaWduYXR1cmVIZWxwLmFjdGl2ZVNpZ25hdHVyZWAgZmllbGRcbiAgICAgKiB1cGRhdGVkIGJhc2VkIG9uIHRoZSB1c2VyIG5hdmlnYXRpbmcgdGhyb3VnaCBhdmFpbGFibGUgc2lnbmF0dXJlcy5cbiAgICAgKi9cbiAgICBhY3RpdmVTaWduYXR1cmVIZWxwPzogU2lnbmF0dXJlSGVscDtcbn1cblxuLyoqXG4gKiBTaWduYXR1cmUgaGVscCByZXByZXNlbnRzIHRoZSBzaWduYXR1cmUgb2Ygc29tZXRoaW5nXG4gKiBjYWxsYWJsZS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlIHNpZ25hdHVyZSBidXQgb25seSBvbmVcbiAqIGFjdGl2ZSBhbmQgb25seSBvbmUgYWN0aXZlIHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYXR1cmVIZWxwIHtcbiAgICAvKipcbiAgICAgKiBPbmUgb3IgbW9yZSBzaWduYXR1cmVzLiBJZiBubyBzaWduYXR1cmVzIGFyZSBhdmFpbGFibGUgdGhlIHNpZ25hdHVyZSBoZWxwXG4gICAgICogcmVxdWVzdCBzaG91bGQgcmV0dXJuIGBudWxsYC5cbiAgICAgKi9cbiAgICBzaWduYXR1cmVzOiBTaWduYXR1cmVJbmZvcm1hdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdGl2ZSBzaWduYXR1cmUuIElmIG9taXR0ZWQgb3IgdGhlIHZhbHVlIGxpZXMgb3V0c2lkZSB0aGVcbiAgICAgKiByYW5nZSBvZiBgc2lnbmF0dXJlc2AgdGhlIHZhbHVlIGRlZmF1bHRzIHRvIHplcm8gb3IgaXMgaWdub3JlZCBpZlxuICAgICAqIHRoZSBgU2lnbmF0dXJlSGVscGAgaGFzIG5vIHNpZ25hdHVyZXMuXG4gICAgICpcbiAgICAgKiBXaGVuZXZlciBwb3NzaWJsZSBpbXBsZW1lbnRvcnMgc2hvdWxkIG1ha2UgYW4gYWN0aXZlIGRlY2lzaW9uIGFib3V0XG4gICAgICogdGhlIGFjdGl2ZSBzaWduYXR1cmUgYW5kIHNob3VsZG4ndCByZWx5IG9uIGEgZGVmYXVsdCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEluIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0aGlzIHByb3BlcnR5IG1pZ2h0IGJlY29tZVxuICAgICAqIG1hbmRhdG9yeSB0byBiZXR0ZXIgZXhwcmVzcyB0aGlzLlxuICAgICAqL1xuICAgIGFjdGl2ZVNpZ25hdHVyZT86IHByb3RvY29sLnVpbnRlZ2VyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdGl2ZSBwYXJhbWV0ZXIgb2YgdGhlIGFjdGl2ZSBzaWduYXR1cmUuIElmIG9taXR0ZWQgb3IgdGhlIHZhbHVlXG4gICAgICogbGllcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBgc2lnbmF0dXJlc1thY3RpdmVTaWduYXR1cmVdLnBhcmFtZXRlcnNgXG4gICAgICogZGVmYXVsdHMgdG8gMCBpZiB0aGUgYWN0aXZlIHNpZ25hdHVyZSBoYXMgcGFyYW1ldGVycy4gSWZcbiAgICAgKiB0aGUgYWN0aXZlIHNpZ25hdHVyZSBoYXMgbm8gcGFyYW1ldGVycyBpdCBpcyBpZ25vcmVkLlxuICAgICAqIEluIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0aGlzIHByb3BlcnR5IG1pZ2h0IGJlY29tZVxuICAgICAqIG1hbmRhdG9yeSB0byBiZXR0ZXIgZXhwcmVzcyB0aGUgYWN0aXZlIHBhcmFtZXRlciBpZiB0aGVcbiAgICAgKiBhY3RpdmUgc2lnbmF0dXJlIGRvZXMgaGF2ZSBhbnkuXG4gICAgICovXG4gICAgYWN0aXZlUGFyYW1ldGVyPzogcHJvdG9jb2wudWludGVnZXI7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc2lnbmF0dXJlIG9mIHNvbWV0aGluZyBjYWxsYWJsZS4gQSBzaWduYXR1cmVcbiAqIGNhbiBoYXZlIGEgbGFiZWwsIGxpa2UgYSBmdW5jdGlvbi1uYW1lLCBhIGRvYy1jb21tZW50LCBhbmRcbiAqIGEgc2V0IG9mIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0dXJlSW5mb3JtYXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBsYWJlbCBvZiB0aGlzIHNpZ25hdHVyZS4gV2lsbCBiZSBzaG93biBpblxuICAgICAqIHRoZSBVSS5cbiAgICAgKi9cbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGh1bWFuLXJlYWRhYmxlIGRvYy1jb21tZW50IG9mIHRoaXMgc2lnbmF0dXJlLiBXaWxsIGJlIHNob3duXG4gICAgICogaW4gdGhlIFVJIGJ1dCBjYW4gYmUgb21pdHRlZC5cbiAgICAgKi9cbiAgICBkb2N1bWVudGF0aW9uPzogc3RyaW5nfE1hcmt1cENvbnRlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGFyYW1ldGVycyBvZiB0aGlzIHNpZ25hdHVyZS5cbiAgICAgKi9cbiAgICBwYXJhbWV0ZXJzPzogUGFyYW1ldGVySW5mb3JtYXRpb25bXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIElmIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQgaW4gcGxhY2Ugb2YgYFNpZ25hdHVyZUhlbHAuYWN0aXZlUGFyYW1ldGVyYC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjBcbiAgICAgKi9cbiAgICBhY3RpdmVQYXJhbWV0ZXI/OiBwcm90b2NvbC51aW50ZWdlcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcGFyYW1ldGVyIG9mIGEgY2FsbGFibGUtc2lnbmF0dXJlLiBBIHBhcmFtZXRlciBjYW5cbiAqIGhhdmUgYSBsYWJlbCBhbmQgYSBkb2MtY29tbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJJbmZvcm1hdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGxhYmVsIG9mIHRoaXMgcGFyYW1ldGVyIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogRWl0aGVyIGEgc3RyaW5nIG9yIGFuIGluY2x1c2l2ZSBzdGFydCBhbmQgZXhjbHVzaXZlIGVuZCBvZmZzZXRzIHdpdGhpblxuICAgICAqIGl0cyBjb250YWluaW5nIHNpZ25hdHVyZSBsYWJlbC4gKHNlZSBTaWduYXR1cmVJbmZvcm1hdGlvbi5sYWJlbCkuIFRoZVxuICAgICAqIG9mZnNldHMgYXJlIGJhc2VkIG9uIGEgVVRGLTE2IHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBgUG9zaXRpb25gIGFuZFxuICAgICAqIGBSYW5nZWAgZG9lcy5cbiAgICAgKlxuICAgICAqICpOb3RlKjogYSBsYWJlbCBvZiB0eXBlIHN0cmluZyBzaG91bGQgYmUgYSBzdWJzdHJpbmcgb2YgaXRzIGNvbnRhaW5pbmdcbiAgICAgKiBzaWduYXR1cmUgbGFiZWwuIEl0cyBpbnRlbmRlZCB1c2UgY2FzZSBpcyB0byBoaWdobGlnaHQgdGhlIHBhcmFtZXRlclxuICAgICAqIGxhYmVsIHBhcnQgaW4gdGhlIGBTaWduYXR1cmVJbmZvcm1hdGlvbi5sYWJlbGAuXG4gICAgICovXG4gICAgbGFiZWw6IHN0cmluZ3xbcHJvdG9jb2wudWludGVnZXIsIHByb3RvY29sLnVpbnRlZ2VyXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBodW1hbi1yZWFkYWJsZSBkb2MtY29tbWVudCBvZiB0aGlzIHBhcmFtZXRlci4gV2lsbCBiZSBzaG93blxuICAgICAqIGluIHRoZSBVSSBidXQgY2FuIGJlIG9taXR0ZWQuXG4gICAgICovXG4gICAgZG9jdW1lbnRhdGlvbj86IHN0cmluZ3xNYXJrdXBDb250ZW50O1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfaG92ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlclBhcmFtcyBleHRlbmRzIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLldvcmtEb25lUHJvZ3Jlc3NQYXJhbXMge31cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGEgaG92ZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlciB7XG4gICAgLyoqXG4gICAgICogVGhlIGhvdmVyJ3MgY29udGVudFxuICAgICAqL1xuICAgIGNvbnRlbnRzOiBNYXJrdXBDb250ZW50O1xuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgcmFuZ2UgaXMgYSByYW5nZSBpbnNpZGUgYSB0ZXh0IGRvY3VtZW50XG4gICAgICogdGhhdCBpcyB1c2VkIHRvIHZpc3VhbGl6ZSBhIGhvdmVyLCBlLmcuIGJ5IGNoYW5naW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqL1xuICAgIHJhbmdlPzogcHJvdG9jb2wuUmFuZ2U7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLTMtMTcvI2RlZmluaXRpb25QYXJhbXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wuUGFydGlhbFJlc3VsdFBhcmFtcyB7fVxuXG4vKipcbiAqIFBhcmFtcyBmb3IgdGhlIGN1c3RvbSAnZWNob0RvY3VtZW50JyBjb21tZW50IHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGVcbiAqIG9mIHRoZSBzZXJ2ZXIncyB2aWV3IG9mIHRoZSBMU1AgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNob0RvY3VtZW50UGFyYW1zIHt9XG5cbi8qKlxuICogUGFyYW1zIGZvciB0aGUgQ29kZUFjdGlvblJlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQWN0aW9uUGFyYW1zIGV4dGVuZHMgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLlBhcnRpYWxSZXN1bHRQYXJhbXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBkb2N1bWVudCBpbiB3aGljaCB0aGUgY29tbWFuZCB3YXMgaW52b2tlZC5cbiAgICAgKi9cbiAgICB0ZXh0RG9jdW1lbnQ6IFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFuZ2UgZm9yIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBpbnZva2VkLlxuICAgICAqL1xuICAgIHJhbmdlOiBwcm90b2NvbC5SYW5nZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgY2FycnlpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBjb250ZXh0OiBDb2RlQWN0aW9uQ29udGV4dDtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHRoZSBSZW5hbWVSZXF1ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLldvcmtEb25lUHJvZ3Jlc3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5ldyBuYW1lIG9mIHRoZSBzeW1ib2wuIElmIHRoZSBnaXZlbiBuYW1lIGlzIG5vdCB2YWxpZCB0aGVcbiAgICogcmVxdWVzdCBtdXN0IHJldHVybiBhIFtSZXNwb25zZUVycm9yXSgjUmVzcG9uc2VFcnJvcikgd2l0aCBhblxuICAgKiBhcHByb3ByaWF0ZSBtZXNzYWdlIHNldC5cbiAgICovXG4gIG5ld05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvZGUgYWN0aW9uIHJlcHJlc2VudHMgYSBjaGFuZ2UgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIGluIGNvZGUsIGUuZy4gdG8gZml4XG4gKiBhIHByb2JsZW0gb3IgdG8gcmVmYWN0b3IgY29kZS5cbiAqXG4gKiBBIENvZGVBY3Rpb24gbXVzdCBzZXQgZWl0aGVyIGBlZGl0YCBhbmQvb3IgYSBgY29tbWFuZGAuIElmIGJvdGggYXJlIHN1cHBsaWVkLFxuICogdGhlIGBlZGl0YCBpcyBhcHBsaWVkIGZpcnN0LCB0aGVuIHRoZSBgY29tbWFuZGAgaXMgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUFjdGlvbiB7XG4gICAgLyoqXG4gICAgICogQSBzaG9ydCwgaHVtYW4tcmVhZGFibGUsIHRpdGxlIGZvciB0aGlzIGNvZGUgYWN0aW9uLlxuICAgICAqL1xuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUga2luZCBvZiB0aGUgY29kZSBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBVc2VkIHRvIGZpbHRlciBjb2RlIGFjdGlvbnMuXG4gICAgICovXG4gICAga2luZD86IENvZGVBY3Rpb25LaW5kO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpYWdub3N0aWNzIHRoYXQgdGhpcyBjb2RlIGFjdGlvbiByZXNvbHZlcy5cbiAgICAgKi9cbiAgICBkaWFnbm9zdGljcz86IHByb3RvY29sLkRpYWdub3N0aWNbXTtcblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoaXMgYXMgYSBwcmVmZXJyZWQgYWN0aW9uLiBQcmVmZXJyZWQgYWN0aW9ucyBhcmUgdXNlZCBieSB0aGVcbiAgICAgKiBgYXV0byBmaXhgIGNvbW1hbmQgYW5kIGNhbiBiZSB0YXJnZXRlZCBieSBrZXliaW5kaW5ncy5cbiAgICAgKlxuICAgICAqIEEgcXVpY2sgZml4IHNob3VsZCBiZSBtYXJrZWQgcHJlZmVycmVkIGlmIGl0IHByb3Blcmx5IGFkZHJlc3NlcyB0aGVcbiAgICAgKiB1bmRlcmx5aW5nIGVycm9yLiBBIHJlZmFjdG9yaW5nIHNob3VsZCBiZSBtYXJrZWQgcHJlZmVycmVkIGlmIGl0IGlzIHRoZVxuICAgICAqIG1vc3QgcmVhc29uYWJsZSBjaG9pY2Ugb2YgYWN0aW9ucyB0byB0YWtlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIGlzUHJlZmVycmVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoYXQgdGhlIGNvZGUgYWN0aW9uIGNhbm5vdCBjdXJyZW50bHkgYmUgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIENsaWVudHMgc2hvdWxkIGZvbGxvdyB0aGUgZm9sbG93aW5nIGd1aWRlbGluZXMgcmVnYXJkaW5nIGRpc2FibGVkIGNvZGVcbiAgICAgKiBhY3Rpb25zOlxuICAgICAqXG4gICAgICogLSBEaXNhYmxlZCBjb2RlIGFjdGlvbnMgYXJlIG5vdCBzaG93biBpbiBhdXRvbWF0aWMgbGlnaHRidWxicyBjb2RlXG4gICAgICogICBhY3Rpb24gbWVudXMuXG4gICAgICpcbiAgICAgKiAtIERpc2FibGVkIGFjdGlvbnMgYXJlIHNob3duIGFzIGZhZGVkIG91dCBpbiB0aGUgY29kZSBhY3Rpb24gbWVudSB3aGVuXG4gICAgICogICB0aGUgdXNlciByZXF1ZXN0IGEgbW9yZSBzcGVjaWZpYyB0eXBlIG9mIGNvZGUgYWN0aW9uLCBzdWNoIGFzXG4gICAgICogICByZWZhY3RvcmluZ3MuXG4gICAgICpcbiAgICAgKiAtIElmIHRoZSB1c2VyIGhhcyBhIGtleWJpbmRpbmcgdGhhdCBhdXRvIGFwcGxpZXMgYSBjb2RlIGFjdGlvbiBhbmQgb25seVxuICAgICAqICAgYSBkaXNhYmxlZCBjb2RlIGFjdGlvbnMgYXJlIHJldHVybmVkLCB0aGUgY2xpZW50IHNob3VsZCBzaG93IHRoZSB1c2VyXG4gICAgICogICBhbiBlcnJvciBtZXNzYWdlIHdpdGggYHJlYXNvbmAgaW4gdGhlIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjBcbiAgICAgKi9cbiAgICBkaXNhYmxlZD86IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBIdW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIGNvZGUgYWN0aW9uIGlzIGN1cnJlbnRseVxuICAgICAgICogZGlzYWJsZWQuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBpcyBkaXNwbGF5ZWQgaW4gdGhlIGNvZGUgYWN0aW9ucyBVSS5cbiAgICAgICAqL1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3b3Jrc3BhY2UgZWRpdCB0aGlzIGNvZGUgYWN0aW9uIHBlcmZvcm1zLlxuICAgICAqL1xuICAgIGVkaXQ/OiB3b3Jrc3BhY2UuV29ya3NwYWNlRWRpdDtcblxuICAgIC8qKlxuICAgICAqIEEgY29tbWFuZCB0aGlzIGNvZGUgYWN0aW9uIGV4ZWN1dGVzLiBJZiBhIGNvZGUgYWN0aW9uXG4gICAgICogcHJvdmlkZXMgYW4gZWRpdCBhbmQgYSBjb21tYW5kLCBmaXJzdCB0aGUgZWRpdCBpc1xuICAgICAqIGV4ZWN1dGVkIGFuZCB0aGVuIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGNvbW1hbmQ/OiBwcm90b2NvbC5Db21tYW5kO1xuXG4gICAgLyoqXG4gICAgICogQSBkYXRhIGVudHJ5IGZpZWxkIHRoYXQgaXMgcHJlc2VydmVkIG9uIGEgY29kZSBhY3Rpb24gYmV0d2VlblxuICAgICAqIGEgYHRleHREb2N1bWVudC9jb2RlQWN0aW9uYCBhbmQgYSBgY29kZUFjdGlvbi9yZXNvbHZlYCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMFxuICAgICAqL1xuICAgIGRhdGE/OiB1bmtub3duO1xufVxuLy8gdHNsaW50OmVuYWJsZTplbmZvcmNlLW5hbWUtY2FzaW5nXG4iXX0=
web/lsp/window_node.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageType = void 0;
4
+ /** Log message type. */
5
+ var MessageType;
6
+ (function (MessageType) {
7
+ /**
8
+ * An error message.
9
+ */
10
+ MessageType[MessageType["Error"] = 1] = "Error";
11
+ /**
12
+ * A warning message.
13
+ */
14
+ MessageType[MessageType["Warning"] = 2] = "Warning";
15
+ /**
16
+ * An information message.
17
+ */
18
+ MessageType[MessageType["Info"] = 3] = "Info";
19
+ /**
20
+ * A log message.
21
+ */
22
+ MessageType[MessageType["Log"] = 4] = "Log";
23
+ })(MessageType || (exports.MessageType = MessageType = {}));
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93X25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9nZW5maWxlcy90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2xzcC93aW5kb3dfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErQkEsd0JBQXdCO0FBQ3hCLElBQVksV0FpQlg7QUFqQkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsK0NBQVMsQ0FBQTtJQUNUOztPQUVHO0lBQ0gsbURBQVcsQ0FBQTtJQUNYOztPQUVHO0lBQ0gsNkNBQVEsQ0FBQTtJQUNSOztPQUVHO0lBQ0gsMkNBQU8sQ0FBQTtBQUNULENBQUMsRUFqQlcsV0FBVywyQkFBWCxXQUFXLFFBaUJ0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vcHJvdG9jb2xfbm9kZSc7XG5cbi8vIHRzbGludDpkaXNhYmxlOmVuZm9yY2UtbmFtZS1jYXNpbmdcblxuLyoqXG4gKiBUaGUgbG9nIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGlzIHNlbnQgZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQgdG8gYXNrIHRoZVxuICogY2xpZW50IHRvIGxvZyBhIHBhcnRpY3VsYXIgbWVzc2FnZS5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN3aW5kb3dfbG9nTWVzc2FnZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTG9nTWVzc2FnZSBleHRlbmRzXG4gICAgcHJvdG9jb2wuTm90aWZpY2F0aW9uTWVzc2FnZTxMb2dNZXNzYWdlUGFyYW1zPiB7XG4gIG1ldGhvZDogcHJvdG9jb2wuTWV0aG9kLldpbmRvd0xvZ01lc3NhZ2U7XG59XG5cbi8qKlxuICogVGhlIGxvZyBtZXNzYWdlIG5vdGlmaWNhdGlvbiBpcyBzZW50IGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50IHRvIGFzayB0aGVcbiAqIGNsaWVudCB0byBsb2cgYSBwYXJ0aWN1bGFyIG1lc3NhZ2UuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd2luZG93X2xvZ01lc3NhZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIExvZ01lc3NhZ2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdHlwZS4gU2VlIHtAbGluayBNZXNzYWdlVHlwZX1cbiAgICovXG4gIHR5cGU6IE1lc3NhZ2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0dWFsIG1lc3NhZ2VcbiAgICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIExvZyBtZXNzYWdlIHR5cGUuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgRXJyb3IgPSAxLFxuICAvKipcbiAgICogQSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqL1xuICBXYXJuaW5nID0gMixcbiAgLyoqXG4gICAqIEFuIGluZm9ybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBJbmZvID0gMyxcbiAgLyoqXG4gICAqIEEgbG9nIG1lc3NhZ2UuXG4gICAqL1xuICBMb2cgPSA0LFxufVxuIl19
web/lsp/workspace_node.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileChangeType = exports.WatchKind = void 0;
4
+ /**
5
+ * See:
6
+ * https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeWatchedFiles
7
+ */
8
+ var WatchKind;
9
+ (function (WatchKind) {
10
+ /**
11
+ * Interested in create events.
12
+ */
13
+ WatchKind[WatchKind["Create"] = 1] = "Create";
14
+ /**
15
+ * Interested in change events
16
+ */
17
+ WatchKind[WatchKind["Change"] = 2] = "Change";
18
+ /**
19
+ * Interested in delete events
20
+ */
21
+ WatchKind[WatchKind["Delete"] = 4] = "Delete";
22
+ })(WatchKind || (exports.WatchKind = WatchKind = {}));
23
+ /**
24
+ * The file event type.
25
+ */
26
+ var FileChangeType;
27
+ (function (FileChangeType) {
28
+ /**
29
+ * The file got created.
30
+ */
31
+ FileChangeType[FileChangeType["Created"] = 1] = "Created";
32
+ /**
33
+ * The file got changed.
34
+ */
35
+ FileChangeType[FileChangeType["Changed"] = 2] = "Changed";
36
+ /**
37
+ * The file got deleted.
38
+ */
39
+ FileChangeType[FileChangeType["Deleted"] = 3] = "Deleted";
40
+ })(FileChangeType || (exports.FileChangeType = FileChangeType = {}));
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlX25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9nZW5maWxlcy90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2xzcC93b3Jrc3BhY2Vfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpVEE7OztHQUdHO0FBQ0gsSUFBWSxTQWVYO0FBZkQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsNkNBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsNkNBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsNkNBQVUsQ0FBQTtBQUNaLENBQUMsRUFmVyxTQUFTLHlCQUFULFNBQVMsUUFlcEI7QUEyQkQ7O0dBRUc7QUFDSCxJQUFZLGNBYVg7QUFiRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCx5REFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5REFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWJXLGNBQWMsOEJBQWQsY0FBYyxRQWF6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vcHJvdG9jb2xfbm9kZSc7XG5pbXBvcnQgKiBhcyB0ZXh0RG9jdW1lbnQgZnJvbSAnLi90ZXh0X2RvY3VtZW50X25vZGUnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTplbmZvcmNlLW5hbWUtY2FzaW5nXG5cbi8qKlxuICogVGhlIHdvcmtzcGFjZS9jb25maWd1cmF0aW9uIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCB0b1xuICogZmV0Y2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmcm9tIHRoZSBjbGllbnQuIFRoZSByZXF1ZXN0IGNhbiBmZXRjaCBzZXZlcmFsXG4gKiBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluIG9uZSByb3VuZHRyaXAuIFRoZSBvcmRlciBvZiB0aGUgcmV0dXJuZWRcbiAqIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgY29ycmVzcG9uZCB0byB0aGUgb3JkZXIgb2YgdGhlIHBhc3NlZFxuICogQ29uZmlndXJhdGlvbkl0ZW1zIChlLmcuIHRoZSBmaXJzdCBpdGVtIGluIHRoZSByZXNwb25zZSBpcyB0aGUgcmVzdWx0IGZvclxuICogdGhlIGZpcnN0IGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgcGFyYW1zKS5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN3b3Jrc3BhY2VfY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29uZmlndXJhdGlvblBhcmFtcyB7XG4gIGl0ZW1zOiBDb25maWd1cmF0aW9uSXRlbVtdO1xufVxuXG4vKipcbiAqIFNwZWNpZmljIHBhcnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gd2hpY2ggaXMgYmVpbmcgcmVxdWVzdGVkLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9jb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb25maWd1cmF0aW9uSXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yLlxuICAgKi9cbiAgc2NvcGVVcmk/OiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBhc2tlZCBmb3IuXG4gICAqL1xuICBzZWN0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbm90aWZpY2F0aW9uIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gc2lnbmFsIHRoZSBjaGFuZ2Ugb2ZcbiAqIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX2RpZENoYW5nZUNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZUNvbmZpZ3VyYXRpb24gZXh0ZW5kc1xuICAgIHByb3RvY29sLk5vdGlmaWNhdGlvbk1lc3NhZ2U8RGlkQ2hhbmdlQ29uZmlndXJhdGlvblBhcmFtcz4ge1xuICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5Xb3Jrc3BhY2VEaWRDaGFuZ2VDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIERpZENoYW5nZUNvbmZpZ3VyYXRpb24uXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX2RpZENoYW5nZUNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZUNvbmZpZ3VyYXRpb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFjdHVhbCBjaGFuZ2VkIHNldHRpbmdzXG4gICAqL1xuICBzZXR0aW5nczogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlRWRpdFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgV29ya3NwYWNlRWRpdCB7XG4gIC8qKlxuICAgKiBIb2xkcyBjaGFuZ2VzIHRvIGV4aXN0aW5nIHJlc291cmNlcy5cbiAgICovXG4gIGNoYW5nZXM/OiB7W3VyaTogc3RyaW5nXTogdGV4dERvY3VtZW50LlRleHRFZGl0W107fTtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBjYXBhYmlsaXR5IGB3b3Jrc3BhY2Uud29ya3NwYWNlRWRpdC5yZXNvdXJjZU9wZXJhdGlvbnNgXG4gICAqIGRldGVybWluZXMgd2hldGhlciBkb2N1bWVudCBjaGFuZ2VzIGFyZSBlaXRoZXIgYW4gYXJyYXkgb2ZcbiAgICogYFRleHREb2N1bWVudEVkaXRgcyB0byBleHByZXNzIGNoYW5nZXMgdG8gZGlmZmVyZW50IHRleHQgZG9jdW1lbnRzLFxuICAgKiB3aGVyZSBlYWNoIHRleHQgZG9jdW1lbnQgZWRpdCBhZGRyZXNzZXMgYSBzcGVjaWZpYyB2ZXJzaW9uXG4gICAqIG9mIGEgdGV4dCBkb2N1bWVudCwgb3IgaXQgY2FuIGNvbnRhaW5zIHRoZSBhYm92ZSBgVGV4dERvY3VtZW50RWRpdGBzXG4gICAqIG1peGVkIHdpdGggY3JlYXRlLCByZW5hbWUsIGFuZCBkZWxldGUgZmlsZSAvIGZvbGRlciBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBXaGV0aGVyIGEgY2xpZW50IHN1cHBvcnRzIHZlcnNpb25lZCBkb2N1bWVudCBlZGl0cyBpcyBleHByZXNzZWQgdmlhXG4gICAqIGB3b3Jrc3BhY2Uud29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXNgIGNsaWVudCBjYXBhYmlsaXR5LlxuICAgKlxuICAgKiBJZiBhIGNsaWVudCBkb2Vzbid0IHN1cHBvcnQgYGRvY3VtZW50Q2hhbmdlc2Agb3JcbiAgICogYHdvcmtzcGFjZS53b3Jrc3BhY2VFZGl0LnJlc291cmNlT3BlcmF0aW9uc2AsIHRoZW4gb25seSBwbGFpblxuICAgKiBgVGV4dEVkaXRgcyB1c2luZyB0aGUgYGNoYW5nZXNgIHByb3BlcnR5IGFyZSBzdXBwb3J0ZWQuXG4gICAqL1xuICBkb2N1bWVudENoYW5nZXM/OlxuICAgICAgKHRleHREb2N1bWVudC5UZXh0RG9jdW1lbnRFZGl0W118XG4gICAgICAgQXJyYXk8dGV4dERvY3VtZW50LlRleHREb2N1bWVudEVkaXR8Q3JlYXRlRmlsZXxSZW5hbWVGaWxlfERlbGV0ZUZpbGU+KTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIGZpbGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDcmVhdGVGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZS4gT3ZlcndyaXRlIHdpbnMgb3ZlciBgaWdub3JlSWZFeGlzdHNgXG4gICAqL1xuICBvdmVyd3JpdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWdub3JlIGlmIGV4aXN0cy5cbiAgICovXG4gIGlnbm9yZUlmRXhpc3RzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgZmlsZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENyZWF0ZUZpbGUge1xuICAvKipcbiAgICogQSBjcmVhdGVcbiAgICovXG4gIGtpbmQ6ICdjcmVhdGUnO1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHRvIGNyZWF0ZS5cbiAgICovXG4gIHVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcmk7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICovXG4gIG9wdGlvbnM/OiBDcmVhdGVGaWxlT3B0aW9ucztcbn1cblxuXG4vKipcbiAqIFJlbmFtZSBmaWxlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFJlbmFtZUZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIE92ZXJ3cml0ZSB0YXJnZXQgaWYgZXhpc3RpbmcuIE92ZXJ3cml0ZSB3aW5zIG92ZXIgYGlnbm9yZUlmRXhpc3RzYFxuICAgKi9cbiAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElnbm9yZXMgaWYgdGFyZ2V0IGV4aXN0cy5cbiAgICovXG4gIGlnbm9yZUlmRXhpc3RzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZW5hbWUgZmlsZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFJlbmFtZUZpbGUge1xuICAvKipcbiAgICogQSByZW5hbWVcbiAgICovXG4gIGtpbmQ6ICdyZW5hbWUnO1xuICAvKipcbiAgICogVGhlIG9sZCAoZXhpc3RpbmcpIGxvY2F0aW9uLlxuICAgKi9cbiAgb2xkVXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbiAgLyoqXG4gICAqIFRoZSBuZXcgbG9jYXRpb24uXG4gICAqL1xuICBuZXdVcmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuICAvKipcbiAgICogUmVuYW1lIG9wdGlvbnMuXG4gICAqL1xuICBvcHRpb25zPzogUmVuYW1lRmlsZU9wdGlvbnM7XG59XG5cbi8qKlxuICogRGVsZXRlIGZpbGUgb3B0aW9uc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGVsZXRlRmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogRGVsZXRlIHRoZSBjb250ZW50IHJlY3Vyc2l2ZWx5IGlmIGEgZm9sZGVyIGlzIGRlbm90ZWQuXG4gICAqL1xuICByZWN1cnNpdmU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWdub3JlIHRoZSBvcGVyYXRpb24gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGlnbm9yZUlmTm90RXhpc3RzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZWxldGUgZmlsZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERlbGV0ZUZpbGUge1xuICAvKipcbiAgICogQSBkZWxldGVcbiAgICovXG4gIGtpbmQ6ICdkZWxldGUnO1xuICAvKipcbiAgICogVGhlIGZpbGUgdG8gZGVsZXRlLlxuICAgKi9cbiAgdXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbiAgLyoqXG4gICAqIERlbGV0ZSBvcHRpb25zLlxuICAgKi9cbiAgb3B0aW9ucz86IERlbGV0ZUZpbGVPcHRpb25zO1xufVxuXG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9zeW1ib2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogU3ltYm9sIHJlcXVlc3Qgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGUgYFN5bWJvbEtpbmRgIGluIHRoZVxuICAgKiBgd29ya3NwYWNlL3N5bWJvbGAgcmVxdWVzdC5cbiAgICovXG4gIHN5bWJvbEtpbmQ/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHN5bWJvbCBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgKiBwcm9wZXJ0eSBleGlzdHMgdGhlIGNsaWVudCBhbHNvIGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsXG4gICAgICogaGFuZGxlIHZhbHVlcyBvdXRzaWRlIGl0cyBzZXQgZ3JhY2VmdWxseSBhbmQgZmFsbHMgYmFja1xuICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICpcbiAgICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50IHRoZSBjbGllbnQgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBzeW1ib2wga2luZHMgZnJvbSBgRmlsZWAgdG8gYEFycmF5YCBhcyBkZWZpbmVkIGluXG4gICAgICogdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wuXG4gICAgICovXG4gICAgdmFsdWVTZXQ/OiBwcm90b2NvbC5TeW1ib2xLaW5kW107XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGFncyBvbiBgU3ltYm9sSW5mb3JtYXRpb25gLlxuICAgKiBDbGllbnRzIHN1cHBvcnRpbmcgdGFncyBoYXZlIHRvIGhhbmRsZSB1bmtub3duIHRhZ3MgZ3JhY2VmdWxseS5cbiAgICpcbiAgICogQHNpbmNlIDMuMTYuMFxuICAgKi9cbiAgdGFnU3VwcG9ydD86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICB2YWx1ZVNldDogcHJvdG9jb2wuU3ltYm9sVGFnW10sXG4gIH07XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9kaWRDaGFuZ2VXYXRjaGVkRmlsZXNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZVdhdGNoZWRGaWxlc0NsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBEaWQgY2hhbmdlIHdhdGNoZWQgZmlsZXMgbm90aWZpY2F0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjdXJyZW50IHByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydCBzdGF0aWNcbiAgICogY29uZmlndXJhdGlvbiBmb3IgZmlsZSBjaGFuZ2VzIGZyb20gdGhlIHNlcnZlciBzaWRlLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9kaWRDaGFuZ2VDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRDaGFuZ2VDb25maWd1cmF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIERpZCBjaGFuZ2UgY29uZmlndXJhdGlvbiBub3RpZmljYXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX3dvcmtzcGFjZUZvbGRlcnNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFdvcmtzcGFjZUZvbGRlciB7XG4gIC8qKlxuICAgKiBUaGUgYXNzb2NpYXRlZCBVUkkgZm9yIHRoaXMgd29ya3NwYWNlIGZvbGRlci5cbiAgICovXG4gIHVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcmk7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgZm9sZGVyLiBVc2VkIHRvIHJlZmVyIHRvIHRoaXNcbiAgICogd29ya3NwYWNlIGZvbGRlciBpbiB0aGUgdXNlciBpbnRlcmZhY2UuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpYmUgb3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcgZm9yIGZpbGUgc3lzdGVtIGNoYW5nZSBldmVudHMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRDaGFuZ2VXYXRjaGVkRmlsZXNSZWdpc3RyYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB3YXRjaGVycyB0byByZWdpc3Rlci5cbiAgICovXG4gIHdhdGNoZXJzOiBGaWxlU3lzdGVtV2F0Y2hlcltdO1xufVxuXG4vKipcbiAqIFNlZTpcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbiN3b3Jrc3BhY2VfZGlkQ2hhbmdlV2F0Y2hlZEZpbGVzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBGaWxlU3lzdGVtV2F0Y2hlciB7XG4gIC8qKlxuICAgKiBUaGUgZ2xvYiBwYXR0ZXJuIHRvIHdhdGNoLlxuICAgKlxuICAgKiBHbG9iIHBhdHRlcm5zIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgc3ludGF4OlxuICAgKiAtIGAqYCB0byBtYXRjaCBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGluIGEgcGF0aCBzZWdtZW50XG4gICAqIC0gYD9gIHRvIG1hdGNoIG9uIG9uZSBjaGFyYWN0ZXIgaW4gYSBwYXRoIHNlZ21lbnRcbiAgICogLSBgKipgIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgcGF0aCBzZWdtZW50cywgaW5jbHVkaW5nIG5vbmVcbiAgICogLSBge31gIHRvIGdyb3VwIHN1YiBwYXR0ZXJucyBpbnRvIGFuIE9SIGV4cHJlc3Npb24uIChlLmcuIGAqKuKAiy8qLnt0cyxqc31gXG4gICAqICAgbWF0Y2hlcyBhbGwgVHlwZVNjcmlwdCBhbmQgSmF2YVNjcmlwdCBmaWxlcylcbiAgICogLSBgW11gIHRvIGRlY2xhcmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIGluIGEgcGF0aCBzZWdtZW50XG4gICAqICAgKGUuZy4sIGBleGFtcGxlLlswLTldYCB0byBtYXRjaCBvbiBgZXhhbXBsZS4wYCwgYGV4YW1wbGUuMWAsIOKApilcbiAgICogLSBgWyEuLi5dYCB0byBuZWdhdGUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIGluIGEgcGF0aCBzZWdtZW50XG4gICAqICAgKGUuZy4sIGBleGFtcGxlLlshMC05XWAgdG8gbWF0Y2ggb24gYGV4YW1wbGUuYWAsIGBleGFtcGxlLmJgLCBidXQgbm90XG4gICAqICAgYGV4YW1wbGUuMGApXG4gICAqL1xuICBnbG9iUGF0dGVybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiBldmVudHMgb2YgaW50ZXJlc3QuIElmIG9taXR0ZWQgaXQgZGVmYXVsdHNcbiAgICogdG8gV2F0Y2hLaW5kLkNyZWF0ZSB8IFdhdGNoS2luZC5DaGFuZ2UgfCBXYXRjaEtpbmQuRGVsZXRlXG4gICAqIHdoaWNoIGlzIDcuXG4gICAqL1xuICBraW5kPzogV2F0Y2hLaW5kO1xufVxuXG4vKipcbiAqIFNlZTpcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbiN3b3Jrc3BhY2VfZGlkQ2hhbmdlV2F0Y2hlZEZpbGVzXG4gKi9cbmV4cG9ydCBlbnVtIFdhdGNoS2luZCB7XG4gIC8qKlxuICAgKiBJbnRlcmVzdGVkIGluIGNyZWF0ZSBldmVudHMuXG4gICAqL1xuICBDcmVhdGUgPSAxLFxuXG4gIC8qKlxuICAgKiBJbnRlcmVzdGVkIGluIGNoYW5nZSBldmVudHNcbiAgICovXG4gIENoYW5nZSA9IDIsXG5cbiAgLyoqXG4gICAqIEludGVyZXN0ZWQgaW4gZGVsZXRlIGV2ZW50c1xuICAgKi9cbiAgRGVsZXRlID0gNCxcbn1cblxuLyoqXG4gKiBTZWU6XG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb24jd29ya3NwYWNlX2RpZENoYW5nZVdhdGNoZWRGaWxlc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGlkQ2hhbmdlV2F0Y2hlZEZpbGVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgZmlsZSBldmVudHMuXG4gICAqL1xuICBjaGFuZ2VzOiBGaWxlRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBBbiBldmVudCBkZXNjcmliaW5nIGEgZmlsZSBjaGFuZ2UuXG4gKi9cbmludGVyZmFjZSBGaWxlRXZlbnQge1xuICAvKipcbiAgICogVGhlIGZpbGUncyBVUkkuXG4gICAqL1xuICB1cmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuICAvKipcbiAgICogVGhlIGNoYW5nZSB0eXBlLlxuICAgKi9cbiAgdHlwZTogRmlsZUNoYW5nZVR5cGU7XG59XG5cbi8qKlxuICogVGhlIGZpbGUgZXZlbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZUNoYW5nZVR5cGUge1xuICAvKipcbiAgICogVGhlIGZpbGUgZ290IGNyZWF0ZWQuXG4gICAqL1xuICBDcmVhdGVkID0gMSxcbiAgLyoqXG4gICAqIFRoZSBmaWxlIGdvdCBjaGFuZ2VkLlxuICAgKi9cbiAgQ2hhbmdlZCA9IDIsXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBnb3QgZGVsZXRlZC5cbiAgICovXG4gIERlbGV0ZWQgPSAzLFxufVxuIl19
web/node_modules/.bin/bunyan ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cb97ac3eee1e35dfbaa2025aa5bb391bbe5adcbe7305a32d6f6e6cdbe1879ac9
3
+ size 56829
web/node_modules/.bin/mkdirp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:24b028bccb1773f02cf0d0fb3dca5468f1b5d22a06cbc5cbf351e1eb3accefb1
3
+ size 731
web/node_modules/.bin/ncp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c7ca0417a675931d7d4f549009af66f25b47ea5a07e6ddcd85efb712afba3178
3
+ size 1084
web/node_modules/.bin/rimraf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3a1557fb195dd6ba967235a93927f74e0452b913425c713bcabdeaee9f62d189
3
+ size 838
web/node_modules/.bin/semver ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e5c53c713df57d8bdfd03f00e758b5b6a3f51e91a44eb888065394c0deb0da51
3
+ size 4784
web/node_modules/accepts/HISTORY.md ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1.3.5 / 2018-02-28
2
+ ==================
3
+
4
+ * deps: mime-types@~2.1.18
5
+ - deps: mime-db@~1.33.0
6
+
7
+ 1.3.4 / 2017-08-22
8
+ ==================
9
+
10
+ * deps: mime-types@~2.1.16
11
+ - deps: mime-db@~1.29.0
12
+
13
+ 1.3.3 / 2016-05-02
14
+ ==================
15
+
16
+ * deps: mime-types@~2.1.11
17
+ - deps: mime-db@~1.23.0
18
+ * deps: [email protected]
19
+ - perf: improve `Accept` parsing speed
20
+ - perf: improve `Accept-Charset` parsing speed
21
+ - perf: improve `Accept-Encoding` parsing speed
22
+ - perf: improve `Accept-Language` parsing speed
23
+
24
+ 1.3.2 / 2016-03-08
25
+ ==================
26
+
27
+ * deps: mime-types@~2.1.10
28
+ - Fix extension of `application/dash+xml`
29
+ - Update primary extension for `audio/mp4`
30
+ - deps: mime-db@~1.22.0
31
+
32
+ 1.3.1 / 2016-01-19
33
+ ==================
34
+
35
+ * deps: mime-types@~2.1.9
36
+ - deps: mime-db@~1.21.0
37
+
38
+ 1.3.0 / 2015-09-29
39
+ ==================
40
+
41
+ * deps: mime-types@~2.1.7
42
+ - deps: mime-db@~1.19.0
43
+ * deps: [email protected]
44
+ - Fix including type extensions in parameters in `Accept` parsing
45
+ - Fix parsing `Accept` parameters with quoted equals
46
+ - Fix parsing `Accept` parameters with quoted semicolons
47
+ - Lazy-load modules from main entry point
48
+ - perf: delay type concatenation until needed
49
+ - perf: enable strict mode
50
+ - perf: hoist regular expressions
51
+ - perf: remove closures getting spec properties
52
+ - perf: remove a closure from media type parsing
53
+ - perf: remove property delete from media type parsing
54
+
55
+ 1.2.13 / 2015-09-06
56
+ ===================
57
+
58
+ * deps: mime-types@~2.1.6
59
+ - deps: mime-db@~1.18.0
60
+
61
+ 1.2.12 / 2015-07-30
62
+ ===================
63
+
64
+ * deps: mime-types@~2.1.4
65
+ - deps: mime-db@~1.16.0
66
+
67
+ 1.2.11 / 2015-07-16
68
+ ===================
69
+
70
+ * deps: mime-types@~2.1.3
71
+ - deps: mime-db@~1.15.0
72
+
73
+ 1.2.10 / 2015-07-01
74
+ ===================
75
+
76
+ * deps: mime-types@~2.1.2
77
+ - deps: mime-db@~1.14.0
78
+
79
+ 1.2.9 / 2015-06-08
80
+ ==================
81
+
82
+ * deps: mime-types@~2.1.1
83
+ - perf: fix deopt during mapping
84
+
85
+ 1.2.8 / 2015-06-07
86
+ ==================
87
+
88
+ * deps: mime-types@~2.1.0
89
+ - deps: mime-db@~1.13.0
90
+ * perf: avoid argument reassignment & argument slice
91
+ * perf: avoid negotiator recursive construction
92
+ * perf: enable strict mode
93
+ * perf: remove unnecessary bitwise operator
94
+
95
+ 1.2.7 / 2015-05-10
96
+ ==================
97
+
98
+ * deps: [email protected]
99
+ - Fix media type parameter matching to be case-insensitive
100
+
101
+ 1.2.6 / 2015-05-07
102
+ ==================
103
+
104
+ * deps: mime-types@~2.0.11
105
+ - deps: mime-db@~1.9.1
106
+ * deps: [email protected]
107
+ - Fix comparing media types with quoted values
108
+ - Fix splitting media types with quoted commas
109
+
110
+ 1.2.5 / 2015-03-13
111
+ ==================
112
+
113
+ * deps: mime-types@~2.0.10
114
+ - deps: mime-db@~1.8.0
115
+
116
+ 1.2.4 / 2015-02-14
117
+ ==================
118
+
119
+ * Support Node.js 0.6
120
+ * deps: mime-types@~2.0.9
121
+ - deps: mime-db@~1.7.0
122
+ * deps: [email protected]
123
+ - Fix preference sorting to be stable for long acceptable lists
124
+
125
+ 1.2.3 / 2015-01-31
126
+ ==================
127
+
128
+ * deps: mime-types@~2.0.8
129
+ - deps: mime-db@~1.6.0
130
+
131
+ 1.2.2 / 2014-12-30
132
+ ==================
133
+
134
+ * deps: mime-types@~2.0.7
135
+ - deps: mime-db@~1.5.0
136
+
137
+ 1.2.1 / 2014-12-30
138
+ ==================
139
+
140
+ * deps: mime-types@~2.0.5
141
+ - deps: mime-db@~1.3.1
142
+
143
+ 1.2.0 / 2014-12-19
144
+ ==================
145
+
146
+ * deps: [email protected]
147
+ - Fix list return order when large accepted list
148
+ - Fix missing identity encoding when q=0 exists
149
+ - Remove dynamic building of Negotiator class
150
+
151
+ 1.1.4 / 2014-12-10
152
+ ==================
153
+
154
+ * deps: mime-types@~2.0.4
155
+ - deps: mime-db@~1.3.0
156
+
157
+ 1.1.3 / 2014-11-09
158
+ ==================
159
+
160
+ * deps: mime-types@~2.0.3
161
+ - deps: mime-db@~1.2.0
162
+
163
+ 1.1.2 / 2014-10-14
164
+ ==================
165
+
166
+ * deps: [email protected]
167
+ - Fix error when media type has invalid parameter
168
+
169
+ 1.1.1 / 2014-09-28
170
+ ==================
171
+
172
+ * deps: mime-types@~2.0.2
173
+ - deps: mime-db@~1.1.0
174
+ * deps: [email protected]
175
+ - Fix all negotiations to be case-insensitive
176
+ - Stable sort preferences of same quality according to client order
177
+
178
+ 1.1.0 / 2014-09-02
179
+ ==================
180
+
181
+ * update `mime-types`
182
+
183
+ 1.0.7 / 2014-07-04
184
+ ==================
185
+
186
+ * Fix wrong type returned from `type` when match after unknown extension
187
+
188
+ 1.0.6 / 2014-06-24
189
+ ==================
190
+
191
+ * deps: [email protected]
192
+
193
+ 1.0.5 / 2014-06-20
194
+ ==================
195
+
196
+ * fix crash when unknown extension given
197
+
198
+ 1.0.4 / 2014-06-19
199
+ ==================
200
+
201
+ * use `mime-types`
202
+
203
+ 1.0.3 / 2014-06-11
204
+ ==================
205
+
206
+ * deps: [email protected]
207
+ - Order by specificity when quality is the same
208
+
209
+ 1.0.2 / 2014-05-29
210
+ ==================
211
+
212
+ * Fix interpretation when header not in request
213
+ * deps: pin [email protected]
214
+
215
+ 1.0.1 / 2014-01-18
216
+ ==================
217
+
218
+ * Identity encoding isn't always acceptable
219
+ * deps: negotiator@~0.4.0
220
+
221
+ 1.0.0 / 2013-12-27
222
+ ==================
223
+
224
+ * Genesis
web/node_modules/accepts/LICENSE ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2014 Jonathan Ong <[email protected]>
4
+ Copyright (c) 2015 Douglas Christopher Wilson <[email protected]>
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ 'Software'), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
web/node_modules/accepts/README.md ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # accepts
2
+
3
+ [![NPM Version][npm-image]][npm-url]
4
+ [![NPM Downloads][downloads-image]][downloads-url]
5
+ [![Node.js Version][node-version-image]][node-version-url]
6
+ [![Build Status][travis-image]][travis-url]
7
+ [![Test Coverage][coveralls-image]][coveralls-url]
8
+
9
+ Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
10
+ Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
11
+
12
+ In addition to negotiator, it allows:
13
+
14
+ - Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
15
+ as well as `('text/html', 'application/json')`.
16
+ - Allows type shorthands such as `json`.
17
+ - Returns `false` when no types match
18
+ - Treats non-existent headers as `*`
19
+
20
+ ## Installation
21
+
22
+ This is a [Node.js](https://nodejs.org/en/) module available through the
23
+ [npm registry](https://www.npmjs.com/). Installation is done using the
24
+ [`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
25
+
26
+ ```sh
27
+ $ npm install accepts
28
+ ```
29
+
30
+ ## API
31
+
32
+ <!-- eslint-disable no-unused-vars -->
33
+
34
+ ```js
35
+ var accepts = require('accepts')
36
+ ```
37
+
38
+ ### accepts(req)
39
+
40
+ Create a new `Accepts` object for the given `req`.
41
+
42
+ #### .charset(charsets)
43
+
44
+ Return the first accepted charset. If nothing in `charsets` is accepted,
45
+ then `false` is returned.
46
+
47
+ #### .charsets()
48
+
49
+ Return the charsets that the request accepts, in the order of the client's
50
+ preference (most preferred first).
51
+
52
+ #### .encoding(encodings)
53
+
54
+ Return the first accepted encoding. If nothing in `encodings` is accepted,
55
+ then `false` is returned.
56
+
57
+ #### .encodings()
58
+
59
+ Return the encodings that the request accepts, in the order of the client's
60
+ preference (most preferred first).
61
+
62
+ #### .language(languages)
63
+
64
+ Return the first accepted language. If nothing in `languages` is accepted,
65
+ then `false` is returned.
66
+
67
+ #### .languages()
68
+
69
+ Return the languages that the request accepts, in the order of the client's
70
+ preference (most preferred first).
71
+
72
+ #### .type(types)
73
+
74
+ Return the first accepted type (and it is returned as the same text as what
75
+ appears in the `types` array). If nothing in `types` is accepted, then `false`
76
+ is returned.
77
+
78
+ The `types` array can contain full MIME types or file extensions. Any value
79
+ that is not a full MIME types is passed to `require('mime-types').lookup`.
80
+
81
+ #### .types()
82
+
83
+ Return the types that the request accepts, in the order of the client's
84
+ preference (most preferred first).
85
+
86
+ ## Examples
87
+
88
+ ### Simple type negotiation
89
+
90
+ This simple example shows how to use `accepts` to return a different typed
91
+ respond body based on what the client wants to accept. The server lists it's
92
+ preferences in order and will get back the best match between the client and
93
+ server.
94
+
95
+ ```js
96
+ var accepts = require('accepts')
97
+ var http = require('http')
98
+
99
+ function app (req, res) {
100
+ var accept = accepts(req)
101
+
102
+ // the order of this list is significant; should be server preferred order
103
+ switch (accept.type(['json', 'html'])) {
104
+ case 'json':
105
+ res.setHeader('Content-Type', 'application/json')
106
+ res.write('{"hello":"world!"}')
107
+ break
108
+ case 'html':
109
+ res.setHeader('Content-Type', 'text/html')
110
+ res.write('<b>hello, world!</b>')
111
+ break
112
+ default:
113
+ // the fallback is text/plain, so no need to specify it above
114
+ res.setHeader('Content-Type', 'text/plain')
115
+ res.write('hello, world!')
116
+ break
117
+ }
118
+
119
+ res.end()
120
+ }
121
+
122
+ http.createServer(app).listen(3000)
123
+ ```
124
+
125
+ You can test this out with the cURL program:
126
+ ```sh
127
+ curl -I -H'Accept: text/html' http://localhost:3000/
128
+ ```
129
+
130
+ ## License
131
+
132
+ [MIT](LICENSE)
133
+
134
+ [npm-image]: https://img.shields.io/npm/v/accepts.svg
135
+ [npm-url]: https://npmjs.org/package/accepts
136
+ [node-version-image]: https://img.shields.io/node/v/accepts.svg
137
+ [node-version-url]: https://nodejs.org/en/download/
138
+ [travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg
139
+ [travis-url]: https://travis-ci.org/jshttp/accepts
140
+ [coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg
141
+ [coveralls-url]: https://coveralls.io/r/jshttp/accepts
142
+ [downloads-image]: https://img.shields.io/npm/dm/accepts.svg
143
+ [downloads-url]: https://npmjs.org/package/accepts
web/node_modules/accepts/index.js ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * accepts
3
+ * Copyright(c) 2014 Jonathan Ong
4
+ * Copyright(c) 2015 Douglas Christopher Wilson
5
+ * MIT Licensed
6
+ */
7
+
8
+ 'use strict'
9
+
10
+ /**
11
+ * Module dependencies.
12
+ * @private
13
+ */
14
+
15
+ var Negotiator = require('negotiator')
16
+ var mime = require('mime-types')
17
+
18
+ /**
19
+ * Module exports.
20
+ * @public
21
+ */
22
+
23
+ module.exports = Accepts
24
+
25
+ /**
26
+ * Create a new Accepts object for the given req.
27
+ *
28
+ * @param {object} req
29
+ * @public
30
+ */
31
+
32
+ function Accepts (req) {
33
+ if (!(this instanceof Accepts)) {
34
+ return new Accepts(req)
35
+ }
36
+
37
+ this.headers = req.headers
38
+ this.negotiator = new Negotiator(req)
39
+ }
40
+
41
+ /**
42
+ * Check if the given `type(s)` is acceptable, returning
43
+ * the best match when true, otherwise `undefined`, in which
44
+ * case you should respond with 406 "Not Acceptable".
45
+ *
46
+ * The `type` value may be a single mime type string
47
+ * such as "application/json", the extension name
48
+ * such as "json" or an array `["json", "html", "text/plain"]`. When a list
49
+ * or array is given the _best_ match, if any is returned.
50
+ *
51
+ * Examples:
52
+ *
53
+ * // Accept: text/html
54
+ * this.types('html');
55
+ * // => "html"
56
+ *
57
+ * // Accept: text/*, application/json
58
+ * this.types('html');
59
+ * // => "html"
60
+ * this.types('text/html');
61
+ * // => "text/html"
62
+ * this.types('json', 'text');
63
+ * // => "json"
64
+ * this.types('application/json');
65
+ * // => "application/json"
66
+ *
67
+ * // Accept: text/*, application/json
68
+ * this.types('image/png');
69
+ * this.types('png');
70
+ * // => undefined
71
+ *
72
+ * // Accept: text/*;q=.5, application/json
73
+ * this.types(['html', 'json']);
74
+ * this.types('html', 'json');
75
+ * // => "json"
76
+ *
77
+ * @param {String|Array} types...
78
+ * @return {String|Array|Boolean}
79
+ * @public
80
+ */
81
+
82
+ Accepts.prototype.type =
83
+ Accepts.prototype.types = function (types_) {
84
+ var types = types_
85
+
86
+ // support flattened arguments
87
+ if (types && !Array.isArray(types)) {
88
+ types = new Array(arguments.length)
89
+ for (var i = 0; i < types.length; i++) {
90
+ types[i] = arguments[i]
91
+ }
92
+ }
93
+
94
+ // no types, return all requested types
95
+ if (!types || types.length === 0) {
96
+ return this.negotiator.mediaTypes()
97
+ }
98
+
99
+ // no accept header, return first given type
100
+ if (!this.headers.accept) {
101
+ return types[0]
102
+ }
103
+
104
+ var mimes = types.map(extToMime)
105
+ var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
106
+ var first = accepts[0]
107
+
108
+ return first
109
+ ? types[mimes.indexOf(first)]
110
+ : false
111
+ }
112
+
113
+ /**
114
+ * Return accepted encodings or best fit based on `encodings`.
115
+ *
116
+ * Given `Accept-Encoding: gzip, deflate`
117
+ * an array sorted by quality is returned:
118
+ *
119
+ * ['gzip', 'deflate']
120
+ *
121
+ * @param {String|Array} encodings...
122
+ * @return {String|Array}
123
+ * @public
124
+ */
125
+
126
+ Accepts.prototype.encoding =
127
+ Accepts.prototype.encodings = function (encodings_) {
128
+ var encodings = encodings_
129
+
130
+ // support flattened arguments
131
+ if (encodings && !Array.isArray(encodings)) {
132
+ encodings = new Array(arguments.length)
133
+ for (var i = 0; i < encodings.length; i++) {
134
+ encodings[i] = arguments[i]
135
+ }
136
+ }
137
+
138
+ // no encodings, return all requested encodings
139
+ if (!encodings || encodings.length === 0) {
140
+ return this.negotiator.encodings()
141
+ }
142
+
143
+ return this.negotiator.encodings(encodings)[0] || false
144
+ }
145
+
146
+ /**
147
+ * Return accepted charsets or best fit based on `charsets`.
148
+ *
149
+ * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
150
+ * an array sorted by quality is returned:
151
+ *
152
+ * ['utf-8', 'utf-7', 'iso-8859-1']
153
+ *
154
+ * @param {String|Array} charsets...
155
+ * @return {String|Array}
156
+ * @public
157
+ */
158
+
159
+ Accepts.prototype.charset =
160
+ Accepts.prototype.charsets = function (charsets_) {
161
+ var charsets = charsets_
162
+
163
+ // support flattened arguments
164
+ if (charsets && !Array.isArray(charsets)) {
165
+ charsets = new Array(arguments.length)
166
+ for (var i = 0; i < charsets.length; i++) {
167
+ charsets[i] = arguments[i]
168
+ }
169
+ }
170
+
171
+ // no charsets, return all requested charsets
172
+ if (!charsets || charsets.length === 0) {
173
+ return this.negotiator.charsets()
174
+ }
175
+
176
+ return this.negotiator.charsets(charsets)[0] || false
177
+ }
178
+
179
+ /**
180
+ * Return accepted languages or best fit based on `langs`.
181
+ *
182
+ * Given `Accept-Language: en;q=0.8, es, pt`
183
+ * an array sorted by quality is returned:
184
+ *
185
+ * ['es', 'pt', 'en']
186
+ *
187
+ * @param {String|Array} langs...
188
+ * @return {Array|String}
189
+ * @public
190
+ */
191
+
192
+ Accepts.prototype.lang =
193
+ Accepts.prototype.langs =
194
+ Accepts.prototype.language =
195
+ Accepts.prototype.languages = function (languages_) {
196
+ var languages = languages_
197
+
198
+ // support flattened arguments
199
+ if (languages && !Array.isArray(languages)) {
200
+ languages = new Array(arguments.length)
201
+ for (var i = 0; i < languages.length; i++) {
202
+ languages[i] = arguments[i]
203
+ }
204
+ }
205
+
206
+ // no languages, return all requested languages
207
+ if (!languages || languages.length === 0) {
208
+ return this.negotiator.languages()
209
+ }
210
+
211
+ return this.negotiator.languages(languages)[0] || false
212
+ }
213
+
214
+ /**
215
+ * Convert extnames to mime.
216
+ *
217
+ * @param {String} type
218
+ * @return {String}
219
+ * @private
220
+ */
221
+
222
+ function extToMime (type) {
223
+ return type.indexOf('/') === -1
224
+ ? mime.lookup(type)
225
+ : type
226
+ }
227
+
228
+ /**
229
+ * Check if mime is valid.
230
+ *
231
+ * @param {String} type
232
+ * @return {String}
233
+ * @private
234
+ */
235
+
236
+ function validMime (type) {
237
+ return typeof type === 'string'
238
+ }
web/node_modules/accepts/package.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "accepts",
3
+ "description": "Higher-level content negotiation",
4
+ "version": "1.3.5",
5
+ "contributors": [
6
+ "Douglas Christopher Wilson <[email protected]>",
7
+ "Jonathan Ong <[email protected]> (http://jongleberry.com)"
8
+ ],
9
+ "license": "MIT",
10
+ "repository": "jshttp/accepts",
11
+ "dependencies": {
12
+ "mime-types": "~2.1.18",
13
+ "negotiator": "0.6.1"
14
+ },
15
+ "devDependencies": {
16
+ "eslint": "4.18.1",
17
+ "eslint-config-standard": "11.0.0",
18
+ "eslint-plugin-import": "2.9.0",
19
+ "eslint-plugin-markdown": "1.0.0-beta.6",
20
+ "eslint-plugin-node": "6.0.1",
21
+ "eslint-plugin-promise": "3.6.0",
22
+ "eslint-plugin-standard": "3.0.1",
23
+ "istanbul": "0.4.5",
24
+ "mocha": "~1.21.5"
25
+ },
26
+ "files": [
27
+ "LICENSE",
28
+ "HISTORY.md",
29
+ "index.js"
30
+ ],
31
+ "engines": {
32
+ "node": ">= 0.6"
33
+ },
34
+ "scripts": {
35
+ "lint": "eslint --plugin markdown --ext js,md .",
36
+ "test": "mocha --reporter spec --check-leaks --bail test/",
37
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
38
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
39
+ },
40
+ "keywords": [
41
+ "content",
42
+ "negotiation",
43
+ "accept",
44
+ "accepts"
45
+ ]
46
+
47
+ ,"_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz"
48
+ ,"_integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I="
49
+ ,"_from": "[email protected]"
50
+ }
web/node_modules/after/.npmignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ node_modules
2
+ .monitor
web/node_modules/after/.travis.yml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: node_js
2
+ node_js:
3
+ - 0.6
4
+ - 0.8
5
+ - 0.9
6
+ - 0.10
7
+ - 0.12
8
+ - 4.2.4
9
+ - 5.4.1
10
+ - iojs-1
11
+ - iojs-2
12
+ - iojs-3
web/node_modules/after/LICENCE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2011 Raynos.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
web/node_modules/after/README.md ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # After [![Build Status][1]][2]
2
+
3
+ Invoke callback after n calls
4
+
5
+ ## Status: production ready
6
+
7
+ ## Example
8
+
9
+ ```js
10
+ var after = require("after")
11
+ var db = require("./db") // some db.
12
+
13
+ var updateUser = function (req, res) {
14
+ // use after to run two tasks in parallel,
15
+ // namely get request body and get session
16
+ // then run updateUser with the results
17
+ var next = after(2, updateUser)
18
+ var results = {}
19
+
20
+ getJSONBody(req, res, function (err, body) {
21
+ if (err) return next(err)
22
+
23
+ results.body = body
24
+ next(null, results)
25
+ })
26
+
27
+ getSessionUser(req, res, function (err, user) {
28
+ if (err) return next(err)
29
+
30
+ results.user = user
31
+ next(null, results)
32
+ })
33
+
34
+ // now do the thing!
35
+ function updateUser(err, result) {
36
+ if (err) {
37
+ res.statusCode = 500
38
+ return res.end("Unexpected Error")
39
+ }
40
+
41
+ if (!result.user || result.user.role !== "admin") {
42
+ res.statusCode = 403
43
+ return res.end("Permission Denied")
44
+ }
45
+
46
+ db.put("users:" + req.params.userId, result.body, function (err) {
47
+ if (err) {
48
+ res.statusCode = 500
49
+ return res.end("Unexpected Error")
50
+ }
51
+
52
+ res.statusCode = 200
53
+ res.end("Ok")
54
+ })
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Naive Example
60
+
61
+ ```js
62
+ var after = require("after")
63
+ , next = after(3, logItWorks)
64
+
65
+ next()
66
+ next()
67
+ next() // it works
68
+
69
+ function logItWorks() {
70
+ console.log("it works!")
71
+ }
72
+ ```
73
+
74
+ ## Example with error handling
75
+
76
+ ```js
77
+ var after = require("after")
78
+ , next = after(3, logError)
79
+
80
+ next()
81
+ next(new Error("oops")) // logs oops
82
+ next() // does nothing
83
+
84
+ // This callback is only called once.
85
+ // If there is an error the callback gets called immediately
86
+ // this avoids the situation where errors get lost.
87
+ function logError(err) {
88
+ console.log(err)
89
+ }
90
+ ```
91
+
92
+ ## Installation
93
+
94
+ `npm install after`
95
+
96
+ ## Tests
97
+
98
+ `npm test`
99
+
100
+ ## Contributors
101
+
102
+ - Raynos
103
+ - defunctzombie
104
+
105
+ ## MIT Licenced
106
+
107
+ [1]: https://secure.travis-ci.org/Raynos/after.png
108
+ [2]: http://travis-ci.org/Raynos/after
109
+ [3]: http://raynos.org/blog/2/Flow-control-in-node.js
110
+ [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
111
+ [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
112
+ [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
113
+ [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
114
+ [8]: http://github.com/Raynos/iterators
115
+ [9]: http://github.com/Raynos/composite
web/node_modules/after/index.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ module.exports = after
2
+
3
+ function after(count, callback, err_cb) {
4
+ var bail = false
5
+ err_cb = err_cb || noop
6
+ proxy.count = count
7
+
8
+ return (count === 0) ? callback() : proxy
9
+
10
+ function proxy(err, result) {
11
+ if (proxy.count <= 0) {
12
+ throw new Error('after called too many times')
13
+ }
14
+ --proxy.count
15
+
16
+ // after first error, rest are passed to err_cb
17
+ if (err) {
18
+ bail = true
19
+ callback(err)
20
+ // future error callbacks will go to error handler
21
+ callback = err_cb
22
+ } else if (proxy.count === 0 && !bail) {
23
+ callback(null, result)
24
+ }
25
+ }
26
+ }
27
+
28
+ function noop() {}
web/node_modules/after/package.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "after",
3
+ "description": "after - tiny flow control",
4
+ "version": "0.8.2",
5
+ "author": "Raynos <[email protected]>",
6
+ "contributors": [
7
+ {
8
+ "name": "Raynos",
9
+ "email": "[email protected]",
10
+ "url": "http://raynos.org"
11
+ }
12
+ ],
13
+ "scripts": {
14
+ "test": "mocha --ui tdd --reporter spec test/*.js"
15
+ },
16
+ "devDependencies": {
17
+ "mocha": "~1.8.1"
18
+ },
19
+ "keywords": [
20
+ "flowcontrol",
21
+ "after",
22
+ "flow",
23
+ "control",
24
+ "arch"
25
+ ],
26
+ "license": "MIT",
27
+ "repository": "git://github.com/Raynos/after.git"
28
+
29
+ ,"_resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz"
30
+ ,"_integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
31
+ ,"_from": "[email protected]"
32
+ }
web/node_modules/after/test/after-test.js ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*global suite, test*/
2
+
3
+ var assert = require("assert")
4
+ , after = require("../")
5
+
6
+ test("exists", function () {
7
+ assert(typeof after === "function", "after is not a function")
8
+ })
9
+
10
+ test("after when called with 0 invokes", function (done) {
11
+ after(0, done)
12
+ });
13
+
14
+ test("after 1", function (done) {
15
+ var next = after(1, done)
16
+ next()
17
+ })
18
+
19
+ test("after 5", function (done) {
20
+ var next = after(5, done)
21
+ , i = 5
22
+
23
+ while (i--) {
24
+ next()
25
+ }
26
+ })
27
+
28
+ test("manipulate count", function (done) {
29
+ var next = after(1, done)
30
+ , i = 5
31
+
32
+ next.count = i
33
+ while (i--) {
34
+ next()
35
+ }
36
+ })
37
+
38
+ test("after terminates on error", function (done) {
39
+ var next = after(2, function(err) {
40
+ assert.equal(err.message, 'test');
41
+ done();
42
+ })
43
+ next(new Error('test'))
44
+ next(new Error('test2'))
45
+ })
46
+
47
+ test('gee', function(done) {
48
+ done = after(2, done)
49
+
50
+ function cb(err) {
51
+ assert.equal(err.message, 1);
52
+ done()
53
+ }
54
+
55
+ var next = after(3, cb, function(err) {
56
+ assert.equal(err.message, 2)
57
+ done()
58
+ });
59
+
60
+ next()
61
+ next(new Error(1))
62
+ next(new Error(2))
63
+ })
64
+
65
+ test('eee', function(done) {
66
+ done = after(3, done)
67
+
68
+ function cb(err) {
69
+ assert.equal(err.message, 1);
70
+ done()
71
+ }
72
+
73
+ var next = after(3, cb, function(err) {
74
+ assert.equal(err.message, 2)
75
+ done()
76
+ });
77
+
78
+ next(new Error(1))
79
+ next(new Error(2))
80
+ next(new Error(2))
81
+ })
82
+
83
+ test('gge', function(done) {
84
+ function cb(err) {
85
+ assert.equal(err.message, 1);
86
+ done()
87
+ }
88
+
89
+ var next = after(3, cb, function(err) {
90
+ // should not happen
91
+ assert.ok(false);
92
+ });
93
+
94
+ next()
95
+ next()
96
+ next(new Error(1))
97
+ })
98
+
99
+ test('egg', function(done) {
100
+ function cb(err) {
101
+ assert.equal(err.message, 1);
102
+ done()
103
+ }
104
+
105
+ var next = after(3, cb, function(err) {
106
+ // should not happen
107
+ assert.ok(false);
108
+ });
109
+
110
+ next(new Error(1))
111
+ next()
112
+ next()
113
+ })
114
+
115
+ test('throws on too many calls', function(done) {
116
+ var next = after(1, done);
117
+ next()
118
+ assert.throws(next, /after called too many times/);
119
+ });
120
+
web/node_modules/arraybuffer.slice/.npmignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ lib-cov
2
+ lcov.info
3
+ *.seed
4
+ *.log
5
+ *.csv
6
+ *.dat
7
+ *.out
8
+ *.pid
9
+ *.gz
10
+
11
+ pids
12
+ logs
13
+ results
14
+ build
15
+ .grunt
16
+
17
+ node_modules
web/node_modules/arraybuffer.slice/LICENCE ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (C) 2013 Rase-
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
web/node_modules/arraybuffer.slice/Makefile ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ REPORTER = dot
3
+
4
+ test:
5
+ @./node_modules/.bin/mocha \
6
+ --reporter $(REPORTER)
7
+
8
+ .PHONY: test
web/node_modules/arraybuffer.slice/README.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # How to
2
+ ```javascript
3
+ var sliceBuffer = require('arraybuffer.slice');
4
+ var ab = (new Int8Array(5)).buffer;
5
+ var sliced = sliceBuffer(ab, 1, 3);
6
+ sliced = sliceBuffer(ab, 1);
7
+ ```
8
+
9
+ # Licence (MIT)
10
+ Copyright (C) 2013 Rase-
11
+
12
+
13
+ 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:
14
+
15
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
16
+
17
+ 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.
web/node_modules/arraybuffer.slice/index.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * An abstraction for slicing an arraybuffer even when
3
+ * ArrayBuffer.prototype.slice is not supported
4
+ *
5
+ * @api public
6
+ */
7
+
8
+ module.exports = function(arraybuffer, start, end) {
9
+ var bytes = arraybuffer.byteLength;
10
+ start = start || 0;
11
+ end = end || bytes;
12
+
13
+ if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
14
+
15
+ if (start < 0) { start += bytes; }
16
+ if (end < 0) { end += bytes; }
17
+ if (end > bytes) { end = bytes; }
18
+
19
+ if (start >= bytes || start >= end || bytes === 0) {
20
+ return new ArrayBuffer(0);
21
+ }
22
+
23
+ var abv = new Uint8Array(arraybuffer);
24
+ var result = new Uint8Array(end - start);
25
+ for (var i = start, ii = 0; i < end; i++, ii++) {
26
+ result[ii] = abv[i];
27
+ }
28
+ return result.buffer;
29
+ };
web/node_modules/arraybuffer.slice/package.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "arraybuffer.slice",
3
+ "description": "Exports a function for slicing ArrayBuffers (no polyfilling)",
4
+ "version": "0.0.7",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/rase-/arraybuffer.slice",
7
+ "dependencies": {},
8
+ "devDependencies": {
9
+ "mocha": "1.17.1",
10
+ "expect.js": "0.2.0"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "[email protected]:rase-/arraybuffer.slice.git"
15
+ }
16
+
17
+ ,"_resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz"
18
+ ,"_integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
19
+ ,"_from": "[email protected]"
20
+ }
web/node_modules/arraybuffer.slice/test/slice-buffer.js ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Test dependencies
3
+ */
4
+
5
+ var sliceBuffer = require('../index.js');
6
+ var expect = require('expect.js');
7
+
8
+ /**
9
+ * Tests
10
+ */
11
+
12
+ describe('sliceBuffer', function() {
13
+ describe('using standard slice', function() {
14
+ it('should slice correctly with only start provided', function() {
15
+ var abv = new Uint8Array(10);
16
+ for (var i = 0; i < abv.length; i++) {
17
+ abv[i] = i;
18
+ }
19
+
20
+ var sliced = sliceBuffer(abv.buffer, 3);
21
+ var sabv = new Uint8Array(sliced);
22
+ for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
23
+ expect(abv[i]).to.equal(sabv[ii]);
24
+ }
25
+ });
26
+
27
+ it('should slice correctly with start and end provided', function() {
28
+ var abv = new Uint8Array(10);
29
+ for (var i = 0; i < abv.length; i++) {
30
+ abv[i] = i;
31
+ }
32
+
33
+ var sliced = sliceBuffer(abv.buffer, 3, 8);
34
+ var sabv = new Uint8Array(sliced);
35
+ for (var i = 3, ii = 0; i < 8; i++, ii++) {
36
+ expect(abv[i]).to.equal(sabv[ii]);
37
+ }
38
+ });
39
+
40
+ it('should slice correctly with negative start', function() {
41
+ var abv = new Uint8Array(10);
42
+ for (var i = 0; i < abv.length; i++) {
43
+ abv[i] = i;
44
+ }
45
+
46
+ var sliced = sliceBuffer(abv.buffer, -3);
47
+ var sabv = new Uint8Array(sliced);
48
+ for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
49
+ expect(abv[i]).to.equal(sabv[ii]);
50
+ }
51
+ });
52
+
53
+ it('should slice correctly with negative end', function() {
54
+ var abv = new Uint8Array(10);
55
+ for (var i = 0; i < abv.length; i++) {
56
+ abv[i] = i;
57
+ }
58
+
59
+ var sliced = sliceBuffer(abv.buffer, 0, -3);
60
+ var sabv = new Uint8Array(sliced);
61
+ for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
62
+ expect(abv[i]).to.equal(sabv[ii]);
63
+ }
64
+ });
65
+
66
+ it('should slice correctly with negative start and end', function() {
67
+ var abv = new Uint8Array(10);
68
+ for (var i = 0; i < abv.length; i++) {
69
+ abv[i] = i;
70
+ }
71
+
72
+ var sliced = sliceBuffer(abv.buffer, -6, -3);
73
+ var sabv = new Uint8Array(sliced);
74
+ for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
75
+ expect(abv[i]).to.equal(sabv[ii]);
76
+ }
77
+ });
78
+
79
+ it('should slice correctly with equal start and end', function() {
80
+ var abv = new Uint8Array(10);
81
+ for (var i = 0; i < abv.length; i++) {
82
+ abv[i] = i;
83
+ }
84
+
85
+ var sliced = sliceBuffer(abv.buffer, 1, 1);
86
+ expect(sliced.byteLength).to.equal(0);
87
+ });
88
+
89
+ it('should slice correctly when end larger than buffer', function() {
90
+ var abv = new Uint8Array(10);
91
+ for (var i = 0; i < abv.length; i++) {
92
+ abv[i] = i;
93
+ }
94
+
95
+ var sliced = sliceBuffer(abv.buffer, 0, 100);
96
+ expect(new Uint8Array(sliced)).to.eql(abv);
97
+ });
98
+
99
+ it('shoud slice correctly when start larger than end', function() {
100
+ var abv = new Uint8Array(10);
101
+ for (var i = 0; i < abv.length; i++) {
102
+ abv[i] = i;
103
+ }
104
+
105
+ var sliced = sliceBuffer(abv.buffer, 6, 5);
106
+ expect(sliced.byteLength).to.equal(0);
107
+ });
108
+ });
109
+
110
+ describe('using fallback', function() {
111
+ it('should slice correctly with only start provided', function() {
112
+ var abv = new Uint8Array(10);
113
+ for (var i = 0; i < abv.length; i++) {
114
+ abv[i] = i;
115
+ }
116
+ var ab = abv.buffer;
117
+ ab.slice = undefined;
118
+
119
+ var sliced = sliceBuffer(ab, 3);
120
+ var sabv = new Uint8Array(sliced);
121
+ for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
122
+ expect(abv[i]).to.equal(sabv[ii]);
123
+ }
124
+ });
125
+
126
+ it('should slice correctly with start and end provided', function() {
127
+ var abv = new Uint8Array(10);
128
+ for (var i = 0; i < abv.length; i++) {
129
+ abv[i] = i;
130
+ }
131
+ var ab = abv.buffer;
132
+ ab.slice = undefined;
133
+
134
+
135
+ var sliced = sliceBuffer(ab, 3, 8);
136
+ var sabv = new Uint8Array(sliced);
137
+ for (var i = 3, ii = 0; i < 8; i++, ii++) {
138
+ expect(abv[i]).to.equal(sabv[ii]);
139
+ }
140
+ });
141
+
142
+ it('should slice correctly with negative start', function() {
143
+ var abv = new Uint8Array(10);
144
+ for (var i = 0; i < abv.length; i++) {
145
+ abv[i] = i;
146
+ }
147
+ var ab = abv.buffer;
148
+ ab.slice = undefined;
149
+
150
+
151
+ var sliced = sliceBuffer(ab, -3);
152
+ var sabv = new Uint8Array(sliced);
153
+ for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
154
+ expect(abv[i]).to.equal(sabv[ii]);
155
+ }
156
+ });
157
+
158
+ it('should slice correctly with negative end', function() {
159
+ var abv = new Uint8Array(10);
160
+ for (var i = 0; i < abv.length; i++) {
161
+ abv[i] = i;
162
+ }
163
+ var ab = abv.buffer;
164
+ ab.slice = undefined;
165
+
166
+ var sliced = sliceBuffer(ab, 0, -3);
167
+ var sabv = new Uint8Array(sliced);
168
+ for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
169
+ expect(abv[i]).to.equal(sabv[ii]);
170
+ }
171
+ });
172
+
173
+ it('should slice correctly with negative start and end', function() {
174
+ var abv = new Uint8Array(10);
175
+ for (var i = 0; i < abv.length; i++) {
176
+ abv[i] = i;
177
+ }
178
+ var ab = abv.buffer;
179
+ ab.slice = undefined;
180
+
181
+ var sliced = sliceBuffer(ab, -6, -3);
182
+ var sabv = new Uint8Array(sliced);
183
+ for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
184
+ expect(abv[i]).to.equal(sabv[ii]);
185
+ }
186
+ });
187
+
188
+ it('should slice correctly with equal start and end', function() {
189
+ var abv = new Uint8Array(10);
190
+ for (var i = 0; i < abv.length; i++) {
191
+ abv[i] = i;
192
+ }
193
+ var ab = abv.buffer;
194
+ ab.slice = undefined;
195
+
196
+ var sliced = sliceBuffer(ab, 1, 1);
197
+ expect(sliced.byteLength).to.equal(0);
198
+ });
199
+
200
+ it('should slice correctly when end larger than buffer', function() {
201
+ var abv = new Uint8Array(10);
202
+ for (var i = 0; i < abv.length; i++) {
203
+ abv[i] = i;
204
+ }
205
+ var ab = abv.buffer;
206
+ ab.slice = undefined;
207
+
208
+ var sliced = sliceBuffer(ab, 0, 100);
209
+ var sabv = new Uint8Array(sliced);
210
+ for (var i = 0; i < abv.length; i++) {
211
+ expect(abv[i]).to.equal(sabv[i]);
212
+ }
213
+ });
214
+
215
+ it('shoud slice correctly when start larger than end', function() {
216
+ var abv = new Uint8Array(10);
217
+ for (var i = 0; i < abv.length; i++) {
218
+ abv[i] = i;
219
+ }
220
+ var ab = abv.buffer;
221
+ ab.slice = undefined;
222
+
223
+ var sliced = sliceBuffer(ab, 6, 5);
224
+ expect(sliced.byteLength).to.equal(0);
225
+ });
226
+ });
227
+ });
web/node_modules/async-limiter/.travis.yml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ language: node_js
2
+ node_js:
3
+ - "6"
4
+ - "node"
5
+ script: npm run travis
6
+ cache:
7
+ yarn: true
web/node_modules/async-limiter/LICENSE ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+ Copyright (c) 2017 Samuel Reed <[email protected]>
3
+
4
+ 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:
5
+
6
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
+
8
+ 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.
web/node_modules/async-limiter/coverage/coverage.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"/Users/samuelreed/git/forks/async-throttle/index.js":{"path":"/Users/samuelreed/git/forks/async-throttle/index.js","s":{"1":1,"2":7,"3":1,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":1,"11":1,"12":3,"13":13,"14":13,"15":13,"16":1,"17":19,"18":1,"19":45,"20":6,"21":39,"22":13,"23":13,"24":13,"25":13,"26":39,"27":18,"28":6,"29":6,"30":1,"31":6,"32":6,"33":6,"34":1,"35":13,"36":13,"37":1},"b":{"1":[1,6],"2":[6,5],"3":[6,5],"4":[6,39],"5":[13,26],"6":[18,21],"7":[6,0]},"f":{"1":7,"2":3,"3":13,"4":19,"5":45,"6":6,"7":13},"fnMap":{"1":{"name":"Queue","line":3,"loc":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":24},"end":{"line":22,"column":41}}},"3":{"name":"(anonymous_3)","line":23,"loc":{"start":{"line":23,"column":28},"end":{"line":23,"column":39}}},"4":{"name":"(anonymous_4)","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":31,"column":18}}},"5":{"name":"(anonymous_5)","line":36,"loc":{"start":{"line":36,"column":23},"end":{"line":36,"column":34}}},"6":{"name":"(anonymous_6)","line":55,"loc":{"start":{"line":55,"column":25},"end":{"line":55,"column":38}}},"7":{"name":"done","line":62,"loc":{"start":{"line":62,"column":0},"end":{"line":62,"column":16}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":14,"column":1}},"2":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":30}},"4":{"start":{"line":8,"column":2},"end":{"line":8,"column":26}},"5":{"start":{"line":9,"column":2},"end":{"line":9,"column":53}},"6":{"start":{"line":10,"column":2},"end":{"line":10,"column":19}},"7":{"start":{"line":11,"column":2},"end":{"line":11,"column":17}},"8":{"start":{"line":12,"column":2},"end":{"line":12,"column":16}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":31}},"10":{"start":{"line":16,"column":0},"end":{"line":20,"column":2}},"11":{"start":{"line":22,"column":0},"end":{"line":28,"column":3}},"12":{"start":{"line":23,"column":2},"end":{"line":27,"column":4}},"13":{"start":{"line":24,"column":4},"end":{"line":24,"column":75}},"14":{"start":{"line":25,"column":4},"end":{"line":25,"column":16}},"15":{"start":{"line":26,"column":4},"end":{"line":26,"column":24}},"16":{"start":{"line":30,"column":0},"end":{"line":34,"column":3}},"17":{"start":{"line":32,"column":4},"end":{"line":32,"column":43}},"18":{"start":{"line":36,"column":0},"end":{"line":53,"column":2}},"19":{"start":{"line":37,"column":2},"end":{"line":39,"column":3}},"20":{"start":{"line":38,"column":4},"end":{"line":38,"column":11}},"21":{"start":{"line":40,"column":2},"end":{"line":45,"column":3}},"22":{"start":{"line":41,"column":4},"end":{"line":41,"column":32}},"23":{"start":{"line":42,"column":4},"end":{"line":42,"column":19}},"24":{"start":{"line":43,"column":4},"end":{"line":43,"column":20}},"25":{"start":{"line":44,"column":4},"end":{"line":44,"column":16}},"26":{"start":{"line":47,"column":2},"end":{"line":52,"column":3}},"27":{"start":{"line":48,"column":4},"end":{"line":51,"column":5}},"28":{"start":{"line":49,"column":6},"end":{"line":49,"column":30}},"29":{"start":{"line":50,"column":6},"end":{"line":50,"column":27}},"30":{"start":{"line":55,"column":0},"end":{"line":60,"column":2}},"31":{"start":{"line":56,"column":2},"end":{"line":59,"column":3}},"32":{"start":{"line":57,"column":4},"end":{"line":57,"column":22}},"33":{"start":{"line":58,"column":4},"end":{"line":58,"column":16}},"34":{"start":{"line":62,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":63,"column":2},"end":{"line":63,"column":17}},"36":{"start":{"line":64,"column":2},"end":{"line":64,"column":14}},"37":{"start":{"line":67,"column":0},"end":{"line":67,"column":23}}},"branchMap":{"1":{"line":4,"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":4,"column":2}},{"start":{"line":4,"column":2},"end":{"line":4,"column":2}}]},"2":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":12},"end":{"line":8,"column":19}},{"start":{"line":8,"column":23},"end":{"line":8,"column":25}}]},"3":{"line":9,"type":"binary-expr","locations":[{"start":{"line":9,"column":21},"end":{"line":9,"column":40}},{"start":{"line":9,"column":44},"end":{"line":9,"column":52}}]},"4":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":2},"end":{"line":37,"column":2}},{"start":{"line":37,"column":2},"end":{"line":37,"column":2}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":40,"column":2}},{"start":{"line":40,"column":2},"end":{"line":40,"column":2}}]},"6":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":2},"end":{"line":47,"column":2}},{"start":{"line":47,"column":2},"end":{"line":47,"column":2}}]},"7":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":2},"end":{"line":56,"column":2}},{"start":{"line":56,"column":2},"end":{"line":56,"column":2}}]}}}}
web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for async-throttle/</title>
5
+ <meta charset="utf-8">
6
+ <link rel="stylesheet" href="../prettify.css">
7
+ <link rel="stylesheet" href="../base.css">
8
+ <style type='text/css'>
9
+ div.coverage-summary .sorter {
10
+ background-image: url(../sort-arrow-sprite.png);
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="header high">
16
+ <h1>Code coverage report for <span class="entity">async-throttle/</span></h1>
17
+ <h2>
18
+ Statements: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
19
+ Branches: <span class="metric">92.86% <small>(13 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
20
+ Functions: <span class="metric">100% <small>(7 / 7)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
21
+ Lines: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
22
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
23
+ </h2>
24
+ <div class="path"><a href="../index.html">All files</a> &#187; async-throttle/</div>
25
+ </div>
26
+ <div class="body">
27
+ <div class="coverage-summary">
28
+ <table>
29
+ <thead>
30
+ <tr>
31
+ <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
32
+ <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
33
+ <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
34
+ <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
35
+ <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
36
+ <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
37
+ <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
38
+ <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
39
+ <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
40
+ <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
41
+ </tr>
42
+ </thead>
43
+ <tbody><tr>
44
+ <td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
45
+ <td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
46
+ <td data-value="100" class="pct high">100%</td>
47
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
48
+ <td data-value="92.86" class="pct high">92.86%</td>
49
+ <td data-value="14" class="abs high">(13&nbsp;/&nbsp;14)</td>
50
+ <td data-value="100" class="pct high">100%</td>
51
+ <td data-value="7" class="abs high">(7&nbsp;/&nbsp;7)</td>
52
+ <td data-value="100" class="pct high">100%</td>
53
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
54
+ </tr>
55
+
56
+ </tbody>
57
+ </table>
58
+ </div>
59
+ </div>
60
+ <div class="footer">
61
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Sep 11 2017 11:14:14 GMT-0500 (CDT)</div>
62
+ </div>
63
+ <script src="../prettify.js"></script>
64
+ <script>
65
+ window.onload = function () {
66
+ if (typeof prettyPrint === 'function') {
67
+ prettyPrint();
68
+ }
69
+ };
70
+ </script>
71
+ <script src="../sorter.js"></script>
72
+ </body>
73
+ </html>
web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for async-throttle/index.js</title>
5
+ <meta charset="utf-8">
6
+ <link rel="stylesheet" href="../prettify.css">
7
+ <link rel="stylesheet" href="../base.css">
8
+ <style type='text/css'>
9
+ div.coverage-summary .sorter {
10
+ background-image: url(../sort-arrow-sprite.png);
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="header high">
16
+ <h1>Code coverage report for <span class="entity">async-throttle/index.js</span></h1>
17
+ <h2>
18
+ Statements: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
19
+ Branches: <span class="metric">92.86% <small>(13 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
20
+ Functions: <span class="metric">100% <small>(7 / 7)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
21
+ Lines: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
22
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
23
+ </h2>
24
+ <div class="path"><a href="../index.html">All files</a> &#187; <a href="index.html">async-throttle/</a> &#187; index.js</div>
25
+ </div>
26
+ <div class="body">
27
+ <pre><table class="coverage">
28
+ <tr><td class="line-count">1
29
+ 2
30
+ 3
31
+ 4
32
+ 5
33
+ 6
34
+ 7
35
+ 8
36
+ 9
37
+ 10
38
+ 11
39
+ 12
40
+ 13
41
+ 14
42
+ 15
43
+ 16
44
+ 17
45
+ 18
46
+ 19
47
+ 20
48
+ 21
49
+ 22
50
+ 23
51
+ 24
52
+ 25
53
+ 26
54
+ 27
55
+ 28
56
+ 29
57
+ 30
58
+ 31
59
+ 32
60
+ 33
61
+ 34
62
+ 35
63
+ 36
64
+ 37
65
+ 38
66
+ 39
67
+ 40
68
+ 41
69
+ 42
70
+ 43
71
+ 44
72
+ 45
73
+ 46
74
+ 47
75
+ 48
76
+ 49
77
+ 50
78
+ 51
79
+ 52
80
+ 53
81
+ 54
82
+ 55
83
+ 56
84
+ 57
85
+ 58
86
+ 59
87
+ 60
88
+ 61
89
+ 62
90
+ 63
91
+ 64
92
+ 65
93
+ 66
94
+ 67
95
+ 68</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
96
+ <span class="cline-any cline-neutral">&nbsp;</span>
97
+ <span class="cline-any cline-yes">1</span>
98
+ <span class="cline-any cline-yes">7</span>
99
+ <span class="cline-any cline-yes">1</span>
100
+ <span class="cline-any cline-neutral">&nbsp;</span>
101
+ <span class="cline-any cline-neutral">&nbsp;</span>
102
+ <span class="cline-any cline-yes">6</span>
103
+ <span class="cline-any cline-yes">6</span>
104
+ <span class="cline-any cline-yes">6</span>
105
+ <span class="cline-any cline-yes">6</span>
106
+ <span class="cline-any cline-yes">6</span>
107
+ <span class="cline-any cline-yes">6</span>
108
+ <span class="cline-any cline-neutral">&nbsp;</span>
109
+ <span class="cline-any cline-neutral">&nbsp;</span>
110
+ <span class="cline-any cline-yes">1</span>
111
+ <span class="cline-any cline-neutral">&nbsp;</span>
112
+ <span class="cline-any cline-neutral">&nbsp;</span>
113
+ <span class="cline-any cline-neutral">&nbsp;</span>
114
+ <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-neutral">&nbsp;</span>
116
+ <span class="cline-any cline-yes">1</span>
117
+ <span class="cline-any cline-yes">3</span>
118
+ <span class="cline-any cline-yes">13</span>
119
+ <span class="cline-any cline-yes">13</span>
120
+ <span class="cline-any cline-yes">13</span>
121
+ <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-yes">1</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-yes">19</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-neutral">&nbsp;</span>
130
+ <span class="cline-any cline-yes">1</span>
131
+ <span class="cline-any cline-yes">45</span>
132
+ <span class="cline-any cline-yes">6</span>
133
+ <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-yes">39</span>
135
+ <span class="cline-any cline-yes">13</span>
136
+ <span class="cline-any cline-yes">13</span>
137
+ <span class="cline-any cline-yes">13</span>
138
+ <span class="cline-any cline-yes">13</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-yes">39</span>
142
+ <span class="cline-any cline-yes">18</span>
143
+ <span class="cline-any cline-yes">6</span>
144
+ <span class="cline-any cline-yes">6</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
+ <span class="cline-any cline-neutral">&nbsp;</span>
149
+ <span class="cline-any cline-yes">1</span>
150
+ <span class="cline-any cline-yes">6</span>
151
+ <span class="cline-any cline-yes">6</span>
152
+ <span class="cline-any cline-yes">6</span>
153
+ <span class="cline-any cline-neutral">&nbsp;</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-yes">1</span>
157
+ <span class="cline-any cline-yes">13</span>
158
+ <span class="cline-any cline-yes">13</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-yes">1</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict';
163
+ &nbsp;
164
+ function Queue(options) {
165
+ if (!(this instanceof Queue)) {
166
+ return new Queue(options);
167
+ }
168
+ &nbsp;
169
+ options = options || {};
170
+ this.concurrency = options.concurrency || Infinity;
171
+ this.pending = 0;
172
+ this.jobs = [];
173
+ this.cbs = [];
174
+ this._done = done.bind(this);
175
+ }
176
+ &nbsp;
177
+ var arrayAddMethods = [
178
+ 'push',
179
+ 'unshift',
180
+ 'splice'
181
+ ];
182
+ &nbsp;
183
+ arrayAddMethods.forEach(function(method) {
184
+ Queue.prototype[method] = function() {
185
+ var methodResult = Array.prototype[method].apply(this.jobs, arguments);
186
+ this._run();
187
+ return methodResult;
188
+ };
189
+ });
190
+ &nbsp;
191
+ Object.defineProperty(Queue.prototype, 'length', {
192
+ get: function() {
193
+ return this.pending + this.jobs.length;
194
+ }
195
+ });
196
+ &nbsp;
197
+ Queue.prototype._run = function() {
198
+ if (this.pending === this.concurrency) {
199
+ return;
200
+ }
201
+ if (this.jobs.length) {
202
+ var job = this.jobs.shift();
203
+ this.pending++;
204
+ job(this._done);
205
+ this._run();
206
+ }
207
+ &nbsp;
208
+ if (this.pending === 0) {
209
+ while (this.cbs.length !== 0) {
210
+ var cb = this.cbs.pop();
211
+ process.nextTick(cb);
212
+ }
213
+ }
214
+ };
215
+ &nbsp;
216
+ Queue.prototype.onDone = function(cb) {
217
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof cb === 'function') {
218
+ this.cbs.push(cb);
219
+ this._run();
220
+ }
221
+ };
222
+ &nbsp;
223
+ function done() {
224
+ this.pending--;
225
+ this._run();
226
+ }
227
+ &nbsp;
228
+ module.exports = Queue;
229
+ &nbsp;</pre></td></tr>
230
+ </table></pre>
231
+
232
+ </div>
233
+ <div class="footer">
234
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Sep 11 2017 11:14:14 GMT-0500 (CDT)</div>
235
+ </div>
236
+ <script src="../prettify.js"></script>
237
+ <script>
238
+ window.onload = function () {
239
+ if (typeof prettyPrint === 'function') {
240
+ prettyPrint();
241
+ }
242
+ };
243
+ </script>
244
+ <script src="../sorter.js"></script>
245
+ </body>
246
+ </html>
web/node_modules/async-limiter/coverage/lcov-report/base.css ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body, html {
2
+ margin:0; padding: 0;
3
+ }
4
+ body {
5
+ font-family: Helvetica Neue, Helvetica,Arial;
6
+ font-size: 10pt;
7
+ }
8
+ div.header, div.footer {
9
+ background: #eee;
10
+ padding: 1em;
11
+ }
12
+ div.header {
13
+ z-index: 100;
14
+ position: fixed;
15
+ top: 0;
16
+ border-bottom: 1px solid #666;
17
+ width: 100%;
18
+ }
19
+ div.footer {
20
+ border-top: 1px solid #666;
21
+ }
22
+ div.body {
23
+ margin-top: 10em;
24
+ }
25
+ div.meta {
26
+ font-size: 90%;
27
+ text-align: center;
28
+ }
29
+ h1, h2, h3 {
30
+ font-weight: normal;
31
+ }
32
+ h1 {
33
+ font-size: 12pt;
34
+ }
35
+ h2 {
36
+ font-size: 10pt;
37
+ }
38
+ pre {
39
+ font-family: Consolas, Menlo, Monaco, monospace;
40
+ margin: 0;
41
+ padding: 0;
42
+ line-height: 1.3;
43
+ font-size: 14px;
44
+ -moz-tab-size: 2;
45
+ -o-tab-size: 2;
46
+ tab-size: 2;
47
+ }
48
+
49
+ div.path { font-size: 110%; }
50
+ div.path a:link, div.path a:visited { color: #000; }
51
+ table.coverage { border-collapse: collapse; margin:0; padding: 0 }
52
+
53
+ table.coverage td {
54
+ margin: 0;
55
+ padding: 0;
56
+ color: #111;
57
+ vertical-align: top;
58
+ }
59
+ table.coverage td.line-count {
60
+ width: 50px;
61
+ text-align: right;
62
+ padding-right: 5px;
63
+ }
64
+ table.coverage td.line-coverage {
65
+ color: #777 !important;
66
+ text-align: right;
67
+ border-left: 1px solid #666;
68
+ border-right: 1px solid #666;
69
+ }
70
+
71
+ table.coverage td.text {
72
+ }
73
+
74
+ table.coverage td span.cline-any {
75
+ display: inline-block;
76
+ padding: 0 5px;
77
+ width: 40px;
78
+ }
79
+ table.coverage td span.cline-neutral {
80
+ background: #eee;
81
+ }
82
+ table.coverage td span.cline-yes {
83
+ background: #b5d592;
84
+ color: #999;
85
+ }
86
+ table.coverage td span.cline-no {
87
+ background: #fc8c84;
88
+ }
89
+
90
+ .cstat-yes { color: #111; }
91
+ .cstat-no { background: #fc8c84; color: #111; }
92
+ .fstat-no { background: #ffc520; color: #111 !important; }
93
+ .cbranch-no { background: yellow !important; color: #111; }
94
+
95
+ .cstat-skip { background: #ddd; color: #111; }
96
+ .fstat-skip { background: #ddd; color: #111 !important; }
97
+ .cbranch-skip { background: #ddd !important; color: #111; }
98
+
99
+ .missing-if-branch {
100
+ display: inline-block;
101
+ margin-right: 10px;
102
+ position: relative;
103
+ padding: 0 4px;
104
+ background: black;
105
+ color: yellow;
106
+ }
107
+
108
+ .skip-if-branch {
109
+ display: none;
110
+ margin-right: 10px;
111
+ position: relative;
112
+ padding: 0 4px;
113
+ background: #ccc;
114
+ color: white;
115
+ }
116
+
117
+ .missing-if-branch .typ, .skip-if-branch .typ {
118
+ color: inherit !important;
119
+ }
120
+
121
+ .entity, .metric { font-weight: bold; }
122
+ .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
123
+ .metric small { font-size: 80%; font-weight: normal; color: #666; }
124
+
125
+ div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
126
+ div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
127
+ div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
128
+ div.coverage-summary th.file { border-right: none !important; }
129
+ div.coverage-summary th.pic { border-left: none !important; text-align: right; }
130
+ div.coverage-summary th.pct { border-right: none !important; }
131
+ div.coverage-summary th.abs { border-left: none !important; text-align: right; }
132
+ div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
133
+ div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
134
+ div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; }
135
+ div.coverage-summary td.pic { min-width: 120px !important; }
136
+ div.coverage-summary a:link { text-decoration: none; color: #000; }
137
+ div.coverage-summary a:visited { text-decoration: none; color: #777; }
138
+ div.coverage-summary a:hover { text-decoration: underline; }
139
+ div.coverage-summary tfoot td { border-top: 1px solid #666; }
140
+
141
+ div.coverage-summary .sorter {
142
+ height: 10px;
143
+ width: 7px;
144
+ display: inline-block;
145
+ margin-left: 0.5em;
146
+ background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
147
+ }
148
+ div.coverage-summary .sorted .sorter {
149
+ background-position: 0 -20px;
150
+ }
151
+ div.coverage-summary .sorted-desc .sorter {
152
+ background-position: 0 -10px;
153
+ }
154
+
155
+ .high { background: #b5d592 !important; }
156
+ .medium { background: #ffe87c !important; }
157
+ .low { background: #fc8c84 !important; }
158
+
159
+ span.cover-fill, span.cover-empty {
160
+ display:inline-block;
161
+ border:1px solid #444;
162
+ background: white;
163
+ height: 12px;
164
+ }
165
+ span.cover-fill {
166
+ background: #ccc;
167
+ border-right: 1px solid #444;
168
+ }
169
+ span.cover-empty {
170
+ background: white;
171
+ border-left: none;
172
+ }
173
+ span.cover-full {
174
+ border-right: none !important;
175
+ }
176
+ pre.prettyprint {
177
+ border: none !important;
178
+ padding: 0 !important;
179
+ margin: 0 !important;
180
+ }
181
+ .com { color: #999 !important; }
182
+ .ignore-none { color: #999; font-weight: normal; }
web/node_modules/async-limiter/coverage/lcov-report/index.html ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for All files</title>
5
+ <meta charset="utf-8">
6
+ <link rel="stylesheet" href="prettify.css">
7
+ <link rel="stylesheet" href="base.css">
8
+ <style type='text/css'>
9
+ div.coverage-summary .sorter {
10
+ background-image: url(sort-arrow-sprite.png);
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="header high">
16
+ <h1>Code coverage report for <span class="entity">All files</span></h1>
17
+ <h2>
18
+ Statements: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
19
+ Branches: <span class="metric">92.86% <small>(13 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
20
+ Functions: <span class="metric">100% <small>(7 / 7)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
21
+ Lines: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
22
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
23
+ </h2>
24
+ <div class="path"></div>
25
+ </div>
26
+ <div class="body">
27
+ <div class="coverage-summary">
28
+ <table>
29
+ <thead>
30
+ <tr>
31
+ <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
32
+ <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
33
+ <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
34
+ <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
35
+ <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
36
+ <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
37
+ <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
38
+ <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
39
+ <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
40
+ <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
41
+ </tr>
42
+ </thead>
43
+ <tbody><tr>
44
+ <td class="file high" data-value="async-throttle/"><a href="async-throttle/index.html">async-throttle/</a></td>
45
+ <td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
46
+ <td data-value="100" class="pct high">100%</td>
47
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
48
+ <td data-value="92.86" class="pct high">92.86%</td>
49
+ <td data-value="14" class="abs high">(13&nbsp;/&nbsp;14)</td>
50
+ <td data-value="100" class="pct high">100%</td>
51
+ <td data-value="7" class="abs high">(7&nbsp;/&nbsp;7)</td>
52
+ <td data-value="100" class="pct high">100%</td>
53
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
54
+ </tr>
55
+
56
+ </tbody>
57
+ </table>
58
+ </div>
59
+ </div>
60
+ <div class="footer">
61
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Sep 11 2017 11:14:14 GMT-0500 (CDT)</div>
62
+ </div>
63
+ <script src="prettify.js"></script>
64
+ <script>
65
+ window.onload = function () {
66
+ if (typeof prettyPrint === 'function') {
67
+ prettyPrint();
68
+ }
69
+ };
70
+ </script>
71
+ <script src="sorter.js"></script>
72
+ </body>
73
+ </html>
web/node_modules/async-limiter/coverage/lcov-report/prettify.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
web/node_modules/async-limiter/coverage/lcov-report/prettify.js ADDED
@@ -0,0 +1 @@
 
 
1
+ window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
web/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png ADDED
web/node_modules/async-limiter/coverage/lcov-report/sorter.js ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var addSorting = (function () {
2
+ "use strict";
3
+ var cols,
4
+ currentSort = {
5
+ index: 0,
6
+ desc: false
7
+ };
8
+
9
+ // returns the summary table element
10
+ function getTable() { return document.querySelector('.coverage-summary table'); }
11
+ // returns the thead element of the summary table
12
+ function getTableHeader() { return getTable().querySelector('thead tr'); }
13
+ // returns the tbody element of the summary table
14
+ function getTableBody() { return getTable().querySelector('tbody'); }
15
+ // returns the th element for nth column
16
+ function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
17
+
18
+ // loads all columns
19
+ function loadColumns() {
20
+ var colNodes = getTableHeader().querySelectorAll('th'),
21
+ colNode,
22
+ cols = [],
23
+ col,
24
+ i;
25
+
26
+ for (i = 0; i < colNodes.length; i += 1) {
27
+ colNode = colNodes[i];
28
+ col = {
29
+ key: colNode.getAttribute('data-col'),
30
+ sortable: !colNode.getAttribute('data-nosort'),
31
+ type: colNode.getAttribute('data-type') || 'string'
32
+ };
33
+ cols.push(col);
34
+ if (col.sortable) {
35
+ col.defaultDescSort = col.type === 'number';
36
+ colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
37
+ }
38
+ }
39
+ return cols;
40
+ }
41
+ // attaches a data attribute to every tr element with an object
42
+ // of data values keyed by column name
43
+ function loadRowData(tableRow) {
44
+ var tableCols = tableRow.querySelectorAll('td'),
45
+ colNode,
46
+ col,
47
+ data = {},
48
+ i,
49
+ val;
50
+ for (i = 0; i < tableCols.length; i += 1) {
51
+ colNode = tableCols[i];
52
+ col = cols[i];
53
+ val = colNode.getAttribute('data-value');
54
+ if (col.type === 'number') {
55
+ val = Number(val);
56
+ }
57
+ data[col.key] = val;
58
+ }
59
+ return data;
60
+ }
61
+ // loads all row data
62
+ function loadData() {
63
+ var rows = getTableBody().querySelectorAll('tr'),
64
+ i;
65
+
66
+ for (i = 0; i < rows.length; i += 1) {
67
+ rows[i].data = loadRowData(rows[i]);
68
+ }
69
+ }
70
+ // sorts the table using the data for the ith column
71
+ function sortByIndex(index, desc) {
72
+ var key = cols[index].key,
73
+ sorter = function (a, b) {
74
+ a = a.data[key];
75
+ b = b.data[key];
76
+ return a < b ? -1 : a > b ? 1 : 0;
77
+ },
78
+ finalSorter = sorter,
79
+ tableBody = document.querySelector('.coverage-summary tbody'),
80
+ rowNodes = tableBody.querySelectorAll('tr'),
81
+ rows = [],
82
+ i;
83
+
84
+ if (desc) {
85
+ finalSorter = function (a, b) {
86
+ return -1 * sorter(a, b);
87
+ };
88
+ }
89
+
90
+ for (i = 0; i < rowNodes.length; i += 1) {
91
+ rows.push(rowNodes[i]);
92
+ tableBody.removeChild(rowNodes[i]);
93
+ }
94
+
95
+ rows.sort(finalSorter);
96
+
97
+ for (i = 0; i < rows.length; i += 1) {
98
+ tableBody.appendChild(rows[i]);
99
+ }
100
+ }
101
+ // removes sort indicators for current column being sorted
102
+ function removeSortIndicators() {
103
+ var col = getNthColumn(currentSort.index),
104
+ cls = col.className;
105
+
106
+ cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
107
+ col.className = cls;
108
+ }
109
+ // adds sort indicators for current column being sorted
110
+ function addSortIndicators() {
111
+ getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
112
+ }
113
+ // adds event listeners for all sorter widgets
114
+ function enableUI() {
115
+ var i,
116
+ el,
117
+ ithSorter = function ithSorter(i) {
118
+ var col = cols[i];
119
+
120
+ return function () {
121
+ var desc = col.defaultDescSort;
122
+
123
+ if (currentSort.index === i) {
124
+ desc = !currentSort.desc;
125
+ }
126
+ sortByIndex(i, desc);
127
+ removeSortIndicators();
128
+ currentSort.index = i;
129
+ currentSort.desc = desc;
130
+ addSortIndicators();
131
+ };
132
+ };
133
+ for (i =0 ; i < cols.length; i += 1) {
134
+ if (cols[i].sortable) {
135
+ el = getNthColumn(i).querySelector('.sorter');
136
+ if (el.addEventListener) {
137
+ el.addEventListener('click', ithSorter(i));
138
+ } else {
139
+ el.attachEvent('onclick', ithSorter(i));
140
+ }
141
+ }
142
+ }
143
+ }
144
+ // adds sorting functionality to the UI
145
+ return function () {
146
+ if (!getTable()) {
147
+ return;
148
+ }
149
+ cols = loadColumns();
150
+ loadData(cols);
151
+ addSortIndicators();
152
+ enableUI();
153
+ };
154
+ })();
155
+
156
+ window.addEventListener('load', addSorting);