@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.
- package/dist/cjs/common/data-table/grid.js +2 -2
- package/dist/cjs/common/data-table/index.js +3 -3
- package/dist/cjs/common/file-uploader/file-upload.js +251 -40
- package/dist/cjs/common/icons/circle.js +54 -0
- package/dist/cjs/common/icons/index.js +8 -1
- package/dist/cjs/common/item-selector/item-selector.js +2 -2
- package/dist/cjs/common/portaled.js +3 -3
- package/dist/cjs/common/time-range-slider.js +2 -2
- package/dist/cjs/common/timeline-slider.js +2 -2
- package/dist/cjs/editor/editor.js +2 -2
- package/dist/cjs/effects/effect-configurator.js +2 -2
- package/dist/cjs/effects/effect-manager.js +32 -17
- package/dist/cjs/effects/effect-time-configurator.js +110 -42
- package/dist/cjs/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/cjs/filters/time-widget.js +2 -2
- package/dist/cjs/kepler-gl.js +6 -2
- package/dist/cjs/map/layer-hover-info.js +2 -2
- package/dist/cjs/map/map-control.js +2 -2
- package/dist/cjs/map/map-draw-panel.js +10 -1
- package/dist/cjs/map-container.js +2 -2
- package/dist/cjs/map-view-state-context.js +3 -3
- package/dist/cjs/modal-container.js +2 -2
- package/dist/cjs/modals/cloud-components/cloud-storage-disclaimer.js +24 -0
- package/dist/cjs/modals/cloud-tile.js +39 -10
- package/dist/cjs/modals/export-map-modal/components.js +16 -7
- package/dist/cjs/modals/export-map-modal/export-html-map.js +5 -9
- package/dist/cjs/modals/export-map-modal/export-json-map.js +4 -8
- package/dist/cjs/modals/export-map-modal/export-map-modal.js +21 -16
- package/dist/cjs/modals/image-modal-container.js +2 -2
- package/dist/cjs/modals/load-data-modal.js +3 -3
- package/dist/cjs/modals/load-storage-map.js +9 -6
- package/dist/cjs/modals/save-map-modal.js +4 -3
- package/dist/cjs/modals/share-map-modal.js +5 -4
- package/dist/cjs/modals/swipe-export-video-preview.js +2 -2
- package/dist/cjs/notification-panel/notification-item.js +58 -12
- package/dist/cjs/plot-container.js +12 -5
- package/dist/cjs/remote-dataset-refresh-controller.js +50 -0
- package/dist/cjs/side-panel/common/dataset-info.js +187 -8
- package/dist/cjs/side-panel/common/dataset-refresh-progress.js +63 -0
- package/dist/cjs/side-panel/common/dataset-title.js +76 -13
- package/dist/cjs/side-panel/common/source-data-catalog.js +31 -6
- package/dist/cjs/side-panel/filter-manager.js +7 -3
- package/dist/cjs/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/cjs/side-panel/layer-manager.js +14 -4
- package/dist/cjs/side-panel/layer-panel/custom-palette.js +2 -2
- package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +14 -4
- package/dist/cjs/side-panel/layer-panel/dataset-section.js +7 -3
- package/dist/cjs/side-panel/layer-panel/layer-configurator.js +49 -35
- package/dist/cjs/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
- package/dist/common/icons/circle.d.ts +10 -0
- package/dist/common/icons/index.d.ts +1 -0
- package/dist/effects/effect-manager.d.ts +1 -1
- package/dist/esm/common/data-table/grid.js +2 -2
- package/dist/esm/common/data-table/index.js +3 -3
- package/dist/esm/common/file-uploader/file-upload.js +252 -41
- package/dist/esm/common/icons/circle.js +48 -0
- package/dist/esm/common/icons/index.js +2 -1
- package/dist/esm/common/item-selector/item-selector.js +2 -2
- package/dist/esm/common/portaled.js +3 -3
- package/dist/esm/common/time-range-slider.js +2 -2
- package/dist/esm/common/timeline-slider.js +2 -2
- package/dist/esm/editor/editor.js +2 -2
- package/dist/esm/effects/effect-configurator.js +2 -2
- package/dist/esm/effects/effect-manager.js +34 -19
- package/dist/esm/effects/effect-time-configurator.js +111 -43
- package/dist/esm/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/esm/filters/time-widget.js +2 -2
- package/dist/esm/kepler-gl.js +6 -2
- package/dist/esm/map/layer-hover-info.js +2 -2
- package/dist/esm/map/map-control.js +2 -2
- package/dist/esm/map/map-draw-panel.js +11 -2
- package/dist/esm/map-container.js +2 -2
- package/dist/esm/map-view-state-context.js +3 -3
- package/dist/esm/modal-container.js +2 -2
- package/dist/esm/modals/cloud-components/cloud-storage-disclaimer.js +19 -0
- package/dist/esm/modals/cloud-tile.js +39 -10
- package/dist/esm/modals/export-map-modal/components.js +16 -7
- package/dist/esm/modals/export-map-modal/export-html-map.js +6 -10
- package/dist/esm/modals/export-map-modal/export-json-map.js +5 -9
- package/dist/esm/modals/export-map-modal/export-map-modal.js +21 -14
- package/dist/esm/modals/image-modal-container.js +2 -2
- package/dist/esm/modals/load-data-modal.js +3 -3
- package/dist/esm/modals/load-storage-map.js +8 -3
- package/dist/esm/modals/save-map-modal.js +4 -3
- package/dist/esm/modals/share-map-modal.js +5 -4
- package/dist/esm/modals/swipe-export-video-preview.js +2 -2
- package/dist/esm/notification-panel/notification-item.js +60 -14
- package/dist/esm/plot-container.js +12 -5
- package/dist/esm/remote-dataset-refresh-controller.js +44 -0
- package/dist/esm/side-panel/common/dataset-info.js +186 -9
- package/dist/esm/side-panel/common/dataset-refresh-progress.js +56 -0
- package/dist/esm/side-panel/common/dataset-title.js +77 -14
- package/dist/esm/side-panel/common/source-data-catalog.js +29 -6
- package/dist/esm/side-panel/filter-manager.js +7 -3
- package/dist/esm/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/esm/side-panel/layer-manager.js +14 -4
- package/dist/esm/side-panel/layer-panel/custom-palette.js +2 -2
- package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +14 -4
- package/dist/esm/side-panel/layer-panel/dataset-section.js +7 -3
- package/dist/esm/side-panel/layer-panel/layer-configurator.js +49 -35
- package/dist/esm/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
- package/dist/kepler-gl.d.ts +1 -0
- package/dist/modals/cloud-components/cloud-storage-disclaimer.d.ts +2 -0
- package/dist/modals/export-map-modal/components.d.ts +14 -0
- package/dist/remote-dataset-refresh-controller.d.ts +11 -0
- package/dist/side-panel/common/dataset-info.d.ts +10 -0
- package/dist/side-panel/common/dataset-refresh-progress.d.ts +11 -0
- package/dist/side-panel/common/dataset-title.d.ts +5 -0
- package/dist/side-panel/common/source-data-catalog.d.ts +3 -0
- package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -0
- 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:
|
|
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(
|
|
57
|
-
var StyledFileTypeFow = _styledComponents["default"].div(
|
|
58
|
-
var StyledFileUpload = _styledComponents["default"].div(
|
|
59
|
-
var StyledMessage = _styledComponents["default"].div(
|
|
60
|
-
var StyledDragFileWrapper = _styledComponents["default"].div(
|
|
61
|
-
var StyledDisclaimer = (0, _styledComponents["default"])(StyledMessage)(
|
|
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$
|
|
137
|
-
dragOver = _this$
|
|
138
|
-
files = _this$
|
|
139
|
-
errorFiles = _this$
|
|
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:
|
|
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(
|
|
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(
|
|
200
|
-
height: "
|
|
201
|
-
})
|
|
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(
|
|
207
|
-
id: 'fileUploader.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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.
|
|
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
|
-
}))))
|
|
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+XG4gICAgICAgIDwvU3R5bGVkRmlsZVVwbG9hZD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluamVjdEludGwoRmlsZVVwbG9hZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVVcGxvYWRGYWN0b3J5O1xuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWQgPSBGaWxlVXBsb2FkRmFjdG9yeSgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sbUJBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQUwsc0JBQUEs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
|