@kepler.gl/components 3.3.0-alpha.7 → 3.3.0-alpha.9

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 (111) hide show
  1. package/dist/cjs/common/data-table/grid.js +2 -2
  2. package/dist/cjs/common/data-table/index.js +3 -3
  3. package/dist/cjs/common/file-uploader/file-upload.js +251 -40
  4. package/dist/cjs/common/icons/circle.js +54 -0
  5. package/dist/cjs/common/icons/index.js +8 -1
  6. package/dist/cjs/common/item-selector/item-selector.js +2 -2
  7. package/dist/cjs/common/portaled.js +3 -3
  8. package/dist/cjs/common/time-range-slider.js +2 -2
  9. package/dist/cjs/common/timeline-slider.js +2 -2
  10. package/dist/cjs/editor/editor.js +2 -2
  11. package/dist/cjs/effects/effect-configurator.js +2 -2
  12. package/dist/cjs/effects/effect-manager.js +32 -17
  13. package/dist/cjs/effects/effect-time-configurator.js +110 -42
  14. package/dist/cjs/filters/filter-panels/polygon-filter-panel.js +2 -2
  15. package/dist/cjs/filters/time-widget.js +2 -2
  16. package/dist/cjs/kepler-gl.js +6 -2
  17. package/dist/cjs/map/layer-hover-info.js +2 -2
  18. package/dist/cjs/map/map-control.js +2 -2
  19. package/dist/cjs/map/map-draw-panel.js +10 -1
  20. package/dist/cjs/map-container.js +2 -2
  21. package/dist/cjs/map-view-state-context.js +3 -3
  22. package/dist/cjs/modal-container.js +2 -2
  23. package/dist/cjs/modals/cloud-components/cloud-storage-disclaimer.js +24 -0
  24. package/dist/cjs/modals/cloud-tile.js +39 -10
  25. package/dist/cjs/modals/export-map-modal/components.js +16 -7
  26. package/dist/cjs/modals/export-map-modal/export-html-map.js +5 -9
  27. package/dist/cjs/modals/export-map-modal/export-json-map.js +4 -8
  28. package/dist/cjs/modals/export-map-modal/export-map-modal.js +21 -16
  29. package/dist/cjs/modals/image-modal-container.js +2 -2
  30. package/dist/cjs/modals/load-data-modal.js +3 -3
  31. package/dist/cjs/modals/load-storage-map.js +9 -6
  32. package/dist/cjs/modals/save-map-modal.js +4 -3
  33. package/dist/cjs/modals/share-map-modal.js +5 -4
  34. package/dist/cjs/modals/swipe-export-video-preview.js +2 -2
  35. package/dist/cjs/notification-panel/notification-item.js +58 -12
  36. package/dist/cjs/plot-container.js +12 -5
  37. package/dist/cjs/remote-dataset-refresh-controller.js +50 -0
  38. package/dist/cjs/side-panel/common/dataset-info.js +187 -8
  39. package/dist/cjs/side-panel/common/dataset-refresh-progress.js +63 -0
  40. package/dist/cjs/side-panel/common/dataset-title.js +76 -13
  41. package/dist/cjs/side-panel/common/source-data-catalog.js +31 -6
  42. package/dist/cjs/side-panel/filter-manager.js +7 -3
  43. package/dist/cjs/side-panel/filter-panel/filter-panel.js +2 -2
  44. package/dist/cjs/side-panel/layer-manager.js +14 -4
  45. package/dist/cjs/side-panel/layer-panel/custom-palette.js +2 -2
  46. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +14 -4
  47. package/dist/cjs/side-panel/layer-panel/dataset-section.js +7 -3
  48. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +49 -35
  49. package/dist/cjs/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
  50. package/dist/common/icons/circle.d.ts +10 -0
  51. package/dist/common/icons/index.d.ts +1 -0
  52. package/dist/effects/effect-manager.d.ts +1 -1
  53. package/dist/esm/common/data-table/grid.js +2 -2
  54. package/dist/esm/common/data-table/index.js +3 -3
  55. package/dist/esm/common/file-uploader/file-upload.js +252 -41
  56. package/dist/esm/common/icons/circle.js +48 -0
  57. package/dist/esm/common/icons/index.js +2 -1
  58. package/dist/esm/common/item-selector/item-selector.js +2 -2
  59. package/dist/esm/common/portaled.js +3 -3
  60. package/dist/esm/common/time-range-slider.js +2 -2
  61. package/dist/esm/common/timeline-slider.js +2 -2
  62. package/dist/esm/editor/editor.js +2 -2
  63. package/dist/esm/effects/effect-configurator.js +2 -2
  64. package/dist/esm/effects/effect-manager.js +34 -19
  65. package/dist/esm/effects/effect-time-configurator.js +111 -43
  66. package/dist/esm/filters/filter-panels/polygon-filter-panel.js +2 -2
  67. package/dist/esm/filters/time-widget.js +2 -2
  68. package/dist/esm/kepler-gl.js +6 -2
  69. package/dist/esm/map/layer-hover-info.js +2 -2
  70. package/dist/esm/map/map-control.js +2 -2
  71. package/dist/esm/map/map-draw-panel.js +11 -2
  72. package/dist/esm/map-container.js +2 -2
  73. package/dist/esm/map-view-state-context.js +3 -3
  74. package/dist/esm/modal-container.js +2 -2
  75. package/dist/esm/modals/cloud-components/cloud-storage-disclaimer.js +19 -0
  76. package/dist/esm/modals/cloud-tile.js +39 -10
  77. package/dist/esm/modals/export-map-modal/components.js +16 -7
  78. package/dist/esm/modals/export-map-modal/export-html-map.js +6 -10
  79. package/dist/esm/modals/export-map-modal/export-json-map.js +5 -9
  80. package/dist/esm/modals/export-map-modal/export-map-modal.js +21 -14
  81. package/dist/esm/modals/image-modal-container.js +2 -2
  82. package/dist/esm/modals/load-data-modal.js +3 -3
  83. package/dist/esm/modals/load-storage-map.js +8 -3
  84. package/dist/esm/modals/save-map-modal.js +4 -3
  85. package/dist/esm/modals/share-map-modal.js +5 -4
  86. package/dist/esm/modals/swipe-export-video-preview.js +2 -2
  87. package/dist/esm/notification-panel/notification-item.js +60 -14
  88. package/dist/esm/plot-container.js +12 -5
  89. package/dist/esm/remote-dataset-refresh-controller.js +44 -0
  90. package/dist/esm/side-panel/common/dataset-info.js +186 -9
  91. package/dist/esm/side-panel/common/dataset-refresh-progress.js +56 -0
  92. package/dist/esm/side-panel/common/dataset-title.js +77 -14
  93. package/dist/esm/side-panel/common/source-data-catalog.js +29 -6
  94. package/dist/esm/side-panel/filter-manager.js +7 -3
  95. package/dist/esm/side-panel/filter-panel/filter-panel.js +2 -2
  96. package/dist/esm/side-panel/layer-manager.js +14 -4
  97. package/dist/esm/side-panel/layer-panel/custom-palette.js +2 -2
  98. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +14 -4
  99. package/dist/esm/side-panel/layer-panel/dataset-section.js +7 -3
  100. package/dist/esm/side-panel/layer-panel/layer-configurator.js +49 -35
  101. package/dist/esm/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
  102. package/dist/kepler-gl.d.ts +1 -0
  103. package/dist/modals/cloud-components/cloud-storage-disclaimer.d.ts +2 -0
  104. package/dist/modals/export-map-modal/components.d.ts +14 -0
  105. package/dist/remote-dataset-refresh-controller.d.ts +11 -0
  106. package/dist/side-panel/common/dataset-info.d.ts +10 -0
  107. package/dist/side-panel/common/dataset-refresh-progress.d.ts +11 -0
  108. package/dist/side-panel/common/dataset-title.d.ts +5 -0
  109. package/dist/side-panel/common/source-data-catalog.d.ts +3 -0
  110. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -0
  111. package/package.json +17 -18
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = exports.WarningMsg = exports.FileUpload = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -21,21 +23,24 @@ var _uploadButton = _interopRequireDefault(require("./upload-button"));
21
23
  var _icons = require("../icons");
22
24
  var _fileUploadProgress = _interopRequireDefault(require("./file-upload-progress"));
23
25
  var _fileDrop = _interopRequireDefault(require("./file-drop"));
24
- var _utils = require("@kepler.gl/utils");
25
26
  var _constants = require("@kepler.gl/constants");
26
- var _markdownToJsx = _interopRequireDefault(require("markdown-to-jsx"));
27
27
  var _localization = require("@kepler.gl/localization");
28
+ var _processors = require("@kepler.gl/processors");
28
29
  var _styles = require("@kepler.gl/styles");
30
+ var _utils = require("@kepler.gl/utils");
31
+ var _markdownToJsx = _interopRequireDefault(require("markdown-to-jsx"));
32
+ var _styledComponents2 = require("../styled-components");
29
33
  var _linkRenderer = _interopRequireDefault(require("../link-renderer"));
30
34
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject0, _templateObject1, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16; // SPDX-License-Identifier: MIT
31
35
  // Copyright contributors to the kepler.gl project
32
- // Breakpoints
33
36
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
34
37
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
35
38
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
36
39
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
37
40
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
38
41
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
42
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
43
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
39
44
  var fileIconColor = '#D3D8E0';
40
45
  var StyledUploadMessage = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n margin-bottom: 12px;\n\n ", ";\n"])), function (props) {
41
46
  return props.theme.textColorLT;
@@ -43,22 +48,53 @@ var StyledUploadMessage = _styledComponents["default"].div(_templateObject || (_
43
48
  var WarningMsg = exports.WarningMsg = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 10px;\n color: ", ";\n font-weight: 500;\n"])), function (props) {
44
49
  return props.theme.errorColor;
45
50
  });
46
- var StyledFileDrop = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: white;\n border-radius: 4px;\n border-style: ", ";\n border-width: 1px;\n border-color: ", ";\n text-align: center;\n width: 100%;\n padding: 48px 8px 0;\n height: 360px;\n\n .file-upload-or {\n color: ", ";\n padding-right: 4px;\n }\n\n .file-type-row {\n opacity: 0.5;\n }\n ", ";\n"])), function (props) {
51
+ var StyledFileDrop = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: white;\n border-radius: 4px;\n border-style: ", ";\n border-width: 1px;\n border-color: ", ";\n text-align: center;\n width: 100%;\n min-height: 360px;\n padding: 24px 12px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .file-type-row {\n opacity: 0.5;\n }\n ", ";\n"])), function (props) {
47
52
  return props.$dragOver ? 'solid' : 'dashed';
48
53
  }, function (props) {
49
54
  return props.$dragOver ? props.theme.textColorLT : props.theme.subtextColorLT;
55
+ }, _styles.media.portable(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 16px 8px 12px;\n min-height: 280px;\n "]))));
56
+ var StyledDropBody = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 1;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-evenly;\n"])));
57
+ var StyledActionLine = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n\n .upload-button {\n font-size: 14px;\n font-weight: 600;\n color: ", ";\n text-decoration: none;\n }\n"])), function (props) {
58
+ return props.theme.modalTitleColor;
50
59
  }, function (props) {
51
60
  return props.theme.linkBtnColor;
52
- }, _styles.media.portable(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 16px 4px 0;\n "]))));
53
- var MsgWrapper = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 20px;\n height: 36px;\n"])), function (props) {
54
- return props.theme.modalTitleColor;
55
61
  });
56
- var StyledDragNDropIcon = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n margin-bottom: 48px;\n\n display: flex;\n justify-content: center;\n\n ", ";\n ", ";\n"])), fileIconColor, _styles.media.portable(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 16px;\n "]))), _styles.media.palm(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 8px;\n "]))));
57
- var StyledFileTypeFow = _styledComponents["default"].div(_templateObject0 || (_templateObject0 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 24px;\n ", ";\n ", ";\n"])), _styles.media.portable(_templateObject1 || (_templateObject1 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 16px;\n "]))), _styles.media.palm(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 8px;\n "]))));
58
- var StyledFileUpload = _styledComponents["default"].div(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n .file-drop {\n position: relative;\n }\n"])));
59
- var StyledMessage = _styledComponents["default"].div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 32px;\n\n .loading-action {\n margin-right: 10px;\n }\n .loading-spinner {\n margin-left: 10px;\n }\n"])));
60
- var StyledDragFileWrapper = _styledComponents["default"].div(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 32px;\n ", ";\n ", ";\n"])), _styles.media.portable(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 24px;\n "]))), _styles.media.portable(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 16px;\n "]))));
61
- var StyledDisclaimer = (0, _styledComponents["default"])(StyledMessage)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0 auto;\n"])));
62
+ var StyledDragNDropIcon = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n"])), fileIconColor);
63
+ var StyledFileTypeFow = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n"])));
64
+ var StyledFileUpload = _styledComponents["default"].div(_templateObject0 || (_templateObject0 = (0, _taggedTemplateLiteral2["default"])(["\n .file-drop {\n position: relative;\n }\n"])));
65
+ var StyledMessage = _styledComponents["default"].div(_templateObject1 || (_templateObject1 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 32px;\n\n .loading-action {\n margin-right: 10px;\n }\n .loading-spinner {\n margin-left: 10px;\n }\n"])));
66
+ var StyledDragFileWrapper = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n"])));
67
+ var StyledDisclaimer = (0, _styledComponents["default"])(StyledMessage)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n flex-shrink: 0;\n margin: 12px 12px 0;\n"])));
68
+ var StyledRemoteUrlForm = _styledComponents["default"].div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n width: 100%;\n max-width: 420px;\n margin: 8px auto 0;\n"])));
69
+ var StyledRemoteUrlRow = _styledComponents["default"].div(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: stretch;\n justify-content: center;\n width: 100%;\n"])));
70
+ var StyledRemoteUrlInput = (0, _styledComponents["default"])(_styledComponents2.InputLight)(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 1;\n min-width: 0;\n max-width: 300px;\n"])));
71
+ var StyledRemoteFormatSelect = _styledComponents["default"].select(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n width: 88px;\n flex-shrink: 0;\n height: auto;\n box-sizing: border-box;\n padding: 0 6px;\n cursor: pointer;\n"])), function (props) {
72
+ return props.theme.inputLT;
73
+ });
74
+ var StyledRemoteFetchButton = (0, _styledComponents["default"])(_styledComponents2.Button)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["\n height: auto;\n box-sizing: border-box;\n padding: 0 12px;\n flex-shrink: 0;\n"])));
75
+ var REMOTE_DOWNLOAD_SHARE = 0.85;
76
+ function scaleFileProgress(progress, start, end) {
77
+ return Object.keys(progress).reduce(function (accu, key) {
78
+ var item = progress[key];
79
+ accu[key] = _objectSpread(_objectSpread({}, item), {}, {
80
+ percent: start + (item.percent || 0) * (end - start)
81
+ });
82
+ return accu;
83
+ }, {});
84
+ }
85
+ function getCombinedLoadProgress(_ref) {
86
+ var fileLoading = _ref.fileLoading,
87
+ fileLoadingProgress = _ref.fileLoadingProgress,
88
+ remoteProgress = _ref.remoteProgress;
89
+ var isRemoteFetch = Object.keys(remoteProgress).length > 0;
90
+ if (!isRemoteFetch) {
91
+ return fileLoadingProgress;
92
+ }
93
+ if (fileLoading) {
94
+ return scaleFileProgress(fileLoadingProgress, REMOTE_DOWNLOAD_SHARE, 1);
95
+ }
96
+ return scaleFileProgress(remoteProgress, 0, REMOTE_DOWNLOAD_SHARE);
97
+ }
62
98
  function FileUploadFactory() {
63
99
  /** @augments {Component<FileUploadProps>} */
64
100
  var FileUpload = /*#__PURE__*/function (_Component) {
@@ -73,7 +109,12 @@ function FileUploadFactory() {
73
109
  dragOver: false,
74
110
  fileLoading: false,
75
111
  files: [],
76
- errorFiles: []
112
+ errorFiles: [],
113
+ remoteUrl: '',
114
+ remoteFormat: 'auto',
115
+ remoteError: null,
116
+ remoteLoading: false,
117
+ remoteProgress: {}
77
118
  });
78
119
  (0, _defineProperty2["default"])(_this, "frame", /*#__PURE__*/(0, _react.createRef)());
79
120
  (0, _defineProperty2["default"])(_this, "_isValidFileType", function (filename) {
@@ -126,6 +167,122 @@ function FileUploadFactory() {
126
167
  dragOver: newState
127
168
  });
128
169
  });
170
+ (0, _defineProperty2["default"])(_this, "_onRemoteUrlChange", function (event) {
171
+ var remoteUrl = event.target.value;
172
+ _this.setState({
173
+ remoteUrl: remoteUrl,
174
+ remoteError: remoteUrl && !(0, _processors.isRemoteDatasetUrl)(remoteUrl) ? {
175
+ message: 'Incorrect URL'
176
+ } : null
177
+ });
178
+ });
179
+ (0, _defineProperty2["default"])(_this, "_onRemoteFormatChange", function (event) {
180
+ _this.setState({
181
+ remoteFormat: event.target.value
182
+ });
183
+ });
184
+ (0, _defineProperty2["default"])(_this, "_onRemoteUrlKeyDown", function (event) {
185
+ if (event.key === 'Enter') {
186
+ event.preventDefault();
187
+ _this._handleLoadRemoteFile();
188
+ }
189
+ });
190
+ (0, _defineProperty2["default"])(_this, "_handleLoadRemoteFile", /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
191
+ var _this$state, remoteUrl, remoteFormat, remoteError, intl, showFormatSelector, format, fileName, downloading, lastUpdate, file;
192
+ return _regenerator["default"].wrap(function _callee$(_context) {
193
+ while (1) switch (_context.prev = _context.next) {
194
+ case 0:
195
+ _this$state = _this.state, remoteUrl = _this$state.remoteUrl, remoteFormat = _this$state.remoteFormat, remoteError = _this$state.remoteError;
196
+ intl = _this.props.intl;
197
+ showFormatSelector = (0, _utils.getApplicationConfig)().enableRemoteFileFormatSelector;
198
+ format = showFormatSelector && remoteFormat !== 'auto' ? remoteFormat : undefined;
199
+ if (!(!remoteUrl || remoteError || _this.state.remoteLoading)) {
200
+ _context.next = 7;
201
+ break;
202
+ }
203
+ if (!remoteUrl) {
204
+ _this.setState({
205
+ remoteError: {
206
+ message: 'Incorrect URL'
207
+ }
208
+ });
209
+ }
210
+ return _context.abrupt("return");
211
+ case 7:
212
+ if ((0, _processors.isRemoteDatasetUrl)(remoteUrl)) {
213
+ _context.next = 10;
214
+ break;
215
+ }
216
+ _this.setState({
217
+ remoteError: {
218
+ message: 'Incorrect URL'
219
+ }
220
+ });
221
+ return _context.abrupt("return");
222
+ case 10:
223
+ fileName = (0, _processors.getFileNameForRemoteUrl)(remoteUrl, format);
224
+ downloading = intl.formatMessage({
225
+ id: 'fileUploader.downloading'
226
+ });
227
+ _this.setState({
228
+ remoteLoading: true,
229
+ remoteError: null,
230
+ remoteProgress: (0, _defineProperty2["default"])({}, fileName, {
231
+ fileName: fileName,
232
+ percent: 0,
233
+ message: downloading,
234
+ error: null
235
+ })
236
+ });
237
+ _context.prev = 13;
238
+ lastUpdate = 0;
239
+ _context.next = 17;
240
+ return (0, _processors.fetchRemoteFileAsKeplerFile)(remoteUrl, format, function (_ref3) {
241
+ var percent = _ref3.percent;
242
+ var now = Date.now();
243
+ if (percent < 1 && now - lastUpdate < 100) {
244
+ return;
245
+ }
246
+ lastUpdate = now;
247
+ _this.setState(function (prev) {
248
+ var name = Object.keys(prev.remoteProgress)[0] || fileName;
249
+ return {
250
+ remoteProgress: (0, _defineProperty2["default"])({}, name, {
251
+ fileName: name,
252
+ percent: percent,
253
+ message: downloading,
254
+ error: null
255
+ })
256
+ };
257
+ });
258
+ });
259
+ case 17:
260
+ file = _context.sent;
261
+ _this.setState({
262
+ files: [file],
263
+ errorFiles: [],
264
+ dragOver: false
265
+ }, function () {
266
+ return _this.props.onFileUpload([file]);
267
+ });
268
+ _context.next = 24;
269
+ break;
270
+ case 21:
271
+ _context.prev = 21;
272
+ _context.t0 = _context["catch"](13);
273
+ _this.setState({
274
+ remoteLoading: false,
275
+ remoteProgress: {},
276
+ remoteError: {
277
+ message: _context.t0 instanceof Error ? _context.t0.message : "Failed to load ".concat(remoteUrl)
278
+ }
279
+ });
280
+ case 24:
281
+ case "end":
282
+ return _context.stop();
283
+ }
284
+ }, _callee, null, [[13, 21]]);
285
+ })));
129
286
  return _this;
