@kepler.gl/utils 3.0.0-alpha.0 → 3.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/aggregate-utils.js +1 -21
  2. package/dist/arrow-data-container.d.ts +54 -0
  3. package/dist/arrow-data-container.js +360 -0
  4. package/dist/color-utils.d.ts +8 -0
  5. package/dist/color-utils.js +38 -22
  6. package/dist/data-container-interface.d.ts +18 -0
  7. package/dist/data-container-interface.js +0 -20
  8. package/dist/data-container-utils.d.ts +1 -0
  9. package/dist/data-container-utils.js +10 -22
  10. package/dist/data-row.js +7 -22
  11. package/dist/data-scale-utils.js +7 -22
  12. package/dist/data-utils.d.ts +10 -12
  13. package/dist/data-utils.js +121 -63
  14. package/dist/dataset-utils.d.ts +13 -2
  15. package/dist/dataset-utils.js +85 -33
  16. package/dist/dom-to-image.d.ts +14 -14
  17. package/dist/dom-to-image.js +28 -89
  18. package/dist/dom-utils.d.ts +3 -0
  19. package/dist/dom-utils.js +33 -23
  20. package/dist/effect-utils.d.ts +23 -0
  21. package/dist/effect-utils.js +196 -0
  22. package/dist/export-map-html.js +7 -23
  23. package/dist/export-utils.js +12 -23
  24. package/dist/filter-utils.d.ts +11 -9
  25. package/dist/filter-utils.js +70 -55
  26. package/dist/format.d.ts +1 -0
  27. package/dist/format.js +17 -0
  28. package/dist/gl-utils.js +1 -21
  29. package/dist/h3-utils.d.ts +2 -1
  30. package/dist/h3-utils.js +9 -24
  31. package/dist/index.d.ts +16 -10
  32. package/dist/index.js +250 -558
  33. package/dist/indexed-data-container.js +1 -21
  34. package/dist/locale-utils.js +1 -21
  35. package/dist/map-info-utils.js +6 -22
  36. package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +2 -1
  37. package/dist/map-style-utils/mapbox-gl-style-editor.js +8 -22
  38. package/dist/map-style-utils/mapbox-utils.js +7 -22
  39. package/dist/map-utils.d.ts +8 -2
  40. package/dist/map-utils.js +23 -26
  41. package/dist/mapbox-utils.js +7 -22
  42. package/dist/noop.d.ts +1 -0
  43. package/dist/noop.js +11 -0
  44. package/dist/notifications-utils.d.ts +14 -26
  45. package/dist/notifications-utils.js +8 -30
  46. package/dist/observe-dimensions.d.ts +1 -1
  47. package/dist/observe-dimensions.js +13 -29
  48. package/dist/plot.d.ts +6 -0
  49. package/dist/plot.js +31 -0
  50. package/dist/projection-utils.d.ts +9 -0
  51. package/dist/projection-utils.js +40 -22
  52. package/dist/row-data-container.js +1 -21
  53. package/dist/searcher-utils.js +7 -22
  54. package/dist/split-map-utils.d.ts +4 -1
  55. package/dist/split-map-utils.js +9 -23
  56. package/dist/time.d.ts +16 -0
  57. package/dist/time.js +89 -0
  58. package/dist/utils.d.ts +42 -10
  59. package/dist/utils.js +64 -26
  60. package/package.json +14 -13
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
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.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -39,7 +19,12 @@ var _miniSvgDataUri = _interopRequireDefault(require("mini-svg-data-uri"));
39
19
 
40
20
  var _constants = require("@kepler.gl/constants");
41
21
 
42
- var _domUtils = require("./dom-utils");/**
22
+ var _domUtils = require("./dom-utils");
23
+
24
+ // SPDX-License-Identifier: MIT
25
+ // Copyright contributors to the kepler.gl project
26
+
27
+ /**
43
28
  * This file is copied from https://github.com/tsayen/dom-to-image
44
29
  * Modified by heshan0131 to allow loading external stylesheets and inline webfonts
45
30
  */
@@ -67,20 +52,20 @@ var domtoimage = {
67
52
  }
68
53
  };