130
287
  }
131
288
  (0, _inherits2["default"])(FileUpload, _Component);
@@ -133,10 +290,15 @@ function FileUploadFactory() {
133
290
  key: "render",
134
291
  value: function render() {
135
292
  var _this2 = this;
136
- var _this$state = this.state,
137
- dragOver = _this$state.dragOver,
138
- files = _this$state.files,
139
- errorFiles = _this$state.errorFiles;
293
+ var _this$state2 = this.state,
294
+ dragOver = _this$state2.dragOver,
295
+ files = _this$state2.files,
296
+ errorFiles = _this$state2.errorFiles,
297
+ remoteUrl = _this$state2.remoteUrl,
298
+ remoteFormat = _this$state2.remoteFormat,
299
+ remoteError = _this$state2.remoteError,
300
+ remoteLoading = _this$state2.remoteLoading,
301
+ remoteProgress = _this$state2.remoteProgress;
140
302
  var _this$props = this.props,
141
303
  fileLoading = _this$props.fileLoading,
142
304
  fileLoadingProgress = _this$props.fileLoadingProgress,
@@ -147,6 +309,7 @@ function FileUploadFactory() {
147
309
  fileExtensions = _this$props2$fileExte === void 0 ? [] : _this$props2$fileExte,
148
310
  _this$props2$fileForm = _this$props2.fileFormatNames,
149
311
  fileFormatNames = _this$props2$fileForm === void 0 ? [] : _this$props2$fileForm;
312
+ var showFormatSelector = (0, _utils.getApplicationConfig)().enableRemoteFileFormatSelector;
150
313
  var fileUploadInfoText = "".concat(intl.formatMessage({
151
314
  id: 'fileUploader.configUploadMessage'
152
315
  }, {
@@ -179,7 +342,7 @@ function FileUploadFactory() {
179
342
  }
180
343
  }, fileUploadInfoText)), /*#__PURE__*/_react["default"].createElement(StyledFileDrop, {
181
344
  $dragOver: dragOver
182
- }, /*#__PURE__*/_react["default"].createElement(StyledFileTypeFow, {
345
+ }, /*#__PURE__*/_react["default"].createElement(StyledDropBody, null, /*#__PURE__*/_react["default"].createElement(StyledFileTypeFow, {
183
346
  className: "file-type-row"
184
347
  }, fileExtensions.map(function (ext) {
185
348
  return /*#__PURE__*/_react["default"].createElement(_icons.FileType, {
@@ -188,34 +351,78 @@ function FileUploadFactory() {
188
351
  height: "50px",
189
352
  fontSize: "9px"
190
353
  });
191
- })), fileLoading ? /*#__PURE__*/_react["default"].createElement(_fileUploadProgress["default"], {
192
- fileLoadingProgress: fileLoadingProgress,
354
+ })), fileLoading || remoteLoading ? /*#__PURE__*/_react["default"].createElement(_fileUploadProgress["default"], {
355
+ fileLoadingProgress: getCombinedLoadProgress({
356
+ fileLoading: fileLoading,
357
+ fileLoadingProgress: fileLoadingProgress,
358
+ remoteProgress: remoteProgress
359
+ }),
193
360
  theme: theme
194
- }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
361
+ }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledDragNDropIcon, {
195
362
  style: {
196
363
  opacity: dragOver ? 0.5 : 1
197
364
  },
198
365
  className: "file-upload-display-message"
199
- }, /*#__PURE__*/_react["default"].createElement(StyledDragNDropIcon, null, /*#__PURE__*/_react["default"].createElement(_icons.DragNDrop, {
200
- height: "44px"
201
- })), errorFiles.length ? /*#__PURE__*/_react["default"].createElement(WarningMsg, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
366
+ }, /*#__PURE__*/_react["default"].createElement(_icons.DragNDrop, {
367
+ height: "36px"
368
+ }), errorFiles.length ? /*#__PURE__*/_react["default"].createElement(WarningMsg, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
202
369
  id: 'fileUploader.fileNotSupported',
203
370
  values: {
204
371
  errorFiles: errorFiles.join(', ')
205
372
  }
206
- })) : null), !files.length ? /*#__PURE__*/_react["default"].createElement(StyledDragFileWrapper, null, /*#__PURE__*/_react["default"].createElement(MsgWrapper, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
207
- id: 'fileUploader.message'
208
- })), /*#__PURE__*/_react["default"].createElement("span", {
209
- className: "file-upload-or"
210
- }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
211
- id: 'fileUploader.or'
212
- })), /*#__PURE__*/_react["default"].createElement(_uploadButton["default"], {
213
- onUpload: this._handleFileInput
373
+ })) : null), !files.length ? /*#__PURE__*/_react["default"].createElement(StyledDragFileWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledActionLine, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
374
+ id: 'fileUploader.dropMessage',
375
+ values: {
376
+ browse: /*#__PURE__*/_react["default"].createElement(_uploadButton["default"], {
377
+ key: "browse",
378
+ onUpload: this._handleFileInput
379
+ }, intl.formatMessage({
380
+ id: 'fileUploader.browseFiles'
381
+ }))
382
+ }
383
+ })), /*#__PURE__*/_react["default"].createElement(StyledRemoteUrlForm, {
384
+ className: "file-uploader__remote-url",
385
+ onClick: function onClick(event) {
386
+ return event.stopPropagation();
387
+ }
388
+ }, /*#__PURE__*/_react["default"].createElement(StyledRemoteUrlRow, null, /*#__PURE__*/_react["default"].createElement(StyledRemoteUrlInput, {
389
+ type: "url",
390
+ value: remoteUrl,
391
+ "aria-label": intl.formatMessage({
392
+ id: 'fileUploader.urlPlaceholder'
393
+ }),
394
+ placeholder: intl.formatMessage({
395
+ id: 'fileUploader.urlPlaceholder'
396
+ }),
397
+ onChange: this._onRemoteUrlChange,
398
+ onKeyDown: this._onRemoteUrlKeyDown,
399
+ disabled: remoteLoading
400
+ }), showFormatSelector ? /*#__PURE__*/_react["default"].createElement(StyledRemoteFormatSelect, {
401
+ className: "file-uploader__remote-format",
402
+ "aria-label": intl.formatMessage({
403
+ id: 'fileUploader.format'
404
+ }),
405
+ value: remoteFormat,
406
+ onChange: this._onRemoteFormatChange,
407
+ disabled: remoteLoading
408
+ }, _constants.REMOTE_FILE_FORMATS.map(function (format) {
409
+ return /*#__PURE__*/_react["default"].createElement("option", {
410
+ key: format,
411
+ value: format
412
+ }, format === 'auto' ? intl.formatMessage({
413
+ id: 'fileUploader.formatAuto'
414
+ }) : format.toUpperCase());
415
+ })) : null, /*#__PURE__*/_react["default"].createElement(StyledRemoteFetchButton, {
416
+ type: "button",
417
+ cta: true,
418
+ small: true,
419
+ disabled: !remoteUrl || remoteLoading,
420
+ onClick: this._handleLoadRemoteFile
214
421
  }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
215
- id: 'fileUploader.browseFiles'
216
- }))) : null, /*#__PURE__*/_react["default"].createElement(StyledDisclaimer, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
422
+ id: 'fileUploader.fetch'
423
+ }))), remoteError ? /*#__PURE__*/_react["default"].createElement(WarningMsg, null, remoteError.message) : null)) : null)), fileLoading || remoteLoading ? null : /*#__PURE__*/_react["default"].createElement(StyledDisclaimer, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
217
424
  id: 'fileUploader.disclaimer'
218
- }))))) : null, /*#__PURE__*/_react["default"].createElement(WarningMsg, null, (0, _utils.isChrome)() ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
425
+ })))) : null, /*#__PURE__*/_react["default"].createElement(WarningMsg, null, (0, _utils.isChrome)() ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
219
426
  id: 'fileUploader.chromeMessage'
220
427
  }) : ''));
221
428
  }
@@ -225,12 +432,16 @@ function FileUploadFactory() {
225
432
  if (state.fileLoading && props.fileLoading === false && state.files.length) {
226
433
  return {
227
434
  files: [],
228
- fileLoading: props.fileLoading
435
+ fileLoading: props.fileLoading,
436
+ remoteLoading: false,
437
+ remoteProgress: {}
229
438
  };
230
439
  }
231
- return {
440
+ return _objectSpread({
232
441
  fileLoading: props.fileLoading
233
- };
442
+ }, props.fileLoading ? {
443
+ remoteLoading: false
444
+ } : {});
234
445
  }
235
446
  }]);
236
447
  }(_react.Component);
@@ -238,4 +449,4 @@ function FileUploadFactory() {
238
449
  }
239
450
  var _default = exports["default"] = FileUploadFactory;
240
451
  var FileUpload = exports.FileUpload = FileUploadFactory();
241
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3VwbG9hZEJ1dHRvbiIsIl9pY29ucyIsIl9maWxlVXBsb2FkUHJvZ3Jlc3MiLCJfZmlsZURyb3AiLCJfdXRpbHMiLCJfY29uc3RhbnRzIiwiX21hcmtkb3duVG9Kc3giLCJfbG9jYWxpemF0aW9uIiwiX3N0eWxlcyIsIl9saW5rUmVuZGVyZXIiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl90ZW1wbGF0ZU9iamVjdDciLCJfdGVtcGxhdGVPYmplY3Q4IiwiX3RlbXBsYXRlT2JqZWN0OSIsIl90ZW1wbGF0ZU9iamVjdDAiLCJfdGVtcGxhdGVPYmplY3QxIiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX3RlbXBsYXRlT2JqZWN0MTMiLCJfdGVtcGxhdGVPYmplY3QxNCIsIl90ZW1wbGF0ZU9iamVjdDE1IiwiX3RlbXBsYXRlT2JqZWN0MTYiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiVHlwZUVycm9yIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImZpbGVJY29uQ29sb3IiLCJTdHlsZWRVcGxvYWRNZXNzYWdlIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yTFQiLCJtZWRpYSIsInBvcnRhYmxlIiwiV2FybmluZ01zZyIsImV4cG9ydHMiLCJzcGFuIiwiZXJyb3JDb2xvciIsIlN0eWxlZEZpbGVEcm9wIiwiJGRyYWdPdmVyIiwic3VidGV4dENvbG9yTFQiLCJsaW5rQnRuQ29sb3IiLCJNc2dXcmFwcGVyIiwibW9kYWxUaXRsZUNvbG9yIiwiU3R5bGVkRHJhZ05Ecm9wSWNvbiIsInBhbG0iLCJTdHlsZWRGaWxlVHlwZUZvdyIsIlN0eWxlZEZpbGVVcGxvYWQiLCJTdHlsZWRNZXNzYWdlIiwiU3R5bGVkRHJhZ0ZpbGVXcmFwcGVyIiwiU3R5bGVkRGlzY2xhaW1lciIsIkZpbGVVcGxvYWRGYWN0b3J5IiwiRmlsZVVwbG9hZCIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZHJhZ092ZXIiLCJmaWxlTG9hZGluZyIsImZpbGVzIiwiZXJyb3JGaWxlcyIsImNyZWF0ZVJlZiIsImZpbGVuYW1lIiwiX3RoaXMkcHJvcHMkZmlsZUV4dGVuIiwiZmlsZUV4dGVuc2lvbnMiLCJmaWxlRXh0IiwiZmluZCIsImV4dCIsImVuZHNXaXRoIiwiZmlsZUxpc3QiLCJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJmaWx0ZXIiLCJfdGhpcyRwcm9wcyRkaXNhYmxlRXgiLCJkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyIiwiZmlsZXNUb0xvYWQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImZpbGUiLCJfaXNWYWxpZEZpbGVUeXBlIiwicHVzaCIsImVyciIsIm5leHRTdGF0ZSIsInNldFN0YXRlIiwib25GaWxlVXBsb2FkIiwibmV3U3RhdGUiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHN0YXRlIiwic3RhdGUiLCJfdGhpcyRwcm9wcyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJpbnRsIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGZpbGVFeHRlIiwiX3RoaXMkcHJvcHMyJGZpbGVGb3JtIiwiZmlsZUZvcm1hdE5hbWVzIiwiZmlsZVVwbG9hZEluZm9UZXh0IiwiZm9ybWF0TWVzc2FnZSIsImlkIiwibWFwIiwiZm9ybWF0Iiwiam9pbiIsIkdVSURFU19GSUxFX0ZPUk1BVF9ET0MiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIiwiZnJhbWUiLCJGaWxlRHJvcCIsImN1cnJlbnQiLCJkb2N1bWVudCIsIm9uRHJhZ092ZXIiLCJfdG9nZ2xlRHJhZ1N0YXRlIiwib25EcmFnTGVhdmUiLCJvbkRyb3AiLCJfaGFuZGxlRmlsZUlucHV0Iiwib3B0aW9ucyIsIm92ZXJyaWRlcyIsImNvbXBvbmVudCIsIkxpbmtSZW5kZXJlciIsIkZpbGVUeXBlIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJGcmFnbWVudCIsInN0eWxlIiwib3BhY2l0eSIsIkRyYWdORHJvcCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJ2YWx1ZXMiLCJvblVwbG9hZCIsImlzQ2hyb21lIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiQ29tcG9uZW50IiwiaW5qZWN0SW50bCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9maWxlLXVwbG9hZGVyL2ZpbGUtdXBsb2FkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2luamVjdEludGwsIFdyYXBwZWRDb21wb25lbnRQcm9wc30gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgVXBsb2FkQnV0dG9uIGZyb20gJy4vdXBsb2FkLWJ1dHRvbic7XG5pbXBvcnQge0RyYWdORHJvcCwgRmlsZVR5cGV9IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCBGaWxlVXBsb2FkUHJvZ3Jlc3MgZnJvbSAnLi9maWxlLXVwbG9hZC1wcm9ncmVzcyc7XG5pbXBvcnQgRmlsZURyb3AgZnJvbSAnLi9maWxlLWRyb3AnO1xuaW1wb3J0IHtGaWxlTG9hZGluZywgRmlsZUxvYWRpbmdQcm9ncmVzc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7aXNDaHJvbWV9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgTWFya2Rvd24gZnJvbSAnbWFya2Rvd24tdG8tanN4Jztcbi8vIEJyZWFrcG9pbnRzXG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7bWVkaWF9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcblxuaW1wb3J0IExpbmtSZW5kZXJlciBmcm9tICcuLi9saW5rLXJlbmRlcmVyJztcblxuY29uc3QgZmlsZUljb25Db2xvciA9ICcjRDNEOEUwJztcblxuY29uc3QgU3R5bGVkVXBsb2FkTWVzc2FnZSA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuXG4gICR7bWVkaWEucG9ydGFibGVgXG4gICAgZm9udC1zaXplOiAxMnB4O1xuICBgfTtcbmA7XG5cbmV4cG9ydCBjb25zdCBXYXJuaW5nTXNnID0gc3R5bGVkLnNwYW5gXG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVycm9yQ29sb3J9O1xuICBmb250LXdlaWdodDogNTAwO1xuYDtcblxuaW50ZXJmYWNlIFN0eWxlZEZpbGVEcm9wUHJvcHMge1xuICAkZHJhZ092ZXI/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRGaWxlRHJvcCA9IHN0eWxlZC5kaXY8U3R5bGVkRmlsZURyb3BQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1zdHlsZTogJHtwcm9wcyA9PiAocHJvcHMuJGRyYWdPdmVyID8gJ3NvbGlkJyA6ICdkYXNoZWQnKX07XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLiRkcmFnT3ZlciA/IHByb3BzLnRoZW1lLnRleHRDb2xvckxUIDogcHJvcHMudGhlbWUuc3VidGV4dENvbG9yTFQpfTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNDhweCA4cHggMDtcbiAgaGVpZ2h0OiAzNjBweDtcblxuICAuZmlsZS11cGxvYWQtb3Ige1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxpbmtCdG5Db2xvcn07XG4gICAgcGFkZGluZy1yaWdodDogNHB4O1xuICB9XG5cbiAgLmZpbGUtdHlwZS1yb3cge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmc6IDE2cHggNHB4IDA7XG4gIGB9O1xuYDtcblxuY29uc3QgTXNnV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsVGl0bGVDb2xvcn07XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgaGVpZ2h0OiAzNnB4O1xuYDtcblxuY29uc3QgU3R5bGVkRHJhZ05Ecm9wSWNvbiA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke2ZpbGVJY29uQ29sb3J9O1xuICBtYXJnaW4tYm90dG9tOiA0OHB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICR7bWVkaWEucG9ydGFibGVgXG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgYH07XG4gICR7bWVkaWEucGFsbWBcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGB9O1xuYDtcblxuY29uc3QgU3R5bGVkRmlsZVR5cGVGb3cgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIGB9O1xuICAke21lZGlhLnBhbG1gXG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBgfTtcbmA7XG5cbmNvbnN0IFN0eWxlZEZpbGVVcGxvYWQgPSBzdHlsZWQuZGl2YFxuICAuZmlsZS1kcm9wIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZE1lc3NhZ2UgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMzJweDtcblxuICAubG9hZGluZy1hY3Rpb24ge1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuICAubG9hZGluZy1zcGlubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkRHJhZ0ZpbGVXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICBgfTtcbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBgfTtcbmA7XG5cbmNvbnN0IFN0eWxlZERpc2NsYWltZXIgPSBzdHlsZWQoU3R5bGVkTWVzc2FnZSlgXG4gIG1hcmdpbjogMCBhdXRvO1xuYDtcblxudHlwZSBGaWxlVXBsb2FkUHJvcHMgPSB7XG4gIG9uRmlsZVVwbG9hZDogKGZpbGVzOiBGaWxlW10pID0+IHZvaWQ7XG4gIGZpbGVMb2FkaW5nOiBGaWxlTG9hZGluZyB8IGZhbHNlO1xuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiBGaWxlTG9hZGluZ1Byb2dyZXNzO1xuICB0aGVtZTogb2JqZWN0O1xuICAvKiogQSBsaXN0IG9mIG5hbWVzIG9mIHN1cHBvcnRlZCBmb3JtYXRzIHN1aXRhYmxlIHRvIHByZXNlbnQgdG8gdXNlciAqL1xuICBmaWxlRm9ybWF0TmFtZXM/OiBzdHJpbmdbXTtcbiAgLyoqIEEgbGlzdCBvZiB0eXBpY2FsbHkgMyBsZXR0ZXIgZXh0ZW5zaW9ucyAod2l0aG91dCAnLicpIGZvciBmaWxlIG1hdGNoaW5nICovXG4gIGZpbGVFeHRlbnNpb25zPzogc3RyaW5nW107XG4gIC8qKiBTZXQgdG8gdHJ1ZSBpZiBhcHAgd2FudHMgdG8gZG8gaXRzIG93biBmaWxlIGZpbHRlcmluZyAqL1xuICBkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyPzogYm9vbGVhbjtcbn0gJiBXcmFwcGVkQ29tcG9uZW50UHJvcHM7XG5cbmZ1bmN0aW9uIEZpbGVVcGxvYWRGYWN0b3J5KCkge1xuICAvKiogQGF1Z21lbnRzIHtDb21wb25lbnQ8RmlsZVVwbG9hZFByb3BzPn0gKi9cbiAgY2xhc3MgRmlsZVVwbG9hZCBleHRlbmRzIENvbXBvbmVudDxGaWxlVXBsb2FkUHJvcHM+IHtcbiAgICBzdGF0ZSA9IHtcbiAgICAgIGRyYWdPdmVyOiBmYWxzZSxcbiAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICAgIGVycm9yRmlsZXM6IFtdXG4gICAgfTtcblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuZmlsZUxvYWRpbmcgJiYgcHJvcHMuZmlsZUxvYWRpbmcgPT09IGZhbHNlICYmIHN0YXRlLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVzOiBbXSxcbiAgICAgICAgICBmaWxlTG9hZGluZzogcHJvcHMuZmlsZUxvYWRpbmdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBwcm9wcy5maWxlTG9hZGluZ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmcmFtZSA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICAgIF9pc1ZhbGlkRmlsZVR5cGUgPSBmaWxlbmFtZSA9PiB7XG4gICAgICBjb25zdCB7ZmlsZUV4dGVuc2lvbnMgPSBbXX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgZmlsZUV4dCA9IGZpbGVFeHRlbnNpb25zLmZpbmQoZXh0ID0+IGZpbGVuYW1lLmVuZHNXaXRoKGV4dCkpO1xuXG4gICAgICByZXR1cm4gQm9vbGVhbihmaWxlRXh0KTtcbiAgICB9O1xuXG4gICAgLyoqIEBwYXJhbSB7RmlsZUxpc3R9IGZpbGVMaXN0ICovXG4gICAgX2hhbmRsZUZpbGVJbnB1dCA9IChmaWxlTGlzdDogRmlsZUxpc3QsIGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZXMgPSBbLi4uZmlsZUxpc3RdLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgY29uc3Qge2Rpc2FibGVFeHRlbnNpb25GaWx0ZXIgPSBmYWxzZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAvLyBUT0RPIC0gbW92ZSB0aGlzIGNvZGUgb3V0IG9mIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGZpbGVzVG9Mb2FkOiBGaWxlW10gPSBbXTtcbiAgICAgIGNvbnN0IGVycm9yRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgaWYgKGRpc2FibGVFeHRlbnNpb25GaWx0ZXIgfHwgdGhpcy5faXNWYWxpZEZpbGVUeXBlKGZpbGUubmFtZSkpIHtcbiAgICAgICAgICBmaWxlc1RvTG9hZC5wdXNoKGZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yRmlsZXMucHVzaChmaWxlLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtmaWxlczogZmlsZXNUb0xvYWQsIGVycm9yRmlsZXMsIGRyYWdPdmVyOiBmYWxzZX07XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCAoKSA9PlxuICAgICAgICBuZXh0U3RhdGUuZmlsZXMubGVuZ3RoID8gdGhpcy5wcm9wcy5vbkZpbGVVcGxvYWQobmV4dFN0YXRlLmZpbGVzKSA6IG51bGxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF90b2dnbGVEcmFnU3RhdGUgPSBuZXdTdGF0ZSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkcmFnT3ZlcjogbmV3U3RhdGV9KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2RyYWdPdmVyLCBmaWxlcywgZXJyb3JGaWxlc30gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qge2ZpbGVMb2FkaW5nLCBmaWxlTG9hZGluZ1Byb2dyZXNzLCB0aGVtZSwgaW50bH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpbGVFeHRlbnNpb25zID0gW10sIGZpbGVGb3JtYXROYW1lcyA9IFtdfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBmaWxlVXBsb2FkSW5mb1RleHQgPSBgJHtpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2ZpbGVVcGxvYWRlci5jb25maWdVcGxvYWRNZXNzYWdlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsZUZvcm1hdE5hbWVzOiBmaWxlRm9ybWF0TmFtZXMubWFwKGZvcm1hdCA9PiBgKioke2Zvcm1hdH0qKmApLmpvaW4oJywgJylcbiAgICAgICAgfVxuICAgICAgKX0oJHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSkuYDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRGaWxlVXBsb2FkIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJcIiByZWY9e3RoaXMuZnJhbWV9PlxuICAgICAgICAgIHtGaWxlRHJvcCA/IChcbiAgICAgICAgICAgIDxGaWxlRHJvcFxuICAgICAgICAgICAgICBmcmFtZT17dGhpcy5mcmFtZS5jdXJyZW50IHx8IGRvY3VtZW50fVxuICAgICAgICAgICAgICBvbkRyYWdPdmVyPXsoKSA9PiB0aGlzLl90b2dnbGVEcmFnU3RhdGUodHJ1ZSl9XG4gICAgICAgICAgICAgIG9uRHJhZ0xlYXZlPXsoKSA9PiB0aGlzLl90b2dnbGVEcmFnU3RhdGUoZmFsc2UpfVxuICAgICAgICAgICAgICBvbkRyb3A9e3RoaXMuX2hhbmRsZUZpbGVJbnB1dH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRlcl9fZmlsZS1kcm9wXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0eWxlZFVwbG9hZE1lc3NhZ2UgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRfX21lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3tcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBMaW5rUmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2ZpbGVVcGxvYWRJbmZvVGV4dH1cbiAgICAgICAgICAgICAgICA8L01hcmtkb3duPlxuICAgICAgICAgICAgICA8L1N0eWxlZFVwbG9hZE1lc3NhZ2U+XG4gICAgICAgICAgICAgIDxTdHlsZWRGaWxlRHJvcCAkZHJhZ092ZXI9e2RyYWdPdmVyfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRmlsZVR5cGVGb3cgY2xhc3NOYW1lPVwiZmlsZS10eXBlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAge2ZpbGVFeHRlbnNpb25zLm1hcChleHQgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8RmlsZVR5cGUga2V5PXtleHR9IGV4dD17ZXh0fSBoZWlnaHQ9XCI1MHB4XCIgZm9udFNpemU9XCI5cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRGaWxlVHlwZUZvdz5cbiAgICAgICAgICAgICAgICB7ZmlsZUxvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZFByb2dyZXNzIGZpbGVMb2FkaW5nUHJvZ3Jlc3M9e2ZpbGVMb2FkaW5nUHJvZ3Jlc3N9IHRoZW1lPXt0aGVtZX0gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7b3BhY2l0eTogZHJhZ092ZXIgPyAwLjUgOiAxfX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZC1kaXNwbGF5LW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZERyYWdORHJvcEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJhZ05Ecm9wIGhlaWdodD1cIjQ0cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRHJhZ05Ecm9wSWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIHtlcnJvckZpbGVzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnZmlsZVVwbG9hZGVyLmZpbGVOb3RTdXBwb3J0ZWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17e2Vycm9yRmlsZXM6IGVycm9yRmlsZXMuam9pbignLCAnKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1dhcm5pbmdNc2c+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7IWZpbGVzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkRHJhZ0ZpbGVXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1zZ1dyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZmlsZVVwbG9hZGVyLm1lc3NhZ2UnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Nc2dXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmlsZS11cGxvYWQtb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydmaWxlVXBsb2FkZXIub3InfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFVwbG9hZEJ1dHRvbiBvblVwbG9hZD17dGhpcy5faGFuZGxlRmlsZUlucHV0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydmaWxlVXBsb2FkZXIuYnJvd3NlRmlsZXMnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9VcGxvYWRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWREcmFnRmlsZVdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWREaXNjbGFpbWVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZmlsZVVwbG9hZGVyLmRpc2NsYWltZXInfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZERpc2NsYWltZXI+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wPlxuICAgICAgICAgICAgPC9GaWxlRHJvcD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAge2lzQ2hyb21lKCkgPyA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2ZpbGVVcGxvYWRlci5jaHJvbWVNZXNzYWdlJ30gLz4gOiAnJ31cbiAgICAgICAgICA8L1dhcm5pbmdNc2c+XG4gICAgICAgIDwvU3R5bGVkRmlsZVVwbG9hZD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluamVjdEludGwoRmlsZVVwbG9hZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVVcGxvYWRGYWN0b3J5O1xuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWQgPSBGaWxlVXBsb2FkRmFjdG9yeSgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBVyxhQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxPQUFBLEdBQUFaLE9BQUE7QUFFQSxJQUFBYSxhQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFBNEMsSUFBQWMsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxF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
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3VwbG9hZEJ1dHRvbiIsIl9pY29ucyIsIl9maWxlVXBsb2FkUHJvZ3Jlc3MiLCJfZmlsZURyb3AiLCJfY29uc3RhbnRzIiwiX2xvY2FsaXphdGlvbiIsIl9wcm9jZXNzb3JzIiwiX3N0eWxlcyIsIl91dGlscyIsIl9tYXJrZG93blRvSnN4IiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2xpbmtSZW5kZXJlciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MCIsIl90ZW1wbGF0ZU9iamVjdDEiLCJfdGVtcGxhdGVPYmplY3QxMCIsIl90ZW1wbGF0ZU9iamVjdDExIiwiX3RlbXBsYXRlT2JqZWN0MTIiLCJfdGVtcGxhdGVPYmplY3QxMyIsIl90ZW1wbGF0ZU9iamVjdDE0IiwiX3RlbXBsYXRlT2JqZWN0MTUiLCJfdGVtcGxhdGVPYmplY3QxNiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZmlsZUljb25Db2xvciIsIlN0eWxlZFVwbG9hZE1lc3NhZ2UiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3JMVCIsIm1lZGlhIiwicG9ydGFibGUiLCJXYXJuaW5nTXNnIiwiZXhwb3J0cyIsInNwYW4iLCJlcnJvckNvbG9yIiwiU3R5bGVkRmlsZURyb3AiLCIkZHJhZ092ZXIiLCJzdWJ0ZXh0Q29sb3JMVCIsIlN0eWxlZERyb3BCb2R5IiwiU3R5bGVkQWN0aW9uTGluZSIsIm1vZGFsVGl0bGVDb2xvciIsImxpbmtCdG5Db2xvciIsIlN0eWxlZERyYWdORHJvcEljb24iLCJTdHlsZWRGaWxlVHlwZUZvdyIsIlN0eWxlZEZpbGVVcGxvYWQiLCJTdHlsZWRNZXNzYWdlIiwiU3R5bGVkRHJhZ0ZpbGVXcmFwcGVyIiwiU3R5bGVkRGlzY2xhaW1lciIsIlN0eWxlZFJlbW90ZVVybEZvcm0iLCJTdHlsZWRSZW1vdGVVcmxSb3ciLCJTdHlsZWRSZW1vdGVVcmxJbnB1dCIsIklucHV0TGlnaHQiLCJTdHlsZWRSZW1vdGVGb3JtYXRTZWxlY3QiLCJzZWxlY3QiLCJpbnB1dExUIiwiU3R5bGVkUmVtb3RlRmV0Y2hCdXR0b24iLCJCdXR0b24iLCJSRU1PVEVfRE9XTkxPQURfU0hBUkUiLCJzY2FsZUZpbGVQcm9ncmVzcyIsInByb2dyZXNzIiwic3RhcnQiLCJlbmQiLCJyZWR1Y2UiLCJhY2N1Iiwia2V5IiwiaXRlbSIsInBlcmNlbnQiLCJnZXRDb21iaW5lZExvYWRQcm9ncmVzcyIsIl9yZWYiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJyZW1vdGVQcm9ncmVzcyIsImlzUmVtb3RlRmV0Y2giLCJGaWxlVXBsb2FkRmFjdG9yeSIsIkZpbGVVcGxvYWQiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiY29uY2F0IiwiZHJhZ092ZXIiLCJmaWxlcyIsImVycm9yRmlsZXMiLCJyZW1vdGVVcmwiLCJyZW1vdGVGb3JtYXQiLCJyZW1vdGVFcnJvciIsInJlbW90ZUxvYWRpbmciLCJjcmVhdGVSZWYiLCJmaWxlbmFtZSIsIl90aGlzJHByb3BzJGZpbGVFeHRlbiIsImZpbGVFeHRlbnNpb25zIiwiZmlsZUV4dCIsImZpbmQiLCJleHQiLCJlbmRzV2l0aCIsImZpbGVMaXN0IiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiX3RoaXMkcHJvcHMkZGlzYWJsZUV4IiwiZGlzYWJsZUV4dGVuc2lvbkZpbHRlciIsImZpbGVzVG9Mb2FkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJmaWxlIiwiX2lzVmFsaWRGaWxlVHlwZSIsImVyciIsIm5leHRTdGF0ZSIsInNldFN0YXRlIiwib25GaWxlVXBsb2FkIiwibmV3U3RhdGUiLCJ0YXJnZXQiLCJpc1JlbW90ZURhdGFzZXRVcmwiLCJtZXNzYWdlIiwicHJldmVudERlZmF1bHQiLCJfaGFuZGxlTG9hZFJlbW90ZUZpbGUiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl90aGlzJHN0YXRlIiwiaW50bCIsInNob3dGb3JtYXRTZWxlY3RvciIsImZvcm1hdCIsImZpbGVOYW1lIiwiZG93bmxvYWRpbmciLCJsYXN0VXBkYXRlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2Iiwic3RhdGUiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImVuYWJsZVJlbW90ZUZpbGVGb3JtYXRTZWxlY3RvciIsInVuZGVmaW5lZCIsImFicnVwdCIsImdldEZpbGVOYW1lRm9yUmVtb3RlVXJsIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiZXJyb3IiLCJmZXRjaFJlbW90ZUZpbGVBc0tlcGxlckZpbGUiLCJfcmVmMyIsIm5vdyIsIkRhdGUiLCJzZW50IiwidDAiLCJFcnJvciIsInN0b3AiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHN0YXRlMiIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGZpbGVFeHRlIiwiX3RoaXMkcHJvcHMyJGZpbGVGb3JtIiwiZmlsZUZvcm1hdE5hbWVzIiwiZmlsZVVwbG9hZEluZm9UZXh0IiwibWFwIiwiam9pbiIsIkdVSURFU19GSUxFX0ZPUk1BVF9ET0MiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIiwiZnJhbWUiLCJGaWxlRHJvcCIsImN1cnJlbnQiLCJkb2N1bWVudCIsIm9uRHJhZ092ZXIiLCJfdG9nZ2xlRHJhZ1N0YXRlIiwib25EcmFnTGVhdmUiLCJvbkRyb3AiLCJfaGFuZGxlRmlsZUlucHV0Iiwib3B0aW9ucyIsIm92ZXJyaWRlcyIsImNvbXBvbmVudCIsIkxpbmtSZW5kZXJlciIsIkZpbGVUeXBlIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJGcmFnbWVudCIsInN0eWxlIiwib3BhY2l0eSIsIkRyYWdORHJvcCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJ2YWx1ZXMiLCJicm93c2UiLCJvblVwbG9hZCIsIm9uQ2xpY2siLCJ0eXBlIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9vblJlbW90ZVVybENoYW5nZSIsIm9uS2V5RG93biIsIl9vblJlbW90ZVVybEtleURvd24iLCJkaXNhYmxlZCIsIl9vblJlbW90ZUZvcm1hdENoYW5nZSIsIlJFTU9URV9GSUxFX0ZPUk1BVFMiLCJ0b1VwcGVyQ2FzZSIsImN0YSIsInNtYWxsIiwiaXNDaHJvbWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJDb21wb25lbnQiLCJpbmplY3RJbnRsIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL2ZpbGUtdXBsb2FkZXIvZmlsZS11cGxvYWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7aW5qZWN0SW50bCwgV3JhcHBlZENvbXBvbmVudFByb3BzfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBVcGxvYWRCdXR0b24gZnJvbSAnLi91cGxvYWQtYnV0dG9uJztcbmltcG9ydCB7RHJhZ05Ecm9wLCBGaWxlVHlwZX0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IEZpbGVVcGxvYWRQcm9ncmVzcyBmcm9tICcuL2ZpbGUtdXBsb2FkLXByb2dyZXNzJztcbmltcG9ydCBGaWxlRHJvcCBmcm9tICcuL2ZpbGUtZHJvcCc7XG5pbXBvcnQge0ZpbGVMb2FkaW5nLCBGaWxlTG9hZGluZ1Byb2dyZXNzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtHVUlERVNfRklMRV9GT1JNQVRfRE9DLCBSRU1PVEVfRklMRV9GT1JNQVRTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7XG4gIGZldGNoUmVtb3RlRmlsZUFzS2VwbGVyRmlsZSxcbiAgZ2V0RmlsZU5hbWVGb3JSZW1vdGVVcmwsXG4gIGlzUmVtb3RlRGF0YXNldFVybFxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHttZWRpYX0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtpc0Nocm9tZSwgZ2V0QXBwbGljYXRpb25Db25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IE1hcmtkb3duIGZyb20gJ21hcmtkb3duLXRvLWpzeCc7XG5cbmltcG9ydCB7QnV0dG9uLCBJbnB1dExpZ2h0fSBmcm9tICcuLi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgTGlua1JlbmRlcmVyIGZyb20gJy4uL2xpbmstcmVuZGVyZXInO1xuXG5jb25zdCBmaWxlSWNvbkNvbG9yID0gJyNEM0Q4RTAnO1xuXG5jb25zdCBTdHlsZWRVcGxvYWRNZXNzYWdlID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG5cbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBmb250LXNpemU6IDEycHg7XG4gIGB9O1xuYDtcblxuZXhwb3J0IGNvbnN0IFdhcm5pbmdNc2cgPSBzdHlsZWQuc3BhbmBcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZXJyb3JDb2xvcn07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG5gO1xuXG5pbnRlcmZhY2UgU3R5bGVkRmlsZURyb3BQcm9wcyB7XG4gICRkcmFnT3Zlcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZEZpbGVEcm9wID0gc3R5bGVkLmRpdjxTdHlsZWRGaWxlRHJvcFByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXN0eWxlOiAke3Byb3BzID0+IChwcm9wcy4kZHJhZ092ZXIgPyAnc29saWQnIDogJ2Rhc2hlZCcpfTtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PlxuICAgIHByb3BzLiRkcmFnT3ZlciA/IHByb3BzLnRoZW1lLnRleHRDb2xvckxUIDogcHJvcHMudGhlbWUuc3VidGV4dENvbG9yTFR9O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAzNjBweDtcbiAgcGFkZGluZzogMjRweCAxMnB4IDE2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgLmZpbGUtdHlwZS1yb3cge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmc6IDE2cHggOHB4IDEycHg7XG4gICAgbWluLWhlaWdodDogMjgwcHg7XG4gIGB9O1xuYDtcblxuY29uc3QgU3R5bGVkRHJvcEJvZHkgPSBzdHlsZWQuZGl2YFxuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG5gO1xuXG5jb25zdCBTdHlsZWRBY3Rpb25MaW5lID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubW9kYWxUaXRsZUNvbG9yfTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMjBweDtcblxuICAudXBsb2FkLWJ1dHRvbiB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGlua0J0bkNvbG9yfTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZERyYWdORHJvcEljb24gPSBzdHlsZWQuZGl2YFxuICBjb2xvcjogJHtmaWxlSWNvbkNvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRGaWxlVHlwZUZvdyA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkRmlsZVVwbG9hZCA9IHN0eWxlZC5kaXZgXG4gIC5maWxlLWRyb3Age1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkTWVzc2FnZSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuXG4gIC5sb2FkaW5nLWFjdGlvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG4gIC5sb2FkaW5nLXNwaW5uZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWREcmFnRmlsZVdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbmA7XG5cbmNvbnN0IFN0eWxlZERpc2NsYWltZXIgPSBzdHlsZWQoU3R5bGVkTWVzc2FnZSlgXG4gIGZsZXgtc2hyaW5rOiAwO1xuICBtYXJnaW46IDEycHggMTJweCAwO1xuYDtcblxuY29uc3QgU3R5bGVkUmVtb3RlVXJsRm9ybSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA0MjBweDtcbiAgbWFyZ2luOiA4cHggYXV0byAwO1xuYDtcblxuY29uc3QgU3R5bGVkUmVtb3RlVXJsUm93ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiA4cHg7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRSZW1vdGVVcmxJbnB1dCA9IHN0eWxlZChJbnB1dExpZ2h0KWBcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwO1xuICBtYXgtd2lkdGg6IDMwMHB4O1xuYDtcblxuY29uc3QgU3R5bGVkUmVtb3RlRm9ybWF0U2VsZWN0ID0gc3R5bGVkLnNlbGVjdGBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dExUfTtcbiAgd2lkdGg6IDg4cHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBoZWlnaHQ6IGF1dG87XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRSZW1vdGVGZXRjaEJ1dHRvbiA9IHN0eWxlZChCdXR0b24pYFxuICBoZWlnaHQ6IGF1dG87XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgZmxleC1zaHJpbms6IDA7XG5gO1xuXG5jb25zdCBSRU1PVEVfRE9XTkxPQURfU0hBUkUgPSAwLjg1O1xuXG5mdW5jdGlvbiBzY2FsZUZpbGVQcm9ncmVzcyhcbiAgcHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gIHN0YXJ0OiBudW1iZXIsXG4gIGVuZDogbnVtYmVyXG4pOiBGaWxlTG9hZGluZ1Byb2dyZXNzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb2dyZXNzKS5yZWR1Y2U8RmlsZUxvYWRpbmdQcm9ncmVzcz4oKGFjY3UsIGtleSkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBwcm9ncmVzc1trZXldO1xuICAgIGFjY3Vba2V5XSA9IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBwZXJjZW50OiBzdGFydCArIChpdGVtLnBlcmNlbnQgfHwgMCkgKiAoZW5kIC0gc3RhcnQpXG4gICAgfTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRDb21iaW5lZExvYWRQcm9ncmVzcyh7XG4gIGZpbGVMb2FkaW5nLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICByZW1vdGVQcm9ncmVzc1xufToge1xuICBmaWxlTG9hZGluZzogRmlsZUxvYWRpbmcgfCBmYWxzZTtcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczogRmlsZUxvYWRpbmdQcm9ncmVzcztcbiAgcmVtb3RlUHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG59KTogRmlsZUxvYWRpbmdQcm9ncmVzcyB7XG4gIGNvbnN0IGlzUmVtb3RlRmV0Y2ggPSBPYmplY3Qua2V5cyhyZW1vdGVQcm9ncmVzcykubGVuZ3RoID4gMDtcbiAgaWYgKCFpc1JlbW90ZUZldGNoKSB7XG4gICAgcmV0dXJuIGZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG4gIH1cbiAgaWYgKGZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHNjYWxlRmlsZVByb2dyZXNzKGZpbGVMb2FkaW5nUHJvZ3Jlc3MsIFJFTU9URV9ET1dOTE9BRF9TSEFSRSwgMSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlRmlsZVByb2dyZXNzKHJlbW90ZVByb2dyZXNzLCAwLCBSRU1PVEVfRE9XTkxPQURfU0hBUkUpO1xufVxuXG50eXBlIEZpbGVVcGxvYWRQcm9wcyA9IHtcbiAgb25GaWxlVXBsb2FkOiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZDtcbiAgZmlsZUxvYWRpbmc6IEZpbGVMb2FkaW5nIHwgZmFsc2U7XG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG4gIHRoZW1lOiBvYmplY3Q7XG4gIC8qKiBBIGxpc3Qgb2YgbmFtZXMgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgc3VpdGFibGUgdG8gcHJlc2VudCB0byB1c2VyICovXG4gIGZpbGVGb3JtYXROYW1lcz86IHN0cmluZ1tdO1xuICAvKiogQSBsaXN0IG9mIHR5cGljYWxseSAzIGxldHRlciBleHRlbnNpb25zICh3aXRob3V0ICcuJykgZm9yIGZpbGUgbWF0Y2hpbmcgKi9cbiAgZmlsZUV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFNldCB0byB0cnVlIGlmIGFwcCB3YW50cyB0byBkbyBpdHMgb3duIGZpbGUgZmlsdGVyaW5nICovXG4gIGRpc2FibGVFeHRlbnNpb25GaWx0ZXI/OiBib29sZWFuO1xufSAmIFdyYXBwZWRDb21wb25lbnRQcm9wcztcblxudHlwZSBGaWxlVXBsb2FkU3RhdGUgPSB7XG4gIGRyYWdPdmVyOiBib29sZWFuO1xuICBmaWxlTG9hZGluZzogRmlsZUxvYWRpbmcgfCBmYWxzZTtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgZXJyb3JGaWxlczogc3RyaW5nW107XG4gIHJlbW90ZVVybDogc3RyaW5nO1xuICByZW1vdGVGb3JtYXQ6IHN0cmluZztcbiAgcmVtb3RlRXJyb3I6IHttZXNzYWdlOiBzdHJpbmd9IHwgbnVsbDtcbiAgcmVtb3RlTG9hZGluZzogYm9vbGVhbjtcbiAgcmVtb3RlUHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG59O1xuXG5mdW5jdGlvbiBGaWxlVXBsb2FkRmFjdG9yeSgpIHtcbiAgLyoqIEBhdWdtZW50cyB7Q29tcG9uZW50PEZpbGVVcGxvYWRQcm9wcz59ICovXG4gIGNsYXNzIEZpbGVVcGxvYWQgZXh0ZW5kcyBDb21wb25lbnQ8RmlsZVVwbG9hZFByb3BzLCBGaWxlVXBsb2FkU3RhdGU+IHtcbiAgICBzdGF0ZTogRmlsZVVwbG9hZFN0YXRlID0ge1xuICAgICAgZHJhZ092ZXI6IGZhbHNlLFxuICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgZmlsZXM6IFtdLFxuICAgICAgZXJyb3JGaWxlczogW10sXG4gICAgICByZW1vdGVVcmw6ICcnLFxuICAgICAgcmVtb3RlRm9ybWF0OiAnYXV0bycsXG4gICAgICByZW1vdGVFcnJvcjogbnVsbCxcbiAgICAgIHJlbW90ZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgcmVtb3RlUHJvZ3Jlc3M6IHt9XG4gICAgfTtcblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuZmlsZUxvYWRpbmcgJiYgcHJvcHMuZmlsZUxvYWRpbmcgPT09IGZhbHNlICYmIHN0YXRlLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVzOiBbXSxcbiAgICAgICAgICBmaWxlTG9hZGluZzogcHJvcHMuZmlsZUxvYWRpbmcsXG4gICAgICAgICAgcmVtb3RlTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgcmVtb3RlUHJvZ3Jlc3M6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlTG9hZGluZzogcHJvcHMuZmlsZUxvYWRpbmcsXG4gICAgICAgIC4uLihwcm9wcy5maWxlTG9hZGluZyA/IHtyZW1vdGVMb2FkaW5nOiBmYWxzZX0gOiB7fSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnJhbWUgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBfaXNWYWxpZEZpbGVUeXBlID0gZmlsZW5hbWUgPT4ge1xuICAgICAgY29uc3Qge2ZpbGVFeHRlbnNpb25zID0gW119ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGZpbGVFeHQgPSBmaWxlRXh0ZW5zaW9ucy5maW5kKGV4dCA9PiBmaWxlbmFtZS5lbmRzV2l0aChleHQpKTtcblxuICAgICAgcmV0dXJuIEJvb2xlYW4oZmlsZUV4dCk7XG4gICAgfTtcblxuICAgIC8qKiBAcGFyYW0ge0ZpbGVMaXN0fSBmaWxlTGlzdCAqL1xuICAgIF9oYW5kbGVGaWxlSW5wdXQgPSAoZmlsZUxpc3Q6IEZpbGVMaXN0LCBldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gWy4uLmZpbGVMaXN0XS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIGNvbnN0IHtkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyID0gZmFsc2V9ID0gdGhpcy5wcm9wcztcblxuICAgICAgLy8gVE9ETyAtIG1vdmUgdGhpcyBjb2RlIG91dCBvZiB0aGUgY29tcG9uZW50XG4gICAgICBjb25zdCBmaWxlc1RvTG9hZDogRmlsZVtdID0gW107XG4gICAgICBjb25zdCBlcnJvckZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyIHx8IHRoaXMuX2lzVmFsaWRGaWxlVHlwZShmaWxlLm5hbWUpKSB7XG4gICAgICAgICAgZmlsZXNUb0xvYWQucHVzaChmaWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvckZpbGVzLnB1c2goZmlsZS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSB7ZmlsZXM6IGZpbGVzVG9Mb2FkLCBlcnJvckZpbGVzLCBkcmFnT3ZlcjogZmFsc2V9O1xuXG4gICAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgKCkgPT5cbiAgICAgICAgbmV4dFN0YXRlLmZpbGVzLmxlbmd0aCA/IHRoaXMucHJvcHMub25GaWxlVXBsb2FkKG5leHRTdGF0ZS5maWxlcykgOiBudWxsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlRHJhZ1N0YXRlID0gbmV3U3RhdGUgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZHJhZ092ZXI6IG5ld1N0YXRlfSk7XG4gICAgfTtcblxuICAgIF9vblJlbW90ZVVybENoYW5nZSA9IChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHJlbW90ZVVybCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICByZW1vdGVVcmwsXG4gICAgICAgIHJlbW90ZUVycm9yOiByZW1vdGVVcmwgJiYgIWlzUmVtb3RlRGF0YXNldFVybChyZW1vdGVVcmwpID8ge21lc3NhZ2U6ICdJbmNvcnJlY3QgVVJMJ30gOiBudWxsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX29uUmVtb3RlRm9ybWF0Q2hhbmdlID0gKGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MU2VsZWN0RWxlbWVudD4pID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3JlbW90ZUZvcm1hdDogZXZlbnQudGFyZ2V0LnZhbHVlfSk7XG4gICAgfTtcblxuICAgIF9vblJlbW90ZVVybEtleURvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlTG9hZFJlbW90ZUZpbGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX2hhbmRsZUxvYWRSZW1vdGVGaWxlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qge3JlbW90ZVVybCwgcmVtb3RlRm9ybWF0LCByZW1vdGVFcnJvcn0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qge2ludGx9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNob3dGb3JtYXRTZWxlY3RvciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmVtb3RlRmlsZUZvcm1hdFNlbGVjdG9yO1xuICAgICAgY29uc3QgZm9ybWF0ID0gc2hvd0Zvcm1hdFNlbGVjdG9yICYmIHJlbW90ZUZvcm1hdCAhPT0gJ2F1dG8nID8gcmVtb3RlRm9ybWF0IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFyZW1vdGVVcmwgfHwgcmVtb3RlRXJyb3IgfHwgdGhpcy5zdGF0ZS5yZW1vdGVMb2FkaW5nKSB7XG4gICAgICAgIGlmICghcmVtb3RlVXJsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cmVtb3RlRXJyb3I6IHttZXNzYWdlOiAnSW5jb3JyZWN0IFVSTCd9fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1JlbW90ZURhdGFzZXRVcmwocmVtb3RlVXJsKSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtyZW1vdGVFcnJvcjoge21lc3NhZ2U6ICdJbmNvcnJlY3QgVVJMJ319KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGdldEZpbGVOYW1lRm9yUmVtb3RlVXJsKHJlbW90ZVVybCwgZm9ybWF0KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkaW5nID0gaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2ZpbGVVcGxvYWRlci5kb3dubG9hZGluZyd9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICByZW1vdGVMb2FkaW5nOiB0cnVlLFxuICAgICAgICByZW1vdGVFcnJvcjogbnVsbCxcbiAgICAgICAgcmVtb3RlUHJvZ3Jlc3M6IHtcbiAgICAgICAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICAgICAgICBtZXNzYWdlOiBkb3dubG9hZGluZyxcbiAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGxhc3RVcGRhdGUgPSAwO1xuICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZmV0Y2hSZW1vdGVGaWxlQXNLZXBsZXJGaWxlKHJlbW90ZVVybCwgZm9ybWF0LCAoe3BlcmNlbnR9KSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBpZiAocGVyY2VudCA8IDEgJiYgbm93IC0gbGFzdFVwZGF0ZSA8IDEwMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0VXBkYXRlID0gbm93O1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXMocHJldi5yZW1vdGVQcm9ncmVzcylbMF0gfHwgZmlsZU5hbWU7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZW1vdGVQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIFtuYW1lXToge1xuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICBwZXJjZW50LFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZG93bmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgICAgICAgIGVycm9yRmlsZXM6IFtdLFxuICAgICAgICAgICAgZHJhZ092ZXI6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB0aGlzLnByb3BzLm9uRmlsZVVwbG9hZChbZmlsZV0pXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICByZW1vdGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICByZW1vdGVQcm9ncmVzczoge30sXG4gICAgICAgICAgcmVtb3RlRXJyb3I6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogYEZhaWxlZCB0byBsb2FkICR7cmVtb3RlVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRyYWdPdmVyLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgZXJyb3JGaWxlcyxcbiAgICAgICAgcmVtb3RlVXJsLFxuICAgICAgICByZW1vdGVGb3JtYXQsXG4gICAgICAgIHJlbW90ZUVycm9yLFxuICAgICAgICByZW1vdGVMb2FkaW5nLFxuICAgICAgICByZW1vdGVQcm9ncmVzc1xuICAgICAgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCB7ZmlsZUxvYWRpbmcsIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsIHRoZW1lLCBpbnRsfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7ZmlsZUV4dGVuc2lvbnMgPSBbXSwgZmlsZUZvcm1hdE5hbWVzID0gW119ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNob3dGb3JtYXRTZWxlY3RvciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmVtb3RlRmlsZUZvcm1hdFNlbGVjdG9yO1xuICAgICAgY29uc3QgZmlsZVVwbG9hZEluZm9UZXh0ID0gYCR7aW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdmaWxlVXBsb2FkZXIuY29uZmlnVXBsb2FkTWVzc2FnZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVGb3JtYXROYW1lczogZmlsZUZvcm1hdE5hbWVzLm1hcChmb3JtYXQgPT4gYCoqJHtmb3JtYXR9KipgKS5qb2luKCcsICcpXG4gICAgICAgIH1cbiAgICAgICl9KCR7R1VJREVTX0ZJTEVfRk9STUFUX0RPQ30pLmA7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkRmlsZVVwbG9hZCBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZGVyXCIgcmVmPXt0aGlzLmZyYW1lfT5cbiAgICAgICAgICB7RmlsZURyb3AgPyAoXG4gICAgICAgICAgICA8RmlsZURyb3BcbiAgICAgICAgICAgICAgZnJhbWU9e3RoaXMuZnJhbWUuY3VycmVudCB8fCBkb2N1bWVudH1cbiAgICAgICAgICAgICAgb25EcmFnT3Zlcj17KCkgPT4gdGhpcy5fdG9nZ2xlRHJhZ1N0YXRlKHRydWUpfVxuICAgICAgICAgICAgICBvbkRyYWdMZWF2ZT17KCkgPT4gdGhpcy5fdG9nZ2xlRHJhZ1N0YXRlKGZhbHNlKX1cbiAgICAgICAgICAgICAgb25Ecm9wPXt0aGlzLl9oYW5kbGVGaWxlSW5wdXR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX2ZpbGUtZHJvcFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdHlsZWRVcGxvYWRNZXNzYWdlIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkX19tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXt7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogTGlua1JlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtmaWxlVXBsb2FkSW5mb1RleHR9XG4gICAgICAgICAgICAgICAgPC9NYXJrZG93bj5cbiAgICAgICAgICAgICAgPC9TdHlsZWRVcGxvYWRNZXNzYWdlPlxuICAgICAgICAgICAgICA8U3R5bGVkRmlsZURyb3AgJGRyYWdPdmVyPXtkcmFnT3Zlcn0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZERyb3BCb2R5PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEZpbGVUeXBlRm93IGNsYXNzTmFtZT1cImZpbGUtdHlwZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAge2ZpbGVFeHRlbnNpb25zLm1hcChleHQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWxlVHlwZSBrZXk9e2V4dH0gZXh0PXtleHR9IGhlaWdodD1cIjUwcHhcIiBmb250U2l6ZT1cIjlweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRGaWxlVHlwZUZvdz5cbiAgICAgICAgICAgICAgICAgIHtmaWxlTG9hZGluZyB8fCByZW1vdGVMb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZFByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzcz17Z2V0Q29tYmluZWRMb2FkUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIDxTdHlsZWREcmFnTkRyb3BJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e29wYWNpdHk6IGRyYWdPdmVyID8gMC41IDogMX19XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZC1kaXNwbGF5LW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcmFnTkRyb3AgaGVpZ2h0PVwiMzZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JGaWxlcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17J2ZpbGVVcGxvYWRlci5maWxlTm90U3VwcG9ydGVkJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17e2Vycm9yRmlsZXM6IGVycm9yRmlsZXMuam9pbignLCAnKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9XYXJuaW5nTXNnPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWREcmFnTkRyb3BJY29uPlxuICAgICAgICAgICAgICAgICAgICAgIHshZmlsZXMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZERyYWdGaWxlV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZEFjdGlvbkxpbmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnZmlsZVVwbG9hZGVyLmRyb3BNZXNzYWdlJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2U6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VXBsb2FkQnV0dG9uIGtleT1cImJyb3dzZVwiIG9uVXBsb2FkPXt0aGlzLl9oYW5kbGVGaWxlSW5wdXR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdmaWxlVXBsb2FkZXIuYnJvd3NlRmlsZXMnfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VcGxvYWRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRBY3Rpb25MaW5lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkUmVtb3RlVXJsRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX3JlbW90ZS11cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlbW90ZVVybFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdHlsZWRSZW1vdGVVcmxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3JlbW90ZVVybH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aW50bC5mb3JtYXRNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2ZpbGVVcGxvYWRlci51cmxQbGFjZWhvbGRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmlsZVVwbG9hZGVyLnVybFBsYWNlaG9sZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uUmVtb3RlVXJsQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249e3RoaXMuX29uUmVtb3RlVXJsS2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3JlbW90ZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dGb3JtYXRTZWxlY3RvciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlbW90ZUZvcm1hdFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX3JlbW90ZS1mb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdmaWxlVXBsb2FkZXIuZm9ybWF0J30pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyZW1vdGVGb3JtYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uUmVtb3RlRm9ybWF0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZW1vdGVMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JFTU9URV9GSUxFX0ZPUk1BVFMubWFwKGZvcm1hdCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Zm9ybWF0fSB2YWx1ZT17Zm9ybWF0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdCA9PT0gJ2F1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnZmlsZVVwbG9hZGVyLmZvcm1hdEF1dG8nfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdC50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkUmVtb3RlRm9ybWF0U2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkUmVtb3RlRmV0Y2hCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXJlbW90ZVVybCB8fCByZW1vdGVMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLl9oYW5kbGVMb2FkUmVtb3RlRmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydmaWxlVXBsb2FkZXIuZmV0Y2gnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZW1vdGVGZXRjaEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZFJlbW90ZVVybFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVtb3RlRXJyb3IgPyA8V2FybmluZ01zZz57cmVtb3RlRXJyb3IubWVzc2FnZX08L1dhcm5pbmdNc2c+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZW1vdGVVcmxGb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWREcmFnRmlsZVdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1N0eWxlZERyb3BCb2R5PlxuICAgICAgICAgICAgICAgIHtmaWxlTG9hZGluZyB8fCByZW1vdGVMb2FkaW5nID8gbnVsbCA6IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWREaXNjbGFpbWVyPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2ZpbGVVcGxvYWRlci5kaXNjbGFpbWVyJ30gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRGlzY2xhaW1lcj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wPlxuICAgICAgICAgICAgPC9GaWxlRHJvcD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAge2lzQ2hyb21lKCkgPyA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2ZpbGVVcGxvYWRlci5jaHJvbWVNZXNzYWdlJ30gLz4gOiAnJ31cbiAgICAgICAgICA8L1dhcm5pbmdNc2c+XG4gICAgICAgIDwvU3R5bGVkRmlsZVVwbG9hZD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluamVjdEludGwoRmlsZVVwbG9hZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVVcGxvYWRGYWN0b3J5O1xuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWQgPSBGaWxlVXBsb2FkRmFjdG9yeSgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sbUJBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFdBQUEsR0FBQVYsT0FBQTtBQUtBLElBQUFXLE9BQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLE1BQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLGNBQUEsR0FBQVgsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFjLGtCQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxhQUFBLEdBQUFiLHNCQUFBLENBQUFGLE9BQUE7QUFBNEMsSUFBQWdCLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUF4QjVDO0FBQ0E7QUFBQSxTQUFBbEMsd0JBQUFtQyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBckMsdUJBQUEsWUFBQUEsd0JBQUFtQyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxjQUFBTSxFQUFBLElBQUFkLENBQUEsZ0JBQUFjLEVBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLEVBQUEsT0FBQVAsQ0FBQSxJQUFBRCxDQUFBLEdBQUFXLE1BQUEsQ0FBQUMsY0FBQSxLQUFBRCxNQUFBLENBQUFFLHdCQUFBLENBQUFuQixDQUFBLEVBQUFjLEVBQUEsT0FBQVAsQ0FBQSxDQUFBSyxHQUFBLElBQUFMLENBQUEsQ0FBQU0sR0FBQSxJQUFBUCxDQUFBLENBQUFFLENBQUEsRUFBQU0sRUFBQSxFQUFBUCxDQUFBLElBQUFDLENBQUEsQ0FBQU0sRUFBQSxJQUFBZCxDQUFBLENBQUFjLEVBQUEsV0FBQU4sQ0FBQSxLQUFBUixDQUFBLEVBQUFDLENBQUE7QUFBQSxTQUFBbUIsMkJBQUFqQixDQUFBLEVBQUFILENBQUEsUUFBQUMsQ0FBQSx5QkFBQW9CLE1BQUEsSUFBQWxCLENBQUEsQ0FBQWtCLE1BQUEsQ0FBQUMsUUFBQSxLQUFBbkIsQ0FBQSxxQkFBQUYsQ0FBQSxRQUFBc0IsS0FBQSxDQUFBQyxPQUFBLENBQUFyQixDQUFBLE1BQUFGLENBQUEsR0FBQXdCLDJCQUFBLENBQUF0QixDQUFBLE1BQUFILENBQUEsSUFBQUcsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBdUIsTUFBQSxJQUFBekIsQ0FBQSxLQUFBRSxDQUFBLEdBQUFGLENBQUEsT0FBQTBCLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBeEIsQ0FBQSxXQUFBQSxFQUFBLFdBQUF1QixFQUFBLElBQUF4QixDQUFBLENBQUF1QixNQUFBLEtBQUFJLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUE1QixDQUFBLENBQUF3QixFQUFBLFVBQUEzQixDQUFBLFdBQUFBLEVBQUFHLENBQUEsVUFBQUEsQ0FBQSxLQUFBSyxDQUFBLEVBQUFvQixDQUFBLGdCQUFBSSxTQUFBLGlKQUFBMUIsQ0FBQSxFQUFBMkIsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBTCxDQUFBLFdBQUFBLEVBQUEsSUFBQTVCLENBQUEsR0FBQUEsQ0FBQSxDQUFBZSxJQUFBLENBQUFiLENBQUEsTUFBQUMsQ0FBQSxXQUFBQSxFQUFBLFFBQUFELENBQUEsR0FBQUYsQ0FBQSxDQUFBa0MsSUFBQSxXQUFBRixDQUFBLEdBQUE5QixDQUFBLENBQUEyQixJQUFBLEVBQUEzQixDQUFBLEtBQUFILENBQUEsV0FBQUEsRUFBQUcsQ0FBQSxJQUFBK0IsQ0FBQSxPQUFBNUIsQ0FBQSxHQUFBSCxDQUFBLEtBQUFLLENBQUEsV0FBQUEsRUFBQSxVQUFBeUIsQ0FBQSxZQUFBaEMsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBaUMsQ0FBQSxRQUFBNUIsQ0FBQTtBQUFBLFNBQUFtQiw0QkFBQXRCLENBQUEsRUFBQThCLENBQUEsUUFBQTlCLENBQUEsMkJBQUFBLENBQUEsU0FBQWlDLGlCQUFBLENBQUFqQyxDQUFBLEVBQUE4QixDQUFBLE9BQUFoQyxDQUFBLE1BQUFvQyxRQUFBLENBQUFyQixJQUFBLENBQUFiLENBQUEsRUFBQW1DLEtBQUEsNkJBQUFyQyxDQUFBLElBQUFFLENBQUEsQ0FBQW9DLFdBQUEsS0FBQXRDLENBQUEsR0FBQUUsQ0FBQSxDQUFBb0MsV0FBQSxDQUFBQyxJQUFBLGFBQUF2QyxDQUFBLGNBQUFBLENBQUEsR0FBQXNCLEtBQUEsQ0FBQWtCLElBQUEsQ0FBQXRDLENBQUEsb0JBQUFGLENBQUEsK0NBQUF5QyxJQUFBLENBQUF6QyxDQUFBLElBQUFtQyxpQkFBQSxDQUFBakMsQ0FBQSxFQUFBOEIsQ0FBQTtBQUFBLFNBQUFHLGtCQUFBakMsQ0FBQSxFQUFBOEIsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQTlCLENBQUEsQ0FBQXVCLE1BQUEsTUFBQU8sQ0FBQSxHQUFBOUIsQ0FBQSxDQUFBdUIsTUFBQSxZQUFBMUIsQ0FBQSxNQUFBSSxDQUFBLEdBQUFtQixLQUFBLENBQUFVLENBQUEsR0FBQWpDLENBQUEsR0FBQWlDLENBQUEsRUFBQWpDLENBQUEsSUFBQUksQ0FBQSxDQUFBSixDQUFBLElBQUFHLENBQUEsQ0FBQUgsQ0FBQSxVQUFBSSxDQUFBO0FBQUEsU0FBQXVDLFdBQUExQyxDQUFBLEVBQUFLLENBQUEsRUFBQU4sQ0FBQSxXQUFBTSxDQUFBLE9BQUFzQyxnQkFBQSxhQUFBdEMsQ0FBQSxPQUFBdUMsMkJBQUEsYUFBQTVDLENBQUEsRUFBQTZDLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBMUMsQ0FBQSxFQUFBTixDQUFBLFlBQUE0QyxnQkFBQSxhQUFBM0MsQ0FBQSxFQUFBc0MsV0FBQSxJQUFBakMsQ0FBQSxDQUFBMkMsS0FBQSxDQUFBaEQsQ0FBQSxFQUFBRCxDQUFBO0FBQUEsU0FBQThDLDBCQUFBLGNBQUE3QyxDQUFBLElBQUFpRCxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBcEMsSUFBQSxDQUFBK0IsT0FBQSxDQUFBQyxTQUFBLENBQUFFLE9BQUEsaUNBQUFqRCxDQUFBLGFBQUE2Qyx5QkFBQSxZQUFBQSwwQkFBQSxhQUFBN0MsQ0FBQTtBQUFBLFNBQUFvRCxRQUFBckQsQ0FBQSxFQUFBRyxDQUFBLFFBQUFGLENBQUEsR0FBQWdCLE1BQUEsQ0FBQXFDLElBQUEsQ0FBQXRELENBQUEsT0FBQWlCLE1BQUEsQ0FBQXNDLHFCQUFBLFFBQUFqRCxDQUFBLEdBQUFXLE1BQUEsQ0FBQXNDLHFCQUFBLENBQUF2RCxDQUFBLEdBQUFHLENBQUEsS0FBQUcsQ0FBQSxHQUFBQSxDQUFBLENBQUFrRCxNQUFBLFdBQUFyRCxDQUFBLFdBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQUcsQ0FBQSxFQUFBc0QsVUFBQSxPQUFBeEQsQ0FBQSxDQUFBeUQsSUFBQSxDQUFBVCxLQUFBLENBQUFoRCxDQUFBLEVBQUFLLENBQUEsWUFBQUwsQ0FBQTtBQUFBLFNBQUEwRCxjQUFBM0QsQ0FBQSxhQUFBRyxDQUFBLE1BQUFBLENBQUEsR0FBQXlELFNBQUEsQ0FBQWxDLE1BQUEsRUFBQXZCLENBQUEsVUFBQUYsQ0FBQSxXQUFBMkQsU0FBQSxDQUFBekQsQ0FBQSxJQUFBeUQsU0FBQSxDQUFBekQsQ0FBQSxRQUFBQSxDQUFBLE9BQUFrRCxPQUFBLENBQUFwQyxNQUFBLENBQUFoQixDQUFBLE9BQUE0RCxPQUFBLFdBQUExRCxDQUFBLFFBQUEyRCxnQkFBQSxhQUFBOUQsQ0FBQSxFQUFBRyxDQUFBLEVBQUFGLENBQUEsQ0FBQUUsQ0FBQSxTQUFBYyxNQUFBLENBQUE4Qyx5QkFBQSxHQUFBOUMsTUFBQSxDQUFBK0MsZ0JBQUEsQ0FBQWhFLENBQUEsRUFBQWlCLE1BQUEsQ0FBQThDLHlCQUFBLENBQUE5RCxDQUFBLEtBQUFvRCxPQUFBLENBQUFwQyxNQUFBLENBQUFoQixDQUFBLEdBQUE0RCxPQUFBLFdBQUExRCxDQUFBLElBQUFjLE1BQUEsQ0FBQUMsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLEVBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUUsQ0FBQSxpQkFBQUgsQ0FBQTtBQXlCQSxJQUFNaUUsYUFBYSxHQUFHLFNBQVM7QUFFL0IsSUFBTUMsbUJBQW1CLEdBQUdDLDRCQUFNLENBQUNDLEdBQUcsQ0FBQXRGLGVBQUEsS0FBQUEsZUFBQSxPQUFBdUYsdUJBQUEsOEZBQzNCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsV0FBVztBQUFBLEdBSXZDQyxhQUFLLENBQUNDLFFBQVEsQ0FBQTNGLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFzRix1QkFBQSwrQ0FHakI7QUFFTSxJQUFNTSxVQUFVLEdBQUFDLE9BQUEsQ0FBQUQsVUFBQSxHQUFHUiw0QkFBTSxDQUFDVSxJQUFJLENBQUE3RixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBcUYsdUJBQUEsaUZBRTFCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ08sVUFBVTtBQUFBLEVBRXpDO0FBTUQsSUFBTUMsY0FBYyxHQUFHWiw0QkFBTSxDQUFDQyxHQUFHLENBQUFuRixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBb0YsdUJBQUEsbVdBR2YsVUFBQUMsS0FBSztFQUFBLE9BQUtBLEtBQUssQ0FBQ1UsU0FBUyxHQUFHLE9BQU8sR0FBRyxRQUFRO0FBQUEsQ0FBQyxFQUUvQyxVQUFBVixLQUFLO0VBQUEsT0FDbkJBLEtBQUssQ0FBQ1UsU0FBUyxHQUFHVixLQUFLLENBQUNDLEtBQUssQ0FBQ0MsV0FBVyxHQUFHRixLQUFLLENBQUNDLEtBQUssQ0FBQ1UsY0FBYztBQUFBLEdBWXRFUixhQUFLLENBQUNDLFFBQVEsQ0FBQXhGLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFtRix1QkFBQSw4RUFJakI7QUFFRCxJQUFNYSxjQUFjLEdBQUdmLDRCQUFNLENBQUNDLEdBQUcsQ0FBQWpGLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFrRix1QkFBQSx5SkFPaEM7QUFFRCxJQUFNYyxnQkFBZ0IsR0FBR2hCLDRCQUFNLENBQUNDLEdBQUcsQ0FBQWhGLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFpRix1QkFBQSw0TkFDeEIsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDYSxlQUFlO0FBQUEsR0FRbEMsVUFBQWQsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDYyxZQUFZO0FBQUEsRUFHN0M7QUFFRCxJQUFNQyxtQkFBbUIsR0FBR25CLDRCQUFNLENBQUNDLEdBQUcsQ0FBQS9FLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFnRix1QkFBQSx3SUFDM0JKLGFBQWEsQ0FLdkI7QUFFRCxJQUFNc0IsaUJBQWlCLEdBQUdwQiw0QkFBTSxDQUFDQyxHQUFHLENBQUE5RSxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBK0UsdUJBQUEsc0NBRW5DO0FBRUQsSUFBTW1CLGdCQUFnQixHQUFHckIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBN0UsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQThFLHVCQUFBLG9FQUlsQztBQUVELElBQU1vQixhQUFhLEdBQUd0Qiw0QkFBTSxDQUFDQyxHQUFHLENBQUE1RSxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBNkUsdUJBQUEsNE5BWS9CO0FBRUQsSUFBTXFCLHFCQUFxQixHQUFHdkIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBM0UsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQTRFLHVCQUFBLDJHQUt2QztBQUVELElBQU1zQixnQkFBZ0IsR0FBRyxJQUFBeEIsNEJBQU0sRUFBQ3NCLGFBQWEsQ0FBQyxDQUFBL0YsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQTJFLHVCQUFBLGlFQUc3QztBQUVELElBQU11QixtQkFBbUIsR0FBR3pCLDRCQUFNLENBQUNDLEdBQUcsQ0FBQXpFLGlCQUFBLEtBQUFBLGlCQUFBLE9BQUEwRSx1QkFBQSxvS0FRckM7QUFFRCxJQUFNd0Isa0JBQWtCLEdBQUcxQiw0QkFBTSxDQUFDQyxHQUFHLENBQUF4RSxpQkFBQSxLQUFBQSxpQkFBQSxPQUFBeUUsdUJBQUEsa0pBT3BDO0FBRUQsSUFBTXlCLG9CQUFvQixHQUFHLElBQUEzQiw0QkFBTSxFQUFDNEIsNkJBQVUsQ0FBQyxDQUFBbEcsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQXdFLHVCQUFBLHdFQUk5QztBQUVELElBQU0yQix3QkFBd0IsR0FBRzdCLDRCQUFNLENBQUM4QixNQUFNLENBQUFuRyxpQkFBQSxLQUFBQSxpQkFBQSxPQUFBdUUsdUJBQUEsc0pBQzFDLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQzJCLE9BQU87QUFBQSxFQU8vQjtBQUVELElBQU1DLHVCQUF1QixHQUFHLElBQUFoQyw0QkFBTSxFQUFDaUMseUJBQU0sQ0FBQyxDQUFBckcsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQXNFLHVCQUFBLHlHQUs3QztBQUVELElBQU1nQyxxQkFBcUIsR0FBRyxJQUFJO0FBRWxDLFNBQVNDLGlCQUFpQkEsQ0FDeEJDLFFBQTZCLEVBQzdCQyxLQUFhLEVBQ2JDLEdBQVcsRUFDVTtFQUNyQixPQUFPeEYsTUFBTSxDQUFDcUMsSUFBSSxDQUFDaUQsUUFBUSxDQUFDLENBQUNHLE1BQU0sQ0FBc0IsVUFBQ0MsSUFBSSxFQUFFQyxHQUFHLEVBQUs7SUFDdEUsSUFBTUMsSUFBSSxHQUFHTixRQUFRLENBQUNLLEdBQUcsQ0FBQztJQUMxQkQsSUFBSSxDQUFDQyxHQUFHLENBQUMsR0FBQWpELGFBQUEsQ0FBQUEsYUFBQSxLQUNKa0QsSUFBSTtNQUNQQyxPQUFPLEVBQUVOLEtBQUssR0FBRyxDQUFDSyxJQUFJLENBQUNDLE9BQU8sSUFBSSxDQUFDLEtBQUtMLEdBQUcsR0FBR0QsS0FBSztJQUFDLEVBQ3JEO0lBQ0QsT0FBT0csSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSO0FBRUEsU0FBU0ksdUJBQXVCQSxDQUFBQyxJQUFBLEVBUVI7RUFBQSxJQVB0QkMsV0FBVyxHQUFBRCxJQUFBLENBQVhDLFdBQVc7SUFDWEMsbUJBQW1CLEdBQUFGLElBQUEsQ0FBbkJFLG1CQUFtQjtJQUNuQkMsY0FBYyxHQUFBSCxJQUFBLENBQWRHLGNBQWM7RUFNZCxJQUFNQyxhQUFhLEdBQUduRyxNQUFNLENBQUNxQyxJQUFJLENBQUM2RCxjQUFjLENBQUMsQ0FBQ3pGLE1BQU0sR0FBRyxDQUFDO0VBQzVELElBQUksQ0FBQzBGLGFBQWEsRUFBRTtJQUNsQixPQUFPRixtQkFBbUI7RUFDNUI7RUFDQSxJQUFJRCxXQUFXLEVBQUU7SUFDZixPQUFPWCxpQkFBaUIsQ0FBQ1ksbUJBQW1CLEVBQUViLHFCQUFxQixFQUFFLENBQUMsQ0FBQztFQUN6RTtFQUNBLE9BQU9DLGlCQUFpQixDQUFDYSxjQUFjLEVBQUUsQ0FBQyxFQUFFZCxxQkFBcUIsQ0FBQztBQUNwRTtBQTJCQSxTQUFTZ0IsaUJBQWlCQSxDQUFBLEVBQUc7RUFDM0I7RUFBQSxJQUNNQyxVQUFVLDBCQUFBQyxVQUFBO0lBQUEsU0FBQUQsV0FBQTtNQUFBLElBQUFFLEtBQUE7TUFBQSxJQUFBQyxnQkFBQSxtQkFBQUgsVUFBQTtNQUFBLFNBQUFJLElBQUEsR0FBQTlELFNBQUEsQ0FBQWxDLE1BQUEsRUFBQWlHLElBQUEsT0FBQXBHLEtBQUEsQ0FBQW1HLElBQUEsR0FBQUUsSUFBQSxNQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQTtRQUFBRCxJQUFBLENBQUFDLElBQUEsSUFBQWhFLFNBQUEsQ0FBQWdFLElBQUE7TUFBQTtNQUFBSixLQUFBLEdBQUE3RSxVQUFBLE9BQUEyRSxVQUFBLEtBQUFPLE1BQUEsQ0FBQUYsSUFBQTtNQUFBLElBQUE3RCxnQkFBQSxhQUFBMEQsS0FBQSxXQUNXO1FBQ3ZCTSxRQUFRLEVBQUUsS0FBSztRQUNmYixXQUFXLEVBQUUsS0FBSztRQUNsQmMsS0FBSyxFQUFFLEVBQUU7UUFDVEMsVUFBVSxFQUFFLEVBQUU7UUFDZEMsU0FBUyxFQUFFLEVBQUU7UUFDYkMsWUFBWSxFQUFFLE1BQU07UUFDcEJDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxhQUFhLEVBQUUsS0FBSztRQUNwQmpCLGNBQWMsRUFBRSxDQUFDO01BQ25CLENBQUM7TUFBQSxJQUFBckQsZ0JBQUEsYUFBQTBELEtBQUEsd0JBaUJPLElBQUFhLGdCQUFTLEVBQWlCLENBQUM7TUFBQSxJQUFBdkUsZ0JBQUEsYUFBQTBELEtBQUEsc0JBRWhCLFVBQUFjLFFBQVEsRUFBSTtRQUM3QixJQUFBQyxxQkFBQSxHQUE4QmYsS0FBQSxDQUFLbEQsS0FBSyxDQUFqQ2tFLGNBQWM7VUFBZEEsY0FBYyxHQUFBRCxxQkFBQSxjQUFHLEVBQUUsR0FBQUEscUJBQUE7UUFDMUIsSUFBTUUsT0FBTyxHQUFHRCxjQUFjLENBQUNFLElBQUksQ0FBQyxVQUFBQyxHQUFHO1VBQUEsT0FBSUwsUUFBUSxDQUFDTSxRQUFRLENBQUNELEdBQUcsQ0FBQztRQUFBLEVBQUM7UUFFbEUsT0FBT3pGLE9BQU8sQ0FBQ3VGLE9BQU8sQ0FBQztNQUN6QixDQUFDO01BRUQ7TUFBQSxJQUFBM0UsZ0JBQUEsYUFBQTBELEtBQUEsc0JBQ21CLFVBQUNxQixRQUFrQixFQUFFQyxLQUFVLEVBQUs7UUFDckQsSUFBSUEsS0FBSyxFQUFFO1VBQ1RBLEtBQUssQ0FBQ0MsZUFBZSxDQUFDLENBQUM7UUFDekI7UUFFQSxJQUFNaEIsS0FBSyxHQUFHLElBQUFpQixtQkFBQSxhQUFJSCxRQUFRLEVBQUVyRixNQUFNLENBQUNOLE9BQU8sQ0FBQztRQUUzQyxJQUFBK0YscUJBQUEsR0FBeUN6QixLQUFBLENBQUtsRCxLQUFLLENBQTVDNEUsc0JBQXNCO1VBQXRCQSxzQkFBc0IsR0FBQUQscUJBQUEsY0FBRyxLQUFLLEdBQUFBLHFCQUFBOztRQUVyQztRQUNBLElBQU1FLFdBQW1CLEdBQUcsRUFBRTtRQUM5QixJQUFNbkIsVUFBb0IsR0FBRyxFQUFFO1FBQUMsSUFBQW9CLFNBQUEsR0FBQWhJLDBCQUFBLENBQ2IyRyxLQUFLO1VBQUFzQixLQUFBO1FBQUE7VUFBeEIsS0FBQUQsU0FBQSxDQUFBdkgsQ0FBQSxNQUFBd0gsS0FBQSxHQUFBRCxTQUFBLENBQUFoSixDQUFBLElBQUEwQixJQUFBLEdBQTBCO1lBQUEsSUFBZndILElBQUksR0FBQUQsS0FBQSxDQUFBdEgsS0FBQTtZQUNiLElBQUltSCxzQkFBc0IsSUFBSTFCLEtBQUEsQ0FBSytCLGdCQUFnQixDQUFDRCxJQUFJLENBQUM5RyxJQUFJLENBQUMsRUFBRTtjQUM5RDJHLFdBQVcsQ0FBQ3pGLElBQUksQ0FBQzRGLElBQUksQ0FBQztZQUN4QixDQUFDLE1BQU07Y0FDTHRCLFVBQVUsQ0FBQ3RFLElBQUksQ0FBQzRGLElBQUksQ0FBQzlHLElBQUksQ0FBQztZQUM1QjtVQUNGO1FBQUMsU0FBQWdILEdBQUE7VUFBQUosU0FBQSxDQUFBcEosQ0FBQSxDQUFBd0osR0FBQTtRQUFBO1VBQUFKLFNBQUEsQ0FBQTVJLENBQUE7UUFBQTtRQUVELElBQU1pSixTQUFTLEdBQUc7VUFBQzFCLEtBQUssRUFBRW9CLFdBQVc7VUFBRW5CLFVBQVUsRUFBVkEsVUFBVTtVQUFFRixRQUFRLEVBQUU7UUFBSyxDQUFDO1FBRW5FTixLQUFBLENBQUtrQyxRQUFRLENBQUNELFNBQVMsRUFBRTtVQUFBLE9BQ3ZCQSxTQUFTLENBQUMxQixLQUFLLENBQUNyRyxNQUFNLEdBQUc4RixLQUFBLENBQUtsRCxLQUFLLENBQUNxRixZQUFZLENBQUNGLFNBQVMsQ0FBQzFCLEtBQUssQ0FBQyxHQUFHLElBQUk7UUFBQSxDQUMxRSxDQUFDO01BQ0gsQ0FBQztNQUFBLElBQUFqRSxnQkFBQSxhQUFBMEQsS0FBQSxzQkFFa0IsVUFBQW9DLFFBQVEsRUFBSTtRQUM3QnBDLEtBQUEsQ0FBS2tDLFFBQVEsQ0FBQztVQUFDNUIsUUFBUSxFQUFFOEI7UUFBUSxDQUFDLENBQUM7TUFDckMsQ0FBQztNQUFBLElBQUE5RixnQkFBQSxhQUFBMEQsS0FBQSx3QkFFb0IsVUFBQ3NCLEtBQTBDLEVBQUs7UUFDbkUsSUFBTWIsU0FBUyxHQUFHYSxLQUFLLENBQUNlLE1BQU0sQ0FBQzlILEtBQUs7UUFDcEN5RixLQUFBLENBQUtrQyxRQUFRLENBQUM7VUFDWnpCLFNBQVMsRUFBVEEsU0FBUztVQUNURSxXQUFXLEVBQUVGLFNBQVMsSUFBSSxDQUFDLElBQUE2Qiw4QkFBa0IsRUFBQzdCLFNBQVMsQ0FBQyxHQUFHO1lBQUM4QixPQUFPLEVBQUU7VUFBZSxDQUFDLEdBQUc7UUFDMUYsQ0FBQyxDQUFDO01BQ0osQ0FBQztNQUFBLElBQUFqRyxnQkFBQSxhQUFBMEQsS0FBQSwyQkFFdUIsVUFBQ3NCLEtBQTJDLEVBQUs7UUFDdkV0QixLQUFBLENBQUtrQyxRQUFRLENBQUM7VUFBQ3hCLFlBQVksRUFBRVksS0FBSyxDQUFDZSxNQUFNLENBQUM5SDtRQUFLLENBQUMsQ0FBQztNQUNuRCxDQUFDO01BQUEsSUFBQStCLGdCQUFBLGFBQUEwRCxLQUFBLHlCQUVxQixVQUFDc0IsS0FBNEMsRUFBSztRQUN0RSxJQUFJQSxLQUFLLENBQUNsQyxHQUFHLEtBQUssT0FBTyxFQUFFO1VBQ3pCa0MsS0FBSyxDQUFDa0IsY0FBYyxDQUFDLENBQUM7VUFDdEJ4QyxLQUFBLENBQUt5QyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlCO01BQ0YsQ0FBQztNQUFBLElBQUFuRyxnQkFBQSxhQUFBMEQsS0FBQSw0Q0FBQTBDLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FFdUIsU0FBQUMsUUFBQTtRQUFBLElBQUFDLFdBQUEsRUFBQXJDLFNBQUEsRUFBQUMsWUFBQSxFQUFBQyxXQUFBLEVBQUFvQyxJQUFBLEVBQUFDLGtCQUFBLEVBQUFDLE1BQUEsRUFBQUMsUUFBQSxFQUFBQyxXQUFBLEVBQUFDLFVBQUEsRUFBQXRCLElBQUE7UUFBQSxPQUFBYSxZQUFBLFlBQUFVLElBQUEsVUFBQUMsU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBNUksSUFBQTtZQUFBO2NBQUFtSSxXQUFBLEdBQ3lCOUMsS0FBQSxDQUFLeUQsS0FBSyxFQUFsRGhELFNBQVMsR0FBQXFDLFdBQUEsQ0FBVHJDLFNBQVMsRUFBRUMsWUFBWSxHQUFBb0MsV0FBQSxDQUFacEMsWUFBWSxFQUFFQyxXQUFXLEdBQUFtQyxXQUFBLENBQVhuQyxXQUFXO2NBQ3BDb0MsSUFBSSxHQUFJL0MsS0FBQSxDQUFLbEQsS0FBSyxDQUFsQmlHLElBQUk7Y0FDTEMsa0JBQWtCLEdBQUcsSUFBQVUsMkJBQW9CLEVBQUMsQ0FBQyxDQUFDQyw4QkFBOEI7Y0FDMUVWLE1BQU0sR0FBR0Qsa0JBQWtCLElBQUl0QyxZQUFZLEtBQUssTUFBTSxHQUFHQSxZQUFZLEdBQUdrRCxTQUFTO2NBQUEsTUFDbkYsQ0FBQ25ELFNBQVMsSUFBSUUsV0FBVyxJQUFJWCxLQUFBLENBQUt5RCxLQUFLLENBQUM3QyxhQUFhO2dCQUFBMkMsUUFBQSxDQUFBNUksSUFBQTtnQkFBQTtjQUFBO2NBQ3ZELElBQUksQ0FBQzhGLFNBQVMsRUFBRTtnQkFDZFQsS0FBQSxDQUFLa0MsUUFBUSxDQUFDO2tCQUFDdkIsV0FBVyxFQUFFO29CQUFDNEIsT0FBTyxFQUFFO2tCQUFlO2dCQUFDLENBQUMsQ0FBQztjQUMxRDtjQUFDLE9BQUFnQixRQUFBLENBQUFNLE1BQUE7WUFBQTtjQUFBLElBR0UsSUFBQXZCLDhCQUFrQixFQUFDN0IsU0FBUyxDQUFDO2dCQUFBOEMsUUFBQSxDQUFBNUksSUFBQTtnQkFBQTtjQUFBO2NBQ2hDcUYsS0FBQSxDQUFLa0MsUUFBUSxDQUFDO2dCQUFDdkIsV0FBVyxFQUFFO2tCQUFDNEIsT0FBTyxFQUFFO2dCQUFlO2NBQUMsQ0FBQyxDQUFDO2NBQUMsT0FBQWdCLFFBQUEsQ0FBQU0sTUFBQTtZQUFBO2NBSXJEWCxRQUFRLEdBQUcsSUFBQVksbUNBQXVCLEVBQUNyRCxTQUFTLEVBQUV3QyxNQUFNLENBQUM7Y0FDckRFLFdBQVcsR0FBR0osSUFBSSxDQUFDZ0IsYUFBYSxDQUFDO2dCQUFDQyxFQUFFLEVBQUU7Y0FBMEIsQ0FBQyxDQUFDO2NBQ3hFaEUsS0FBQSxDQUFLa0MsUUFBUSxDQUFDO2dCQUNadEIsYUFBYSxFQUFFLElBQUk7Z0JBQ25CRCxXQUFXLEVBQUUsSUFBSTtnQkFDakJoQixjQUFjLE1BQUFyRCxnQkFBQSxpQkFDWDRHLFFBQVEsRUFBRztrQkFDVkEsUUFBUSxFQUFSQSxRQUFRO2tCQUNSNUQsT0FBTyxFQUFFLENBQUM7a0JBQ1ZpRCxPQUFPLEVBQUVZLFdBQVc7a0JBQ3BCYyxLQUFLLEVBQUU7Z0JBQ1QsQ0FBQztjQUVMLENBQUMsQ0FBQztjQUFDVixRQUFBLENBQUFDLElBQUE7Y0FHR0osVUFBVSxHQUFHLENBQUM7Y0FBQUcsUUFBQSxDQUFBNUksSUFBQTtjQUFBLE9BQ0MsSUFBQXVKLHVDQUEyQixFQUFDekQsU0FBUyxFQUFFd0MsTUFBTSxFQUFFLFVBQUFrQixLQUFBLEVBQWU7Z0JBQUEsSUFBYjdFLE9BQU8sR0FBQTZFLEtBQUEsQ0FBUDdFLE9BQU87Z0JBQ3pFLElBQU04RSxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUk5RSxPQUFPLEdBQUcsQ0FBQyxJQUFJOEUsR0FBRyxHQUFHaEIsVUFBVSxHQUFHLEdBQUcsRUFBRTtrQkFDekM7Z0JBQ0Y7Z0JBQ0FBLFVBQVUsR0FBR2dCLEdBQUc7Z0JBQ2hCcEUsS0FBQSxDQUFLa0MsUUFBUSxDQUFDLFVBQUFzQixJQUFJLEVBQUk7a0JBQ3BCLElBQU14SSxJQUFJLEdBQUd2QixNQUFNLENBQUNxQyxJQUFJLENBQUMwSCxJQUFJLENBQUM3RCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSXVELFFBQVE7a0JBQzVELE9BQU87b0JBQ0x2RCxjQUFjLE1BQUFyRCxnQkFBQSxpQkFDWHRCLElBQUksRUFBRztzQkFDTmtJLFFBQVEsRUFBRWxJLElBQUk7c0JBQ2RzRSxPQUFPLEVBQVBBLE9BQU87c0JBQ1BpRCxPQUFPLEVBQUVZLFdBQVc7c0JBQ3BCYyxLQUFLLEVBQUU7b0JBQ1QsQ0FBQztrQkFFTCxDQUFDO2dCQUNILENBQUMsQ0FBQztjQUNKLENBQUMsQ0FBQztZQUFBO2NBbkJJbkMsSUFBSSxHQUFBeUIsUUFBQSxDQUFBZSxJQUFBO2NBb0JWdEUsS0FBQSxDQUFLa0MsUUFBUSxDQUNYO2dCQUNFM0IsS0FBSyxFQUFFLENBQUN1QixJQUFJLENBQUM7Z0JBQ2J0QixVQUFVLEVBQUUsRUFBRTtnQkFDZEYsUUFBUSxFQUFFO2NBQ1osQ0FBQyxFQUNEO2dCQUFBLE9BQU1OLEtBQUEsQ0FBS2xELEtBQUssQ0FBQ3FGLFlBQVksQ0FBQyxDQUFDTCxJQUFJLENBQUMsQ0FBQztjQUFBLENBQ3ZDLENBQUM7Y0FBQ3lCLFFBQUEsQ0FBQTVJLElBQUE7Y0FBQTtZQUFBO2NBQUE0SSxRQUFBLENBQUFDLElBQUE7Y0FBQUQsUUFBQSxDQUFBZ0IsRUFBQSxHQUFBaEIsUUFBQTtjQUVGdkQsS0FBQSxDQUFLa0MsUUFBUSxDQUFDO2dCQUNadEIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCakIsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDbEJnQixXQUFXLEVBQUU7a0JBQ1g0QixPQUFPLEVBQUVnQixRQUFBLENBQUFnQixFQUFBLFlBQWlCQyxLQUFLLEdBQUdqQixRQUFBLENBQUFnQixFQUFBLENBQU1oQyxPQUFPLHFCQUFBbEMsTUFBQSxDQUFxQkksU0FBUztnQkFDL0U7Y0FDRixDQUFDLENBQUM7WUFBQztZQUFBO2NBQUEsT0FBQThDLFFBQUEsQ0FBQWtCLElBQUE7VUFBQTtRQUFBLEdBQUE1QixPQUFBO01BQUEsQ0FFTjtNQUFBLE9BQUE3QyxLQUFBO0lBQUE7SUFBQSxJQUFBMEUsVUFBQSxhQUFBNUUsVUFBQSxFQUFBQyxVQUFBO0lBQUEsV0FBQTRFLGFBQUEsYUFBQTdFLFVBQUE7TUFBQVYsR0FBQTtNQUFBN0UsS0FBQSxFQUVELFNBQUFxSyxNQUFNQSxDQUFBLEVBQUc7UUFBQSxJQUFBQyxNQUFBO1FBQ1AsSUFBQUMsWUFBQSxHQVNJLElBQUksQ0FBQ3JCLEtBQUs7VUFSWm5ELFFBQVEsR0FBQXdFLFlBQUEsQ0FBUnhFLFFBQVE7VUFDUkMsS0FBSyxHQUFBdUUsWUFBQSxDQUFMdkUsS0FBSztVQUNMQyxVQUFVLEdBQUFzRSxZQUFBLENBQVZ0RSxVQUFVO1VBQ1ZDLFNBQVMsR0FBQXFFLFlBQUEsQ0FBVHJFLFNBQVM7VUFDVEMsWUFBWSxHQUFBb0UsWUFBQSxDQUFacEUsWUFBWTtVQUNaQyxXQUFXLEdBQUFtRSxZQUFBLENBQVhuRSxXQUFXO1VBQ1hDLGFBQWEsR0FBQWtFLFlBQUEsQ0FBYmxFLGFBQWE7VUFDYmpCLGNBQWMsR0FBQW1GLFlBQUEsQ0FBZG5GLGNBQWM7UUFFaEIsSUFBQW9GLFdBQUEsR0FBd0QsSUFBSSxDQUFDakksS0FBSztVQUEzRDJDLFdBQVcsR0FBQXNGLFdBQUEsQ0FBWHRGLFdBQVc7VUFBRUMsbUJBQW1CLEdBQUFxRixXQUFBLENBQW5CckYsbUJBQW1CO1VBQUUzQyxLQUFLLEdBQUFnSSxXQUFBLENBQUxoSSxLQUFLO1VBQUVnRyxJQUFJLEdBQUFnQyxXQUFBLENBQUpoQyxJQUFJO1FBQ3BELElBQUFpQyxZQUFBLEdBQW9ELElBQUksQ0FBQ2xJLEtBQUs7VUFBQW1JLHFCQUFBLEdBQUFELFlBQUEsQ0FBdkRoRSxjQUFjO1VBQWRBLGNBQWMsR0FBQWlFLHFCQUFBLGNBQUcsRUFBRSxHQUFBQSxxQkFBQTtVQUFBQyxxQkFBQSxHQUFBRixZQUFBLENBQUVHLGVBQWU7VUFBZkEsZUFBZSxHQUFBRCxxQkFBQSxjQUFHLEVBQUUsR0FBQUEscUJBQUE7UUFDaEQsSUFBTWxDLGtCQUFrQixHQUFHLElBQUFVLDJCQUFvQixFQUFDLENBQUMsQ0FBQ0MsOEJBQThCO1FBQ2hGLElBQU15QixrQkFBa0IsTUFBQS9FLE1BQUEsQ0FBTTBDLElBQUksQ0FBQ2dCLGFBQWEsQ0FDOUM7VUFDRUMsRUFBRSxFQUFFO1FBQ04sQ0FBQyxFQUNEO1VBQ0VtQixlQUFlLEVBQUVBLGVBQWUsQ0FBQ0UsR0FBRyxDQUFDLFVBQUFwQyxNQUFNO1lBQUEsWUFBQTVDLE1BQUEsQ0FBUzRDLE1BQU07VUFBQSxDQUFJLENBQUMsQ0FBQ3FDLElBQUksQ0FBQyxJQUFJO1FBQzNFLENBQ0YsQ0FBQyxPQUFBakYsTUFBQSxDQUFJa0YsaUNBQXNCLE9BQUk7UUFDL0Isb0JBQ0VuUCxNQUFBLFlBQUFvUCxhQUFBLENBQUN4SCxnQkFBZ0I7VUFBQ3lILFNBQVMsRUFBQyxlQUFlO1VBQUNDLEdBQUcsRUFBRSxJQUFJLENBQUNDO1FBQU0sR0FDekRDLG9CQUFRLGdCQUNQeFAsTUFBQSxZQUFBb1AsYUFBQSxDQUFDM08sU0FBQSxXQUFRO1VBQ1A4TyxLQUFLLEVBQUUsSUFBSSxDQUFDQSxLQUFLLENBQUNFLE9BQU8sSUFBSUMsUUFBUztVQUN0Q0MsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQUE7WUFBQSxPQUFRbEIsTUFBSSxDQUFDbUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1VBQUEsQ0FBQztVQUM5Q0MsV0FBVyxFQUFFLFNBQWJBLFdBQVdBLENBQUE7WUFBQSxPQUFRcEIsTUFBSSxDQUFDbUIsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1VBQUEsQ0FBQztVQUNoREUsTUFBTSxFQUFFLElBQUksQ0FBQ0MsZ0JBQWlCO1VBQzlCVixTQUFTLEVBQUM7UUFBMEIsZ0JBRXBDclAsTUFBQSxZQUFBb1AsYUFBQSxDQUFDOUksbUJBQW1CO1VBQUMrSSxTQUFTLEVBQUM7UUFBc0IsZ0JBQ25EclAsTUFBQSxZQUFBb1AsYUFBQSxDQUFDck8sY0FBQSxXQUFRO1VBQ1BpUCxPQUFPLEVBQUU7WUFDUEMsU0FBUyxFQUFFO2NBQ1Q1TCxDQUFDLEVBQUU7Z0JBQ0Q2TCxTQUFTLEVBQUVDO2NBQ2I7WUFDRjtVQUNGO1FBQUUsR0FFRG5CLGtCQUNPLENBQ1MsQ0FBQyxlQUN0QmhQLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ2pJLGNBQWM7VUFBQ0MsU0FBUyxFQUFFOEM7UUFBUyxnQkFDbENsSyxNQUFBLFlBQUFvUCxhQUFBLENBQUM5SCxjQUFjLHFCQUNidEgsTUFBQSxZQUFBb1AsYUFBQSxDQUFDekgsaUJBQWlCO1VBQUMwSCxTQUFTLEVBQUM7UUFBZSxHQUN6Q3pFLGNBQWMsQ0FBQ3FFLEdBQUcsQ0FBQyxVQUFBbEUsR0FBRztVQUFBLG9CQUNyQi9LLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQzdPLE1BQUEsQ0FBQTZQLFFBQVE7WUFBQ3BILEdBQUcsRUFBRStCLEdBQUk7WUFBQ0EsR0FBRyxFQUFFQSxHQUFJO1lBQUNzRixNQUFNLEVBQUMsTUFBTTtZQUFDQyxRQUFRLEVBQUM7VUFBSyxDQUFFLENBQUM7UUFBQSxDQUM5RCxDQUNnQixDQUFDLEVBQ25CakgsV0FBVyxJQUFJbUIsYUFBYSxnQkFDM0J4SyxNQUFBLFlBQUFvUCxhQUFBLENBQUM1TyxtQkFBQSxXQUFrQjtVQUNqQjhJLG1CQUFtQixFQUFFSCx1QkFBdUIsQ0FBQztZQUMzQ0UsV0FBVyxFQUFYQSxXQUFXO1lBQ1hDLG1CQUFtQixFQUFuQkEsbUJBQW1CO1lBQ25CQyxjQUFjLEVBQWRBO1VBQ0YsQ0FBQyxDQUFFO1VBQ0g1QyxLQUFLLEVBQUVBO1FBQU0sQ0FDZCxDQUFDLGdCQUVGM0csTUFBQSxZQUFBb1AsYUFBQSxDQUFBcFAsTUFBQSxZQUFBdVEsUUFBQSxxQkFDRXZRLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQzFILG1CQUFtQjtVQUNsQjhJLEtBQUssRUFBRTtZQUFDQyxPQUFPLEVBQUV2RyxRQUFRLEdBQUcsR0FBRyxHQUFHO1VBQUMsQ0FBRTtVQUNyQ21GLFNBQVMsRUFBQztRQUE2QixnQkFFdkNyUCxNQUFBLFlBQUFvUCxhQUFBLENBQUM3TyxNQUFBLENBQUFtUSxTQUFTO1VBQUNMLE1BQU0sRUFBQztRQUFNLENBQUUsQ0FBQyxFQUMxQmpHLFVBQVUsQ0FBQ3RHLE1BQU0sZ0JBQ2hCOUQsTUFBQSxZQUFBb1AsYUFBQSxDQUFDckksVUFBVSxxQkFDVC9HLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3pPLGFBQUEsQ0FBQWdRLGdCQUFnQjtVQUNmL0MsRUFBRSxFQUFFLCtCQUFnQztVQUNwQ2dELE1BQU0sRUFBRTtZQUFDeEcsVUFBVSxFQUFFQSxVQUFVLENBQUM4RSxJQUFJLENBQUMsSUFBSTtVQUFDO1FBQUUsQ0FDN0MsQ0FDUyxDQUFDLEdBQ1gsSUFDZSxDQUFDLEVBQ3JCLENBQUMvRSxLQUFLLENBQUNyRyxNQUFNLGdCQUNaOUQsTUFBQSxZQUFBb1AsYUFBQSxDQUFDdEgscUJBQXFCLHFCQUNwQjlILE1BQUEsWUFBQW9QLGFBQUEsQ0FBQzdILGdCQUFnQixxQkFDZnZILE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3pPLGFBQUEsQ0FBQWdRLGdCQUFnQjtVQUNmL0MsRUFBRSxFQUFFLDBCQUEyQjtVQUMvQmdELE1BQU0sRUFBRTtZQUNOQyxNQUFNLGVBQ0o3USxNQUFBLFlBQUFvUCxhQUFBLENBQUM5TyxhQUFBLFdBQVk7Y0FBQzBJLEdBQUcsRUFBQyxRQUFRO2NBQUM4SCxRQUFRLEVBQUUsSUFBSSxDQUFDZjtZQUFpQixHQUN4RHBELElBQUksQ0FBQ2dCLGFBQWEsQ0FBQztjQUFDQyxFQUFFLEVBQUU7WUFBMEIsQ0FBQyxDQUN4QztVQUVsQjtRQUFFLENBQ0gsQ0FDZSxDQUFDLGVBQ25CNU4sTUFBQSxZQUFBb1AsYUFBQSxDQUFDcEgsbUJBQW1CO1VBQ2xCcUgsU0FBUyxFQUFDLDJCQUEyQjtVQUNyQzBCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFN0YsS0FBSztZQUFBLE9BQUlBLEtBQUssQ0FBQ0MsZUFBZSxDQUFDLENBQUM7VUFBQTtRQUFDLGdCQUUxQ25MLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ25ILGtCQUFrQixxQkFDakJqSSxNQUFBLFlBQUFvUCxhQUFBLENBQUNsSCxvQkFBb0I7VUFDbkI4SSxJQUFJLEVBQUMsS0FBSztVQUNWN00sS0FBSyxFQUFFa0csU0FBVTtVQUNqQixjQUFZc0MsSUFBSSxDQUFDZ0IsYUFBYSxDQUFDO1lBQzdCQyxFQUFFLEVBQUU7VUFDTixDQUFDLENBQUU7VUFDSHFELFdBQVcsRUFBRXRFLElBQUksQ0FBQ2dCLGFBQWEsQ0FBQztZQUM5QkMsRUFBRSxFQUFFO1VBQ04sQ0FBQyxDQUFFO1VBQ0hzRCxRQUFRLEVBQUUsSUFBSSxDQUFDQyxrQkFBbUI7VUFDbENDLFNBQVMsRUFBRSxJQUFJLENBQUNDLG1CQUFvQjtVQUNwQ0MsUUFBUSxFQUFFOUc7UUFBYyxDQUN6QixDQUFDLEVBQ0RvQyxrQkFBa0IsZ0JBQ2pCNU0sTUFBQSxZQUFBb1AsYUFBQSxDQUFDaEgsd0JBQXdCO1VBQ3ZCaUgsU0FBUyxFQUFDLDhCQUE4QjtVQUN4QyxjQUFZMUMsSUFBSSxDQUFDZ0IsYUFBYSxDQUFDO1lBQUNDLEVBQUUsRUFBRTtVQUFxQixDQUFDLENBQUU7VUFDNUR6SixLQUFLLEVBQUVtRyxZQUFhO1VBQ3BCNEcsUUFBUSxFQUFFLElBQUksQ0FBQ0sscUJBQXNCO1VBQ3JDRCxRQUFRLEVBQUU5RztRQUFjLEdBRXZCZ0gsOEJBQW1CLENBQUN2QyxHQUFHLENBQUMsVUFBQXBDLE1BQU07VUFBQSxvQkFDN0I3TSxNQUFBLFlBQUFvUCxhQUFBO1lBQVFwRyxHQUFHLEVBQUU2RCxNQUFPO1lBQUMxSSxLQUFLLEVBQUUwSTtVQUFPLEdBQ2hDQSxNQUFNLEtBQUssTUFBTSxHQUNkRixJQUFJLENBQUNnQixhQUFhLENBQUM7WUFBQ0MsRUFBRSxFQUFFO1VBQXlCLENBQUMsQ0FBQyxHQUNuRGYsTUFBTSxDQUFDNEUsV0FBVyxDQUFDLENBQ2pCLENBQUM7UUFBQSxDQUNWLENBQ3VCLENBQUMsR0FDekIsSUFBSSxlQUNSelIsTUFBQSxZQUFBb1AsYUFBQSxDQUFDN0csdUJBQXVCO1VBQ3RCeUksSUFBSSxFQUFDLFFBQVE7VUFDYlUsR0FBRztVQUNIQyxLQUFLO1VBQ0xMLFFBQVEsRUFBRSxDQUFDakgsU0FBUyxJQUFJRyxhQUFjO1VBQ3RDdUcsT0FBTyxFQUFFLElBQUksQ0FBQzFFO1FBQXNCLGdCQUVwQ3JNLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3pPLGFBQUEsQ0FBQWdRLGdCQUFnQjtVQUFDL0MsRUFBRSxFQUFFO1FBQXFCLENBQUUsQ0FDdEIsQ0FDUCxDQUFDLEVBQ3BCckQsV0FBVyxnQkFBR3ZLLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3JJLFVBQVUsUUFBRXdELFdBQVcsQ0FBQzRCLE9BQW9CLENBQUMsR0FBRyxJQUM3QyxDQUNBLENBQUMsR0FDdEIsSUFDSixDQUVVLENBQUMsRUFDaEI5QyxXQUFXLElBQUltQixhQUFhLEdBQUcsSUFBSSxnQkFDbEN4SyxNQUFBLFlBQUFvUCxhQUFBLENBQUNySCxnQkFBZ0IscUJBQ2YvSCxNQUFBLFlBQUFvUCxhQUFBLENBQUN6TyxhQUFBLENBQUFnUSxnQkFBZ0I7VUFBQy9DLEVBQUUsRUFBRTtRQUEwQixDQUFFLENBQ2xDLENBRU4sQ0FDUixDQUFDLEdBQ1QsSUFBSSxlQUVSNU4sTUFBQSxZQUFBb1AsYUFBQSxDQUFDckksVUFBVSxRQUNSLElBQUE2SyxlQUFRLEVBQUMsQ0FBQyxnQkFBRzVSLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3pPLGFBQUEsQ0FBQWdRLGdCQUFnQjtVQUFDL0MsRUFBRSxFQUFFO1FBQTZCLENBQUUsQ0FBQyxHQUFHLEVBQzdELENBQ0ksQ0FBQztNQUV2QjtJQUFDO01BQUE1RSxHQUFBO01BQUE3RSxLQUFBLEVBaFRELFNBQU8wTix3QkFBd0JBLENBQUNuTCxLQUFLLEVBQUUyRyxLQUFLLEVBQUU7UUFDNUMsSUFBSUEsS0FBSyxDQUFDaEUsV0FBVyxJQUFJM0MsS0FBSyxDQUFDMkMsV0FBVyxLQUFLLEtBQUssSUFBSWdFLEtBQUssQ0FBQ2xELEtBQUssQ0FBQ3JHLE1BQU0sRUFBRTtVQUMxRSxPQUFPO1lBQ0xxRyxLQUFLLEVBQUUsRUFBRTtZQUNUZCxXQUFXLEVBQUUzQyxLQUFLLENBQUMyQyxXQUFXO1lBQzlCbUIsYUFBYSxFQUFFLEtBQUs7WUFDcEJqQixjQUFjLEVBQUUsQ0FBQztVQUNuQixDQUFDO1FBQ0g7UUFDQSxPQUFBeEQsYUFBQTtVQUNFc0QsV0FBVyxFQUFFM0MsS0FBSyxDQUFDMkM7UUFBVyxHQUMxQjNDLEtBQUssQ0FBQzJDLFdBQVcsR0FBRztVQUFDbUIsYUFBYSxFQUFFO1FBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUV2RDtJQUFDO0VBQUEsRUExQnNCc0gsZ0JBQVM7RUFnVWxDLE9BQU8sSUFBQUMscUJBQVUsRUFBQ3JJLFVBQVUsQ0FBQztBQUMvQjtBQUFDLElBQUFzSSxRQUFBLEdBQUFoTCxPQUFBLGNBRWN5QyxpQkFBaUI7QUFDekIsSUFBTUMsVUFBVSxHQUFBMUMsT0FBQSxDQUFBMEMsVUFBQSxHQUFHRCxpQkFBaUIsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119