69
54
  /**
70
- * @param {Node} node - The DOM Node object to render
71
- * @param {Object} options - Rendering options
72
- * @param {Function} [options.filter] - Should return true if passed node should be included in the output
73
- * (excluding node means excluding it's children as well). Not called on the root node.
74
- * @param {String} [options.bgcolor] - color for the background, any valid CSS color value.
75
- * @param {Number} [options.width] - width to be applied to node before rendering.
76
- * @param {Number} [options.height] - height to be applied to node before rendering.
77
- * @param {Object} [options.style] - an object whose properties to be copied to node's style before rendering.
78
- * @param {Number} [options.quality] - a Number between 0 and 1 indicating image quality (applicable to JPEG only),
79
- defaults to 1.0.
80
- * @param {String} [options.imagePlaceholder] - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
81
- * @param {Boolean} [options.cacheBust] - set to true to cache bust by appending the time to the request url
82
- * @return {Promise} - A promise that is fulfilled with a SVG image data URL
83
- * */
55
+ * @param {Node} node - The DOM Node object to render
56
+ * @param {Object} options - Rendering options
57
+ * @param {Function} [options.filter] - Should return true if passed node should be included in the output
58
+ * (excluding node means excluding it's children as well). Not called on the root node.
59
+ * @param {String} [options.bgcolor] - color for the background, any valid CSS color value.
60
+ * @param {Number} [options.width] - width to be applied to node before rendering.
61
+ * @param {Number} [options.height] - height to be applied to node before rendering.
62
+ * @param {Object} [options.style] - an object whose properties to be copied to node's style before rendering.
63
+ * @param {Number} [options.quality] - a Number between 0 and 1 indicating image quality (applicable to JPEG only), defaults to 1.0.
64
+ * @param {boolean} [options.escapeXhtmlForWebpack] - whether to apply fix for uglify error in dom-to-image (should be true for webpack builds), defaults to true.
65
+ * @param {String} [options.imagePlaceholder] - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
66
+ * @param {Boolean} [options.cacheBust] - set to true to cache bust by appending the time to the request url
67
+ * @return {Promise} - A promise that is fulfilled with a SVG image data URL
68
+ * */
84
69
 
85
70
  function toSvg(node, options) {
86
71
  options = options || {};
@@ -88,7 +73,7 @@ function toSvg(node, options) {
88
73
  return Promise.resolve(node).then(function (nd) {
89
74
  return cloneNode(nd, options.filter, true);
90
75
  }).then(embedFonts).then(inlineImages).then(applyOptions).then(function (clone) {
91
- return makeSvgDataUri(clone, options.width || (0, _domUtils.getWidth)(node), options.height || (0, _domUtils.getHeight)(node));
76
+ return makeSvgDataUri(clone, options.width || (0, _domUtils.getWidth)(node), options.height || (0, _domUtils.getHeight)(node), options.escapeXhtmlForWebpack);
92
77
  });
93
78
 
94
79
  function applyOptions(clone) {
@@ -250,10 +235,11 @@ function inlineImages(node) {
250
235
  }
251
236
 
252
237
  function makeSvgDataUri(node, width, height) {
238
+ var escapeXhtmlForWebpack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
253
239
  return Promise.resolve(node).then(function (nd) {
254
240
  nd.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
255
241
  var serializedString = new _window["default"].XMLSerializer().serializeToString(nd);
256
- var xhtml = (0, _domUtils.escapeXhtml)(serializedString);
242
+ var xhtml = escapeXhtmlForWebpack ? (0, _domUtils.escapeXhtml)(serializedString) : serializedString;
257
243
  var foreignObject = "<foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">".concat(xhtml, "</foreignObject>");
258
244
  var svgStr = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"".concat(width, "\" height=\"").concat(height, "\">").concat(foreignObject, "</svg>"); // Optimizing SVGs in data URIs
259
245
  // see https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
@@ -367,7 +353,10 @@ function newFontFaces() {
367
353
  cache: cache
368
354
  }).then(function (response) {
369
355
  return response.text();
370
- }).then(setBaseHref(sheet.href)).then(toStyleSheet)["catch"](function (err) {
356
+ }).then(function (text) {
357
+ var result = (0, _domUtils.setStyleSheetBaseHref)(text, sheet.href);
358
+ return (0, _domUtils.toStyleSheet)(result);
359
+ })["catch"](function (err) {
371
360
  // Handle any error that occurred in any of the previous
372
361
  // promises in the chain. stylesheet failed to load should not stop
373
362
  // the process, hence result in only a warning, instead of reject
@@ -381,56 +370,6 @@ function newFontFaces() {
381
370
 
382
371
  return Promise.resolve(sheet);
383
372
  }));
384
-
385
- function setBaseHref(base) {
386
- base = base.split('/');
387
- base.pop();
388
- base = base.join('/');
389
-
390
- function addBaseHrefToUrl(match, p1) {
391
- var url = /^http/i.test(p1) ? p1 : concatAndResolveUrl(base, p1);
392
- return "url('".concat(url, "')");
393
- } // Source: http://stackoverflow.com/a/2676231/3786856
394
-
395
-
396
- function concatAndResolveUrl(url, concat) {
397
- var url1 = url.split('/');
398
- var url2 = concat.split('/');
399
- var url3 = [];
400
-
401
- for (var i = 0, l = url1.length; i < l; i++) {
402
- if (url1[i] === '..') {
403
- url3.pop();
404
- } else if (url1[i] !== '.') {
405
- url3.push(url1[i]);
406
- }
407
- }
408
-
409
- for (var _i = 0, _l = url2.length; _i < _l; _i++) {
410
- if (url2[_i] === '..') {
411
- url3.pop();
412
- } else if (url2[_i] !== '.') {
413
- url3.push(url2[_i]);
414
- }
415
- }
416
-
417
- return url3.join('/');
418
- }
419
-
420
- return function (text) {
421
- return (0, _domUtils.isSrcAsDataUrl)(text) ? text : text.replace(/url\(['"]?([^'"]+?)['"]?\)/g, addBaseHrefToUrl);
422
- };
423
- }
424
-
425
- function toStyleSheet(text) {
426
- var doc = _document["default"].implementation.createHTMLDocument('');
427
-
428
- var styleElement = _document["default"].createElement('style');
429
-
430
- styleElement.textContent = text;
431
- doc.body.appendChild(styleElement);
432
- return styleElement.sheet;
433
- }
434
373
  }
435
374
 
436
375
  function getCssRules(styleSheets) {
@@ -547,4 +486,4 @@ function newImages() {
547
486
 
548
487
  var _default = domtoimage;
549
488
  exports["default"] = _default;
550
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdG8taW1hZ2UudHMiXSwibmFtZXMiOlsiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJkZWZhdWx0T3B0aW9ucyIsImltYWdlUGxhY2Vob2xkZXIiLCJ1bmRlZmluZWQiLCJjYWNoZUJ1c3QiLCJkb210b2ltYWdlIiwidG9TdmciLCJ0b1BuZyIsInRvSnBlZyIsInRvQmxvYiIsInRvUGl4ZWxEYXRhIiwiaW1wbCIsIm9wdGlvbnMiLCJub2RlIiwiY29weU9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJuZCIsImNsb25lTm9kZSIsImZpbHRlciIsImVtYmVkRm9udHMiLCJpbmxpbmVJbWFnZXMiLCJhcHBseU9wdGlvbnMiLCJjbG9uZSIsIm1ha2VTdmdEYXRhVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJiZ2NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwiZHJhdyIsImNhbnZhcyIsImdldENvbnRleHQiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwidG9EYXRhVVJMIiwicXVhbGl0eSIsImNhbnZhc1RvQmxvYiIsImRvbU5vZGUiLCJtYWtlSW1hZ2UiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwicmVzb2x2ZUFsbCIsImNzc1RleHQiLCJzdHlsZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImlubGluZUFsbCIsInNldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZWRTdHJpbmciLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ4aHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJVUkxfUkVHRVgiLCJzaG91bGRQcm9jZXNzIiwicmVhZFVybHMiLCJpbmxpbmUiLCJzdHJpbmciLCJzZWFyY2giLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwidXJsIiwidXJsQXNSZWdleCIsInVybDAiLCJSZWdFeHAiLCJiYXNlVXJsIiwiZ2V0IiwidWwiLCJkYXRhVXJsIiwicmVwbGFjZSIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0Iiwic2V0QmFzZUhyZWYiLCJ0b1N0eWxlU2hlZXQiLCJlcnIiLCJDb25zb2xlIiwid2FybiIsIklNQUdFX0VYUE9SVF9FUlJPUlMiLCJzdHlsZVNoZWV0IiwibG9nIiwiYmFzZSIsInNwbGl0IiwicG9wIiwiYWRkQmFzZUhyZWZUb1VybCIsInAxIiwidGVzdCIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJjb25jYXQiLCJ1cmwxIiwidXJsMiIsInVybDMiLCJpIiwibCIsImRvYyIsImltcGxlbWVudGF0aW9uIiwiY3JlYXRlSFRNTERvY3VtZW50Iiwic3R5bGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJib2R5IiwiZSIsImJpbmQiLCJ3ZWJGb250UnVsZSIsInBhcmVudFN0eWxlU2hlZXQiLCJzcmMiLCJuZXdJbWFnZSIsImVsZW1lbnQiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiRWxlbWVudCIsImlubGluZUJhY2tncm91bmQiLCJIVE1MSW1hZ2VFbGVtZW50IiwiYmFja2dyb3VuZCIsImlubGluZWQiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBeUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQTlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQSxJQUFNQSxPQUFPLEdBQUdDLFVBQVUsRUFBMUI7QUFDQSxJQUFNQyxTQUFTLEdBQUdDLFlBQVksRUFBOUI7QUFDQSxJQUFNQyxNQUFNLEdBQUdDLFNBQVMsRUFBeEIsQyxDQUNBOztBQUNBLElBQU1DLGNBQWMsR0FBRztBQUNyQjtBQUNBQyxFQUFBQSxnQkFBZ0IsRUFBRUMsU0FGRztBQUdyQjtBQUNBQyxFQUFBQSxTQUFTLEVBQUU7QUFKVSxDQUF2QjtBQU9BLElBQU1DLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQURpQjtBQUVqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQUZpQjtBQUdqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUhpQjtBQUlqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUppQjtBQUtqQkMsRUFBQUEsV0FBVyxFQUFYQSxXQUxpQjtBQU1qQkMsRUFBQUEsSUFBSSxFQUFFO0FBQ0pkLElBQUFBLFNBQVMsRUFBVEEsU0FESTtBQUVKRSxJQUFBQSxNQUFNLEVBQU5BLE1BRkk7QUFHSkosSUFB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LE9BQWxDLENBQVosQ0FBUDtBQUNELEtBTE0sQ0FBUDs7QUFPQSxhQUFTeUcsZ0JBQVQsQ0FBMEJ2SixFQUExQixFQUE4QjtBQUM1QixVQUFNeUosVUFBVSxHQUFHekosRUFBRSxDQUFDVyxLQUFILENBQVM2RixnQkFBVCxDQUEwQixZQUExQixDQUFuQjs7QUFFQSxVQUFJLENBQUNpRCxVQUFMLEVBQWlCO0FBQ2YsZUFBTzVKLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsRUFBaEIsQ0FBUDtBQUNEOztBQUVELGFBQU92QixPQUFPLENBQ1hnRixTQURJLENBQ01nRyxVQUROLEVBQ2tCLElBRGxCLEVBQ3dCLElBRHhCLEVBRUoxSixJQUZJLENBRUMsVUFBQTJKLE9BQU8sRUFBSTtBQUNmMUosUUFBQUEsRUFBRSxDQUFDVyxLQUFILENBQVNnSixXQUFULENBQXFCLFlBQXJCLEVBQW1DRCxPQUFuQyxFQUE0QzFKLEVBQUUsQ0FBQ1csS0FBSCxDQUFTaUosbUJBQVQsQ0FBNkIsWUFBN0IsQ0FBNUM7QUFDRCxPQUpJLEVBS0o3SixJQUxJLENBS0M7QUFBQSxlQUFNQyxFQUFOO0FBQUEsT0FMRCxDQUFQO0FBTUQ7QUFDRjtBQUNGOztlQUVjYixVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyoqXG4gKiBUaGlzIGZpbGUgaXMgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3RzYXllbi9kb20tdG8taW1hZ2VcbiAqIE1vZGlmaWVkIGJ5IGhlc2hhbjAxMzEgdG8gYWxsb3cgbG9hZGluZyBleHRlcm5hbCBzdHlsZXNoZWV0cyBhbmQgaW5saW5lIHdlYmZvbnRzXG4gKi9cblxuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHN2Z1RvTWluaURhdGFVUkkgZnJvbSAnbWluaS1zdmctZGF0YS11cmknO1xuaW1wb3J0IHtJTUFHRV9FWFBPUlRfRVJST1JTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBjYW52YXNUb0Jsb2IsXG4gIGVzY2FwZSxcbiAgZXNjYXBlWGh0bWwsXG4gIGRlbGF5LFxuICBwcm9jZXNzQ2xvbmUsXG4gIGFzQXJyYXksXG4gIG1ha2VJbWFnZSxcbiAgbWltZVR5cGUsXG4gIGRhdGFBc1VybCxcbiAgaXNEYXRhVXJsLFxuICBpc1NyY0FzRGF0YVVybCxcbiAgcmVzb2x2ZVVybCxcbiAgZ2V0V2lkdGgsXG4gIGdldEhlaWdodCxcbiAgZ2V0QW5kRW5jb2RlXG59IGZyb20gJy4vZG9tLXV0aWxzJztcblxuY29uc3QgaW5saW5lciA9IG5ld0lubGluZXIoKTtcbmNvbnN0IGZvbnRGYWNlcyA9IG5ld0ZvbnRGYWNlcygpO1xuY29uc3QgaW1hZ2VzID0gbmV3SW1hZ2VzKCk7XG4vLyBEZWZhdWx0IGltcGwgb3B0aW9uc1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIC8vIERlZmF1bHQgaXMgdG8gZmFpbCBvbiBlcnJvciwgbm8gcGxhY2Vob2xkZXJcbiAgaW1hZ2VQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICAvLyBEZWZhdWx0IGNhY2hlIGJ1c3QgaXMgZmFsc2UsIGl0IHdpbGwgdXNlIHRoZSBjYWNoZVxuICBjYWNoZUJ1c3Q6IGZhbHNlXG59O1xuXG5jb25zdCBkb210b2ltYWdlID0ge1xuICB0b1N2ZyxcbiAgdG9QbmcsXG4gIHRvSnBlZyxcbiAgdG9CbG9iLFxuICB0b1BpeGVsRGF0YSxcbiAgaW1wbDoge1xuICAgIGZvbnRGYWNlcyxcbiAgICBpbWFnZXMsXG4gICAgaW5saW5lcixcbiAgICBvcHRpb25zOiB7fSBhcyBhbnlcbiAgfVxufTtcblxuLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgbm9kZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICAgKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmJnY29sb3JdIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMud2lkdGhdIC0gd2lkdGggdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc3R5bGVdIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucXVhbGl0eV0gLSBhIE51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5IChhcHBsaWNhYmxlIHRvIEpQRUcgb25seSksXG4gICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDEuMC5cbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyXSAtIGRhdGFVUkwgdG8gdXNlIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGZhaWxlZCBpbWFnZXMsIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGZhaWwgZmFzdCBvbiBpbWFnZXMgd2UgY2FuJ3QgZmV0Y2hcbiAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuY2FjaGVCdXN0XSAtIHNldCB0byB0cnVlIHRvIGNhY2hlIGJ1c3QgYnkgYXBwZW5kaW5nIHRoZSB0aW1lIHRvIHRoZSByZXF1ZXN0IHVybFxuICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFNWRyBpbWFnZSBkYXRhIFVSTFxuICAgICogKi9cbmZ1bmN0aW9uIHRvU3ZnKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvcHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obmQgPT4gY2xvbmVOb2RlKG5kLCBvcHRpb25zLmZpbHRlciwgdHJ1ZSkpXG4gICAgLnRoZW4oZW1iZWRGb250cylcbiAgICAudGhlbihpbmxpbmVJbWFnZXMpXG4gICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgIC50aGVuKGNsb25lID0+XG4gICAgICBtYWtlU3ZnRGF0YVVyaShjbG9uZSwgb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChub2RlKSwgb3B0aW9ucy5oZWlnaHQgfHwgZ2V0SGVpZ2h0KG5vZGUpKVxuICAgICk7XG5cbiAgZnVuY3Rpb24gYXBwbHlPcHRpb25zKGNsb25lKSB7XG4gICAgaWYgKG9wdGlvbnMuYmdjb2xvcikgY2xvbmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iZ2NvbG9yO1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGgpIGNsb25lLnN0eWxlLndpZHRoID0gYCR7b3B0aW9ucy53aWR0aH1weGA7XG4gICAgaWYgKG9wdGlvbnMuaGVpZ2h0KSBjbG9uZS5zdHlsZS5oZWlnaHQgPSBgJHtvcHRpb25zLmhlaWdodH1weGA7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZSlcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuc3R5bGUpLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjbG9uZS5zdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBVaW50OEFycmF5IGNvbnRhaW5pbmcgUkdCQSBwaXhlbCBkYXRhLlxuICogKi9cbmZ1bmN0aW9uIHRvUGl4ZWxEYXRhKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihcbiAgICBjYW52YXMgPT4gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIGdldFdpZHRoKG5vZGUpLCBnZXRIZWlnaHQobm9kZSkpLmRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvUG5nKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIEpQRUcgaW1hZ2UgZGF0YSBVUkxcbiAqICovXG5mdW5jdGlvbiB0b0pwZWcobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucykudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG9wdGlvbnMucXVhbGl0eSB8fCAxLjApKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBibG9iXG4gKiAqL1xuZnVuY3Rpb24gdG9CbG9iKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXNUb0Jsb2IpO1xufVxuXG5mdW5jdGlvbiBjb3B5T3B0aW9ucyhvcHRpb25zKSB7XG4gIC8vIENvcHkgb3B0aW9ucyB0byBpbXBsIG9wdGlvbnMgZm9yIHVzZSBpbiBpbXBsXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBkZWZhdWx0T3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyO1xuICB9IGVsc2Uge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXI7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMuY2FjaGVCdXN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmNhY2hlQnVzdCA9IGRlZmF1bHRPcHRpb25zLmNhY2hlQnVzdDtcbiAgfSBlbHNlIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5jYWNoZUJ1c3QgPSBvcHRpb25zLmNhY2hlQnVzdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmF3KGRvbU5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvU3ZnKGRvbU5vZGUsIG9wdGlvbnMpXG4gICAgLnRoZW4obWFrZUltYWdlKVxuICAgIC50aGVuKGRlbGF5KDEwMCkpXG4gICAgLnRoZW4oaW1hZ2UgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gbmV3Q2FudmFzKGRvbU5vZGUpO1xuICAgICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgIHJldHVybiBjYW52YXM7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gbmV3Q2FudmFzKGROb2RlKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChkTm9kZSk7XG4gICAgY2FudmFzLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IGdldEhlaWdodChkTm9kZSk7XG5cbiAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSB7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJnY29sb3I7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lTm9kZShub2RlLCBmaWx0ZXIsIHJvb3QpIHtcbiAgaWYgKCFyb290ICYmIGZpbHRlciAmJiAhZmlsdGVyKG5vZGUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgIC50aGVuKG1ha2VOb2RlQ29weSlcbiAgICAudGhlbihjbG9uZSA9PiBjbG9uZUNoaWxkcmVuKG5vZGUsIGNsb25lLCBmaWx0ZXIpKVxuICAgIC50aGVuKGNsb25lID0+IHByb2Nlc3NDbG9uZShub2RlLCBjbG9uZSkpO1xuXG4gIGZ1bmN0aW9uIG1ha2VOb2RlQ29weShuZCkge1xuICAgIGlmIChuZCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIG1ha2VJbWFnZShuZC50b0RhdGFVUkwoKSk7XG4gICAgfVxuICAgIHJldHVybiBuZC5jbG9uZU5vZGUoZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbkluT3JkZXIocGFyZW50LCBhcnJDaGlsZHJlbiwgZmx0KSB7XG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBhcnJDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGRvbmUgPSBkb25lXG4gICAgICAgIC50aGVuKCgpID0+IGNsb25lTm9kZShjaGlsZCwgZmx0LCBudWxsKSlcbiAgICAgICAgLnRoZW4oY2hpbGRDbG9uZSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkQ2xvbmUpIHtcbiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZENsb25lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbihvcmlnaW5hbCwgY2xvbmUsIGZsdCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luYWwuY2hpbGROb2RlcztcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVDaGlsZHJlbkluT3JkZXIoY2xvbmUsIGFzQXJyYXkoY2hpbGRyZW4pLCBmbHQpLnRoZW4oKCkgPT4gY2xvbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtYmVkRm9udHMobm9kZSkge1xuICByZXR1cm4gZm9udEZhY2VzLnJlc29sdmVBbGwoKS50aGVuKGNzc1RleHQgPT4ge1xuICAgIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NUZXh0KSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVJbWFnZXMobm9kZSkge1xuICByZXR1cm4gaW1hZ2VzLmlubGluZUFsbChub2RlKS50aGVuKCgpID0+IG5vZGUpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3ZnRGF0YVVyaShub2RlLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSkudGhlbihuZCA9PiB7XG4gICAgbmQuc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFN0cmluZyA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5kKTtcblxuICAgIGNvbnN0IHhodG1sID0gZXNjYXBlWGh0bWwoc2VyaWFsaXplZFN0cmluZyk7XG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPiR7eGh0bWx9PC9mb3JlaWduT2JqZWN0PmA7XG4gICAgY29uc3Qgc3ZnU3RyID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj4ke2ZvcmVpZ25PYmplY3R9PC9zdmc+YDtcblxuICAgIC8vIE9wdGltaXppbmcgU1ZHcyBpbiBkYXRhIFVSSXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL3RpZ3QvcG9zdC9vcHRpbWl6aW5nLXN2Z3MtaW4tZGF0YS11cmlzXG4gICAgLy8gdGhlIGJlc3Qgd2F5IG9mIGVuY29kaW5nIFNWRyBpbiBhIGRhdGE6IFVSSSBpcyBkYXRhOmltYWdlL3N2Zyt4bWwsW2FjdHVhbCBkYXRhXS5cbiAgICAvLyBXZSBkb27igJl0IG5lZWQgdGhlIDtjaGFyc2V0PXV0Zi04IHBhcmFtZXRlciBiZWNhdXNlIHRoZSBnaXZlbiBTVkcgaXMgQVNDSUkuXG4gICAgcmV0dXJuIHN2Z1RvTWluaURhdGFVUkkoc3ZnU3RyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5ld0lubGluZXIoKSB7XG4gIGNvbnN0IFVSTF9SRUdFWCA9IC91cmxcXChbJ1wiXT8oW14nXCJdKz8pWydcIl0/XFwpL2c7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgc2hvdWxkUHJvY2VzcyxcbiAgICBpbXBsOiB7XG4gICAgICByZWFkVXJscyxcbiAgICAgIGlubGluZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcm9jZXNzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc2VhcmNoKFVSTF9SRUdFWCkgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFVybHMoc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBtYXRjaDogbnVsbCB8IFJlZ0V4cEV4ZWNBcnJheTtcbiAgICB3aGlsZSAoKG1hdGNoID0gVVJMX1JFR0VYLmV4ZWMoc3RyaW5nKSkgIT09IG51bGwpIHtcbiAgICAgIHJlc3VsdC5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIodXJsID0+IHtcbiAgICAgIHJldHVybiAhaXNEYXRhVXJsKHVybCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cmxBc1JlZ2V4KHVybDApIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgKHVybFxcXFwoW1xcJ1wiXT8pKCR7ZXNjYXBlKHVybDApfSkoW1xcJ1wiXT9cXFxcKSlgLCAnZycpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5saW5lKHN0cmluZywgdXJsLCBiYXNlVXJsLCBnZXQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVybClcbiAgICAgIC50aGVuKHVsID0+IChiYXNlVXJsID8gcmVzb2x2ZVVybCh1bCwgYmFzZVVybCkgOiB1bCkpXG4gICAgICAudGhlbih1bCA9PiAodHlwZW9mIGdldCA9PT0gJ2Z1bmN0aW9uJyA/IGdldCh1bCkgOiBnZXRBbmRFbmNvZGUodWwsIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zKSkpXG4gICAgICAudGhlbihkYXRhID0+IGRhdGFBc1VybChkYXRhLCBtaW1lVHlwZSh1cmwpKSlcbiAgICAgIC50aGVuKGRhdGFVcmwgPT4gc3RyaW5nLnJlcGxhY2UodXJsQXNSZWdleCh1cmwpLCBgJDEke2RhdGFVcmx9JDNgKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVBbGwoc3RyaW5nLCBiYXNlVXJsLCBnZXQpIHtcbiAgICBpZiAoIXNob3VsZFByb2Nlc3Moc3RyaW5nKSB8fCBpc1NyY0FzRGF0YVVybChzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKVxuICAgICAgLnRoZW4ocmVhZFVybHMpXG4gICAgICAudGhlbih1cmxzID0+IHtcbiAgICAgICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICAgICAgdXJscy5mb3JFYWNoKHVybCA9PiB7XG4gICAgICAgICAgZG9uZSA9IGRvbmUudGhlbihzdHIgPT4gaW5saW5lKHN0ciwgdXJsLCBiYXNlVXJsLCBnZXQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lO1xuICAgICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3Rm9udEZhY2VzKCkge1xuICByZXR1cm4ge1xuICAgIHJlc29sdmVBbGwsXG4gICAgaW1wbDoge3JlYWRBbGx9XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUFsbCgpIHtcbiAgICByZXR1cm4gcmVhZEFsbCgpXG4gICAgICAudGhlbih3ZWJGb250cyA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh3ZWJGb250cy5tYXAod2ViRm9udCA9PiB3ZWJGb250LnJlc29sdmUoKSkpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKGNzc1N0cmluZ3MgPT4gY3NzU3RyaW5ncy5qb2luKCdcXG4nKSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkQWxsKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYXNBcnJheShkb2N1bWVudC5zdHlsZVNoZWV0cykpXG4gICAgICAudGhlbihsb2FkRXh0ZXJuYWxTdHlsZVNoZWV0cylcbiAgICAgIC50aGVuKGdldENzc1J1bGVzKVxuICAgICAgLnRoZW4oc2VsZWN0V2ViRm9udFJ1bGVzKVxuICAgICAgLnRoZW4ocnVsZXMgPT4gcnVsZXMubWFwKG5ld1dlYkZvbnQpKTtcblxuICAgIGZ1bmN0aW9uIHNlbGVjdFdlYkZvbnRSdWxlcyhjc3NSdWxlcykge1xuICAgICAgcmV0dXJuIGNzc1J1bGVzXG4gICAgICAgIC5maWx0ZXIocnVsZSA9PiBydWxlLnR5cGUgPT09IHdpbmRvdy5DU1NSdWxlLkZPTlRfRkFDRV9SVUxFKVxuICAgICAgICAuZmlsdGVyKHJ1bGUgPT4gaW5saW5lci5zaG91bGRQcm9jZXNzKHJ1bGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJykpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkRXh0ZXJuYWxTdHlsZVNoZWV0cyhzdHlsZVNoZWV0cykge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICBzdHlsZVNoZWV0cy5tYXAoc2hlZXQgPT4ge1xuICAgICAgICAgIGlmIChzaGVldC5ocmVmKSB7XG4gICAgICAgICAgICAvLyBjbG91ZGZvbnQgZG9lc24ndCBoYXZlIGFsbG93IG9yaWdpbiBoZWFkZXIgcHJvcGVybHkgc2V0XG4gICAgICAgICAgICAvLyBlcnJvciByZXNwb25zZSB3aWxsIHJlbWFpbiBpbiBjYWNoZVxuICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBzaGVldC5ocmVmLmluY2x1ZGVzKCd1YmVyLWZvbnRzJykgPyAnbm8tY2FjaGUnIDogJ2RlZmF1bHQnO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvd1xuICAgICAgICAgICAgICAuZmV0Y2goc2hlZXQuaHJlZiwge2NyZWRlbnRpYWxzOiAnb21pdCcsIGNhY2hlfSlcbiAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UudGV4dCgpKVxuICAgICAgICAgICAgICAudGhlbihzZXRCYXNlSHJlZihzaGVldC5ocmVmKSlcbiAgICAgICAgICAgICAgLnRoZW4odG9TdHlsZVNoZWV0KVxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYW55IGVycm9yIHRoYXQgb2NjdXJyZWQgaW4gYW55IG9mIHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgICAgIC8vIHByb21pc2VzIGluIHRoZSBjaGFpbi4gc3R5bGVzaGVldCBmYWlsZWQgdG8gbG9hZCBzaG91bGQgbm90IHN0b3BcbiAgICAgICAgICAgICAgICAvLyB0aGUgcHJvY2VzcywgaGVuY2UgcmVzdWx0IGluIG9ubHkgYSB3YXJuaW5nLCBpbnN0ZWFkIG9mIHJlamVjdFxuICAgICAgICAgICAgICAgIENvbnNvbGUud2FybihJTUFHRV9FWFBPUlRfRVJST1JTLnN0eWxlU2hlZXQsIHNoZWV0LmhyZWYpO1xuICAgICAgICAgICAgICAgIENvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzaGVldCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBmdW5jdGlvbiBzZXRCYXNlSHJlZihiYXNlKSB7XG4gICAgICAgIGJhc2UgPSBiYXNlLnNwbGl0KCcvJyk7XG4gICAgICAgIGJhc2UucG9wKCk7XG4gICAgICAgIGJhc2UgPSBiYXNlLmpvaW4oJy8nKTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRCYXNlSHJlZlRvVXJsKG1hdGNoLCBwMSkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IC9eaHR0cC9pLnRlc3QocDEpID8gcDEgOiBjb25jYXRBbmRSZXNvbHZlVXJsKGJhc2UsIHAxKTtcbiAgICAgICAgICByZXR1cm4gYHVybCgnJHt1cmx9JylgO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU291cmNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjc2MjMxLzM3ODY4NTZcbiAgICAgICAgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybCh1cmwsIGNvbmNhdCkge1xuICAgICAgICAgIGNvbnN0IHVybDE6IHN0cmluZ1tdID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgY29uc3QgdXJsMjogc3RyaW5nW10gPSBjb25jYXQuc3BsaXQoJy8nKTtcbiAgICAgICAgICBjb25zdCB1cmwzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdXJsMS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh1cmwxW2ldID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgIHVybDMucG9wKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybDFbaV0gIT09ICcuJykge1xuICAgICAgICAgICAgICB1cmwzLnB1c2godXJsMVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdXJsMi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh1cmwyW2ldID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgIHVybDMucG9wKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybDJbaV0gIT09ICcuJykge1xuICAgICAgICAgICAgICB1cmwzLnB1c2godXJsMltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1cmwzLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0ID0+IHtcbiAgICAgICAgICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICAgICAgICAgID8gdGV4dFxuICAgICAgICAgICAgOiB0ZXh0LnJlcGxhY2UoL3VybFxcKFsnXCJdPyhbXidcIl0rPylbJ1wiXT9cXCkvZywgYWRkQmFzZUhyZWZUb1VybCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gICAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENzc1J1bGVzKHN0eWxlU2hlZXRzKSB7XG4gICAgICBjb25zdCBjc3NSdWxlczogYW55W10gPSBbXTtcbiAgICAgIHN0eWxlU2hlZXRzLmZvckVhY2goc2hlZXQgPT4ge1xuICAgICAgICAvLyB0cnkuLi5jYXRjaCBiZWNhdXNlIGJyb3dzZXIgbWF5IG5vdCBhYmxlIHRvIGVudW1lcmF0ZSBydWxlcyBmb3IgY3Jvc3MtZG9tYWluIHNoZWV0c1xuICAgICAgICBpZiAoIXNoZWV0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBydWxlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgQ29uc29sZS5sb2coYCdDYW4ndCByZWFkIHRoZSBjc3MgcnVsZXMgb2Y6ICR7c2hlZXQuaHJlZn1gLCBlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVsZXMgJiYgdHlwZW9mIHJ1bGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhc0FycmF5KHJ1bGVzIHx8IFtdKS5mb3JFYWNoKGNzc1J1bGVzLnB1c2guYmluZChjc3NSdWxlcykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIENvbnNvbGUubG9nKGBFcnJvciB3aGlsZSByZWFkaW5nIENTUyBydWxlcyBmcm9tICR7c2hlZXQuaHJlZn1gLCBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQ29uc29sZS5sb2coJ2dldENzc1J1bGVzIGNhbiBub3QgZmluZCBjc3NSdWxlcycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjc3NSdWxlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdXZWJGb250KHdlYkZvbnRSdWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9ICh3ZWJGb250UnVsZS5wYXJlbnRTdHlsZVNoZWV0IHx8IHt9KS5ocmVmO1xuICAgICAgICAgIHJldHVybiBpbmxpbmVyLmlubGluZUFsbCh3ZWJGb250UnVsZS5jc3NUZXh0LCBiYXNlVXJsLCBudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3JjOiAoKSA9PiB3ZWJGb250UnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3SW1hZ2VzKCkge1xuICByZXR1cm4ge1xuICAgIGlubGluZUFsbCxcbiAgICBpbXBsOiB7XG4gICAgICBuZXdJbWFnZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBuZXdJbWFnZShlbGVtZW50KSB7XG4gICAgZnVuY3Rpb24gaW5saW5lKGdldCkge1xuICAgICAgaWYgKGlzRGF0YVVybChlbGVtZW50LnNyYykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50LnNyYylcbiAgICAgICAgLnRoZW4odWwgPT5cbiAgICAgICAgICB0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nID8gZ2V0KHVsKSA6IGdldEFuZEVuY29kZSh1bCwgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oZGF0YSA9PiBkYXRhQXNVcmwoZGF0YSwgbWltZVR5cGUoZWxlbWVudC5zcmMpKSlcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgZGF0YVVybCA9PlxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgIGVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5saW5lXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZUFsbChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmxpbmVCYWNrZ3JvdW5kKG5vZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBuZXdJbWFnZShub2RlKS5pbmxpbmUobnVsbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYXNBcnJheShub2RlLmNoaWxkTm9kZXMpLm1hcChjaGlsZCA9PiBpbmxpbmVBbGwoY2hpbGQpKSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5kKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZCcpO1xuXG4gICAgICBpZiAoIWJhY2tncm91bmQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmxpbmVyXG4gICAgICAgIC5pbmxpbmVBbGwoYmFja2dyb3VuZCwgbnVsbCwgbnVsbClcbiAgICAgICAgLnRoZW4oaW5saW5lZCA9PiB7XG4gICAgICAgICAgbmQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBpbmxpbmVkLCBuZC5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJykpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiBuZCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRvbXRvaW1hZ2U7XG4iXX0=
489
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdG8taW1hZ2UudHMiXSwibmFtZXMiOlsiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJkZWZhdWx0T3B0aW9ucyIsImltYWdlUGxhY2Vob2xkZXIiLCJ1bmRlZmluZWQiLCJjYWNoZUJ1c3QiLCJkb210b2ltYWdlIiwidG9TdmciLCJ0b1BuZyIsInRvSnBlZyIsInRvQmxvYiIsInRvUGl4ZWxEYXRhIiwiaW1wbCIsIm9wdGlvbnMiLCJub2RlIiwiY29weU9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJuZCIsImNsb25lTm9kZSIsImZpbHRlciIsImVtYmVkRm9udHMiLCJpbmxpbmVJbWFnZXMiLCJhcHBseU9wdGlvbnMiLCJjbG9uZSIsIm1ha2VTdmdEYXRhVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJlc2NhcGVYaHRtbEZvcldlYnBhY2siLCJiZ2NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwiZHJhdyIsImNhbnZhcyIsImdldENvbnRleHQiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwidG9EYXRhVVJMIiwicXVhbGl0eSIsImNhbnZhc1RvQmxvYiIsImRvbU5vZGUiLCJtYWtlSW1hZ2UiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwicmVzb2x2ZUFsbCIsImNzc1RleHQiLCJzdHlsZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImlubGluZUFsbCIsInNldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZWRTdHJpbmciLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ4aHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJVUkxfUkVHRVgiLCJzaG91bGRQcm9jZXNzIiwicmVhZFVybHMiLCJpbmxpbmUiLCJzdHJpbmciLCJzZWFyY2giLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwidXJsIiwidXJsQXNSZWdleCIsInVybDAiLCJSZWdFeHAiLCJiYXNlVXJsIiwiZ2V0IiwidWwiLCJkYXRhVXJsIiwicmVwbGFjZSIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0IiwiZXJyIiwiQ29uc29sZSIsIndhcm4iLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwic3R5bGVTaGVldCIsImxvZyIsImUiLCJiaW5kIiwid2ViRm9udFJ1bGUiLCJwYXJlbnRTdHlsZVNoZWV0Iiwic3JjIiwibmV3SW1hZ2UiLCJlbGVtZW50IiwicmVqZWN0Iiwib25sb2FkIiwib25lcnJvciIsIkVsZW1lbnQiLCJpbmxpbmVCYWNrZ3JvdW5kIiwiSFRNTEltYWdlRWxlbWVudCIsImJhY2tncm91bmQiLCJpbmxpbmVkIiwic2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eVByaW9yaXR5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQWRBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUE0QkEsSUFBTUEsT0FBTyxHQUFHQyxVQUFVLEVBQTFCO0FBQ0EsSUFBTUMsU0FBUyxHQUFHQyxZQUFZLEVBQTlCO0FBQ0EsSUFBTUMsTUFBTSxHQUFHQyxTQUFTLEVBQXhCLEMsQ0FDQTs7QUFDQSxJQUFNQyxjQUFjLEdBQUc7QUFDckI7QUFDQUMsRUFBQUEsZ0JBQWdCLEVBQUVDLFNBRkc7QUFHckI7QUFDQUMsRUFBQUEsU0FBUyxFQUFFO0FBSlUsQ0FBdkI7QUFPQSxJQUFNQyxVQUFVLEdBQUc7QUFDakJDLEVBQUFBLEtBQUssRUFBTEEsS0FEaUI7QUFFakJDLEVBQUFBLEtBQUssRUFBTEEsS0FGaUI7QUFHakJDLEVBQUFBLE1BQU0sRUFBTkEsTUFIaUI7QUFJakJDLEVBQUFBLE1BQU0sRUFBTkEsTUFKaUI7QUFLakJDLEVBQUFBLFdBQVcsRUFBWEEsV0FMaUI7QUFNakJDLEVBQUFBLElBQUksRUFBRTtBQUNKZCxJQUFBQSxTQUFTLEVBQVRBLFNBREk7QUFFSkUsSUFBQUEsTUFBTSxFQUFOQSxNQUZJO0FBR0pKLElBQUFBLE9BQU8sRUFBUEEsT0FISTtBQUlKaUIsSUFBQUEsT0FBTyxFQUFFO0FBSkw7QUFOVyxDQUFuQjtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTTixLQUFULENBQWVPLElBQWYsRUFBcUJELE9BQXJCLEVBQThCO0FBQzVCQSxFQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBRSxFQUFBQSxXQUFXLENBQUNGLE9BQUQsQ0FBWDtBQUNBLFNBQU9HLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkgsSUFBaEIsRUFDSkksSUFESSxDQUNDLFVBQUFDLEVBQUU7QUFBQSxXQUFJQyxTQUFTLENBQUNELEVBQUQsRUFBS04sT0FBTyxDQUFDUSxNQUFiLEVBQXFCLElBQXJCLENBQWI7QUFBQSxHQURILEVBRUpILElBRkksQ0FFQ0ksVUFGRCxFQUdKSixJQUhJLENBR0NLLFlBSEQsRUFJSkwsSUFKSSxDQUlDTSxZQUpELEVBS0pOLElBTEksQ0FLQyxVQUFBTyxLQUFLO0FBQUEsV0FDVEMsY0FBYyxDQUNaRCxLQURZLEVBRVpaLE9BQU8sQ0FBQ2MsS0FBUixJQUFpQix3QkFBU2IsSUFBVCxDQUZMLEVBR1pELE9BQU8sQ0FBQ2UsTUFBUixJQUFrQix5QkFBVWQsSUFBVixDQUhOLEVBSVpELE9BQU8sQ0FBQ2dCLHFCQUpJLENBREw7QUFBQSxHQUxOLENBQVA7O0FBY0EsV0FBU0wsWUFBVCxDQUFzQkMsS0FBdEIsRUFBNkI7QUFDM0IsUUFBSVosT0FBTyxDQUFDaUIsT0FBWixFQUFxQkwsS0FBSyxDQUFDTSxLQUFOLENBQVlDLGVBQVosR0FBOEJuQixPQUFPLENBQUNpQixPQUF0QztBQUVyQixRQUFJakIsT0FBTyxDQUFDYyxLQUFaLEVBQW1CRixLQUFLLENBQUNNLEtBQU4sQ0FBWUosS0FBWixhQUF1QmQsT0FBTyxDQUFDYyxLQUEvQjtBQUNuQixRQUFJZCxPQUFPLENBQUNlLE1BQVosRUFBb0JILEtBQUssQ0FBQ00sS0FBTixDQUFZSCxNQUFaLGFBQXdCZixPQUFPLENBQUNlLE1BQWhDO0FBRXBCLFFBQUlmLE9BQU8sQ0FBQ2tCLEtBQVosRUFDRUUsTUFBTSxDQUFDQyxJQUFQLENBQVlyQixPQUFPLENBQUNrQixLQUFwQixFQUEyQkksT0FBM0IsQ0FBbUMsVUFBQUMsUUFBUSxFQUFJO0FBQzdDWCxNQUFBQSxLQUFLLENBQUNNLEtBQU4sQ0FBWUssUUFBWixJQUF3QnZCLE9BQU8sQ0FBQ2tCLEtBQVIsQ0FBY0ssUUFBZCxDQUF4QjtBQUNELEtBRkQ7QUFJRixXQUFPWCxLQUFQO0FBQ0Q7QUFDRjtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNkLFdBQVQsQ0FBcUJHLElBQXJCLEVBQTJCRCxPQUEzQixFQUFvQztBQUNsQyxTQUFPd0IsSUFBSSxDQUFDdkIsSUFBRCxFQUFPRCxPQUFPLElBQUksRUFBbEIsQ0FBSixDQUEwQkssSUFBMUIsQ0FDTCxVQUFBb0IsTUFBTTtBQUFBLFdBQUlBLE1BQU0sQ0FBQ0MsVUFBUCxDQUFrQixJQUFsQixFQUF3QkMsWUFBeEIsQ0FBcUMsQ0FBckMsRUFBd0MsQ0FBeEMsRUFBMkMsd0JBQVMxQixJQUFULENBQTNDLEVBQTJELHlCQUFVQSxJQUFWLENBQTNELEVBQTRFMkIsSUFBaEY7QUFBQSxHQURELENBQVA7QUFHRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNqQyxLQUFULENBQWVNLElBQWYsRUFBcUJELE9BQXJCLEVBQThCO0FBQzVCLFNBQU93QixJQUFJLENBQUN2QixJQUFELEVBQU9ELE9BQU8sSUFBSSxFQUFsQixDQUFKLENBQTBCSyxJQUExQixDQUErQixVQUFBb0IsTUFBTTtBQUFBLFdBQUlBLE1BQU0sQ0FBQ0ksU0FBUCxFQUFKO0FBQUEsR0FBckMsQ0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU2pDLE1BQVQsQ0FBZ0JLLElBQWhCLEVBQXNCRCxPQUF0QixFQUErQjtBQUM3QkEsRUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFDQSxTQUFPd0IsSUFBSSxDQUFDdkIsSUFBRCxFQUFPRCxPQUFQLENBQUosQ0FBb0JLLElBQXBCLENBQXlCLFVBQUFvQixNQUFNO0FBQUEsV0FBSUEsTUFBTSxDQUFDSSxTQUFQLENBQWlCLFlBQWpCLEVBQStCN0IsT0FBTyxDQUFDOEIsT0FBUixJQUFtQixHQUFsRCxDQUFKO0FBQUEsR0FBL0IsQ0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU2pDLE1BQVQsQ0FBZ0JJLElBQWhCLEVBQXNCRCxPQUF0QixFQUErQjtBQUM3QixTQUFPd0IsSUFBSSxDQUFDdkIsSUFBRCxFQUFPRCxPQUFPLElBQUksRUFBbEIsQ0FBSixDQUEwQkssSUFBMUIsQ0FBK0IwQixzQkFBL0IsQ0FBUDtBQUNEOztBQUVELFNBQVM3QixXQUFULENBQXFCRixPQUFyQixFQUE4QjtBQUM1QjtBQUNBLE1BQUksT0FBT0EsT0FBTyxDQUFDVixnQkFBZixLQUFvQyxXQUF4QyxFQUFxRDtBQUNuREcsSUFBQUEsVUFBVSxDQUFDTSxJQUFYLENBQWdCQyxPQUFoQixDQUF3QlYsZ0JBQXhCLEdBQTJDRCxjQUFjLENBQUNDLGdCQUExRDtBQUNELEdBRkQsTUFFTztBQUNMRyxJQUFBQSxVQUFVLENBQUNNLElBQVgsQ0FBZ0JDLE9BQWhCLENBQXdCVixnQkFBeEIsR0FBMkNVLE9BQU8sQ0FBQ1YsZ0JBQW5EO0FBQ0Q7O0FBRUQsTUFBSSxPQUFPVSxPQUFPLENBQUNSLFNBQWYsS0FBNkIsV0FBakMsRUFBOEM7QUFDNUNDLElBQUFBLFVBQVUsQ0FBQ00sSUFBWCxDQUFnQkMsT0FBaEIsQ0FBd0JSLFNBQXhCLEdBQW9DSCxjQUFjLENBQUNHLFNBQW5EO0FBQ0QsR0FGRCxNQUVPO0FBQ0xDLElBQUFBLFVBQVUsQ0FBQ00sSUFBWCxDQUFnQkMsT0FBaEIsQ0FBd0JSLFNBQXhCLEdBQW9DUSxPQUFPLENBQUNSLFNBQTVDO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTZ0MsSUFBVCxDQUFjUSxPQUFkLEVBQXVCaEMsT0FBdkIsRUFBZ0M7QUFDOUIsU0FBT04sS0FBSyxDQUFDc0MsT0FBRCxFQUFVaEMsT0FBVixDQUFMLENBQ0pLLElBREksQ0FDQzRCLG1CQURELEVBRUo1QixJQUZJLENBRUMscUJBQU0sR0FBTixDQUZELEVBR0pBLElBSEksQ0FHQyxVQUFBNkIsS0FBSyxFQUFJO0FBQ2IsUUFBTVQsTUFBTSxHQUFHVSxTQUFTLENBQUNILE9BQUQsQ0FBeEI7QUFDQVAsSUFBQUEsTUFBTSxDQUFDQyxVQUFQLENBQWtCLElBQWxCLEVBQXdCVSxTQUF4QixDQUFrQ0YsS0FBbEMsRUFBeUMsQ0FBekMsRUFBNEMsQ0FBNUM7QUFDQSxXQUFPVCxNQUFQO0FBQ0QsR0FQSSxDQUFQOztBQVNBLFdBQVNVLFNBQVQsQ0FBbUJFLEtBQW5CLEVBQTBCO0FBQ3hCLFFBQU1aLE1BQU0sR0FBR2EscUJBQVNDLGFBQVQsQ0FBdUIsUUFBdkIsQ0FBZjs7QUFDQWQsSUFBQUEsTUFBTSxDQUFDWCxLQUFQLEdBQWVkLE9BQU8sQ0FBQ2MsS0FBUixJQUFpQix3QkFBU3VCLEtBQVQsQ0FBaEM7QUFDQVosSUFBQUEsTUFBTSxDQUFDVixNQUFQLEdBQWdCZixPQUFPLENBQUNlLE1BQVIsSUFBa0IseUJBQVVzQixLQUFWLENBQWxDOztBQUVBLFFBQUlyQyxPQUFPLENBQUNpQixPQUFaLEVBQXFCO0FBQ25CLFVBQU11QixHQUFHLEdBQUdmLE1BQU0sQ0FBQ0MsVUFBUCxDQUFrQixJQUFsQixDQUFaO0FBQ0FjLE1BQUFBLEdBQUcsQ0FBQ0MsU0FBSixHQUFnQnpDLE9BQU8sQ0FBQ2lCLE9BQXhCO0FBQ0F1QixNQUFBQSxHQUFHLENBQUNFLFFBQUosQ0FBYSxDQUFiLEVBQWdCLENBQWhCLEVBQW1CakIsTUFBTSxDQUFDWCxLQUExQixFQUFpQ1csTUFBTSxDQUFDVixNQUF4QztBQUNEOztBQUVELFdBQU9VLE1BQVA7QUFDRDtBQUNGOztBQUVELFNBQVNsQixTQUFULENBQW1CTixJQUFuQixFQUF5Qk8sTUFBekIsRUFBaUNtQyxJQUFqQyxFQUF1QztBQUNyQyxNQUFJLENBQUNBLElBQUQsSUFBU25DLE1BQVQsSUFBbUIsQ0FBQ0EsTUFBTSxDQUFDUCxJQUFELENBQTlCLEVBQXNDO0FBQ3BDLFdBQU9FLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0Q7O0FBRUQsU0FBT0QsT0FBTyxDQUFDQyxPQUFSLENBQWdCSCxJQUFoQixFQUNKSSxJQURJLENBQ0N1QyxZQURELEVBRUp2QyxJQUZJLENBRUMsVUFBQU8sS0FBSztBQUFBLFdBQUlpQyxhQUFhLENBQUM1QyxJQUFELEVBQU9XLEtBQVAsRUFBY0osTUFBZCxDQUFqQjtBQUFBLEdBRk4sRUFHSkgsSUFISSxDQUdDLFVBQUFPLEtBQUs7QUFBQSxXQUFJLDRCQUFhWCxJQUFiLEVBQW1CVyxLQUFuQixDQUFKO0FBQUEsR0FITixDQUFQOztBQUtBLFdBQVNnQyxZQUFULENBQXNCdEMsRUFBdEIsRUFBMEI7QUFDeEIsUUFBSUEsRUFBRSxZQUFZd0MsbUJBQU9DLGlCQUF6QixFQUE0QztBQUMxQyxhQUFPLHlCQUFVekMsRUFBRSxDQUFDdUIsU0FBSCxFQUFWLENBQVA7QUFDRDs7QUFDRCxXQUFPdkIsRUFBRSxDQUFDQyxTQUFILENBQWEsS0FBYixDQUFQO0FBQ0Q7O0FBRUQsV0FBU3lDLG9CQUFULENBQThCQyxNQUE5QixFQUFzQ0MsV0FBdEMsRUFBbURDLEdBQW5ELEVBQXdEO0FBQ3RELFFBQUlDLElBQUksR0FBR2pELE9BQU8sQ0FBQ0MsT0FBUixFQUFYO0FBQ0E4QyxJQUFBQSxXQUFXLENBQUM1QixPQUFaLENBQW9CLFVBQUErQixLQUFLLEVBQUk7QUFDM0JELE1BQUFBLElBQUksR0FBR0EsSUFBSSxDQUNSL0MsSUFESSxDQUNDO0FBQUEsZUFBTUUsU0FBUyxDQUFDOEMsS0FBRCxFQUFRRixHQUFSLEVBQWEsSUFBYixDQUFmO0FBQUEsT0FERCxFQUVKOUMsSUFGSSxDQUVDLFVBQUFpRCxVQUFVLEVBQUk7QUFDbEIsWUFBSUEsVUFBSixFQUFnQjtBQUNkTCxVQUFBQSxNQUFNLENBQUNNLFdBQVAsQ0FBbUJELFVBQW5CO0FBQ0Q7QUFDRixPQU5JLENBQVA7QUFPRCxLQVJEO0FBU0EsV0FBT0YsSUFBUDtBQUNEOztBQUVELFdBQVNQLGFBQVQsQ0FBdUJXLFFBQXZCLEVBQWlDNUMsS0FBakMsRUFBd0N1QyxHQUF4QyxFQUE2QztBQUMzQyxRQUFNTSxRQUFRLEdBQUdELFFBQVEsQ0FBQ0UsVUFBMUI7O0FBQ0EsUUFBSUQsUUFBUSxDQUFDRSxNQUFULEtBQW9CLENBQXhCLEVBQTJCO0FBQ3pCLGFBQU94RCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JRLEtBQWhCLENBQVA7QUFDRDs7QUFFRCxXQUFPb0Msb0JBQW9CLENBQUNwQyxLQUFELEVBQVEsdUJBQVE2QyxRQUFSLENBQVIsRUFBMkJOLEdBQTNCLENBQXBCLENBQW9EOUMsSUFBcEQsQ0FBeUQ7QUFBQSxhQUFNTyxLQUFOO0FBQUEsS0FBekQsQ0FBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU0gsVUFBVCxDQUFvQlIsSUFBcEIsRUFBMEI7QUFDeEIsU0FBT2hCLFNBQVMsQ0FBQzJFLFVBQVYsR0FBdUJ2RCxJQUF2QixDQUE0QixVQUFBd0QsT0FBTyxFQUFJO0FBQzVDLFFBQU1DLFNBQVMsR0FBR3hCLHFCQUFTQyxhQUFULENBQXVCLE9BQXZCLENBQWxCOztBQUNBdEMsSUFBQUEsSUFBSSxDQUFDc0QsV0FBTCxDQUFpQk8sU0FBakI7QUFDQUEsSUFBQUEsU0FBUyxDQUFDUCxXQUFWLENBQXNCakIscUJBQVN5QixjQUFULENBQXdCRixPQUF4QixDQUF0QjtBQUNBLFdBQU81RCxJQUFQO0FBQ0QsR0FMTSxDQUFQO0FBTUQ7O0FBRUQsU0FBU1MsWUFBVCxDQUFzQlQsSUFBdEIsRUFBNEI7QUFDMUIsU0FBT2QsTUFBTSxDQUFDNkUsU0FBUCxDQUFpQi9ELElBQWpCLEVBQXVCSSxJQUF2QixDQUE0QjtBQUFBLFdBQU1KLElBQU47QUFBQSxHQUE1QixDQUFQO0FBQ0Q7O0FBRUQsU0FBU1ksY0FBVCxDQUF3QlosSUFBeEIsRUFBOEJhLEtBQTlCLEVBQXFDQyxNQUFyQyxFQUEyRTtBQUFBLE1BQTlCQyxxQkFBOEIsdUVBQU4sSUFBTTtBQUN6RSxTQUFPYixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JILElBQWhCLEVBQXNCSSxJQUF0QixDQUEyQixVQUFBQyxFQUFFLEVBQUk7QUFDdENBLElBQUFBLEVBQUUsQ0FBQzJELFlBQUgsQ0FBZ0IsT0FBaEIsRUFBeUIsOEJBQXpCO0FBQ0EsUUFBTUMsZ0JBQWdCLEdBQUcsSUFBSXBCLG1CQUFPcUIsYUFBWCxHQUEyQkMsaUJBQTNCLENBQTZDOUQsRUFBN0MsQ0FBekI7QUFFQSxRQUFNK0QsS0FBSyxHQUFHckQscUJBQXFCLEdBQUcsMkJBQVlrRCxnQkFBWixDQUFILEdBQW1DQSxnQkFBdEU7QUFDQSxRQUFNSSxhQUFhLDJFQUE0REQsS0FBNUQscUJBQW5CO0FBQ0EsUUFBTUUsTUFBTSwrREFBcUR6RCxLQUFyRCx5QkFBdUVDLE1BQXZFLGdCQUFrRnVELGFBQWxGLFdBQVosQ0FOc0MsQ0FRdEM7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsV0FBTyxnQ0FBaUJDLE1BQWpCLENBQVA7QUFDRCxHQWJNLENBQVA7QUFjRDs7QUFFRCxTQUFTdkYsVUFBVCxHQUFzQjtBQUNwQixNQUFNd0YsU0FBUyxHQUFHLDZCQUFsQjtBQUVBLFNBQU87QUFDTFIsSUFBQUEsU0FBUyxFQUFUQSxTQURLO0FBRUxTLElBQUFBLGFBQWEsRUFBYkEsYUFGSztBQUdMMUUsSUFBQUEsSUFBSSxFQUFFO0FBQ0oyRSxNQUFBQSxRQUFRLEVBQVJBLFFBREk7QUFFSkMsTUFBQUEsTUFBTSxFQUFOQTtBQUZJO0FBSEQsR0FBUDs7QUFTQSxXQUFTRixhQUFULENBQXVCRyxNQUF2QixFQUErQjtBQUM3QixXQUFPQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0wsU0FBZCxNQUE2QixDQUFDLENBQXJDO0FBQ0Q7O0FBRUQsV0FBU0UsUUFBVCxDQUFrQkUsTUFBbEIsRUFBMEI7QUFDeEIsUUFBTUUsTUFBZ0IsR0FBRyxFQUF6QjtBQUNBLFFBQUlDLEtBQUo7O0FBQ0EsV0FBTyxDQUFDQSxLQUFLLEdBQUdQLFNBQVMsQ0FBQ1EsSUFBVixDQUFlSixNQUFmLENBQVQsTUFBcUMsSUFBNUMsRUFBa0Q7QUFDaERFLE1BQUFBLE1BQU0sQ0FBQ0csSUFBUCxDQUFZRixLQUFLLENBQUMsQ0FBRCxDQUFqQjtBQUNEOztBQUNELFdBQU9ELE1BQU0sQ0FBQ3RFLE1BQVAsQ0FBYyxVQUFBMEUsR0FBRyxFQUFJO0FBQzFCLGFBQU8sQ0FBQyx5QkFBVUEsR0FBVixDQUFSO0FBQ0QsS0FGTSxDQUFQO0FBR0Q7O0FBRUQsV0FBU0MsVUFBVCxDQUFvQkMsSUFBcEIsRUFBMEI7QUFDeEIsV0FBTyxJQUFJQyxNQUFKLDBCQUE2QixzQkFBT0QsSUFBUCxDQUE3QixtQkFBeUQsR0FBekQsQ0FBUDtBQUNEOztBQUVELFdBQVNULE1BQVQsQ0FBZ0JDLE1BQWhCLEVBQXdCTSxHQUF4QixFQUE2QkksT0FBN0IsRUFBc0NDLEdBQXRDLEVBQTJDO0FBQ3pDLFdBQU9wRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0I4RSxHQUFoQixFQUNKN0UsSUFESSxDQUNDLFVBQUFtRixFQUFFO0FBQUEsYUFBS0YsT0FBTyxHQUFHLDBCQUFXRSxFQUFYLEVBQWVGLE9BQWYsQ0FBSCxHQUE2QkUsRUFBekM7QUFBQSxLQURILEVBRUpuRixJQUZJLENBRUMsVUFBQW1GLEVBQUU7QUFBQSxhQUFLLE9BQU9ELEdBQVAsS0FBZSxVQUFmLEdBQTRCQSxHQUFHLENBQUNDLEVBQUQsQ0FBL0IsR0FBc0MsNEJBQWFBLEVBQWIsRUFBaUIvRixVQUFVLENBQUNNLElBQVgsQ0FBZ0JDLE9BQWpDLENBQTNDO0FBQUEsS0FGSCxFQUdKSyxJQUhJLENBR0MsVUFBQXVCLElBQUk7QUFBQSxhQUFJLHlCQUFVQSxJQUFWLEVBQWdCLHdCQUFTc0QsR0FBVCxDQUFoQixDQUFKO0FBQUEsS0FITCxFQUlKN0UsSUFKSSxDQUlDLFVBQUFvRixPQUFPO0FBQUEsYUFBSWIsTUFBTSxDQUFDYyxPQUFQLENBQWVQLFVBQVUsQ0FBQ0QsR0FBRCxDQUF6QixjQUFxQ08sT0FBckMsUUFBSjtBQUFBLEtBSlIsQ0FBUDtBQUtEOztBQUVELFdBQVN6QixTQUFULENBQW1CWSxNQUFuQixFQUEyQlUsT0FBM0IsRUFBb0NDLEdBQXBDLEVBQXlDO0FBQ3ZDLFFBQUksQ0FBQ2QsYUFBYSxDQUFDRyxNQUFELENBQWQsSUFBMEIsOEJBQWVBLE1BQWYsQ0FBOUIsRUFBc0Q7QUFDcEQsYUFBT3pFLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQndFLE1BQWhCLENBQVA7QUFDRDs7QUFDRCxXQUFPekUsT0FBTyxDQUFDQyxPQUFSLENBQWdCd0UsTUFBaEIsRUFDSnZFLElBREksQ0FDQ3FFLFFBREQsRUFFSnJFLElBRkksQ0FFQyxVQUFBc0YsSUFBSSxFQUFJO0FBQ1osVUFBSXZDLElBQUksR0FBR2pELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQndFLE1BQWhCLENBQVg7QUFDQWUsTUFBQUEsSUFBSSxDQUFDckUsT0FBTCxDQUFhLFVBQUE0RCxHQUFHLEVBQUk7QUFDbEI5QixRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQy9DLElBQUwsQ0FBVSxVQUFBdUYsR0FBRztBQUFBLGlCQUFJakIsTUFBTSxDQUFDaUIsR0FBRCxFQUFNVixHQUFOLEVBQVdJLE9BQVgsRUFBb0JDLEdBQXBCLENBQVY7QUFBQSxTQUFiLENBQVA7QUFDRCxPQUZEO0FBR0EsYUFBT25DLElBQVA7QUFDRCxLQVJJLENBQVA7QUFTRDtBQUNGOztBQUVELFNBQVNsRSxZQUFULEdBQXdCO0FBQ3RCLFNBQU87QUFDTDBFLElBQUFBLFVBQVUsRUFBVkEsVUFESztBQUVMN0QsSUFBQUEsSUFBSSxFQUFFO0FBQUM4RixNQUFBQSxPQUFPLEVBQVBBO0FBQUQ7QUFGRCxHQUFQOztBQUtBLFdBQVNqQyxVQUFULEdBQXNCO0FBQ3BCLFdBQU9pQyxPQUFPLEdBQ1h4RixJQURJLENBQ0MsVUFBQXlGLFFBQVEsRUFBSTtBQUNoQixhQUFPM0YsT0FBTyxDQUFDNEYsR0FBUixDQUFZRCxRQUFRLENBQUNFLEdBQVQsQ0FBYSxVQUFBQyxPQUFPO0FBQUEsZUFBSUEsT0FBTyxDQUFDN0YsT0FBUixFQUFKO0FBQUEsT0FBcEIsQ0FBWixDQUFQO0FBQ0QsS0FISSxFQUlKQyxJQUpJLENBSUMsVUFBQTZGLFVBQVU7QUFBQSxhQUFJQSxVQUFVLENBQUNDLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBSjtBQUFBLEtBSlgsQ0FBUDtBQUtEOztBQUVELFdBQVNOLE9BQVQsR0FBbUI7QUFDakIsV0FBTzFGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQix1QkFBUWtDLHFCQUFTOEQsV0FBakIsQ0FBaEIsRUFDSi9GLElBREksQ0FDQ2dHLHVCQURELEVBRUpoRyxJQUZJLENBRUNpRyxXQUZELEVBR0pqRyxJQUhJLENBR0NrRyxrQkFIRCxFQUlKbEcsSUFKSSxDQUlDLFVBQUFtRyxLQUFLO0FBQUEsYUFBSUEsS0FBSyxDQUFDUixHQUFOLENBQVVTLFVBQVYsQ0FBSjtBQUFBLEtBSk4sQ0FBUDs7QUFNQSxhQUFTRixrQkFBVCxDQUE0QkcsUUFBNUIsRUFBc0M7QUFDcEMsYUFBT0EsUUFBUSxDQUNabEcsTUFESSxDQUNHLFVBQUFtRyxJQUFJO0FBQUEsZUFBSUEsSUFBSSxDQUFDQyxJQUFMLEtBQWM5RCxtQkFBTytELE9BQVAsQ0FBZUMsY0FBakM7QUFBQSxPQURQLEVBRUp0RyxNQUZJLENBRUcsVUFBQW1HLElBQUk7QUFBQSxlQUFJNUgsT0FBTyxDQUFDMEYsYUFBUixDQUFzQmtDLElBQUksQ0FBQ3pGLEtBQUwsQ0FBVzZGLGdCQUFYLENBQTRCLEtBQTVCLENBQXRCLENBQUo7QUFBQSxPQUZQLENBQVA7QUFHRDs7QUFFRCxhQUFTVix1QkFBVCxDQUFpQ0QsV0FBakMsRUFBOEM7QUFDNUMsYUFBT2pHLE9BQU8sQ0FBQzRGLEdBQVIsQ0FDTEssV0FBVyxDQUFDSixHQUFaLENBQWdCLFVBQUFnQixLQUFLLEVBQUk7QUFDdkIsWUFBSUEsS0FBSyxDQUFDQyxJQUFWLEVBQWdCO0FBQ2Q7QUFDQTtBQUNBLGNBQU1DLEtBQUssR0FBR0YsS0FBSyxDQUFDQyxJQUFOLENBQVdFLFFBQVgsQ0FBb0IsWUFBcEIsSUFBb0MsVUFBcEMsR0FBaUQsU0FBL0Q7QUFDQSxpQkFBT3JFLG1CQUNKc0UsS0FESSxDQUNFSixLQUFLLENBQUNDLElBRFIsRUFDYztBQUFDSSxZQUFBQSxXQUFXLEVBQUUsTUFBZDtBQUFzQkgsWUFBQUEsS0FBSyxFQUFMQTtBQUF0QixXQURkLEVBRUo3RyxJQUZJLENBRUMsVUFBQWlILFFBQVE7QUFBQSxtQkFBSUEsUUFBUSxDQUFDQyxJQUFULEVBQUo7QUFBQSxXQUZULEVBR0psSCxJQUhJLENBR0MsVUFBQWtILElBQUksRUFBSTtBQUNaLGdCQUFNekMsTUFBTSxHQUFHLHFDQUFzQnlDLElBQXRCLEVBQTRCUCxLQUFLLENBQUNDLElBQWxDLENBQWY7QUFDQSxtQkFBTyw0QkFBYW5DLE1BQWIsQ0FBUDtBQUNELFdBTkksV0FPRSxVQUFBMEMsR0FBRyxFQUFJO0FBQ1o7QUFDQTtBQUNBO0FBQ0FDLGdDQUFRQyxJQUFSLENBQWFDLCtCQUFvQkMsVUFBakMsRUFBNkNaLEtBQUssQ0FBQ0MsSUFBbkQ7O0FBQ0FRLGdDQUFRSSxHQUFSLENBQVlMLEdBQVo7O0FBQ0E7QUFDRCxXQWRJLENBQVA7QUFlRDs7QUFDRCxlQUFPckgsT0FBTyxDQUFDQyxPQUFSLENBQWdCNEcsS0FBaEIsQ0FBUDtBQUNELE9BdEJELENBREssQ0FBUDtBQXlCRDs7QUFFRCxhQUFTVixXQUFULENBQXFCRixXQUFyQixFQUFrQztBQUNoQyxVQUFNTSxRQUFlLEdBQUcsRUFBeEI7QUFDQU4sTUFBQUEsV0FBVyxDQUFDOUUsT0FBWixDQUFvQixVQUFBMEYsS0FBSyxFQUFJO0FBQzNCO0FBQ0EsWUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVjtBQUNEOztBQUNELFlBQUlSLEtBQUo7O0FBQ0EsWUFBSTtBQUNGQSxVQUFBQSxLQUFLLEdBQUdRLEtBQUssQ0FBQ1IsS0FBTixJQUFlUSxLQUFLLENBQUNOLFFBQTdCO0FBQ0QsU0FGRCxDQUVFLE9BQU9vQixDQUFQLEVBQVU7QUFDVkwsOEJBQVFJLEdBQVIseUNBQTZDYixLQUFLLENBQUNDLElBQW5ELEdBQTJEYSxDQUEzRDs7QUFDQTtBQUNEOztBQUVELFlBQUl0QixLQUFLLElBQUkseUJBQU9BLEtBQVAsTUFBaUIsUUFBOUIsRUFBd0M7QUFDdEMsY0FBSTtBQUNGLG1DQUFRQSxLQUFLLElBQUksRUFBakIsRUFBcUJsRixPQUFyQixDQUE2Qm9GLFFBQVEsQ0FBQ3pCLElBQVQsQ0FBYzhDLElBQWQsQ0FBbUJyQixRQUFuQixDQUE3QjtBQUNELFdBRkQsQ0FFRSxPQUFPb0IsQ0FBUCxFQUFVO0FBQ1ZMLGdDQUFRSSxHQUFSLDhDQUFrRGIsS0FBSyxDQUFDQyxJQUF4RCxHQUFnRWEsQ0FBaEU7O0FBQ0E7QUFDRDtBQUNGLFNBUEQsTUFPTztBQUNMTCw4QkFBUUksR0FBUixDQUFZLG1DQUFaOztBQUNBO0FBQ0Q7QUFDRixPQXhCRDtBQTBCQSxhQUFPbkIsUUFBUDtBQUNEOztBQUVELGFBQVNELFVBQVQsQ0FBb0J1QixXQUFwQixFQUFpQztBQUMvQixhQUFPO0FBQ0w1SCxRQUFBQSxPQUFPLEVBQUUsbUJBQU07QUFDYixjQUFNa0YsT0FBTyxHQUFHLENBQUMwQyxXQUFXLENBQUNDLGdCQUFaLElBQWdDLEVBQWpDLEVBQXFDaEIsSUFBckQ7QUFDQSxpQkFBT2xJLE9BQU8sQ0FBQ2lGLFNBQVIsQ0FBa0JnRSxXQUFXLENBQUNuRSxPQUE5QixFQUF1Q3lCLE9BQXZDLEVBQWdELElBQWhELENBQVA7QUFDRCxTQUpJO0FBS0w0QyxRQUFBQSxHQUFHLEVBQUU7QUFBQSxpQkFBTUYsV0FBVyxDQUFDOUcsS0FBWixDQUFrQjZGLGdCQUFsQixDQUFtQyxLQUFuQyxDQUFOO0FBQUE7QUFMQSxPQUFQO0FBT0Q7QUFDRjtBQUNGOztBQUVELFNBQVMzSCxTQUFULEdBQXFCO0FBQ25CLFNBQU87QUFDTDRFLElBQUFBLFNBQVMsRUFBVEEsU0FESztBQUVMakUsSUFBQUEsSUFBSSxFQUFFO0FBQ0pvSSxNQUFBQSxRQUFRLEVBQVJBO0FBREk7QUFGRCxHQUFQOztBQU9BLFdBQVNBLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQTJCO0FBQ3pCLGFBQVN6RCxNQUFULENBQWdCWSxHQUFoQixFQUFxQjtBQUNuQixVQUFJLHlCQUFVNkMsT0FBTyxDQUFDRixHQUFsQixDQUFKLEVBQTRCO0FBQzFCLGVBQU8vSCxPQUFPLENBQUNDLE9BQVIsRUFBUDtBQUNEOztBQUNELGFBQU9ELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQmdJLE9BQU8sQ0FBQ0YsR0FBeEIsRUFDSjdILElBREksQ0FDQyxVQUFBbUYsRUFBRTtBQUFBLGVBQ04sT0FBT0QsR0FBUCxLQUFlLFVBQWYsR0FBNEJBLEdBQUcsQ0FBQ0MsRUFBRCxDQUEvQixHQUFzQyw0QkFBYUEsRUFBYixFQUFpQi9GLFVBQVUsQ0FBQ00sSUFBWCxDQUFnQkMsT0FBakMsQ0FEaEM7QUFBQSxPQURILEVBSUpLLElBSkksQ0FJQyxVQUFBdUIsSUFBSTtBQUFBLGVBQUkseUJBQVVBLElBQVYsRUFBZ0Isd0JBQVN3RyxPQUFPLENBQUNGLEdBQWpCLENBQWhCLENBQUo7QUFBQSxPQUpMLEVBS0o3SCxJQUxJLENBTUgsVUFBQW9GLE9BQU87QUFBQSxlQUNMLElBQUl0RixPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVaUksTUFBVixFQUFxQjtBQUMvQkQsVUFBQUEsT0FBTyxDQUFDRSxNQUFSLEdBQWlCbEksT0FBakI7QUFDQWdJLFVBQUFBLE9BQU8sQ0FBQ0csT0FBUixHQUFrQkYsTUFBbEI7QUFDQUQsVUFBQUEsT0FBTyxDQUFDRixHQUFSLEdBQWN6QyxPQUFkO0FBQ0QsU0FKRCxDQURLO0FBQUEsT0FOSixDQUFQO0FBYUQ7O0FBRUQsV0FBTztBQUNMZCxNQUFBQSxNQUFNLEVBQU5BO0FBREssS0FBUDtBQUdEOztBQUVELFdBQVNYLFNBQVQsQ0FBbUIvRCxJQUFuQixFQUF5QjtBQUN2QixRQUFJLEVBQUVBLElBQUksWUFBWXVJLE9BQWxCLENBQUosRUFBZ0M7QUFDOUIsYUFBT3JJLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkgsSUFBaEIsQ0FBUDtBQUNEOztBQUVELFdBQU93SSxnQkFBZ0IsQ0FBQ3hJLElBQUQsQ0FBaEIsQ0FBdUJJLElBQXZCLENBQTRCLFlBQU07QUFDdkMsVUFBSUosSUFBSSxZQUFZeUksZ0JBQXBCLEVBQXNDO0FBQ3BDLGVBQU9QLFFBQVEsQ0FBQ2xJLElBQUQsQ0FBUixDQUFlMEUsTUFBZixDQUFzQixJQUF0QixDQUFQO0FBQ0Q7O0FBQ0QsYUFBT3hFLE9BQU8sQ0FBQzRGLEdBQVIsQ0FBWSx1QkFBUTlGLElBQUksQ0FBQ3lELFVBQWIsRUFBeUJzQyxHQUF6QixDQUE2QixVQUFBM0MsS0FBSztBQUFBLGVBQUlXLFNBQVMsQ0FBQ1gsS0FBRCxDQUFiO0FBQUEsT0FBbEMsQ0FBWixDQUFQO0FBQ0QsS0FMTSxDQUFQOztBQU9BLGFBQVNvRixnQkFBVCxDQUEwQm5JLEVBQTFCLEVBQThCO0FBQzVCLFVBQU1xSSxVQUFVLEdBQUdySSxFQUFFLENBQUNZLEtBQUgsQ0FBUzZGLGdCQUFULENBQTBCLFlBQTFCLENBQW5COztBQUVBLFVBQUksQ0FBQzRCLFVBQUwsRUFBaUI7QUFDZixlQUFPeEksT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxFQUFoQixDQUFQO0FBQ0Q7O0FBRUQsYUFBT3ZCLE9BQU8sQ0FDWGlGLFNBREksQ0FDTTJFLFVBRE4sRUFDa0IsSUFEbEIsRUFDd0IsSUFEeEIsRUFFSnRJLElBRkksQ0FFQyxVQUFBdUksT0FBTyxFQUFJO0FBQ2Z0SSxRQUFBQSxFQUFFLENBQUNZLEtBQUgsQ0FBUzJILFdBQVQsQ0FBcUIsWUFBckIsRUFBbUNELE9BQW5DLEVBQTRDdEksRUFBRSxDQUFDWSxLQUFILENBQVM0SCxtQkFBVCxDQUE2QixZQUE3QixDQUE1QztBQUNELE9BSkksRUFLSnpJLElBTEksQ0FLQztBQUFBLGVBQU1DLEVBQU47QUFBQSxPQUxELENBQVA7QUFNRDtBQUNGO0FBQ0Y7O2VBRWNiLFUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIFRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdHNheWVuL2RvbS10by1pbWFnZVxuICogTW9kaWZpZWQgYnkgaGVzaGFuMDEzMSB0byBhbGxvdyBsb2FkaW5nIGV4dGVybmFsIHN0eWxlc2hlZXRzIGFuZCBpbmxpbmUgd2ViZm9udHNcbiAqL1xuXG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgc3ZnVG9NaW5pRGF0YVVSSSBmcm9tICdtaW5pLXN2Zy1kYXRhLXVyaSc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgY2FudmFzVG9CbG9iLFxuICBlc2NhcGUsXG4gIGVzY2FwZVhodG1sLFxuICBkZWxheSxcbiAgcHJvY2Vzc0Nsb25lLFxuICBhc0FycmF5LFxuICBtYWtlSW1hZ2UsXG4gIG1pbWVUeXBlLFxuICBkYXRhQXNVcmwsXG4gIGlzRGF0YVVybCxcbiAgaXNTcmNBc0RhdGFVcmwsXG4gIHJlc29sdmVVcmwsXG4gIGdldFdpZHRoLFxuICBnZXRIZWlnaHQsXG4gIGdldEFuZEVuY29kZSxcbiAgc2V0U3R5bGVTaGVldEJhc2VIcmVmLFxuICB0b1N0eWxlU2hlZXRcbn0gZnJvbSAnLi9kb20tdXRpbHMnO1xuXG5jb25zdCBpbmxpbmVyID0gbmV3SW5saW5lcigpO1xuY29uc3QgZm9udEZhY2VzID0gbmV3Rm9udEZhY2VzKCk7XG5jb25zdCBpbWFnZXMgPSBuZXdJbWFnZXMoKTtcbi8vIERlZmF1bHQgaW1wbCBvcHRpb25zXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgLy8gRGVmYXVsdCBpcyB0byBmYWlsIG9uIGVycm9yLCBubyBwbGFjZWhvbGRlclxuICBpbWFnZVBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIC8vIERlZmF1bHQgY2FjaGUgYnVzdCBpcyBmYWxzZSwgaXQgd2lsbCB1c2UgdGhlIGNhY2hlXG4gIGNhY2hlQnVzdDogZmFsc2Vcbn07XG5cbmNvbnN0IGRvbXRvaW1hZ2UgPSB7XG4gIHRvU3ZnLFxuICB0b1BuZyxcbiAgdG9KcGVnLFxuICB0b0Jsb2IsXG4gIHRvUGl4ZWxEYXRhLFxuICBpbXBsOiB7XG4gICAgZm9udEZhY2VzLFxuICAgIGltYWdlcyxcbiAgICBpbmxpbmVyLFxuICAgIG9wdGlvbnM6IHt9IGFzIGFueVxuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIC0gU2hvdWxkIHJldHVybiB0cnVlIGlmIHBhc3NlZCBub2RlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0XG4gKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5iZ2NvbG9yXSAtIGNvbG9yIGZvciB0aGUgYmFja2dyb3VuZCwgYW55IHZhbGlkIENTUyBjb2xvciB2YWx1ZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy53aWR0aF0gLSB3aWR0aCB0byBiZSBhcHBsaWVkIHRvIG5vZGUgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnN0eWxlXSAtIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIHRvIGJlIGNvcGllZCB0byBub2RlJ3Mgc3R5bGUgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5xdWFsaXR5XSAtIGEgTnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHkgKGFwcGxpY2FibGUgdG8gSlBFRyBvbmx5KSwgZGVmYXVsdHMgdG8gMS4wLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lc2NhcGVYaHRtbEZvcldlYnBhY2tdIC0gd2hldGhlciB0byBhcHBseSBmaXggZm9yIHVnbGlmeSBlcnJvciBpbiBkb20tdG8taW1hZ2UgKHNob3VsZCBiZSB0cnVlIGZvciB3ZWJwYWNrIGJ1aWxkcyksIGRlZmF1bHRzIHRvIHRydWUuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcl0gLSBkYXRhVVJMIHRvIHVzZSBhcyBhIHBsYWNlaG9sZGVyIGZvciBmYWlsZWQgaW1hZ2VzLCBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byBmYWlsIGZhc3Qgb24gaW1hZ2VzIHdlIGNhbid0IGZldGNoXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmNhY2hlQnVzdF0gLSBzZXQgdG8gdHJ1ZSB0byBjYWNoZSBidXN0IGJ5IGFwcGVuZGluZyB0aGUgdGltZSB0byB0aGUgcmVxdWVzdCB1cmxcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBTVkcgaW1hZ2UgZGF0YSBVUkxcbiAqICovXG5mdW5jdGlvbiB0b1N2Zyhub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb3B5T3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgIC50aGVuKG5kID0+IGNsb25lTm9kZShuZCwgb3B0aW9ucy5maWx0ZXIsIHRydWUpKVxuICAgIC50aGVuKGVtYmVkRm9udHMpXG4gICAgLnRoZW4oaW5saW5lSW1hZ2VzKVxuICAgIC50aGVuKGFwcGx5T3B0aW9ucylcbiAgICAudGhlbihjbG9uZSA9PlxuICAgICAgbWFrZVN2Z0RhdGFVcmkoXG4gICAgICAgIGNsb25lLFxuICAgICAgICBvcHRpb25zLndpZHRoIHx8IGdldFdpZHRoKG5vZGUpLFxuICAgICAgICBvcHRpb25zLmhlaWdodCB8fCBnZXRIZWlnaHQobm9kZSksXG4gICAgICAgIG9wdGlvbnMuZXNjYXBlWGh0bWxGb3JXZWJwYWNrXG4gICAgICApXG4gICAgKTtcblxuICBmdW5jdGlvbiBhcHBseU9wdGlvbnMoY2xvbmUpIHtcbiAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSBjbG9uZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJnY29sb3I7XG5cbiAgICBpZiAob3B0aW9ucy53aWR0aCkgY2xvbmUuc3R5bGUud2lkdGggPSBgJHtvcHRpb25zLndpZHRofXB4YDtcbiAgICBpZiAob3B0aW9ucy5oZWlnaHQpIGNsb25lLnN0eWxlLmhlaWdodCA9IGAke29wdGlvbnMuaGVpZ2h0fXB4YDtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlKVxuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5zdHlsZSkuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgIGNsb25lLnN0eWxlW3Byb3BlcnR5XSA9IG9wdGlvbnMuc3R5bGVbcHJvcGVydHldO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyBSR0JBIHBpeGVsIGRhdGEuXG4gKiAqL1xuZnVuY3Rpb24gdG9QaXhlbERhdGEobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KS50aGVuKFxuICAgIGNhbnZhcyA9PiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5nZXRJbWFnZURhdGEoMCwgMCwgZ2V0V2lkdGgobm9kZSksIGdldEhlaWdodChub2RlKSkuZGF0YVxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGRhdGEgVVJMXG4gKiAqL1xuZnVuY3Rpb24gdG9Qbmcobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KS50aGVuKGNhbnZhcyA9PiBjYW52YXMudG9EYXRhVVJMKCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgSlBFRyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvSnBlZyhub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zKS50aGVuKGNhbnZhcyA9PiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgb3B0aW9ucy5xdWFsaXR5IHx8IDEuMCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGJsb2JcbiAqICovXG5mdW5jdGlvbiB0b0Jsb2Iobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KS50aGVuKGNhbnZhc1RvQmxvYik7XG59XG5cbmZ1bmN0aW9uIGNvcHlPcHRpb25zKG9wdGlvbnMpIHtcbiAgLy8gQ29weSBvcHRpb25zIHRvIGltcGwgb3B0aW9ucyBmb3IgdXNlIGluIGltcGxcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlciA9IGRlZmF1bHRPcHRpb25zLmltYWdlUGxhY2Vob2xkZXI7XG4gIH0gZWxzZSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlciA9IG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jYWNoZUJ1c3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuY2FjaGVCdXN0ID0gZGVmYXVsdE9wdGlvbnMuY2FjaGVCdXN0O1xuICB9IGVsc2Uge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmNhY2hlQnVzdCA9IG9wdGlvbnMuY2FjaGVCdXN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRyYXcoZG9tTm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9TdmcoZG9tTm9kZSwgb3B0aW9ucylcbiAgICAudGhlbihtYWtlSW1hZ2UpXG4gICAgLnRoZW4oZGVsYXkoMTAwKSlcbiAgICAudGhlbihpbWFnZSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBuZXdDYW52YXMoZG9tTm9kZSk7XG4gICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICB9KTtcblxuICBmdW5jdGlvbiBuZXdDYW52YXMoZE5vZGUpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSBvcHRpb25zLndpZHRoIHx8IGdldFdpZHRoKGROb2RlKTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgZ2V0SGVpZ2h0KGROb2RlKTtcblxuICAgIGlmIChvcHRpb25zLmJnY29sb3IpIHtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmdjb2xvcjtcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjYW52YXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVOb2RlKG5vZGUsIGZpbHRlciwgcm9vdCkge1xuICBpZiAoIXJvb3QgJiYgZmlsdGVyICYmICFmaWx0ZXIobm9kZSkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obWFrZU5vZGVDb3B5KVxuICAgIC50aGVuKGNsb25lID0+IGNsb25lQ2hpbGRyZW4obm9kZSwgY2xvbmUsIGZpbHRlcikpXG4gICAgLnRoZW4oY2xvbmUgPT4gcHJvY2Vzc0Nsb25lKG5vZGUsIGNsb25lKSk7XG5cbiAgZnVuY3Rpb24gbWFrZU5vZGVDb3B5KG5kKSB7XG4gICAgaWYgKG5kIGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbWFrZUltYWdlKG5kLnRvRGF0YVVSTCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5kLmNsb25lTm9kZShmYWxzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZUNoaWxkcmVuSW5PcmRlcihwYXJlbnQsIGFyckNoaWxkcmVuLCBmbHQpIHtcbiAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGFyckNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgZG9uZSA9IGRvbmVcbiAgICAgICAgLnRoZW4oKCkgPT4gY2xvbmVOb2RlKGNoaWxkLCBmbHQsIG51bGwpKVxuICAgICAgICAudGhlbihjaGlsZENsb25lID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGRDbG9uZSkge1xuICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkQ2xvbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZUNoaWxkcmVuKG9yaWdpbmFsLCBjbG9uZSwgZmx0KSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBvcmlnaW5hbC5jaGlsZE5vZGVzO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmUpO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZUNoaWxkcmVuSW5PcmRlcihjbG9uZSwgYXNBcnJheShjaGlsZHJlbiksIGZsdCkudGhlbigoKSA9PiBjbG9uZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1iZWRGb250cyhub2RlKSB7XG4gIHJldHVybiBmb250RmFjZXMucmVzb2x2ZUFsbCgpLnRoZW4oY3NzVGV4dCA9PiB7XG4gICAgY29uc3Qgc3R5bGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBub2RlLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gICAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlubGluZUltYWdlcyhub2RlKSB7XG4gIHJldHVybiBpbWFnZXMuaW5saW5lQWxsKG5vZGUpLnRoZW4oKCkgPT4gbm9kZSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdmdEYXRhVXJpKG5vZGUsIHdpZHRoLCBoZWlnaHQsIGVzY2FwZVhodG1sRm9yV2VicGFjayA9IHRydWUpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKS50aGVuKG5kID0+IHtcbiAgICBuZC5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkU3RyaW5nID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcobmQpO1xuXG4gICAgY29uc3QgeGh0bWwgPSBlc2NhcGVYaHRtbEZvcldlYnBhY2sgPyBlc2NhcGVYaHRtbChzZXJpYWxpemVkU3RyaW5nKSA6IHNlcmlhbGl6ZWRTdHJpbmc7XG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPiR7eGh0bWx9PC9mb3JlaWduT2JqZWN0PmA7XG4gICAgY29uc3Qgc3ZnU3RyID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj4ke2ZvcmVpZ25PYmplY3R9PC9zdmc+YDtcblxuICAgIC8vIE9wdGltaXppbmcgU1ZHcyBpbiBkYXRhIFVSSXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL3RpZ3QvcG9zdC9vcHRpbWl6aW5nLXN2Z3MtaW4tZGF0YS11cmlzXG4gICAgLy8gdGhlIGJlc3Qgd2F5IG9mIGVuY29kaW5nIFNWRyBpbiBhIGRhdGE6IFVSSSBpcyBkYXRhOmltYWdlL3N2Zyt4bWwsW2FjdHVhbCBkYXRhXS5cbiAgICAvLyBXZSBkb27igJl0IG5lZWQgdGhlIDtjaGFyc2V0PXV0Zi04IHBhcmFtZXRlciBiZWNhdXNlIHRoZSBnaXZlbiBTVkcgaXMgQVNDSUkuXG4gICAgcmV0dXJuIHN2Z1RvTWluaURhdGFVUkkoc3ZnU3RyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5ld0lubGluZXIoKSB7XG4gIGNvbnN0IFVSTF9SRUdFWCA9IC91cmxcXChbJ1wiXT8oW14nXCJdKz8pWydcIl0/XFwpL2c7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgc2hvdWxkUHJvY2VzcyxcbiAgICBpbXBsOiB7XG4gICAgICByZWFkVXJscyxcbiAgICAgIGlubGluZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcm9jZXNzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc2VhcmNoKFVSTF9SRUdFWCkgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFVybHMoc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBtYXRjaDogbnVsbCB8IFJlZ0V4cEV4ZWNBcnJheTtcbiAgICB3aGlsZSAoKG1hdGNoID0gVVJMX1JFR0VYLmV4ZWMoc3RyaW5nKSkgIT09IG51bGwpIHtcbiAgICAgIHJlc3VsdC5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIodXJsID0+IHtcbiAgICAgIHJldHVybiAhaXNEYXRhVXJsKHVybCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cmxBc1JlZ2V4KHVybDApIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgKHVybFxcXFwoW1xcJ1wiXT8pKCR7ZXNjYXBlKHVybDApfSkoW1xcJ1wiXT9cXFxcKSlgLCAnZycpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5saW5lKHN0cmluZywgdXJsLCBiYXNlVXJsLCBnZXQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVybClcbiAgICAgIC50aGVuKHVsID0+IChiYXNlVXJsID8gcmVzb2x2ZVVybCh1bCwgYmFzZVVybCkgOiB1bCkpXG4gICAgICAudGhlbih1bCA9PiAodHlwZW9mIGdldCA9PT0gJ2Z1bmN0aW9uJyA/IGdldCh1bCkgOiBnZXRBbmRFbmNvZGUodWwsIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zKSkpXG4gICAgICAudGhlbihkYXRhID0+IGRhdGFBc1VybChkYXRhLCBtaW1lVHlwZSh1cmwpKSlcbiAgICAgIC50aGVuKGRhdGFVcmwgPT4gc3RyaW5nLnJlcGxhY2UodXJsQXNSZWdleCh1cmwpLCBgJDEke2RhdGFVcmx9JDNgKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVBbGwoc3RyaW5nLCBiYXNlVXJsLCBnZXQpIHtcbiAgICBpZiAoIXNob3VsZFByb2Nlc3Moc3RyaW5nKSB8fCBpc1NyY0FzRGF0YVVybChzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKVxuICAgICAgLnRoZW4ocmVhZFVybHMpXG4gICAgICAudGhlbih1cmxzID0+IHtcbiAgICAgICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICAgICAgdXJscy5mb3JFYWNoKHVybCA9PiB7XG4gICAgICAgICAgZG9uZSA9IGRvbmUudGhlbihzdHIgPT4gaW5saW5lKHN0ciwgdXJsLCBiYXNlVXJsLCBnZXQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lO1xuICAgICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3Rm9udEZhY2VzKCkge1xuICByZXR1cm4ge1xuICAgIHJlc29sdmVBbGwsXG4gICAgaW1wbDoge3JlYWRBbGx9XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUFsbCgpIHtcbiAgICByZXR1cm4gcmVhZEFsbCgpXG4gICAgICAudGhlbih3ZWJGb250cyA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh3ZWJGb250cy5tYXAod2ViRm9udCA9PiB3ZWJGb250LnJlc29sdmUoKSkpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKGNzc1N0cmluZ3MgPT4gY3NzU3RyaW5ncy5qb2luKCdcXG4nKSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkQWxsKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYXNBcnJheShkb2N1bWVudC5zdHlsZVNoZWV0cykpXG4gICAgICAudGhlbihsb2FkRXh0ZXJuYWxTdHlsZVNoZWV0cylcbiAgICAgIC50aGVuKGdldENzc1J1bGVzKVxuICAgICAgLnRoZW4oc2VsZWN0V2ViRm9udFJ1bGVzKVxuICAgICAgLnRoZW4ocnVsZXMgPT4gcnVsZXMubWFwKG5ld1dlYkZvbnQpKTtcblxuICAgIGZ1bmN0aW9uIHNlbGVjdFdlYkZvbnRSdWxlcyhjc3NSdWxlcykge1xuICAgICAgcmV0dXJuIGNzc1J1bGVzXG4gICAgICAgIC5maWx0ZXIocnVsZSA9PiBydWxlLnR5cGUgPT09IHdpbmRvdy5DU1NSdWxlLkZPTlRfRkFDRV9SVUxFKVxuICAgICAgICAuZmlsdGVyKHJ1bGUgPT4gaW5saW5lci5zaG91bGRQcm9jZXNzKHJ1bGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJykpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkRXh0ZXJuYWxTdHlsZVNoZWV0cyhzdHlsZVNoZWV0cykge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICBzdHlsZVNoZWV0cy5tYXAoc2hlZXQgPT4ge1xuICAgICAgICAgIGlmIChzaGVldC5ocmVmKSB7XG4gICAgICAgICAgICAvLyBjbG91ZGZvbnQgZG9lc24ndCBoYXZlIGFsbG93IG9yaWdpbiBoZWFkZXIgcHJvcGVybHkgc2V0XG4gICAgICAgICAgICAvLyBlcnJvciByZXNwb25zZSB3aWxsIHJlbWFpbiBpbiBjYWNoZVxuICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBzaGVldC5ocmVmLmluY2x1ZGVzKCd1YmVyLWZvbnRzJykgPyAnbm8tY2FjaGUnIDogJ2RlZmF1bHQnO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvd1xuICAgICAgICAgICAgICAuZmV0Y2goc2hlZXQuaHJlZiwge2NyZWRlbnRpYWxzOiAnb21pdCcsIGNhY2hlfSlcbiAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UudGV4dCgpKVxuICAgICAgICAgICAgICAudGhlbih0ZXh0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzZXRTdHlsZVNoZWV0QmFzZUhyZWYodGV4dCwgc2hlZXQuaHJlZik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvU3R5bGVTaGVldChyZXN1bHQpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYW55IGVycm9yIHRoYXQgb2NjdXJyZWQgaW4gYW55IG9mIHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgICAgIC8vIHByb21pc2VzIGluIHRoZSBjaGFpbi4gc3R5bGVzaGVldCBmYWlsZWQgdG8gbG9hZCBzaG91bGQgbm90IHN0b3BcbiAgICAgICAgICAgICAgICAvLyB0aGUgcHJvY2VzcywgaGVuY2UgcmVzdWx0IGluIG9ubHkgYSB3YXJuaW5nLCBpbnN0ZWFkIG9mIHJlamVjdFxuICAgICAgICAgICAgICAgIENvbnNvbGUud2FybihJTUFHRV9FWFBPUlRfRVJST1JTLnN0eWxlU2hlZXQsIHNoZWV0LmhyZWYpO1xuICAgICAgICAgICAgICAgIENvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzaGVldCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENzc1J1bGVzKHN0eWxlU2hlZXRzKSB7XG4gICAgICBjb25zdCBjc3NSdWxlczogYW55W10gPSBbXTtcbiAgICAgIHN0eWxlU2hlZXRzLmZvckVhY2goc2hlZXQgPT4ge1xuICAgICAgICAvLyB0cnkuLi5jYXRjaCBiZWNhdXNlIGJyb3dzZXIgbWF5IG5vdCBhYmxlIHRvIGVudW1lcmF0ZSBydWxlcyBmb3IgY3Jvc3MtZG9tYWluIHNoZWV0c1xuICAgICAgICBpZiAoIXNoZWV0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBydWxlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgQ29uc29sZS5sb2coYCdDYW4ndCByZWFkIHRoZSBjc3MgcnVsZXMgb2Y6ICR7c2hlZXQuaHJlZn1gLCBlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVsZXMgJiYgdHlwZW9mIHJ1bGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhc0FycmF5KHJ1bGVzIHx8IFtdKS5mb3JFYWNoKGNzc1J1bGVzLnB1c2guYmluZChjc3NSdWxlcykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIENvbnNvbGUubG9nKGBFcnJvciB3aGlsZSByZWFkaW5nIENTUyBydWxlcyBmcm9tICR7c2hlZXQuaHJlZn1gLCBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQ29uc29sZS5sb2coJ2dldENzc1J1bGVzIGNhbiBub3QgZmluZCBjc3NSdWxlcycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjc3NSdWxlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdXZWJGb250KHdlYkZvbnRSdWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9ICh3ZWJGb250UnVsZS5wYXJlbnRTdHlsZVNoZWV0IHx8IHt9KS5ocmVmO1xuICAgICAgICAgIHJldHVybiBpbmxpbmVyLmlubGluZUFsbCh3ZWJGb250UnVsZS5jc3NUZXh0LCBiYXNlVXJsLCBudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3JjOiAoKSA9PiB3ZWJGb250UnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3SW1hZ2VzKCkge1xuICByZXR1cm4ge1xuICAgIGlubGluZUFsbCxcbiAgICBpbXBsOiB7XG4gICAgICBuZXdJbWFnZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBuZXdJbWFnZShlbGVtZW50KSB7XG4gICAgZnVuY3Rpb24gaW5saW5lKGdldCkge1xuICAgICAgaWYgKGlzRGF0YVVybChlbGVtZW50LnNyYykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50LnNyYylcbiAgICAgICAgLnRoZW4odWwgPT5cbiAgICAgICAgICB0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nID8gZ2V0KHVsKSA6IGdldEFuZEVuY29kZSh1bCwgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oZGF0YSA9PiBkYXRhQXNVcmwoZGF0YSwgbWltZVR5cGUoZWxlbWVudC5zcmMpKSlcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgZGF0YVVybCA9PlxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgIGVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5saW5lXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZUFsbChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmxpbmVCYWNrZ3JvdW5kKG5vZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBuZXdJbWFnZShub2RlKS5pbmxpbmUobnVsbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYXNBcnJheShub2RlLmNoaWxkTm9kZXMpLm1hcChjaGlsZCA9PiBpbmxpbmVBbGwoY2hpbGQpKSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5kKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZCcpO1xuXG4gICAgICBpZiAoIWJhY2tncm91bmQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmxpbmVyXG4gICAgICAgIC5pbmxpbmVBbGwoYmFja2dyb3VuZCwgbnVsbCwgbnVsbClcbiAgICAgICAgLnRoZW4oaW5saW5lZCA9PiB7XG4gICAgICAgICAgbmQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBpbmxpbmVkLCBuZC5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJykpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiBuZCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRvbXRvaW1hZ2U7XG4iXX0=
@@ -18,3 +18,6 @@ export declare function getWidth(node: any): any;
18
18
  export declare function getHeight(node: any): any;
19
19
  export declare function resolveUrl(url: any, baseUrl: any): any;
20
20
  export declare function getAndEncode(url: any, options: any): Promise<unknown>;
21
+ export declare function concatAndResolveUrl(base: any, url: any): string;
22
+ export declare function setStyleSheetBaseHref(text: any, base: any): any;
23
+ export declare function toStyleSheet(text: any): any;
package/dist/dom-utils.js CHANGED
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
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.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -42,6 +22,9 @@ exports.getWidth = getWidth;
42
22
  exports.getHeight = getHeight;
43
23
  exports.resolveUrl = resolveUrl;
44
24
  exports.getAndEncode = getAndEncode;
25
+ exports.concatAndResolveUrl = concatAndResolveUrl;
26
+ exports.setStyleSheetBaseHref = setStyleSheetBaseHref;
27
+ exports.toStyleSheet = toStyleSheet;
45
28
 
46
29
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
47
30
 
@@ -51,7 +34,11 @@ var _window = _interopRequireDefault(require("global/window"));
51
34
 
52
35
  var _document = _interopRequireDefault(require("global/document"));
53
36
 
54
- var _constants = require("@kepler.gl/constants");function processClone(original, clone) {
37
+ var _constants = require("@kepler.gl/constants");
38
+
39
+ // SPDX-License-Identifier: MIT
40
+ // Copyright contributors to the kepler.gl project
41
+ function processClone(original, clone) {
55
42
  if (!(clone instanceof _window["default"].Element)) {
56
43
  return clone;
57
44
  }
@@ -201,7 +188,6 @@ function asArray(arrayLike) {
201
188
  }
202
189
 
203
190
  function fourRandomChars() {
204
- /* see http://stackoverflow.com/a/6248722/2519373 */
205
191
  return "0000".concat((Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4);
206
192
  }
207
193
 
@@ -421,4 +407,28 @@ function getAndEncode(url, options) {
421
407
  }
422
408
  });
423
409
  }
424
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQXZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9PLFNBQVNBLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxLQUFoQyxFQUF1QztBQUM1QyxNQUFJLEVBQUVBLEtBQUssWUFBWUMsbUJBQU9DLE9BQTFCLENBQUosRUFBd0M7QUFDdEMsV0FBT0YsS0FBUDtBQUNEOztBQUVELFdBQVNHLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQXFDQyxXQUFyQyxFQUFrRDtBQUNoRCxRQUFNQyxZQUFZLEdBQUdDLE9BQU8sQ0FBQ0gsV0FBRCxDQUE1QjtBQUNBRSxJQUFBQSxZQUFZLENBQUNFLE9BQWIsQ0FBcUIsVUFBQUMsSUFBSSxFQUFJO0FBQzNCSixNQUFBQSxXQUFXLENBQUNLLFdBQVosQ0FDRUQsSUFERixFQUVFTCxXQUFXLENBQUNPLGdCQUFaLENBQTZCRixJQUE3QixDQUZGLEVBR0VMLFdBQVcsQ0FBQ1EsbUJBQVosQ0FBZ0NILElBQWhDLENBSEY7QUFLRCxLQU5EO0FBT0Q7O0FBRUQsV0FBU0ksU0FBVCxDQUFtQkMsTUFB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QWhCOztBQUNBRCxNQUFBQSxPQUFPLENBQUNFLFNBQVIsR0FBb0IsWUFBTTtBQUN4QixZQUFNNUksT0FBTyxHQUFHMEksT0FBTyxDQUFDRyxNQUFSLENBQWV0RCxLQUFmLENBQXFCLEdBQXJCLEVBQTBCLENBQTFCLENBQWhCO0FBQ0FwRSxRQUFBQSxPQUFPLENBQUNuQixPQUFELENBQVA7QUFDRCxPQUhEOztBQUlBMEksTUFBQUEsT0FBTyxDQUFDSSxhQUFSLENBQXNCbEIsT0FBTyxDQUFDbUIsUUFBOUI7QUFDRDs7QUFFRCxhQUFTZCxPQUFULEdBQW1CO0FBQ2pCLFVBQUlJLFdBQUosRUFBaUI7QUFDZmxILFFBQUFBLE9BQU8sQ0FBQ2tILFdBQUQsQ0FBUDtBQUNELE9BRkQsTUFFTztBQUNMSSxRQUFBQSxJQUFJLHNCQUFlbEIsT0FBZixrREFBOER0RSxHQUE5RCxFQUFKO0FBQ0Q7QUFDRjs7QUFFRCxhQUFTd0YsSUFBVCxDQUFjaEcsT0FBZCxFQUF1QjtBQUNyQkcsMEJBQVFvRyxLQUFSLENBQWN2RyxPQUFkOztBQUNBdEIsTUFBQUEsT0FBTyxDQUFDLEVBQUQsQ0FBUDtBQUNEO0FBQ0YsR0FuRE0sQ0FBUDtBQW9ERCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgZG9jdW1lbnQgZnJvbSAnZ2xvYmFsL2RvY3VtZW50JztcbmltcG9ydCB7SU1BR0VfRVhQT1JUX0VSUk9SU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Nsb25lKG9yaWdpbmFsLCBjbG9uZSkge1xuICBpZiAoIShjbG9uZSBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50KSkge1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZVN0eWxlLCB0YXJnZXRTdHlsZSkge1xuICAgIGNvbnN0IHByb3BlcnR5S2V5cyA9IGFzQXJyYXkoc291cmNlU3R5bGUpO1xuICAgIHByb3BlcnR5S2V5cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgdGFyZ2V0U3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNvdXJjZVN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSksXG4gICAgICAgIHNvdXJjZVN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICBpZiAoc291cmNlLmNzc1RleHQpIHtcbiAgICAgIHRhcmdldC5jc3NUZXh0ID0gc291cmNlLmNzc1RleHQ7XG4gICAgICAvLyBhZGQgYWRkaXRpb25hbCBjb3B5IG9mIGNvbXBvc2l0ZSBzdHlsZXNcbiAgICAgIGlmIChzb3VyY2UuZm9udCkge1xuICAgICAgICB0YXJnZXQuZm9udCA9IHNvdXJjZS5mb250O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVTdHlsZShvZywgY2xuKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9nKTtcbiAgICBjb3B5U3R5bGUob3JpZ2luYWxTdHlsZSwgY2xuLnN0eWxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbG4sIGVsbSwgc3RsKSB7XG4gICAgY29uc3QgZm9ybWF0Q3NzVGV4dCA9IHN0bDEgPT4ge1xuICAgICAgY29uc3QgY250ID0gc3RsMS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgICByZXR1cm4gYCR7c3RsLmNzc1RleHR9IGNvbnRlbnQ6ICR7Y250fTtgO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRQcm9wZXJ0eSA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIGAke25hbWV9OiR7c3RsLmdldFByb3BlcnR5VmFsdWUobmFtZSl9JHtcbiAgICAgICAgc3RsLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkgPyAnICFpbXBvcnRhbnQnIDogJydcbiAgICAgIH1gO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRDc3NQcm9wZXJ0aWVzID0gc3RsMiA9PiB7XG4gICAgICByZXR1cm4gYCR7YXNBcnJheShzdGwyKVxuICAgICAgICAubWFwKGZvcm1hdFByb3BlcnR5KVxuICAgICAgICAuam9pbignOyAnKX07YDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgLiR7Y2xufToke2VsbX1gO1xuICAgIGNvbnN0IGNzc1RleHQgPSBzdGwuY3NzVGV4dCA/IGZvcm1hdENzc1RleHQoc3RsKSA6IGZvcm1hdENzc1Byb3BlcnRpZXMoc3RsKTtcblxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgJHtzZWxlY3Rvcn17JHtjc3NUZXh0fX1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lUHNldWRvRWxlbWVudChvcmcsIGNsbiwgZWxlbWVudCkge1xuICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUob3JnLCBlbGVtZW50KTtcbiAgICBjb25zdCBjb250ZW50ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuXG4gICAgaWYgKGNvbnRlbnQgPT09ICcnIHx8IGNvbnRlbnQgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHVpZCgpO1xuICAgIGNsbi5jbGFzc05hbWUgPSBgJHtjbG4uY2xhc3NOYW1lfSAke2NsYXNzTmFtZX1gO1xuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbGFzc05hbWUsIGVsZW1lbnQsIHN0eWxlKSk7XG4gICAgY2xuLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnRzKFtvZywgY2xuXSkge1xuICAgIFsnOmJlZm9yZScsICc6YWZ0ZXInXS5mb3JFYWNoKGVsZW1lbnQgPT4gY2xvbmVQc2V1ZG9FbGVtZW50KG9nLCBjbG4sIGVsZW1lbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlVc2VySW5wdXQoW29nLCBjbG5dKSB7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQpIGNsbi5pbm5lckhUTUwgPSBvZy52YWx1ZTtcbiAgICBpZiAob2cgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElucHV0RWxlbWVudCkgY2xuLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBvZy52YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhTdmcoY2xuKSB7XG4gICAgaWYgKCEoY2xuIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQpKSByZXR1cm47XG4gICAgY2xuLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKTtcblxuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdSZWN0RWxlbWVudCkpIHJldHVybjtcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddLmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2xuLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICBjbG4uc3R5bGUuc2V0UHJvcGVydHkoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtvcmlnaW5hbCwgY2xvbmVdKVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lU3R5bGUob2csIGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNvcHlVc2VySW5wdXQoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBmaXhTdmcoY2xuKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiBjbG4pO1xufVxuXG4vKioqKlxuICogVVRJTFNcbiAqKioqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXkoYXJyYXlMaWtlKSB7XG4gIGNvbnN0IGFycmF5OiBhbnlbXSA9IFtdO1xuICBjb25zdCBsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBhcnJheS5wdXNoKGFycmF5TGlrZVtpXSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJSYW5kb21DaGFycygpIHtcbiAgLyogc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzYyNDg3MjIvMjUxOTM3MyAqL1xuICByZXR1cm4gYDAwMDAkeygoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDM2LCA0KSkgPDwgMCkudG9TdHJpbmcoMzYpfWAuc2xpY2UoLTQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdWlkKCkge1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHJldHVybiBgdSR7Zm91clJhbmRvbUNoYXJzKCl9JHtpbmRleCsrfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlSW1hZ2UodXJpKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZShpbWFnZSk7XG4gICAgfTtcbiAgICBpbWFnZS5vbmVycm9yID0gZXJyID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBJTUFHRV9FWFBPUlRfRVJST1JTLmRhdGFVcmk7XG4gICAgICBDb25zb2xlLmxvZyh1cmkpO1xuICAgICAgLy8gZXJyb3IgaXMgYW4gRXZlbnQgT2JqZWN0XG4gICAgICAvLyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL29ial9ldmVudC5hc3BcbiAgICAgIHJlamVjdCh7ZXZlbnQ6IGVyciwgbWVzc2FnZX0pO1xuICAgIH07XG4gICAgaW1hZ2Uuc3JjID0gdXJpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVVybCh1cmwpIHtcbiAgcmV0dXJuIHVybC5zZWFyY2goL14oZGF0YTopLykgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVuc2lvbih1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXFwuKFteXFwuXFwvXSo/KSQvZy5leGVjKHVybCk7XG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIG1pbWVzKCkge1xuICAvKlxuICAgKiBPbmx5IFdPRkYgYW5kIEVPVCBtaW1lIHR5cGVzIGZvciBmb250cyBhcmUgJ3JlYWwnXG4gICAqIHNlZSBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sXG4gICAqL1xuICBjb25zdCBXT0ZGID0gJ2FwcGxpY2F0aW9uL2ZvbnQtd29mZic7XG4gIGNvbnN0IEpQRUcgPSAnaW1hZ2UvanBlZyc7XG5cbiAgcmV0dXJuIHtcbiAgICB3b2ZmOiBXT0ZGLFxuICAgIHdvZmYyOiBXT0ZGLFxuICAgIHR0ZjogJ2FwcGxpY2F0aW9uL2ZvbnQtdHJ1ZXR5cGUnLFxuICAgIGVvdDogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcbiAgICBwbmc6ICdpbWFnZS9wbmcnLFxuICAgIGpwZzogSlBFRyxcbiAgICBqcGVnOiBKUEVHLFxuICAgIGdpZjogJ2ltYWdlL2dpZicsXG4gICAgdGlmZjogJ2ltYWdlL3RpZmYnLFxuICAgIHN2ZzogJ2ltYWdlL3N2Zyt4bWwnXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW1lVHlwZSh1cmwpIHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gcGFyc2VFeHRlbnNpb24odXJsKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbWltZXMoKVtleHRlbnNpb25dIHx8ICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YUFzVXJsKGNvbnRlbnQsIHR5cGUpIHtcbiAgcmV0dXJuIGBkYXRhOiR7dHlwZX07YmFzZTY0LCR7Y29udGVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP14ke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgcmV0dXJuIGFyZyA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKGFyZyk7XG4gICAgICB9LCBtcyk7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NyY0FzRGF0YVVybCh0ZXh0KSB7XG4gIGNvbnN0IERBVEFfVVJMX1JFR0VYID0gL3VybFxcKFsnXCJdPyhkYXRhOikoW14nXCJdKz8pWydcIl0/XFwpLztcblxuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuIl19
410
+
411
+ function concatAndResolveUrl(base, url) {
412
+ return new URL(url, base).href;
413
+ } // Set relative URL in stylesheet to absolute url
414
+
415
+
416
+ function setStyleSheetBaseHref(text, base) {
417
+ function addBaseHrefToUrl(match, p1) {
418
+ var url = /^http/i.test(p1) ? p1 : concatAndResolveUrl(base, p1);
419
+ return "url('".concat(url, "')");
420
+ }
421
+
422
+ return isSrcAsDataUrl(text) ? text : text.replace(/url\(['"]?([^'"]+?)['"]?\)/g, addBaseHrefToUrl);
423
+ }
424
+
425
+ function toStyleSheet(text) {
426
+ var doc = _document["default"].implementation.createHTMLDocument('');
427
+
428
+ var styleElement = _document["default"].createElement('style');
429
+
430
+ styleElement.textContent = text;
431
+ doc.body.appendChild(styleElement);
432
+ return styleElement.sheet;
433
+ }
434
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJVUkwiLCJzZXRTdHlsZVNoZWV0QmFzZUhyZWYiLCJhZGRCYXNlSHJlZlRvVXJsIiwicDEiLCJ0b1N0eWxlU2hlZXQiLCJ0ZXh0Q29udGVudCIsInNoZWV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFOQTtBQUNBO0FBT08sU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUksRUFBRUEsS0FBSyxZQUFZQyxtQkFBT0MsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPRixLQUFQO0FBQ0Q7O0FBRUQsV0FBU0csY0FBVCxDQUF3QkMsV0FBeEIsRUFBcUNDLFdBQXJDLEVBQWtEO0FBQ2hELFFBQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDSCxXQUFELENBQTVCO0FBQ0FFLElBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQixVQUFBQyxJQUFJLEVBQUk7QUFDM0JKLE1BQUFBLFdBQVcsQ0FBQ0ssV0FBWixDQUNFRCxJQURGLEVBRUVMLFdBQVcsQ0FBQ08sZ0JBQVosQ0FBNkJGLElBQTdCLENBRkYsRUFHRUwsV0FBVyxDQUFDUSxtQkFBWixDQUFnQ0gsSUFBaEMsQ0FIRjtBQUtELEtBTkQ7QUFP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OztBQUNELFNBQU84QixjQUFjLENBQUNDLElBQUQsQ0FBZCxHQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQ04sT0FBTCxDQUFhLDZCQUFiLEVBQTRDMEUsZ0JBQTVDLENBRko7QUFHRDs7QUFFTSxTQUFTRSxZQUFULENBQXNCdEUsSUFBdEIsRUFBNEI7QUFDakMsTUFBTTZCLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLENBQTJDLEVBQTNDLENBQVo7O0FBQ0EsTUFBTTVHLFlBQVksR0FBR1IscUJBQVNTLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBckI7O0FBRUFELEVBQUFBLFlBQVksQ0FBQ29KLFdBQWIsR0FBMkJ2RSxJQUEzQjtBQUNBNkIsRUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM5RyxXQUFULENBQXFCRixZQUFyQjtBQUVBLFNBQU9BLFlBQVksQ0FBQ3FKLEtBQXBCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgaWYgKCEoY2xvbmUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2VTdHlsZSwgdGFyZ2V0U3R5bGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBhc0FycmF5KHNvdXJjZVN0eWxlKTtcbiAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB7XG4gICAgICB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29weSBvZiBjb21wb3NpdGUgc3R5bGVzXG4gICAgICBpZiAoc291cmNlLmZvbnQpIHtcbiAgICAgICAgdGFyZ2V0LmZvbnQgPSBzb3VyY2UuZm9udDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lU3R5bGUob2csIGNsbikge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvZyk7XG4gICAgY29weVN0eWxlKG9yaWdpbmFsU3R5bGUsIGNsbi5zdHlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xuLCBlbG0sIHN0bCkge1xuICAgIGNvbnN0IGZvcm1hdENzc1RleHQgPSBzdGwxID0+IHtcbiAgICAgIGNvbnN0IGNudCA9IHN0bDEuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgICAgcmV0dXJuIGAke3N0bC5jc3NUZXh0fSBjb250ZW50OiAke2NudH07YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0UHJvcGVydHkgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBgJHtuYW1lfToke3N0bC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpfSR7XG4gICAgICAgIHN0bC5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpID8gJyAhaW1wb3J0YW50JyA6ICcnXG4gICAgICB9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0Q3NzUHJvcGVydGllcyA9IHN0bDIgPT4ge1xuICAgICAgcmV0dXJuIGAke2FzQXJyYXkoc3RsMilcbiAgICAgICAgLm1hcChmb3JtYXRQcm9wZXJ0eSlcbiAgICAgICAgLmpvaW4oJzsgJyl9O2A7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke2Nsbn06JHtlbG19YDtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RsLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0bCkgOiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0bCk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7c2VsZWN0b3J9eyR7Y3NzVGV4dH19YCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnQob3JnLCBjbG4sIGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yZywgZWxlbWVudCk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB1aWQoKTtcbiAgICBjbG4uY2xhc3NOYW1lID0gYCR7Y2xuLmNsYXNzTmFtZX0gJHtjbGFzc05hbWV9YDtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgIGNsbi5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pIHtcbiAgICBbJzpiZWZvcmUnLCAnOmFmdGVyJ10uZm9yRWFjaChlbGVtZW50ID0+IGNsb25lUHNldWRvRWxlbWVudChvZywgY2xuLCBlbGVtZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KFtvZywgY2xuXSkge1xuICAgIGlmIChvZyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50KSBjbG4uaW5uZXJIVE1MID0gb2cudmFsdWU7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJbnB1dEVsZW1lbnQpIGNsbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2cudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZml4U3ZnKGNsbikge1xuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KSkgcmV0dXJuO1xuICAgIGNsbi5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBpZiAoIShjbG4gaW5zdGFuY2VvZiB3aW5kb3cuU1ZHUmVjdEVsZW1lbnQpKSByZXR1cm47XG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNsbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgY2xuLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbb3JpZ2luYWwsIGNsb25lXSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjbG9uZVN0eWxlKG9nLCBjbG4pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lUHNldWRvRWxlbWVudHMoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjb3B5VXNlcklucHV0KFtvZywgY2xuXSk7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgZml4U3ZnKGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4gY2xuKTtcbn1cblxuLyoqKipcbiAqIFVUSUxTXG4gKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICBjb25zdCBhcnJheTogYW55W10gPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIENvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCB1cmwpIHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuXG4vLyBTZXQgcmVsYXRpdmUgVVJMIGluIHN0eWxlc2hlZXQgdG8gYWJzb2x1dGUgdXJsXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIGJhc2UpIHtcbiAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgfVxuICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICA/IHRleHRcbiAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xufVxuIl19
@@ -0,0 +1,23 @@
1
+ import { PostProcessEffect } from '@deck.gl/core/typed';
2
+ import { VisState } from '@kepler.gl/schemas';
3
+ import { MapState, Effect, EffectProps, EffectDescription } from '@kepler.gl/types';
4
+ export declare function computeDeckEffects({ visState, mapState }: {
5
+ visState: VisState;
6
+ mapState: MapState;
7
+ }): PostProcessEffect[];
8
+ /**
9
+ * Always keep light & shadow effect at the top
10
+ */
11
+ export declare const fixEffectOrder: (effects: Effect[], effectOrder: string[]) => string[];
12
+ export declare function reorderEffectOrder(effectOrder: string[], originEffectId: string, destinationEffectId: string): string[];
13
+ /**
14
+ * Validates parameters for an effect, clamps numbers to allowed ranges
15
+ * or applies default values in case of wrong non-numeric values.
16
+ * All unknown properties aren't modified.
17
+ * @param parameters Parameters candidate for an effect.
18
+ * @param effectDescription Description of an effect.
19
+ * @returns
20
+ */
21
+ export declare function validateEffectParameters(parameters: {
22
+ [key: string]: any;
23
+ } | undefined, effectDescription: EffectDescription['parameters']): EffectProps['parameters'];