@pie-lib/editable-html 10.0.0-beta.2 → 10.0.0-beta.4

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/lib/editor.js CHANGED
@@ -75,10 +75,6 @@ var _insertImageHandler = _interopRequireDefault(require("./plugins/image/insert
75
75
 
76
76
  var _isHotkey = _interopRequireDefault(require("is-hotkey"));
77
77
 
78
- var _slateHistory = require("slate-history");
79
-
80
- var _mathToolbar = require("@pie-lib/math-toolbar");
81
-
82
78
  var _components = require("./components");
83
79
 
84
80
  var _editorAndToolbar = _interopRequireDefault(require("./plugins/toolbar/editor-and-toolbar"));
@@ -95,6 +91,10 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
95
91
 
96
92
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
97
93
 
94
+ window.Path = _slate.Path;
95
+ window.SlateNode = _slate.Node;
96
+ window.ReactEditor = _slateReact.ReactEditor;
97
+ window.Editor = _slate.Editor;
98
98
  var HOTKEYS = {
99
99
  'mod+b': 'bold',
100
100
  'mod+i': 'italic',
@@ -118,8 +118,12 @@ var initialValue = [{
118
118
  }];
119
119
 
120
120
  var SlateEditor = function SlateEditor(editorProps) {
121
- var value = editorProps.value,
122
- plugins = editorProps.plugins;
121
+ var mounted = (0, _react.useRef)(false);
122
+ var autoFocus = editorProps.autoFocus,
123
+ value = editorProps.value,
124
+ plugins = editorProps.plugins,
125
+ actionsRef = editorProps.actionsRef,
126
+ onEditingDone = editorProps.onEditingDone;
123
127
  var renderElement = (0, _react.useCallback)(function (props) {
124
128
  return /*#__PURE__*/_react["default"].createElement(Element, (0, _extends2["default"])({}, props, {
125
129
  plugins: plugins
@@ -138,16 +142,33 @@ var SlateEditor = function SlateEditor(editorProps) {
138
142
  setIsFocused = _useState2[1];
139
143
 
140
144
  var editorRef = (0, _react.useRef)(null);
145
+ (0, _react.useEffect)(function () {
146
+ mounted.current = true;
147
+ return function () {
148
+ mounted.current = false;
149
+ };
150
+ }, []);
141
151
  (0, _react.useEffect)(function () {
142
152
  if (editorProps.onEditor) {
143
153
  editorProps.onEditor(editor);
144
154
  }
155
+
156
+ if (autoFocus) {
157
+ _slate.Transforms.select(editor, [0, 0]);
158
+
159
+ _slateReact.ReactEditor.focus(editor);
160
+
161
+ if (mounted.current) {
162
+ setIsFocused(true);
163
+ }
164
+ }
145
165
  }, [editor]);
146
166
  var slateValue = (0, _react.useMemo)(function () {
147
167
  // Slate throws an error if the value on the initial render is invalid
148
168
  // so we directly set the value on the editor in order
149
169
  // to be able to trigger normalization on the initial value before rendering
150
170
  editor.children = value;
171
+ editor.marks = {};
151
172
 
152
173
  _slate.Editor.normalize(editor, {
153
174
  force: true
@@ -156,6 +177,7 @@ var SlateEditor = function SlateEditor(editorProps) {
156
177
 
157
178
  return editor.children;
158
179
  }, [editor, value]);
180
+ window.editor = editor;
159
181
 
160
182
  var onKeyDown = function onKeyDown(event) {
161
183
  if (event.key === 'Enter' && event.shiftKey === true) {
@@ -178,14 +200,48 @@ var SlateEditor = function SlateEditor(editorProps) {
178
200
  return setIsFocused(true);
179
201
  };
180
202
 
181
- var onBlur = function onBlur() {
203
+ var onBlur = function onBlur(e) {
182
204
  setTimeout(function () {
183
205
  if (!editorRef.current || !editorRef.current.contains(document.activeElement)) {
184
- setIsFocused(false);
206
+ if (editorProps.onBlur) {
207
+ editorProps.onBlur(e);
208
+ }
209
+
210
+ if (mounted.current) {
211
+ setIsFocused(false);
212
+ }
185
213
  }
186
214
  }, 50);
187
215
  };
188
216
 
217
+ var actions = {
218
+ focus: function focus(position, node) {
219
+ var _ref = node ? _slate.Editor.leaf(editor, _slateReact.ReactEditor.findPath(editor, node), {
220
+ edge: 'end'
221
+ }) : _slate.Editor.leaf(editor, [0], {
222
+ edge: 'end'
223
+ }),
224
+ _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
225
+ textPath = _ref2[1];
226
+
227
+ _slate.Transforms.select(editor, textPath);
228
+
229
+ _slateReact.ReactEditor.focus(editor);
230
+ },
231
+ finishEditing: function finishEditing() {
232
+ // if (!mounted.current) {
233
+ // return;
234
+ // }
235
+ if (typeof onEditingDone === 'function') {
236
+ onEditingDone(editor);
237
+ }
238
+ }
239
+ };
240
+
241
+ if (actionsRef) {
242
+ actionsRef(actions);
243
+ }
244
+
189
245
  return /*#__PURE__*/_react["default"].createElement(_slateReact.Slate, {
190
246
  editor: editor,
191
247
  value: slateValue
@@ -344,10 +400,10 @@ var Element = function Element(props) {
344
400
  }
345
401
  };
346
402
 
347
- var Leaf = function Leaf(_ref) {
348
- var attributes = _ref.attributes,
349
- children = _ref.children,
350
- leaf = _ref.leaf;
403
+ var Leaf = function Leaf(_ref3) {
404
+ var attributes = _ref3.attributes,
405
+ children = _ref3.children,
406
+ leaf = _ref3.leaf;
351
407
 
352
408
  if (leaf.bold) {
353
409
  children = /*#__PURE__*/_react["default"].createElement("strong", null, children);
@@ -372,9 +428,9 @@ var Leaf = function Leaf(_ref) {
372
428
  return /*#__PURE__*/_react["default"].createElement("span", attributes, children);
373
429
  };
374
430
 
375
- var BlockButton = function BlockButton(_ref2) {
376
- var format = _ref2.format,
377
- icon = _ref2.icon;
431
+ var BlockButton = function BlockButton(_ref4) {
432
+ var format = _ref4.format,
433
+ icon = _ref4.icon;
378
434
  var editor = (0, _slateReact.useSlate)();
379
435
  return /*#__PURE__*/_react["default"].createElement(_components.Button, {
380
436
  active: isBlockActive(editor, format, TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type'),
@@ -385,9 +441,9 @@ var BlockButton = function BlockButton(_ref2) {
385
441
  }, /*#__PURE__*/_react["default"].createElement(_components.Icon, null, icon));
386
442
  };
387
443
 
388
- var MarkButton = function MarkButton(_ref3) {
389
- var format = _ref3.format,
390
- icon = _ref3.icon;
444
+ var MarkButton = function MarkButton(_ref5) {
445
+ var format = _ref5.format,
446
+ icon = _ref5.icon;
391
447
  var editor = (0, _slateReact.useSlate)();
392
448
  return /*#__PURE__*/_react["default"].createElement(_components.Button, {
393
449
  active: isMarkActive(editor, format),
@@ -544,12 +600,7 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
544
600
  });
545
601
  });
546
602
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onEditingDone", function (editor) {
547
- log('[onEditingDone]');
548
-
549
- _this.setState({
550
- stashedValue: null,
551
- focusedNode: null
552
- });
603
+ log('[onEditingDone]'); // this.setState({ stashedValue: null, focusedNode: null });
553
604
 
554
605
  log('[onEditingDone] value: ', _this.state.value);
555
606
 
@@ -592,9 +643,12 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
592
643
  }
593
644
  });
594
645
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onBlur", function (event) {
646
+ return _this.props.onBlur(event);
595
647
  log('[onBlur]');
596
648
  var target = event.relatedTarget;
597
- var node = target ? (0, _slateReact.findNode)(target, _this.state.value) : null;
649
+
650
+ var node = _slateReact.ReactEditor.toSlateNode(editor, target);
651
+
598
652
  log('[onBlur] node: ', node);
599
653
  return new Promise(function (resolve) {
600
654
  _this.setState({
@@ -788,7 +842,7 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
788
842
  _this.props.focus(position, node);
789
843
  });
790
844
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDropPaste", /*#__PURE__*/function () {
791
- var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(event, change, dropContext) {
845
+ var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(event, change, dropContext) {
792
846
  var editor, transfer, file, type, fragment, text, src, inline, range, ch, handler, _change$value, _document, selection, startBlock, defaultBlock, defaultMarks, frag;
793
847
 
794
848
  return _regenerator["default"].wrap(function _callee$(_context) {
@@ -914,7 +968,7 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
914
968
  }));
915
969
 
916
970
  return function (_x, _x2, _x3) {
917
- return _ref4.apply(this, arguments);
971
+ return _ref6.apply(this, arguments);
918
972
  };
919
973
  }());
920
974
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "renderPlaceholder", function (props) {
@@ -958,8 +1012,6 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
958
1012
  value: function componentDidMount() {
959
1013
  var _this2 = this;
960
1014
 
961
- // onRef is needed to get the ref of the component because we export it using withStyles
962
- this.props.onRef(this);
963
1015
  window.addEventListener('resize', this.onResize);
964
1016
 
965
1017
  if (this.editor && this.props.autoFocus) {
@@ -1043,6 +1095,7 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
1043
1095
  _this3 = this;
1044
1096
 
1045
1097
  var _this$props2 = this.props,
1098
+ autoFocus = _this$props2.autoFocus,
1046
1099
  disabled = _this$props2.disabled,
1047
1100
  spellCheck = _this$props2.spellCheck,
1048
1101
  highlightShape = _this$props2.highlightShape,
@@ -1059,8 +1112,8 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
1059
1112
  var sizeStyle = this.buildSizeStyle();
1060
1113
  var names = (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.withBg, highlightShape), (0, _defineProperty2["default"])(_classNames, classes.toolbarOnTop, toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'), _classNames), className, classes.slateEditor);
1061
1114
  return /*#__PURE__*/_react["default"].createElement("div", {
1062
- ref: function ref(_ref5) {
1063
- return _this3.wrapperRef = _ref5;
1115
+ ref: function ref(_ref7) {
1116
+ return _this3.wrapperRef = _ref7;
1064
1117
  },
1065
1118
  style: {
1066
1119
  width: sizeStyle.width
@@ -1073,6 +1126,8 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
1073
1126
  _this3.toolbarRef = r;
1074
1127
  }
1075
1128
  },
1129
+ autoFocus: autoFocus,
1130
+ actionsRef: this.props.onRef,
1076
1131
  onEditor: this.props.onEditor,
1077
1132
  value: value,
1078
1133
  focus: this.focus,
@@ -1105,8 +1160,8 @@ var EditorComponent = /*#__PURE__*/function (_React$Component) {
1105
1160
  renderPlaceholder: this.renderPlaceholder
1106
1161
  }));
1107
1162
  return /*#__PURE__*/_react["default"].createElement("div", {
1108
- ref: function ref(_ref6) {
1109
- return _this3.wrapperRef = _ref6;
1163
+ ref: function ref(_ref8) {
1164
+ return _this3.wrapperRef = _ref8;
1110
1165
  },
1111
1166
  style: {
1112
1167
  width: sizeStyle.width
@@ -1264,4 +1319,4 @@ var styles = {
1264
1319
  var _default = (0, _styles.withStyles)(styles)(EditorComponent);
1265
1320
 
1266
1321
  exports["default"] = _default;
1267
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIT1RLRVlTIiwiTElTVF9UWVBFUyIsIlRFWFRfQUxJR05fVFlQRVMiLCJpbml0aWFsVmFsdWUiLCJ0eXBlIiwiY2hpbGRyZW4iLCJkYXRhIiwibGF0ZXgiLCJ3cmFwcGVyIiwidGV4dCIsIlNsYXRlRWRpdG9yIiwiZWRpdG9yUHJvcHMiLCJ2YWx1ZSIsInBsdWdpbnMiLCJyZW5kZXJFbGVtZW50IiwidXNlQ2FsbGJhY2siLCJwcm9wcyIsInJlbmRlckxlYWYiLCJlZGl0b3IiLCJ1c2VNZW1vIiwid2l0aFBsdWdpbnMiLCJjcmVhdGVFZGl0b3IiLCJ1c2VTdGF0ZSIsImlzRm9jdXNlZCIsInNldElzRm9jdXNlZCIsImVkaXRvclJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsIm9uRWRpdG9yIiwic2xhdGVWYWx1ZSIsIkVkaXRvciIsIm5vcm1hbGl6ZSIsImZvcmNlIiwib25LZXlEb3duIiwiZXZlbnQiLCJrZXkiLCJzaGlmdEtleSIsImluc2VydFRleHQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhvdGtleSIsImlzSG90a2V5IiwibWFyayIsInRvZ2dsZU1hcmsiLCJvbkZvY3VzIiwib25CbHVyIiwic2V0VGltZW91dCIsImN1cnJlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsIm9uRG9uZSIsInRvZ2dsZUJsb2NrIiwiZm9ybWF0IiwiaXNBY3RpdmUiLCJpc0Jsb2NrQWN0aXZlIiwiaW5jbHVkZXMiLCJpc0xpc3QiLCJUcmFuc2Zvcm1zIiwidW53cmFwTm9kZXMiLCJtYXRjaCIsIm4iLCJpc0VkaXRvciIsIlNsYXRlRWxlbWVudCIsImlzRWxlbWVudCIsInNwbGl0IiwibmV3UHJvcGVydGllcyIsImFsaWduIiwidW5kZWZpbmVkIiwic2V0Tm9kZXMiLCJibG9jayIsIndyYXBOb2RlcyIsImlzTWFya0FjdGl2ZSIsInJlbW92ZU1hcmsiLCJhZGRNYXJrIiwiYmxvY2tUeXBlIiwic2VsZWN0aW9uIiwiQXJyYXkiLCJmcm9tIiwibm9kZXMiLCJhdCIsInVuaGFuZ1JhbmdlIiwibWFya3MiLCJFbGVtZW50IiwidXNlU2xhdGVTdGF0aWMiLCJmb2N1c2VkIiwidXNlRm9jdXNlZCIsImF0dHJpYnV0ZXMiLCJlbGVtZW50Iiwic3R5bGUiLCJ0ZXh0QWxpZ24iLCJub2RlUHJvcHMiLCJub2RlIiwicGx1Z2luVG9SZW5kZXIiLCJmaW5kIiwicGx1Z2luIiwic3VwcG9ydHMiLCJyZW5kZXJOb2RlIiwibWFyZ2luIiwiTGVhZiIsImxlYWYiLCJib2xkIiwiY29kZSIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZXRocm91Z2giLCJCbG9ja0J1dHRvbiIsImljb24iLCJ1c2VTbGF0ZSIsIk1hcmtCdXR0b24iLCJsb2ciLCJkZWJ1ZyIsImRlZmF1bHRUb29sYmFyT3B0cyIsInBvc2l0aW9uIiwiYWxpZ25tZW50IiwiYWx3YXlzVmlzaWJsZSIsInNob3dEb25lIiwiZG9uZU9uIiwiZGVmYXVsdFJlc3BvbnNlQXJlYVByb3BzIiwib3B0aW9ucyIsInJlc3BBcmVhVG9vbGJhciIsIm9uSGFuZGxlQXJlYUNoYW5nZSIsImRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyIsImNyZWF0ZVRvb2xiYXJPcHRzIiwidG9vbGJhck9wdHMiLCJFZGl0b3JDb21wb25lbnQiLCJub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMiLCJyZXNwb25zZUFyZWFQcm9wcyIsImJ1aWxkUGx1Z2lucyIsImFjdGl2ZVBsdWdpbnMiLCJtYXRoIiwib25DbGljayIsIm9uTWF0aENsaWNrIiwib25QbHVnaW5Gb2N1cyIsIm9uUGx1Z2luQmx1ciIsImltYWdlIiwib25EZWxldGUiLCJpbWFnZVN1cHBvcnQiLCJzcmMiLCJkb25lIiwiZSIsInN0YXRlIiwiaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQiLCJnZXRIYW5kbGVyIiwiaGFuZGxlciIsImFkZCIsIm1heEltYWdlV2lkdGgiLCJtYXhJbWFnZUhlaWdodCIsInRvb2xiYXIiLCJkaXNhYmxlU2Nyb2xsYmFyIiwiZGlzYWJsZVVuZGVybGluZSIsImF1dG9XaWR0aCIsImF1dG9XaWR0aFRvb2xiYXIiLCJ0YWJsZSIsInJlc3BvbnNlQXJlYSIsIm1heFJlc3BvbnNlQXJlYXMiLCJlcnJvciIsImxhbmd1YWdlQ2hhcmFjdGVycyIsImxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzIiwibWVkaWEiLCJmb2N1cyIsIm9uQ2hhbmdlIiwidXBsb2FkU291bmRTdXBwb3J0IiwicmVsYXRlZFRhcmdldCIsInRhcmdldCIsImZpbmROb2RlIiwic2V0U3RhdGUiLCJmb2N1c2VkTm9kZSIsInJlc2V0VmFsdWUiLCJzdGFzaGVkVmFsdWUiLCJzdGFzaFZhbHVlIiwic2VsZWN0ZWROb2RlIiwibm9uRW1wdHkiLCJ0b29sYmFySW5Gb2N1cyIsIm9uRWRpdGluZ0RvbmUiLCJyZXNvbHZlIiwic3RhcnRUZXh0IiwibGVuZ3RoIiwidGhlbiIsIlByb21pc2UiLCJwcmVCbHVyVmFsdWUiLCJoYW5kbGVCbHVyIiwiYmluZCIsImVkaXRvckRPTSIsInF1ZXJ5U2VsZWN0b3IiLCJzdGF0ZVZhbHVlIiwid3JhcHBlclJlZiIsImVkaXRvckVsZW1lbnQiLCJjbG9zZXN0IiwiY2xhc3NOYW1lIiwidG9vbGJhckVsZW1lbnQiLCJ0b29sYmFyUmVmIiwiaXNJbkN1cnJlbnRDb21wb25lbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlRG9tQmx1ciIsIl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBIiwiZG9tRWwiLCJjaGFuZ2UiLCJzZXROb2RlQnlLZXkiLCJhZGRFdmVudExpc3RlbmVyIiwic3RvcFJlc2V0IiwicmVkdWNlIiwicyIsInAiLCJ0b09iamVjdCIsIm5ld1ZhbHVlIiwiVmFsdWUiLCJmcm9tSlNPTiIsInRvSlNPTiIsImNoYXJhY3RlcnNMaW1pdCIsImFsbFRleHQiLCJzdHJpbmciLCJodG1sIiwidmFsdWVUb0h0bWwiLCJodG1sVG9WYWx1ZSIsInYiLCJlbmRzV2l0aCIsInBhcnNlSW50IiwiaXNOYU4iLCJvYmplY3QiLCJsYXN0IiwicGFyZW50IiwiZ2V0UGFyZW50IiwiQmxvY2siLCJwb3MiLCJkcm9wQ29udGV4dCIsInRyYW5zZmVyIiwiZ2V0RXZlbnRUcmFuc2ZlciIsImZpbGUiLCJmaWxlcyIsImZyYWdtZW50IiwiZ2V0QmFzZTY0IiwiaW5saW5lIiwiSW5saW5lIiwiY3JlYXRlIiwiaXNWb2lkIiwibG9hZGluZyIsInJhbmdlIiwiZ2V0RXZlbnRSYW5nZSIsInNlbGVjdCIsImNoIiwiaW5zZXJ0SW5saW5lIiwiSW5zZXJ0SW1hZ2VIYW5kbGVyIiwiaW5zZXJ0RnJhZ21lbnQiLCJzdGFydEJsb2NrIiwiZGVmYXVsdEJsb2NrIiwiZGVmYXVsdE1hcmtzIiwiZ2V0SW5zZXJ0TWFya3NBdFJhbmdlIiwiZnJhZyIsIlBsYWluIiwiZGVzZXJpYWxpemUiLCJwbGFjZWhvbGRlciIsInNpemUiLCJkaXNwbGF5Iiwid2lkdGgiLCJtYXhXaWR0aCIsIndoaXRlU3BhY2UiLCJvcGFjaXR5IiwicG9pbnRlckV2ZW50cyIsInVzZXJTZWxlY3QiLCJvblJlc2l6ZSIsImhhbmRsZVBsdWdpbnMiLCJvblJlZiIsIndpbmRvdyIsImF1dG9Gb2N1cyIsIm5leHRQcm9wcyIsIm5ld1Rvb2xiYXJPcHRzIiwiaXNFcXVhbCIsInplcm9XaWR0aEVscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZWwiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsImhlaWdodCIsIm1heEhlaWdodCIsInZhbHVlVG9TaXplIiwiZGlzYWJsZWQiLCJzcGVsbENoZWNrIiwiaGlnaGxpZ2h0U2hhcGUiLCJjbGFzc2VzIiwicGx1Z2luUHJvcHMiLCJzaXplU3R5bGUiLCJidWlsZFNpemVTdHlsZSIsIm5hbWVzIiwiY2xhc3NOYW1lcyIsIndpdGhCZyIsInRvb2xiYXJPblRvcCIsInNsYXRlRWRpdG9yIiwicmVmIiwiciIsImdldEZvY3VzZWRWYWx1ZSIsIm9uRHJvcFBhc3RlIiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJyZW5kZXJQbGFjZWhvbGRlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiYm9vbCIsImZ1bmMiLCJpc1JlcXVpcmVkIiwiYXJyYXlPZiIsInNoYXBlIiwiYXJyYXkiLCJudW1iZXIiLCJvbmVPZlR5cGUiLCJhbnkiLCJvbmVPZiIsImxhbmd1YWdlIiwiY2hhcmFjdGVySWNvbiIsImNoYXJhY3RlcnMiLCJ2YWx1ZXMiLCJhbGxWYWxpZCIsImV2ZXJ5IiwiQUxMX1BMVUdJTlMiLCJFcnJvciIsImpvaW4iLCJzdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250RmFtaWx5IiwidGFibGVMYXlvdXQiLCJib3JkZXJDb2xsYXBzZSIsImNvbG9yIiwiYmFja2dyb3VuZCIsImJvcmRlclRvcCIsInBhZGRpbmciLCJib3JkZXIiLCJtYXJnaW5Ub3AiLCJ3aXRoU3R5bGVzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2VkaXRvci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBFZGl0b3IgYXMgT2xkU2xhdGVFZGl0b3IsXG4gIGZpbmROb2RlLFxuICBnZXRFdmVudFJhbmdlLFxuICBnZXRFdmVudFRyYW5zZmVyLFxuICB1c2VTbGF0ZVN0YXRpY1xufSBmcm9tICdzbGF0ZS1yZWFjdCc7XG5pbXBvcnQgUm9vdFJlZiBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9Sb290UmVmJztcblxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0ICogYXMgc2VyaWFsaXphdGlvbiBmcm9tICcuL25ldy1zZXJpYWxpemF0aW9uJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBWYWx1ZSwgQmxvY2ssIElubGluZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFMTF9QTFVHSU5TLCBERUZBVUxUX1BMVUdJTlMsIGJ1aWxkUGx1Z2lucywgd2l0aFBsdWdpbnMgfSBmcm9tICcuL3BsdWdpbnMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgUGxhaW4gZnJvbSAnc2xhdGUtcGxhaW4tc2VyaWFsaXplcic7XG5cbmltcG9ydCB7IGdldEJhc2U2NCwgaHRtbFRvVmFsdWUsIHZhbHVlVG9IdG1sIH0gZnJvbSAnLi9uZXctc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgSW5zZXJ0SW1hZ2VIYW5kbGVyIGZyb20gJy4vcGx1Z2lucy9pbWFnZS9pbnNlcnQtaW1hZ2UtaGFuZGxlcic7XG5cbmltcG9ydCBpc0hvdGtleSBmcm9tICdpcy1ob3RrZXknO1xuaW1wb3J0IHsgRWRpdGFibGUsIHVzZUZvY3VzZWQsIHdpdGhSZWFjdCwgdXNlU2xhdGUsIFNsYXRlIH0gZnJvbSAnc2xhdGUtcmVhY3QnO1xuaW1wb3J0IHsgRWRpdG9yLCBUcmFuc2Zvcm1zLCBjcmVhdGVFZGl0b3IsIEVsZW1lbnQgYXMgU2xhdGVFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgd2l0aEhpc3RvcnkgfSBmcm9tICdzbGF0ZS1oaXN0b3J5JztcbmltcG9ydCB7IE1hdGhQcmV2aWV3IH0gZnJvbSAnQHBpZS1saWIvbWF0aC10b29sYmFyJztcblxuaW1wb3J0IHsgQnV0dG9uLCBJY29uLCBUb29sYmFyIH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCBFZGl0b3JBbmRUb29sYmFyIGZyb20gJy4vcGx1Z2lucy90b29sYmFyL2VkaXRvci1hbmQtdG9vbGJhcic7XG5cbmNvbnN0IEhPVEtFWVMgPSB7XG4gICdtb2QrYic6ICdib2xkJyxcbiAgJ21vZCtpJzogJ2l0YWxpYycsXG4gICdtb2QrdSc6ICd1bmRlcmxpbmUnLFxuICAnbW9kK2AnOiAnY29kZSdcbn07XG5cbmNvbnN0IExJU1RfVFlQRVMgPSBbJ251bWJlcmVkLWxpc3QnLCAnYnVsbGV0ZWQtbGlzdCddO1xuY29uc3QgVEVYVF9BTElHTl9UWVBFUyA9IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnLCAnanVzdGlmeSddO1xuXG5jb25zdCBpbml0aWFsVmFsdWUgPSBbXG4gIHtcbiAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsYXRleDogJ1xcXFxmcmFjezF9ezJ9JyxcbiAgICAgICAgICB3cmFwcGVyOiAncm91bmRfYnJhY2tldHMnXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ1xcXFwoXFxcXGZyYWN7MX17Mn1cXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH1cbl07XG5cbmNvbnN0IFNsYXRlRWRpdG9yID0gZWRpdG9yUHJvcHMgPT4ge1xuICBjb25zdCB7IHZhbHVlLCBwbHVnaW5zIH0gPSBlZGl0b3JQcm9wcztcbiAgY29uc3QgcmVuZGVyRWxlbWVudCA9IHVzZUNhbGxiYWNrKHByb3BzID0+IDxFbGVtZW50IHsuLi5wcm9wc30gcGx1Z2lucz17cGx1Z2luc30gLz4sIFtdKTtcbiAgY29uc3QgcmVuZGVyTGVhZiA9IHVzZUNhbGxiYWNrKHByb3BzID0+IDxMZWFmIHsuLi5wcm9wc30gLz4sIFtdKTtcbiAgY29uc3QgZWRpdG9yID0gdXNlTWVtbygoKSA9PiB3aXRoUGx1Z2lucyhjcmVhdGVFZGl0b3IoKSwgcGx1Z2lucyksIFtdKTtcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVkaXRvclByb3BzLm9uRWRpdG9yKSB7XG4gICAgICBlZGl0b3JQcm9wcy5vbkVkaXRvcihlZGl0b3IpO1xuICAgIH1cbiAgfSwgW2VkaXRvcl0pO1xuXG4gIGNvbnN0IHNsYXRlVmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBTbGF0ZSB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIG9uIHRoZSBpbml0aWFsIHJlbmRlciBpcyBpbnZhbGlkXG4gICAgLy8gc28gd2UgZGlyZWN0bHkgc2V0IHRoZSB2YWx1ZSBvbiB0aGUgZWRpdG9yIGluIG9yZGVyXG4gICAgLy8gdG8gYmUgYWJsZSB0byB0cmlnZ2VyIG5vcm1hbGl6YXRpb24gb24gdGhlIGluaXRpYWwgdmFsdWUgYmVmb3JlIHJlbmRlcmluZ1xuICAgIGVkaXRvci5jaGlsZHJlbiA9IHZhbHVlO1xuICAgIEVkaXRvci5ub3JtYWxpemUoZWRpdG9yLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIC8vIFdlIHJldHVybiB0aGUgbm9ybWFsaXplZCBpbnRlcm5hbCB2YWx1ZSBzbyB0aGF0IHRoZSByZW5kZXJpbmcgY2FuIHRha2Ugb3ZlciBmcm9tIGhlcmVcbiAgICByZXR1cm4gZWRpdG9yLmNoaWxkcmVuO1xuICB9LCBbZWRpdG9yLCB2YWx1ZV0pO1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGV2ZW50LnNoaWZ0S2V5ID09PSB0cnVlKSB7XG4gICAgICBlZGl0b3IuaW5zZXJ0VGV4dCgnXFxuJyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgaG90a2V5IGluIEhPVEtFWVMpIHtcbiAgICAgIGlmIChpc0hvdGtleShob3RrZXksIGV2ZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBtYXJrID0gSE9US0VZU1tob3RrZXldO1xuICAgICAgICB0b2dnbGVNYXJrKGVkaXRvciwgbWFyayk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBvbkZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpO1xuICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWVkaXRvclJlZi5jdXJyZW50IHx8ICFlZGl0b3JSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxTbGF0ZSBlZGl0b3I9e2VkaXRvcn0gdmFsdWU9e3NsYXRlVmFsdWV9PlxuICAgICAgPFJvb3RSZWYgcm9vdFJlZj17ZWRpdG9yUmVmfT5cbiAgICAgICAgPEVkaXRvckFuZFRvb2xiYXJcbiAgICAgICAgICB7Li4uZWRpdG9yUHJvcHN9XG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgb25Eb25lPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICAgICAgICAgICAgZWRpdG9yUHJvcHMub25Eb25lKGVkaXRvcik7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxFZGl0YWJsZVxuICAgICAgICAgICAgcmVuZGVyRWxlbWVudD17cmVuZGVyRWxlbWVudH1cbiAgICAgICAgICAgIHJlbmRlckxlYWY9e3JlbmRlckxlYWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHNvbWUgcmljaCB0ZXh04oCmXCJcbiAgICAgICAgICAgIHNwZWxsQ2hlY2tcbiAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRWRpdG9yQW5kVG9vbGJhcj5cbiAgICAgIDwvUm9vdFJlZj5cbiAgICA8L1NsYXRlPlxuICApO1xufTtcblxuY29uc3QgdG9nZ2xlQmxvY2sgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgY29uc3QgaXNBY3RpdmUgPSBpc0Jsb2NrQWN0aXZlKFxuICAgIGVkaXRvcixcbiAgICBmb3JtYXQsXG4gICAgVEVYVF9BTElHTl9UWVBFUy5pbmNsdWRlcyhmb3JtYXQpID8gJ2FsaWduJyA6ICd0eXBlJ1xuICApO1xuICBjb25zdCBpc0xpc3QgPSBMSVNUX1RZUEVTLmluY2x1ZGVzKGZvcm1hdCk7XG5cbiAgVHJhbnNmb3Jtcy51bndyYXBOb2RlcyhlZGl0b3IsIHtcbiAgICBtYXRjaDogbiA9PlxuICAgICAgIUVkaXRvci5pc0VkaXRvcihuKSAmJlxuICAgICAgU2xhdGVFbGVtZW50LmlzRWxlbWVudChuKSAmJlxuICAgICAgTElTVF9UWVBFUy5pbmNsdWRlcyhuLnR5cGUpICYmXG4gICAgICAhVEVYVF9BTElHTl9UWVBFUy5pbmNsdWRlcyhmb3JtYXQpLFxuICAgIHNwbGl0OiB0cnVlXG4gIH0pO1xuICBsZXQgbmV3UHJvcGVydGllcztcbiAgaWYgKFRFWFRfQUxJR05fVFlQRVMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgIG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICBhbGlnbjogaXNBY3RpdmUgPyB1bmRlZmluZWQgOiBmb3JtYXRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICB0eXBlOiBpc0FjdGl2ZSA/ICdwYXJhZ3JhcGgnIDogaXNMaXN0ID8gJ2xpc3RfaXRlbScgOiBmb3JtYXRcbiAgICB9O1xuICB9XG4gIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCBuZXdQcm9wZXJ0aWVzKTtcblxuICBpZiAoIWlzQWN0aXZlICYmIGlzTGlzdCkge1xuICAgIGNvbnN0IGJsb2NrID0geyB0eXBlOiBmb3JtYXQsIGNoaWxkcmVuOiBbXSB9O1xuICAgIFRyYW5zZm9ybXMud3JhcE5vZGVzKGVkaXRvciwgYmxvY2spO1xuICB9XG59O1xuXG5jb25zdCB0b2dnbGVNYXJrID0gKGVkaXRvciwgZm9ybWF0KSA9PiB7XG4gIGNvbnN0IGlzQWN0aXZlID0gaXNNYXJrQWN0aXZlKGVkaXRvciwgZm9ybWF0KTtcblxuICBpZiAoaXNBY3RpdmUpIHtcbiAgICBFZGl0b3IucmVtb3ZlTWFyayhlZGl0b3IsIGZvcm1hdCk7XG4gIH0gZWxzZSB7XG4gICAgRWRpdG9yLmFkZE1hcmsoZWRpdG9yLCBmb3JtYXQsIHRydWUpO1xuICB9XG59O1xuXG5jb25zdCBpc0Jsb2NrQWN0aXZlID0gKGVkaXRvciwgZm9ybWF0LCBibG9ja1R5cGUgPSAndHlwZScpID0+IHtcbiAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgaWYgKCFzZWxlY3Rpb24pIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBbbWF0Y2hdID0gQXJyYXkuZnJvbShcbiAgICBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICBhdDogRWRpdG9yLnVuaGFuZ1JhbmdlKGVkaXRvciwgc2VsZWN0aW9uKSxcbiAgICAgIG1hdGNoOiBuID0+ICFFZGl0b3IuaXNFZGl0b3IobikgJiYgU2xhdGVFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuW2Jsb2NrVHlwZV0gPT09IGZvcm1hdFxuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuICEhbWF0Y2g7XG59O1xuXG5jb25zdCBpc01hcmtBY3RpdmUgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgY29uc3QgbWFya3MgPSBFZGl0b3IubWFya3MoZWRpdG9yKTtcbiAgcmV0dXJuIG1hcmtzID8gbWFya3NbZm9ybWF0XSA9PT0gdHJ1ZSA6IGZhbHNlO1xufTtcblxuY29uc3QgRWxlbWVudCA9IHByb3BzID0+IHtcbiAgY29uc3QgZWRpdG9yID0gdXNlU2xhdGVTdGF0aWMoKTtcbiAgY29uc3QgZm9jdXNlZCA9IHVzZUZvY3VzZWQoKTtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjaGlsZHJlbiwgZWxlbWVudCwgcGx1Z2lucyB9ID0gcHJvcHM7XG4gIGNvbnN0IHN0eWxlID0geyB0ZXh0QWxpZ246IGVsZW1lbnQuYWxpZ24gfTtcblxuICBjb25zdCBub2RlUHJvcHMgPSB7IC4uLmF0dHJpYnV0ZXMsIC4uLnByb3BzLCBub2RlOiB7IC4uLmVsZW1lbnQgfSwgY2hpbGRyZW4gfTtcbiAgY29uc3QgcGx1Z2luVG9SZW5kZXIgPSBwbHVnaW5zLmZpbmQoXG4gICAgcGx1Z2luID0+IHR5cGVvZiBwbHVnaW4uc3VwcG9ydHMgPT09ICdmdW5jdGlvbicgJiYgcGx1Z2luLnN1cHBvcnRzKGVsZW1lbnQpXG4gICk7XG5cbiAgaWYgKHBsdWdpblRvUmVuZGVyKSB7XG4gICAgcmV0dXJuIHBsdWdpblRvUmVuZGVyLnJlbmRlck5vZGUoeyAuLi5ub2RlUHJvcHMsIGVkaXRvciwgZm9jdXNlZCB9KTtcbiAgfVxuXG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSAnYmxvY2stcXVvdGUnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJsb2NrcXVvdGUgc3R5bGU9e3N0eWxlfSB7Li4uYXR0cmlidXRlc30+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Jsb2NrcXVvdGU+XG4gICAgICApO1xuICAgIGNhc2UgJ2J1bGxldGVkLWxpc3QnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHVsIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC91bD5cbiAgICAgICk7XG4gICAgY2FzZSAnaGVhZGluZy1vbmUnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGgxIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9oMT5cbiAgICAgICk7XG4gICAgY2FzZSAnaGVhZGluZy10d28nOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGgyIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9oMj5cbiAgICAgICk7XG4gICAgY2FzZSAnbGlzdC1pdGVtJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBzdHlsZT17c3R5bGV9IHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvbGk+XG4gICAgICApO1xuICAgIGNhc2UgJ251bWJlcmVkLWxpc3QnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPG9sIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9vbD5cbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IExlYWYgPSAoeyBhdHRyaWJ1dGVzLCBjaGlsZHJlbiwgbGVhZiB9KSA9PiB7XG4gIGlmIChsZWFmLmJvbGQpIHtcbiAgICBjaGlsZHJlbiA9IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPjtcbiAgfVxuXG4gIGlmIChsZWFmLmNvZGUpIHtcbiAgICBjaGlsZHJlbiA9IDxjb2RlPntjaGlsZHJlbn08L2NvZGU+O1xuICB9XG5cbiAgaWYgKGxlYWYuaXRhbGljKSB7XG4gICAgY2hpbGRyZW4gPSA8ZW0+e2NoaWxkcmVufTwvZW0+O1xuICB9XG5cbiAgaWYgKGxlYWYudW5kZXJsaW5lKSB7XG4gICAgY2hpbGRyZW4gPSA8dT57Y2hpbGRyZW59PC91PjtcbiAgfVxuXG4gIGlmIChsZWFmLnN0cmlrZXRocm91Z2gpIHtcbiAgICBjaGlsZHJlbiA9IDxkZWw+e2NoaWxkcmVufTwvZGVsPjtcbiAgfVxuXG4gIHJldHVybiA8c3BhbiB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvc3Bhbj47XG59O1xuXG5jb25zdCBCbG9ja0J1dHRvbiA9ICh7IGZvcm1hdCwgaWNvbiB9KSA9PiB7XG4gIGNvbnN0IGVkaXRvciA9IHVzZVNsYXRlKCk7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWN0aXZlPXtpc0Jsb2NrQWN0aXZlKGVkaXRvciwgZm9ybWF0LCBURVhUX0FMSUdOX1RZUEVTLmluY2x1ZGVzKGZvcm1hdCkgPyAnYWxpZ24nIDogJ3R5cGUnKX1cbiAgICAgIG9uTW91c2VEb3duPXtldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRvZ2dsZUJsb2NrKGVkaXRvciwgZm9ybWF0KTtcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEljb24+e2ljb259PC9JY29uPlxuICAgIDwvQnV0dG9uPlxuICApO1xufTtcblxuY29uc3QgTWFya0J1dHRvbiA9ICh7IGZvcm1hdCwgaWNvbiB9KSA9PiB7XG4gIGNvbnN0IGVkaXRvciA9IHVzZVNsYXRlKCk7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWN0aXZlPXtpc01hcmtBY3RpdmUoZWRpdG9yLCBmb3JtYXQpfVxuICAgICAgb25Nb3VzZURvd249e2V2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdG9nZ2xlTWFyayhlZGl0b3IsIGZvcm1hdCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxJY29uPntpY29ufTwvSWNvbj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn07XG5cbi8vIG9sZC1lZGl0YWJsZVxuXG5leHBvcnQgeyBBTExfUExVR0lOUywgREVGQVVMVF9QTFVHSU5TLCBzZXJpYWxpemF0aW9uIH07XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdlZGl0YWJsZS1odG1sOmVkaXRvcicpO1xuXG5jb25zdCBkZWZhdWx0VG9vbGJhck9wdHMgPSB7XG4gIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgYWxpZ25tZW50OiAnbGVmdCcsXG4gIGFsd2F5c1Zpc2libGU6IGZhbHNlLFxuICBzaG93RG9uZTogdHJ1ZSxcbiAgZG9uZU9uOiAnYmx1cidcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyA9IHtcbiAgb3B0aW9uczoge30sXG4gIHJlc3BBcmVhVG9vbGJhcjogKCkgPT4ge30sXG4gIG9uSGFuZGxlQXJlYUNoYW5nZTogKCkgPT4ge31cbn07XG5cbmNvbnN0IGRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyA9IFtdO1xuXG5jb25zdCBjcmVhdGVUb29sYmFyT3B0cyA9IHRvb2xiYXJPcHRzID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5kZWZhdWx0VG9vbGJhck9wdHMsXG4gICAgLi4udG9vbGJhck9wdHNcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25SZWY6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25FZGl0b3I6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFycmF5LFxuICAgICAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgICB9KVxuICAgICksXG4gICAgaW1hZ2VTdXBwb3J0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHVwbG9hZFNvdW5kU3VwcG9ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBkZWxldGU6IFByb3BUeXBlcy5mdW5jXG4gICAgfSksXG4gICAgY2hhcmFjdGVyc0xpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgbWluSGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgbWF4SGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGhpZ2hsaWdodFNoYXBlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc3BlbGxDaGVjazogUHJvcFR5cGVzLmJvb2wsXG4gICAgbm9uRW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVTY3JvbGxiYXI6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAgIGF1dG9XaWR0aFRvb2xiYXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHBsdWdpblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlc3BvbnNlQXJlYVByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICAgICAgJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlJyxcbiAgICAgICAgJ2lubGluZS1kcm9wZG93bicsXG4gICAgICAgICdkcmFnLWluLXRoZS1ibGFuaydcbiAgICAgIF0pLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIHJlc3BBcmVhVG9vbGJhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkhhbmRsZUFyZWFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jXG4gICAgfSksXG4gICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgbGFuZ3VhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNoYXJhY3Rlckljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNoYXJhY3RlcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpKVxuICAgICAgfSlcbiAgICApLFxuICAgIHRvb2xiYXJPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICd0b3AnXSksXG4gICAgICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICBhbHdheXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIHNob3dEb25lOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGRvbmVPbjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGFjdGl2ZVBsdWdpbnM6IFByb3BUeXBlcy5hcnJheU9mKHZhbHVlcyA9PiB7XG4gICAgICBjb25zdCBhbGxWYWxpZCA9IHZhbHVlcy5ldmVyeSh2ID0+IEFMTF9QTFVHSU5TLmluY2x1ZGVzKHYpKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIWFsbFZhbGlkICYmXG4gICAgICAgIG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZXM6ICR7dmFsdWVzfSwgdmFsdWVzIG11c3QgYmUgb25lIG9mIFske0FMTF9QTFVHSU5TLmpvaW4oJywnKX1dYClcbiAgICAgICk7XG4gICAgfSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1heEltYWdlV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWF4SW1hZ2VIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmU6IHRydWUsXG4gICAgb25Gb2N1czogKCkgPT4ge30sXG4gICAgb25CbHVyOiAoKSA9PiB7fSxcbiAgICBvbktleURvd246ICgpID0+IHt9LFxuICAgIHRvb2xiYXJPcHRzOiBkZWZhdWx0VG9vbGJhck9wdHMsXG4gICAgcmVzcG9uc2VBcmVhUHJvcHM6IGRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyxcbiAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wczogZGVmYXVsdExhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHRvb2xiYXJPcHRzOiBjcmVhdGVUb29sYmFyT3B0cyhwcm9wcy50b29sYmFyT3B0cylcbiAgICB9O1xuXG4gICAgdGhpcy5vblJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHByb3BzLm9uQ2hhbmdlKHRoaXMuc3RhdGUudmFsdWUsIHRydWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZVBsdWdpbnModGhpcy5wcm9wcyk7XG4gIH1cblxuICBoYW5kbGVQbHVnaW5zID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcyA9IHtcbiAgICAgIC4uLmRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyxcbiAgICAgIC4uLnByb3BzLnJlc3BvbnNlQXJlYVByb3BzXG4gICAgfTtcblxuICAgIHRoaXMucGx1Z2lucyA9IGJ1aWxkUGx1Z2lucyhwcm9wcy5hY3RpdmVQbHVnaW5zLCB7XG4gICAgICBtYXRoOiB7XG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25NYXRoQ2xpY2ssXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25QbHVnaW5Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uUGx1Z2luQmx1clxuICAgICAgfSxcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIG9uRGVsZXRlOlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydCAmJlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydC5kZWxldGUgJiZcbiAgICAgICAgICAoKHNyYywgZG9uZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmRlbGV0ZShzcmMsIGUgPT4ge1xuICAgICAgICAgICAgICBkb25lKGUsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIGluc2VydEltYWdlUmVxdWVzdGVkOlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydCAmJlxuICAgICAgICAgIChnZXRIYW5kbGVyID0+IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGhhbmRsZXIgaXMgdGhlIG9iamVjdCB0aHJvdWdoIHdoaWNoIHRoZSBvdXRlciBjb250ZXh0XG4gICAgICAgICAgICAgKiBjb21tdW5pY2F0ZXMgZmlsZSB1cGxvYWQgZXZlbnRzIGxpa2U6IGZpbGVDaG9zZW4sIGNhbmNlbCwgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGdldEhhbmRsZXIoKCkgPT4gdGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQuYWRkKGhhbmRsZXIpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uUGx1Z2luRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vblBsdWdpbkJsdXIsXG4gICAgICAgIG1heEltYWdlV2lkdGg6IHRoaXMucHJvcHMubWF4SW1hZ2VXaWR0aCxcbiAgICAgICAgbWF4SW1hZ2VIZWlnaHQ6IHRoaXMucHJvcHMubWF4SW1hZ2VIZWlnaHRcbiAgICAgIH0sXG4gICAgICB0b29sYmFyOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUbyBtaW5pbWl6ZSBjb252ZXJ0aW5nIGh0bWwgLT4gc3RhdGUgLT4gaHRtbFxuICAgICAgICAgKiBXZSBvbmx5IGVtaXQgbWFya3VwIG9uY2UgJ2RvbmUnIGlzIGNsaWNrZWQuXG4gICAgICAgICAqL1xuICAgICAgICBkaXNhYmxlU2Nyb2xsYmFyOiAhIXByb3BzLmRpc2FibGVTY3JvbGxiYXIsXG4gICAgICAgIGRpc2FibGVVbmRlcmxpbmU6IHByb3BzLmRpc2FibGVVbmRlcmxpbmUsXG4gICAgICAgIGF1dG9XaWR0aDogcHJvcHMuYXV0b1dpZHRoVG9vbGJhclxuICAgICAgfSxcbiAgICAgIHRhYmxlOiB7XG4gICAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgICBsb2coJ1t0YWJsZTpvbkZvY3VzXS4uLicpO1xuICAgICAgICAgIHRoaXMub25QbHVnaW5Gb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgICBsb2coJ1t0YWJsZTpvbkJsdXJdLi4uJyk7XG4gICAgICAgICAgdGhpcy5vblBsdWdpbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNlQXJlYToge1xuICAgICAgICB0eXBlOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMudHlwZSxcbiAgICAgICAgb3B0aW9uczogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLm9wdGlvbnMsXG4gICAgICAgIG1heFJlc3BvbnNlQXJlYXM6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5tYXhSZXNwb25zZUFyZWFzLFxuICAgICAgICByZXNwQXJlYVRvb2xiYXI6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5yZXNwQXJlYVRvb2xiYXIsXG4gICAgICAgIG9uSGFuZGxlQXJlYUNoYW5nZTogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLm9uSGFuZGxlQXJlYUNoYW5nZSxcbiAgICAgICAgZXJyb3I6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5lcnJvcixcbiAgICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgIGxvZygnW3RhYmxlOm9uRm9jdXNdLi4uJyk7XG4gICAgICAgICAgdGhpcy5vblBsdWdpbkZvY3VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICAgIGxvZygnW3RhYmxlOm9uQmx1cl0uLi4nKTtcbiAgICAgICAgICB0aGlzLm9uUGx1Z2luQmx1cigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzOiBwcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyxcbiAgICAgIG1lZGlhOiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLmZvY3VzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgICAgdXBsb2FkU291bmRTdXBwb3J0OiBwcm9wcy51cGxvYWRTb3VuZFN1cHBvcnRcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAvLyBvblJlZiBpcyBuZWVkZWQgdG8gZ2V0IHRoZSByZWYgb2YgdGhlIGNvbXBvbmVudCBiZWNhdXNlIHdlIGV4cG9ydCBpdCB1c2luZyB3aXRoU3R5bGVzXG4gICAgdGhpcy5wcm9wcy5vblJlZih0aGlzKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uUmVzaXplKTtcblxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLnByb3BzLmF1dG9Gb2N1cykge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBgW2RhdGEta2V5PVwiJHt0aGlzLmVkaXRvci52YWx1ZS5kb2N1bWVudC5rZXl9XCJdYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZWRpdG9yRE9NKSB7XG4gICAgICAgICAgICBlZGl0b3JET00uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgY29uc3QgeyB0b29sYmFyT3B0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdUb29sYmFyT3B0cyA9IGNyZWF0ZVRvb2xiYXJPcHRzKG5leHRQcm9wcy50b29sYmFyT3B0cyk7XG5cbiAgICBpZiAoIWlzRXF1YWwobmV3VG9vbGJhck9wdHMsIHRvb2xiYXJPcHRzKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHRvb2xiYXJPcHRzOiBuZXdUb29sYmFyT3B0c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKG5leHRQcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcywgdGhpcy5wcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcykpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGx1Z2lucyhuZXh0UHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAvLyBUaGUgY3Vyc29yIGlzIG9uIGEgemVybyB3aWR0aCBlbGVtZW50IGFuZCB3aGVuIHRoYXQgaXMgcGxhY2VkIG5lYXIgdm9pZCBlbGVtZW50cywgaXQgaXMgbm90IHZpc2libGVcbiAgICAvLyBzbyB3ZSBpbmNyZWFzZSB0aGUgd2lkdGggdG8gYXQgbGVhc3QgMnB4IGluIG9yZGVyIGZvciB0aGUgdXNlciB0byBzZWUgaXRcbiAgICBjb25zdCB6ZXJvV2lkdGhFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zbGF0ZS16ZXJvLXdpZHRoPVwielwiXScpO1xuXG4gICAgQXJyYXkuZnJvbSh6ZXJvV2lkdGhFbHMpLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuc3R5bGUubWluV2lkdGggPSAnMnB4JztcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICB9KTtcbiAgfVxuXG4gIG9uUGx1Z2luQmx1ciA9IGUgPT4ge1xuICAgIGxvZygnW29uUGx1Z2luQmx1cl0nLCBlICYmIGUucmVsYXRlZFRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZSAmJiBlLnJlbGF0ZWRUYXJnZXQ7XG5cbiAgICBjb25zdCBub2RlID0gdGFyZ2V0ID8gZmluZE5vZGUodGFyZ2V0LCB0aGlzLnN0YXRlLnZhbHVlKSA6IG51bGw7XG4gICAgbG9nKCdbb25QbHVnaW5CbHVyXSBub2RlOiAnLCBub2RlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgZm9jdXNlZE5vZGU6IG5vZGUgfSwgKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgb25QbHVnaW5Gb2N1cyA9IGUgPT4ge1xuICAgIGxvZygnW29uUGx1Z2luRm9jdXNdJywgZSAmJiBlLnRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZSAmJiBlLnRhcmdldDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub2RlID0gZmluZE5vZGUodGFyZ2V0LCB0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgIGxvZygnW29uUGx1Z2luRm9jdXNdIG5vZGU6ICcsIG5vZGUpO1xuXG4gICAgICBjb25zdCBzdGFzaGVkVmFsdWUgPSB0aGlzLnN0YXRlLnN0YXNoZWRWYWx1ZSB8fCB0aGlzLnN0YXRlLnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZvY3VzZWROb2RlOiBub2RlLCBzdGFzaGVkVmFsdWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBmb2N1c2VkTm9kZTogbnVsbCB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFzaFZhbHVlKCk7XG4gIH07XG5cbiAgb25NYXRoQ2xpY2sgPSBub2RlID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VsZWN0ZWROb2RlOiBub2RlIH0pO1xuICB9O1xuXG4gIG9uRWRpdGluZ0RvbmUgPSBlZGl0b3IgPT4ge1xuICAgIGxvZygnW29uRWRpdGluZ0RvbmVdJyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXNoZWRWYWx1ZTogbnVsbCwgZm9jdXNlZE5vZGU6IG51bGwgfSk7XG4gICAgbG9nKCdbb25FZGl0aW5nRG9uZV0gdmFsdWU6ICcsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZWRpdG9yLCB0cnVlKTtcbiAgfTtcblxuICBvbkRvbmUgPSBlZGl0b3IgPT4ge1xuICAgIGNvbnN0IHsgbm9uRW1wdHkgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsb2coJ1tvbkRvbmVdJyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRvb2xiYXJJbkZvY3VzOiBmYWxzZSwgZm9jdXNlZE5vZGU6IG51bGwgfSk7XG5cbiAgICB0aGlzLm9uRWRpdGluZ0RvbmUoZWRpdG9yKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIG9uUmVzaXplIGV2ZW50IGxpc3RlbmVyXG4gICAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblJlc2l6ZSk7XG4gIH1cblxuICAvLyBBbGxvd2luZyB0aW1lIGZvciBvbkNoYW5nZSB0byB0YWtlIGVmZmVjdCBpZiBpdCBpcyBjYWxsZWRcbiAgaGFuZGxlQmx1ciA9IHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IHsgbm9uRW1wdHkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgdG9vbGJhck9wdHM6IHsgZG9uZU9uIH1cbiAgICB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyB0b29sYmFySW5Gb2N1czogZmFsc2UsIGZvY3VzZWROb2RlOiBudWxsIH0pO1xuXG4gICAgaWYgKGRvbmVPbiA9PT0gJ2JsdXInKSB7XG4gICAgICBpZiAobm9uRW1wdHkgJiYgdGhpcy5zdGF0ZS52YWx1ZS5zdGFydFRleHQ/LnRleHQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlc2V0VmFsdWUodHJ1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkVkaXRpbmdEb25lKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25FZGl0aW5nRG9uZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBsb2coJ1tvbkJsdXJdJyk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblxuICAgIGNvbnN0IG5vZGUgPSB0YXJnZXQgPyBmaW5kTm9kZSh0YXJnZXQsIHRoaXMuc3RhdGUudmFsdWUpIDogbnVsbDtcblxuICAgIGxvZygnW29uQmx1cl0gbm9kZTogJywgbm9kZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7IHByZUJsdXJWYWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSwgZm9jdXNlZE5vZGU6ICFub2RlID8gbnVsbCA6IG5vZGUgfSxcbiAgICAgICAgdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcywgcmVzb2x2ZSlcbiAgICAgICk7XG4gICAgICB0aGlzLnByb3BzLm9uQmx1cihldmVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlRG9tQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7dGhpcy5zdGF0ZS52YWx1ZS5kb2N1bWVudC5rZXl9XCJdYCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgdmFsdWU6IHN0YXRlVmFsdWUgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmICghdGhpcy53cmFwcGVyUmVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRpdG9yRWxlbWVudCA9XG4gICAgICAgICFlZGl0b3JET00gfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbG9zZXN0KGBbY2xhc3MqPVwiJHtlZGl0b3JET00uY2xhc3NOYW1lfVwiXWApO1xuICAgICAgY29uc3QgdG9vbGJhckVsZW1lbnQgPVxuICAgICAgICAhdGhpcy50b29sYmFyUmVmIHx8XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xvc2VzdChgW2NsYXNzKj1cIiR7dGhpcy50b29sYmFyUmVmLmNsYXNzTmFtZX1cIl1gKTtcbiAgICAgIGNvbnN0IGlzSW5DdXJyZW50Q29tcG9uZW50ID1cbiAgICAgICAgdGhpcy53cmFwcGVyUmVmLmNvbnRhaW5zKGVkaXRvckVsZW1lbnQpIHx8IHRoaXMud3JhcHBlclJlZi5jb250YWlucyh0b29sYmFyRWxlbWVudCk7XG5cbiAgICAgIGlmICghaXNJbkN1cnJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgZWRpdG9yRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLmhhbmRsZURvbUJsdXIpO1xuXG4gICAgICAgIGlmIChzdGF0ZVZhbHVlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIHRoaXMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9O1xuXG4gIC8qXG4gICAqIE5lZWRzIHRvIGJlIHdyYXBwZWQgb3RoZXJ3aXNlIGl0IGNhdXNlcyBpc3N1ZXMgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbnNcbiAgICogS25vd24gaXNzdWUgZm9yIHNsYXRlanMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lhbnN0b3JtdGF5bG9yL3NsYXRlL2lzc3Vlcy8yMDk3XG4gICAqIFVzaW5nIHRpbWVvdXQgSSB3YXNuJ3QgYWJsZSB0byB0ZXN0IHRoaXNcbiAgICpcbiAgICogTm90ZTogVGhlIHVzZSBvZiBwcm9taXNlcyBoYXMgYmVlbiBjYXVzaW5nIGlzc3VlcyB3aXRoIE1hdGhRdWlsbFxuICAgKiAqL1xuICBvbkZvY3VzID0gKCkgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7dGhpcy5zdGF0ZS52YWx1ZS5kb2N1bWVudC5rZXl9XCJdYCk7XG5cbiAgICAgIGxvZygnW29uRm9jdXNdJywgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIC0gQHNlZSBjaGFuZ2VEYXRhIGJlbG93IGZvciBzb21lIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgKi9cbiAgICAgIGlmICh0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBkYXRhIH0gPSB0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBO1xuICAgICAgICBjb25zdCBkb21FbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7a2V5fVwiXWApO1xuXG4gICAgICAgIGlmIChkb21FbCkge1xuICAgICAgICAgIGxldCBjaGFuZ2UgPSB0aGlzLnN0YXRlLnZhbHVlLmNoYW5nZSgpLnNldE5vZGVCeUtleShrZXksIHsgZGF0YSB9KTtcblxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogY2hhbmdlLnZhbHVlIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX19URU1QT1JBUllfQ0hBTkdFX0RBVEEgPSBudWxsO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyBuZWVkZWQganVzdCBpbiBjYXNlIHRoZSBicm93c2VyIGRlY2lkZXMgdG8gbWFrZSB0aGUgZWRpdG9yXG4gICAgICAgKiBsb3NlIGZvY3VzIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgb25CbHVyIGV2ZW50IChjYW4gaGFwcGVuIGluIGEgZmV3IGNhc2VzKS5cbiAgICAgICAqIFRoaXMgd2lsbCBhbHNvIHRyaWdnZXIgb25CbHVyIGlmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBwYWdlIHdoZW4gdGhlIGVkaXRvclxuICAgICAgICogaXMgZm9jdXNlZC5cbiAgICAgICAqL1xuICAgICAgaWYgKGVkaXRvckRPTSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBlZGl0b3JET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuaGFuZGxlRG9tQmx1cik7XG4gICAgICAgIGVkaXRvckRPTS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5oYW5kbGVEb21CbHVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFzaFZhbHVlKCk7XG4gICAgICB0aGlzLnByb3BzLm9uRm9jdXMoKTtcblxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuXG4gIHN0YXNoVmFsdWUgPSAoKSA9PiB7XG4gICAgbG9nKCdbc3Rhc2hWYWx1ZV0nKTtcbiAgICBpZiAoIXRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc3Rhc2hlZFZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIHZhbHVlIGlmIHRoZSB1c2VyIGRpZG4ndCBjbGljayBkb25lLlxuICAgKi9cbiAgcmVzZXRWYWx1ZSA9IGZvcmNlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb2N1c2VkTm9kZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHN0b3BSZXNldCA9IHRoaXMucGx1Z2lucy5yZWR1Y2UoKHMsIHApID0+IHtcbiAgICAgIHJldHVybiBzIHx8IChwLnN0b3BSZXNldCAmJiBwLnN0b3BSZXNldCh0aGlzLnN0YXRlLnZhbHVlKSk7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgbG9nKCdbcmVzZXRWYWx1ZV0nLCB2YWx1ZS5pc0ZvY3VzZWQsIGZvY3VzZWROb2RlLCAnc3RvcFJlc2V0OiAnLCBzdG9wUmVzZXQpO1xuICAgIGlmICgodGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUgJiYgIXZhbHVlLmlzRm9jdXNlZCAmJiAhZm9jdXNlZE5vZGUgJiYgIXN0b3BSZXNldCkgfHwgZm9yY2UpIHtcbiAgICAgIGxvZygnW3Jlc2V0VmFsdWVdIHJlc2V0dGluZy4uLicpO1xuICAgICAgbG9nKCdzdGFzaGVkJywgdGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUuZG9jdW1lbnQudG9PYmplY3QoKSk7XG4gICAgICBsb2coJ2N1cnJlbnQnLCB0aGlzLnN0YXRlLnZhbHVlLmRvY3VtZW50LnRvT2JqZWN0KCkpO1xuXG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IFZhbHVlLmZyb21KU09OKHRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlLnRvSlNPTigpKTtcblxuICAgICAgbG9nKCduZXdWYWx1ZTogJywgbmV3VmFsdWUuZG9jdW1lbnQpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5ld1ZhbHVlLCBzdGFzaGVkVmFsdWU6IG51bGwgfSwgKCkgPT4ge1xuICAgICAgICAgICAgbG9nKCd2YWx1ZSBub3c6ICcsIHRoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQudG9KU09OKCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQ2hhbmdlID0gKGVkaXRvciwgZG9uZSkgPT4ge1xuICAgIGxvZygnW29uQ2hhbmdlXScpO1xuICAgIGNvbnN0IHsgY2hhcmFjdGVyc0xpbWl0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFsbFRleHQgPSBFZGl0b3Iuc3RyaW5nKGVkaXRvciwgW10pO1xuXG4gICAgaWYgKGFsbFRleHQgPiBjaGFyYWN0ZXJzTGltaXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gdmFsdWVUb0h0bWwoZWRpdG9yKTtcbiAgICBjb25zdCB2YWx1ZSA9IGh0bWxUb1ZhbHVlKGh0bWwpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlIH0sICgpID0+IHtcbiAgICAgIGxvZygnW29uQ2hhbmdlXSwgY2FsbCBkb25lKCknKTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGdldEZvY3VzZWRWYWx1ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZS5pc0ZvY3VzZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLnByZUJsdXJWYWx1ZTtcbiAgfTtcblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcykge1xuICAgIGlmICghaXNFcXVhbChwcm9wcy52YWx1ZSwgdGhpcy5wcm9wcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1czogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdmFsdWVUb1NpemUgPSB2ID0+IHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodi5lbmRzV2l0aCgnJScpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKHYuZW5kc1dpdGgoJ3B4JykgfHwgdi5lbmRzV2l0aCgndmgnKSB8fCB2LmVuZHNXaXRoKCd2dycpKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh2LCAxMCk7XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IGAke3ZhbHVlfXB4YDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGAke3Z9cHhgO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfTtcblxuICBidWlsZFNpemVTdHlsZSgpIHtcbiAgICBjb25zdCB7IHdpZHRoLCBtaW5IZWlnaHQsIGhlaWdodCwgbWF4SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnZhbHVlVG9TaXplKHdpZHRoKSxcbiAgICAgIGhlaWdodDogdGhpcy52YWx1ZVRvU2l6ZShoZWlnaHQpLFxuICAgICAgbWluSGVpZ2h0OiB0aGlzLnZhbHVlVG9TaXplKG1pbkhlaWdodCksXG4gICAgICBtYXhIZWlnaHQ6IHRoaXMudmFsdWVUb1NpemUobWF4SGVpZ2h0KVxuICAgIH07XG4gIH1cblxuICB2YWxpZGF0ZU5vZGUgPSBub2RlID0+IHtcbiAgICBpZiAobm9kZS5vYmplY3QgIT09ICdibG9jaycpIHJldHVybjtcblxuICAgIGNvbnN0IGxhc3QgPSBub2RlLm5vZGVzLmxhc3QoKTtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcblxuICAgIGlmIChsYXN0LnR5cGUgIT09ICdpbWFnZScpIHJldHVybjtcblxuICAgIGxvZygnW3ZhbGlkYXRlTm9kZV0gbGFzdCBpcyBpbWFnZS4uJyk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBsYXN0LmdldFBhcmVudChsYXN0LmtleSk7XG4gICAgY29uc3QgcCA9IEJsb2NrLmdldFBhcmVudChsYXN0LmtleSk7XG4gICAgbG9nKCdbdmFsaWRhdGVOb2RlXSBwYXJlbnQ6JywgcGFyZW50LCBwKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgZm9jdXMgPSAocG9zLCBub2RlKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBwb3MgfHwgJ2VuZCc7XG5cbiAgICB0aGlzLnByb3BzLmZvY3VzKHBvc2l0aW9uLCBub2RlKTtcbiAgfTtcblxuICBvbkRyb3BQYXN0ZSA9IGFzeW5jIChldmVudCwgY2hhbmdlLCBkcm9wQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNoYW5nZS5lZGl0b3I7XG4gICAgY29uc3QgdHJhbnNmZXIgPSBnZXRFdmVudFRyYW5zZmVyKGV2ZW50KTtcbiAgICBjb25zdCBmaWxlID0gdHJhbnNmZXIuZmlsZXMgJiYgdHJhbnNmZXIuZmlsZXNbMF07XG5cbiAgICBjb25zdCB0eXBlID0gdHJhbnNmZXIudHlwZTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHRyYW5zZmVyLmZyYWdtZW50O1xuICAgIGNvbnN0IHRleHQgPSB0cmFuc2Zlci50ZXh0O1xuXG4gICAgaWYgKFxuICAgICAgZmlsZSAmJlxuICAgICAgKGZpbGUudHlwZSA9PT0gJ2ltYWdlL2pwZWcnIHx8IGZpbGUudHlwZSA9PT0gJ2ltYWdlL2pwZycgfHwgZmlsZS50eXBlID09PSAnaW1hZ2UvcG5nJylcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5pbWFnZVN1cHBvcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nKCdbb25Ecm9wUGFzdGVdJyk7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGdldEJhc2U2NChmaWxlKTtcbiAgICAgICAgY29uc3QgaW5saW5lID0gSW5saW5lLmNyZWF0ZSh7XG4gICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBzcmNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkcm9wQ29udGV4dCkge1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByYW5nZSA9IGdldEV2ZW50UmFuZ2UoZXZlbnQsIGVkaXRvcik7XG4gICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICBjaGFuZ2Uuc2VsZWN0KHJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaCA9IGNoYW5nZS5pbnNlcnRJbmxpbmUoaW5saW5lKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShjaCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGlubGluZSwgKCkgPT4gdGhpcy5zdGF0ZS52YWx1ZSwgdGhpcy5vbkNoYW5nZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMucHJvcHMuaW1hZ2VTdXBwb3J0LmFkZChoYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2coJ1tvbkRyb3BQYXN0ZV0gZXJyb3I6ICcsIGVycik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZnJhZ21lbnQnKSB7XG4gICAgICBjaGFuZ2UuaW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RleHQnIHx8IHR5cGUgPT09ICdodG1sJykge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmFsdWU6IHsgZG9jdW1lbnQsIHNlbGVjdGlvbiwgc3RhcnRCbG9jayB9XG4gICAgICB9ID0gY2hhbmdlO1xuXG4gICAgICBpZiAoc3RhcnRCbG9jay5pc1ZvaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0QmxvY2sgPSBzdGFydEJsb2NrO1xuICAgICAgY29uc3QgZGVmYXVsdE1hcmtzID0gZG9jdW1lbnQuZ2V0SW5zZXJ0TWFya3NBdFJhbmdlKHNlbGVjdGlvbik7XG4gICAgICBjb25zdCBmcmFnID0gUGxhaW4uZGVzZXJpYWxpemUodGV4dCwge1xuICAgICAgICBkZWZhdWx0QmxvY2ssXG4gICAgICAgIGRlZmF1bHRNYXJrc1xuICAgICAgfSkuZG9jdW1lbnQ7XG4gICAgICBjaGFuZ2UuaW5zZXJ0RnJhZ21lbnQoZnJhZyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlclBsYWNlaG9sZGVyID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgZWRpdG9yIH0gPSBwcm9wcztcbiAgICBjb25zdCB7IGRvY3VtZW50IH0gPSBlZGl0b3IudmFsdWU7XG5cbiAgICBpZiAoIWVkaXRvci5wcm9wcy5wbGFjZWhvbGRlciB8fCBkb2N1bWVudC50ZXh0ICE9PSAnJyB8fCBkb2N1bWVudC5ub2Rlcy5zaXplICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNvbnRlbnRFZGl0YWJsZT17ZmFsc2V9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgd2lkdGg6ICdmaXQtY29udGVudCcsIC8vIGZvciBjZW50ZXJpbmcgdGhlIHBsYWNlaG9sZGVyIGlmIHRleHQtYWxpZ24gaXMgc2V0IHRvIGNlbnRlclxuICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgb3BhY2l0eTogJzAuMzMnLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICB1c2VyU2VsZWN0OiAnbm9uZSdcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2VkaXRvci5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNwZWxsQ2hlY2ssXG4gICAgICBoaWdobGlnaHRTaGFwZSxcbiAgICAgIGNsYXNzZXMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHBsdWdpblByb3BzLFxuICAgICAgb25LZXlEb3duXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHZhbHVlLCBmb2N1c2VkTm9kZSwgdG9vbGJhck9wdHMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBsb2coJ1tyZW5kZXJdIHZhbHVlOiAnLCB2YWx1ZSk7XG4gICAgY29uc3Qgc2l6ZVN0eWxlID0gdGhpcy5idWlsZFNpemVTdHlsZSgpO1xuICAgIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lcyhcbiAgICAgIHtcbiAgICAgICAgW2NsYXNzZXMud2l0aEJnXTogaGlnaGxpZ2h0U2hhcGUsXG4gICAgICAgIFtjbGFzc2VzLnRvb2xiYXJPblRvcF06IHRvb2xiYXJPcHRzLmFsd2F5c1Zpc2libGUgJiYgdG9vbGJhck9wdHMucG9zaXRpb24gPT09ICd0b3AnXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xhc3Nlcy5zbGF0ZUVkaXRvclxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZiA9PiAodGhpcy53cmFwcGVyUmVmID0gcmVmKX1cbiAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHNpemVTdHlsZS53aWR0aCB9fVxuICAgICAgICBjbGFzc05hbWU9e25hbWVzfVxuICAgICAgPlxuICAgICAgICA8U2xhdGVFZGl0b3JcbiAgICAgICAgICBwbHVnaW5zPXt0aGlzLnBsdWdpbnN9XG4gICAgICAgICAgdG9vbGJhclJlZj17ciA9PiB7XG4gICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSZWYgPSByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25FZGl0b3I9e3RoaXMucHJvcHMub25FZGl0b3J9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIGZvY3VzPXt0aGlzLmZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgIGdldEZvY3VzZWRWYWx1ZT17dGhpcy5nZXRGb2N1c2VkVmFsdWV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbkRyb3A9eyhldmVudCwgZWRpdG9yKSA9PiB0aGlzLm9uRHJvcFBhc3RlKGV2ZW50LCBlZGl0b3IsIHRydWUpfVxuICAgICAgICAgIG9uUGFzdGU9eyhldmVudCwgZWRpdG9yKSA9PiB0aGlzLm9uRHJvcFBhc3RlKGV2ZW50LCBlZGl0b3IpfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbkVkaXRpbmdEb25lPXt0aGlzLm9uRWRpdGluZ0RvbmV9XG4gICAgICAgICAgb25Eb25lPXt0aGlzLm9uRG9uZX1cbiAgICAgICAgICBmb2N1c2VkTm9kZT17Zm9jdXNlZE5vZGV9XG4gICAgICAgICAgbm9ybWFsaXplPXt0aGlzLm5vcm1hbGl6ZX1cbiAgICAgICAgICByZWFkT25seT17ZGlzYWJsZWR9XG4gICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja31cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtjbGFzc2VzLm5vUGFkZGluZ106IHRvb2xiYXJPcHRzICYmIHRvb2xiYXJPcHRzLm5vQm9yZGVyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xhc3Nlcy5zbGF0ZUVkaXRvclxuICAgICAgICAgICl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1pbkhlaWdodDogc2l6ZVN0eWxlLm1pbkhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZVN0eWxlLmhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogc2l6ZVN0eWxlLm1heEhlaWdodFxuICAgICAgICAgIH19XG4gICAgICAgICAgcGx1Z2luUHJvcHM9e3BsdWdpblByb3BzfVxuICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgcmVuZGVyUGxhY2Vob2xkZXI9e3RoaXMucmVuZGVyUGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWYgPT4gKHRoaXMud3JhcHBlclJlZiA9IHJlZil9XG4gICAgICAgIHN0eWxlPXt7IHdpZHRoOiBzaXplU3R5bGUud2lkdGggfX1cbiAgICAgICAgY2xhc3NOYW1lPXtuYW1lc31cbiAgICAgID5cbiAgICAgICAgPE9sZFNsYXRlRWRpdG9yXG4gICAgICAgICAgcGx1Z2lucz17dGhpcy5wbHVnaW5zfVxuICAgICAgICAgIHRvb2xiYXJSZWY9e3IgPT4ge1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgdGhpcy50b29sYmFyUmVmID0gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICBmb2N1cz17dGhpcy5mb2N1c31cbiAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX1cbiAgICAgICAgICBnZXRGb2N1c2VkVmFsdWU9e3RoaXMuZ2V0Rm9jdXNlZFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Ecm9wPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yLCB0cnVlKX1cbiAgICAgICAgICBvblBhc3RlPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yKX1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25FZGl0aW5nRG9uZT17dGhpcy5vbkVkaXRpbmdEb25lfVxuICAgICAgICAgIGZvY3VzZWROb2RlPXtmb2N1c2VkTm9kZX1cbiAgICAgICAgICBub3JtYWxpemU9e3RoaXMubm9ybWFsaXplfVxuICAgICAgICAgIHJlYWRPbmx5PXtkaXNhYmxlZH1cbiAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW2NsYXNzZXMubm9QYWRkaW5nXTogdG9vbGJhck9wdHMgJiYgdG9vbGJhck9wdHMubm9Cb3JkZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGFzc2VzLnNsYXRlRWRpdG9yXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWluSGVpZ2h0OiBzaXplU3R5bGUubWluSGVpZ2h0LFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplU3R5bGUuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBzaXplU3R5bGUubWF4SGVpZ2h0XG4gICAgICAgICAgfX1cbiAgICAgICAgICBwbHVnaW5Qcm9wcz17cGx1Z2luUHJvcHN9XG4gICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICByZW5kZXJQbGFjZWhvbGRlcj17dGhpcy5yZW5kZXJQbGFjZWhvbGRlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuLy8gVE9ETyBjb2xvciAtIGhhcmRjb2RlZCBncmF5IGJhY2tncm91bmQgYW5kIGtleXBhZCBjb2xvcnMgd2lsbCBuZWVkIHRvIGNoYW5nZSB0b29cbmNvbnN0IHN0eWxlcyA9IHtcbiAgd2l0aEJnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjA2KSdcbiAgfSxcbiAgc2xhdGVFZGl0b3I6IHtcbiAgICBmb250RmFtaWx5OiAnUm9ib3RvLCBzYW5zLXNlcmlmJyxcblxuICAgICcmIHRhYmxlJzoge1xuICAgICAgdGFibGVMYXlvdXQ6ICdmaXhlZCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sbGFwc2U6ICdjb2xsYXBzZScsXG4gICAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5iYWNrZ3JvdW5kKClcbiAgICB9LFxuICAgICcmIHRhYmxlOm5vdChbYm9yZGVyPVwiMVwiXSkgdHInOiB7XG4gICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgI2RmZTJlNSdcbiAgICAgIC8vIFRPRE8gcGVyaGFwcyBzZWNvbmRhcnkgY29sb3IgZm9yIGJhY2tncm91bmQsIGZvciBub3cgZGlzYWJsZVxuICAgICAgLy8gJyY6bnRoLWNoaWxkKDJuKSc6IHtcbiAgICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiAnI2Y2ZjhmYSdcbiAgICAgIC8vIH1cbiAgICB9LFxuICAgICcmIHRkLCB0aCc6IHtcbiAgICAgIHBhZGRpbmc6ICcuNmVtIDFlbScsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInXG4gICAgfSxcbiAgICAnJiB0YWJsZTpub3QoW2JvcmRlcj1cIjFcIl0pIHRkLCB0aCc6IHtcbiAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZGZlMmU1J1xuICAgIH1cbiAgfSxcbiAgdG9vbGJhck9uVG9wOiB7XG4gICAgbWFyZ2luVG9wOiAnNDVweCdcbiAgfSxcbiAgbm9QYWRkaW5nOiB7XG4gICAgcGFkZGluZzogJzAgIWltcG9ydGFudCdcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlcyhzdHlsZXMpKEVkaXRvckNvbXBvbmVudCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQU9BOztBQUVBOztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUE7O0FBR0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsT0FBTyxHQUFHO0VBQ2QsU0FBUyxNQURLO0VBRWQsU0FBUyxRQUZLO0VBR2QsU0FBUyxXQUhLO0VBSWQsU0FBUztBQUpLLENBQWhCO0FBT0EsSUFBTUMsVUFBVSxHQUFHLENBQUMsZUFBRCxFQUFrQixlQUFsQixDQUFuQjtBQUNBLElBQU1DLGdCQUFnQixHQUFHLENBQUMsTUFBRCxF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
1322
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQYXRoIiwiU2xhdGVOb2RlIiwiUmVhY3RFZGl0b3IiLCJFZGl0b3IiLCJIT1RLRVlTIiwiTElTVF9UWVBFUyIsIlRFWFRfQUxJR05fVFlQRVMiLCJpbml0aWFsVmFsdWUiLCJ0eXBlIiwiY2hpbGRyZW4iLCJkYXRhIiwibGF0ZXgiLCJ3cmFwcGVyIiwidGV4dCIsIlNsYXRlRWRpdG9yIiwiZWRpdG9yUHJvcHMiLCJtb3VudGVkIiwidXNlUmVmIiwiYXV0b0ZvY3VzIiwidmFsdWUiLCJwbHVnaW5zIiwiYWN0aW9uc1JlZiIsIm9uRWRpdGluZ0RvbmUiLCJyZW5kZXJFbGVtZW50IiwidXNlQ2FsbGJhY2siLCJwcm9wcyIsInJlbmRlckxlYWYiLCJlZGl0b3IiLCJ1c2VNZW1vIiwid2l0aFBsdWdpbnMiLCJjcmVhdGVFZGl0b3IiLCJ1c2VTdGF0ZSIsImlzRm9jdXNlZCIsInNldElzRm9jdXNlZCIsImVkaXRvclJlZiIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJvbkVkaXRvciIsIlRyYW5zZm9ybXMiLCJzZWxlY3QiLCJmb2N1cyIsInNsYXRlVmFsdWUiLCJtYXJrcyIsIm5vcm1hbGl6ZSIsImZvcmNlIiwib25LZXlEb3duIiwiZXZlbnQiLCJrZXkiLCJzaGlmdEtleSIsImluc2VydFRleHQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhvdGtleSIsImlzSG90a2V5IiwibWFyayIsInRvZ2dsZU1hcmsiLCJvbkZvY3VzIiwib25CbHVyIiwiZSIsInNldFRpbWVvdXQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsImFjdGlvbnMiLCJwb3NpdGlvbiIsIm5vZGUiLCJsZWFmIiwiZmluZFBhdGgiLCJlZGdlIiwidGV4dFBhdGgiLCJmaW5pc2hFZGl0aW5nIiwib25Eb25lIiwidG9nZ2xlQmxvY2siLCJmb3JtYXQiLCJpc0FjdGl2ZSIsImlzQmxvY2tBY3RpdmUiLCJpbmNsdWRlcyIsImlzTGlzdCIsInVud3JhcE5vZGVzIiwibWF0Y2giLCJuIiwiaXNFZGl0b3IiLCJTbGF0ZUVsZW1lbnQiLCJpc0VsZW1lbnQiLCJzcGxpdCIsIm5ld1Byb3BlcnRpZXMiLCJhbGlnbiIsInVuZGVmaW5lZCIsInNldE5vZGVzIiwiYmxvY2siLCJ3cmFwTm9kZXMiLCJpc01hcmtBY3RpdmUiLCJyZW1vdmVNYXJrIiwiYWRkTWFyayIsImJsb2NrVHlwZSIsInNlbGVjdGlvbiIsIkFycmF5IiwiZnJvbSIsIm5vZGVzIiwiYXQiLCJ1bmhhbmdSYW5nZSIsIkVsZW1lbnQiLCJ1c2VTbGF0ZVN0YXRpYyIsImZvY3VzZWQiLCJ1c2VGb2N1c2VkIiwiYXR0cmlidXRlcyIsImVsZW1lbnQiLCJzdHlsZSIsInRleHRBbGlnbiIsIm5vZGVQcm9wcyIsInBsdWdpblRvUmVuZGVyIiwiZmluZCIsInBsdWdpbiIsInN1cHBvcnRzIiwicmVuZGVyTm9kZSIsIm1hcmdpbiIsIkxlYWYiLCJib2xkIiwiY29kZSIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZXRocm91Z2giLCJCbG9ja0J1dHRvbiIsImljb24iLCJ1c2VTbGF0ZSIsIk1hcmtCdXR0b24iLCJsb2ciLCJkZWJ1ZyIsImRlZmF1bHRUb29sYmFyT3B0cyIsImFsaWdubWVudCIsImFsd2F5c1Zpc2libGUiLCJzaG93RG9uZSIsImRvbmVPbiIsImRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyIsIm9wdGlvbnMiLCJyZXNwQXJlYVRvb2xiYXIiLCJvbkhhbmRsZUFyZWFDaGFuZ2UiLCJkZWZhdWx0TGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMiLCJjcmVhdGVUb29sYmFyT3B0cyIsInRvb2xiYXJPcHRzIiwiRWRpdG9yQ29tcG9uZW50Iiwibm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzIiwicmVzcG9uc2VBcmVhUHJvcHMiLCJidWlsZFBsdWdpbnMiLCJhY3RpdmVQbHVnaW5zIiwibWF0aCIsIm9uQ2xpY2siLCJvbk1hdGhDbGljayIsIm9uUGx1Z2luRm9jdXMiLCJvblBsdWdpbkJsdXIiLCJpbWFnZSIsIm9uRGVsZXRlIiwiaW1hZ2VTdXBwb3J0Iiwic3JjIiwiZG9uZSIsInN0YXRlIiwiaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQiLCJnZXRIYW5kbGVyIiwiaGFuZGxlciIsImFkZCIsIm1heEltYWdlV2lkdGgiLCJtYXhJbWFnZUhlaWdodCIsInRvb2xiYXIiLCJkaXNhYmxlU2Nyb2xsYmFyIiwiZGlzYWJsZVVuZGVybGluZSIsImF1dG9XaWR0aCIsImF1dG9XaWR0aFRvb2xiYXIiLCJ0YWJsZSIsInJlc3BvbnNlQXJlYSIsIm1heFJlc3BvbnNlQXJlYXMiLCJlcnJvciIsImxhbmd1YWdlQ2hhcmFjdGVycyIsImxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzIiwibWVkaWEiLCJvbkNoYW5nZSIsInVwbG9hZFNvdW5kU3VwcG9ydCIsInJlbGF0ZWRUYXJnZXQiLCJ0YXJnZXQiLCJmaW5kTm9kZSIsInNldFN0YXRlIiwiZm9jdXNlZE5vZGUiLCJyZXNldFZhbHVlIiwic3Rhc2hlZFZhbHVlIiwic3Rhc2hWYWx1ZSIsInNlbGVjdGVkTm9kZSIsIm5vbkVtcHR5IiwidG9vbGJhckluRm9jdXMiLCJyZXNvbHZlIiwic3RhcnRUZXh0IiwibGVuZ3RoIiwidGhlbiIsInRvU2xhdGVOb2RlIiwiUHJvbWlzZSIsInByZUJsdXJWYWx1ZSIsImhhbmRsZUJsdXIiLCJiaW5kIiwiZWRpdG9yRE9NIiwicXVlcnlTZWxlY3RvciIsInN0YXRlVmFsdWUiLCJ3cmFwcGVyUmVmIiwiZWRpdG9yRWxlbWVudCIsImNsb3Nlc3QiLCJjbGFzc05hbWUiLCJ0b29sYmFyRWxlbWVudCIsInRvb2xiYXJSZWYiLCJpc0luQ3VycmVudENvbXBvbmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVEb21CbHVyIiwiX19URU1QT1JBUllfQ0hBTkdFX0RBVEEiLCJkb21FbCIsImNoYW5nZSIsInNldE5vZGVCeUtleSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzdG9wUmVzZXQiLCJyZWR1Y2UiLCJzIiwicCIsInRvT2JqZWN0IiwibmV3VmFsdWUiLCJWYWx1ZSIsImZyb21KU09OIiwidG9KU09OIiwiY2hhcmFjdGVyc0xpbWl0IiwiYWxsVGV4dCIsInN0cmluZyIsImh0bWwiLCJ2YWx1ZVRvSHRtbCIsImh0bWxUb1ZhbHVlIiwidiIsImVuZHNXaXRoIiwicGFyc2VJbnQiLCJpc05hTiIsIm9iamVjdCIsImxhc3QiLCJwYXJlbnQiLCJnZXRQYXJlbnQiLCJCbG9jayIsInBvcyIsImRyb3BDb250ZXh0IiwidHJhbnNmZXIiLCJnZXRFdmVudFRyYW5zZmVyIiwiZmlsZSIsImZpbGVzIiwiZnJhZ21lbnQiLCJnZXRCYXNlNjQiLCJpbmxpbmUiLCJJbmxpbmUiLCJjcmVhdGUiLCJpc1ZvaWQiLCJsb2FkaW5nIiwicmFuZ2UiLCJnZXRFdmVudFJhbmdlIiwiY2giLCJpbnNlcnRJbmxpbmUiLCJJbnNlcnRJbWFnZUhhbmRsZXIiLCJpbnNlcnRGcmFnbWVudCIsInN0YXJ0QmxvY2siLCJkZWZhdWx0QmxvY2siLCJkZWZhdWx0TWFya3MiLCJnZXRJbnNlcnRNYXJrc0F0UmFuZ2UiLCJmcmFnIiwiUGxhaW4iLCJkZXNlcmlhbGl6ZSIsInBsYWNlaG9sZGVyIiwic2l6ZSIsImRpc3BsYXkiLCJ3aWR0aCIsIm1heFdpZHRoIiwid2hpdGVTcGFjZSIsIm9wYWNpdHkiLCJwb2ludGVyRXZlbnRzIiwidXNlclNlbGVjdCIsIm9uUmVzaXplIiwiaGFuZGxlUGx1Z2lucyIsIm5leHRQcm9wcyIsIm5ld1Rvb2xiYXJPcHRzIiwiaXNFcXVhbCIsInplcm9XaWR0aEVscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZWwiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsImhlaWdodCIsIm1heEhlaWdodCIsInZhbHVlVG9TaXplIiwiZGlzYWJsZWQiLCJzcGVsbENoZWNrIiwiaGlnaGxpZ2h0U2hhcGUiLCJjbGFzc2VzIiwicGx1Z2luUHJvcHMiLCJzaXplU3R5bGUiLCJidWlsZFNpemVTdHlsZSIsIm5hbWVzIiwiY2xhc3NOYW1lcyIsIndpdGhCZyIsInRvb2xiYXJPblRvcCIsInNsYXRlRWRpdG9yIiwicmVmIiwiciIsIm9uUmVmIiwiZ2V0Rm9jdXNlZFZhbHVlIiwib25Ecm9wUGFzdGUiLCJub1BhZGRpbmciLCJub0JvcmRlciIsInJlbmRlclBsYWNlaG9sZGVyIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJhcnJheU9mIiwic2hhcGUiLCJhcnJheSIsIm51bWJlciIsIm9uZU9mVHlwZSIsImFueSIsIm9uZU9mIiwibGFuZ3VhZ2UiLCJjaGFyYWN0ZXJJY29uIiwiY2hhcmFjdGVycyIsInZhbHVlcyIsImFsbFZhbGlkIiwiZXZlcnkiLCJBTExfUExVR0lOUyIsIkVycm9yIiwiam9pbiIsInN0eWxlcyIsImJhY2tncm91bmRDb2xvciIsImZvbnRGYW1pbHkiLCJ0YWJsZUxheW91dCIsImJvcmRlckNvbGxhcHNlIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyVG9wIiwicGFkZGluZyIsImJvcmRlciIsIm1hcmdpblRvcCIsIndpdGhTdHlsZXMiXSwic291cmNlcyI6WyIuLi9zcmMvZWRpdG9yLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEVkaXRvciBhcyBPbGRTbGF0ZUVkaXRvcixcbiAgZmluZE5vZGUsXG4gIGdldEV2ZW50UmFuZ2UsXG4gIGdldEV2ZW50VHJhbnNmZXIsXG59IGZyb20gJ3NsYXRlLXJlYWN0JztcbmltcG9ydCBSb290UmVmIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL1Jvb3RSZWYnO1xuXG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgKiBhcyBzZXJpYWxpemF0aW9uIGZyb20gJy4vbmV3LXNlcmlhbGl6YXRpb24nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFZhbHVlLCBCbG9jaywgSW5saW5lIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQUxMX1BMVUdJTlMsIERFRkFVTFRfUExVR0lOUywgYnVpbGRQbHVnaW5zLCB3aXRoUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCBQbGFpbiBmcm9tICdzbGF0ZS1wbGFpbi1zZXJpYWxpemVyJztcblxuaW1wb3J0IHsgZ2V0QmFzZTY0LCBodG1sVG9WYWx1ZSwgdmFsdWVUb0h0bWwgfSBmcm9tICcuL25ldy1zZXJpYWxpemF0aW9uJztcbmltcG9ydCBJbnNlcnRJbWFnZUhhbmRsZXIgZnJvbSAnLi9wbHVnaW5zL2ltYWdlL2luc2VydC1pbWFnZS1oYW5kbGVyJztcblxuaW1wb3J0IGlzSG90a2V5IGZyb20gJ2lzLWhvdGtleSc7XG5pbXBvcnQgeyBSZWFjdEVkaXRvciwgdXNlU2xhdGVTdGF0aWMsIEVkaXRhYmxlLCB1c2VGb2N1c2VkLCB1c2VTbGF0ZSwgU2xhdGUgfSBmcm9tICdzbGF0ZS1yZWFjdCc7XG5pbXBvcnQgeyBOb2RlIGFzIFNsYXRlTm9kZSwgUGF0aCwgRWRpdG9yLCBUcmFuc2Zvcm1zLCBjcmVhdGVFZGl0b3IsIEVsZW1lbnQgYXMgU2xhdGVFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuXG5pbXBvcnQgeyBCdXR0b24sIEljb24gfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IEVkaXRvckFuZFRvb2xiYXIgZnJvbSAnLi9wbHVnaW5zL3Rvb2xiYXIvZWRpdG9yLWFuZC10b29sYmFyJztcblxud2luZG93LlBhdGggPSBQYXRoO1xud2luZG93LlNsYXRlTm9kZSA9IFNsYXRlTm9kZTtcbndpbmRvdy5SZWFjdEVkaXRvciA9IFJlYWN0RWRpdG9yO1xud2luZG93LkVkaXRvciA9IEVkaXRvcjtcblxuY29uc3QgSE9US0VZUyA9IHtcbiAgJ21vZCtiJzogJ2JvbGQnLFxuICAnbW9kK2knOiAnaXRhbGljJyxcbiAgJ21vZCt1JzogJ3VuZGVybGluZScsXG4gICdtb2QrYCc6ICdjb2RlJ1xufTtcblxuY29uc3QgTElTVF9UWVBFUyA9IFsnbnVtYmVyZWQtbGlzdCcsICdidWxsZXRlZC1saXN0J107XG5jb25zdCBURVhUX0FMSUdOX1RZUEVTID0gWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCcsICdqdXN0aWZ5J107XG5cbmNvbnN0IGluaXRpYWxWYWx1ZSA9IFtcbiAge1xuICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdtYXRoJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxhdGV4OiAnXFxcXGZyYWN7MX17Mn0nLFxuICAgICAgICAgIHdyYXBwZXI6ICdyb3VuZF9icmFja2V0cydcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnXFxcXChcXFxcZnJhY3sxfXsyfVxcXFwpJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfVxuXTtcblxuY29uc3QgU2xhdGVFZGl0b3IgPSBlZGl0b3JQcm9wcyA9PiB7XG4gIGNvbnN0IG1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCB7IGF1dG9Gb2N1cywgdmFsdWUsIHBsdWdpbnMsIGFjdGlvbnNSZWYsIG9uRWRpdGluZ0RvbmUgfSA9IGVkaXRvclByb3BzO1xuICBjb25zdCByZW5kZXJFbGVtZW50ID0gdXNlQ2FsbGJhY2socHJvcHMgPT4gPEVsZW1lbnQgey4uLnByb3BzfSBwbHVnaW5zPXtwbHVnaW5zfSAvPiwgW10pO1xuICBjb25zdCByZW5kZXJMZWFmID0gdXNlQ2FsbGJhY2socHJvcHMgPT4gPExlYWYgey4uLnByb3BzfSAvPiwgW10pO1xuICBjb25zdCBlZGl0b3IgPSB1c2VNZW1vKCgpID0+IHdpdGhQbHVnaW5zKGNyZWF0ZUVkaXRvcigpLCBwbHVnaW5zKSwgW10pO1xuICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBtb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlZGl0b3JQcm9wcy5vbkVkaXRvcikge1xuICAgICAgZWRpdG9yUHJvcHMub25FZGl0b3IoZWRpdG9yKTtcbiAgICB9XG5cbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIFswLCAwXSk7XG4gICAgICBSZWFjdEVkaXRvci5mb2N1cyhlZGl0b3IpO1xuXG4gICAgICBpZiAobW91bnRlZC5jdXJyZW50KSB7XG4gICAgICAgIHNldElzRm9jdXNlZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3JdKTtcblxuICBjb25zdCBzbGF0ZVZhbHVlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU2xhdGUgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBvbiB0aGUgaW5pdGlhbCByZW5kZXIgaXMgaW52YWxpZFxuICAgIC8vIHNvIHdlIGRpcmVjdGx5IHNldCB0aGUgdmFsdWUgb24gdGhlIGVkaXRvciBpbiBvcmRlclxuICAgIC8vIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBub3JtYWxpemF0aW9uIG9uIHRoZSBpbml0aWFsIHZhbHVlIGJlZm9yZSByZW5kZXJpbmdcbiAgICBlZGl0b3IuY2hpbGRyZW4gPSB2YWx1ZTtcbiAgICBlZGl0b3IubWFya3MgPSB7fTtcbiAgICBFZGl0b3Iubm9ybWFsaXplKGVkaXRvciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAvLyBXZSByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgaW50ZXJuYWwgdmFsdWUgc28gdGhhdCB0aGUgcmVuZGVyaW5nIGNhbiB0YWtlIG92ZXIgZnJvbSBoZXJlXG4gICAgcmV0dXJuIGVkaXRvci5jaGlsZHJlbjtcbiAgfSwgW2VkaXRvciwgdmFsdWVdKTtcblxuICB3aW5kb3cuZWRpdG9yID0gZWRpdG9yO1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGV2ZW50LnNoaWZ0S2V5ID09PSB0cnVlKSB7XG4gICAgICBlZGl0b3IuaW5zZXJ0VGV4dCgnXFxuJyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgaG90a2V5IGluIEhPVEtFWVMpIHtcbiAgICAgIGlmIChpc0hvdGtleShob3RrZXksIGV2ZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBtYXJrID0gSE9US0VZU1tob3RrZXldO1xuICAgICAgICB0b2dnbGVNYXJrKGVkaXRvciwgbWFyayk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBvbkZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpO1xuICBjb25zdCBvbkJsdXIgPSBlID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghZWRpdG9yUmVmLmN1cnJlbnQgfHwgIWVkaXRvclJlZi5jdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChlZGl0b3JQcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBlZGl0b3JQcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW91bnRlZC5jdXJyZW50KSB7XG4gICAgICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfTtcbiAgY29uc3QgYWN0aW9ucyA9IHtcbiAgICBmb2N1czogKHBvc2l0aW9uLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBbLCB0ZXh0UGF0aF0gPSBub2RlXG4gICAgICAgID8gRWRpdG9yLmxlYWYoZWRpdG9yLCBSZWFjdEVkaXRvci5maW5kUGF0aChlZGl0b3IsIG5vZGUpLCB7IGVkZ2U6ICdlbmQnIH0pXG4gICAgICAgIDogRWRpdG9yLmxlYWYoZWRpdG9yLCBbMF0sIHsgZWRnZTogJ2VuZCcgfSk7XG5cbiAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgdGV4dFBhdGgpO1xuICAgICAgUmVhY3RFZGl0b3IuZm9jdXMoZWRpdG9yKTtcbiAgICB9LFxuICAgIGZpbmlzaEVkaXRpbmc6ICgpID0+IHtcbiAgICAgIC8vIGlmICghbW91bnRlZC5jdXJyZW50KSB7XG4gICAgICAvLyAgIHJldHVybjtcbiAgICAgIC8vIH1cblxuICAgICAgaWYgKHR5cGVvZiBvbkVkaXRpbmdEb25lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uRWRpdGluZ0RvbmUoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgaWYgKGFjdGlvbnNSZWYpIHtcbiAgICBhY3Rpb25zUmVmKGFjdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2xhdGUgZWRpdG9yPXtlZGl0b3J9IHZhbHVlPXtzbGF0ZVZhbHVlfT5cbiAgICAgIDxSb290UmVmIHJvb3RSZWY9e2VkaXRvclJlZn0+XG4gICAgICAgIDxFZGl0b3JBbmRUb29sYmFyXG4gICAgICAgICAgey4uLmVkaXRvclByb3BzfVxuICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgIGlzRm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgIG9uRG9uZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICAgICAgICAgIGVkaXRvclByb3BzLm9uRG9uZShlZGl0b3IpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8RWRpdGFibGVcbiAgICAgICAgICAgIHJlbmRlckVsZW1lbnQ9e3JlbmRlckVsZW1lbnR9XG4gICAgICAgICAgICByZW5kZXJMZWFmPXtyZW5kZXJMZWFmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBzb21lIHJpY2ggdGV4dOKAplwiXG4gICAgICAgICAgICBzcGVsbENoZWNrXG4gICAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0VkaXRvckFuZFRvb2xiYXI+XG4gICAgICA8L1Jvb3RSZWY+XG4gICAgPC9TbGF0ZT5cbiAgKTtcbn07XG5cbmNvbnN0IHRvZ2dsZUJsb2NrID0gKGVkaXRvciwgZm9ybWF0KSA9PiB7XG4gIGNvbnN0IGlzQWN0aXZlID0gaXNCbG9ja0FjdGl2ZShcbiAgICBlZGl0b3IsXG4gICAgZm9ybWF0LFxuICAgIFRFWFRfQUxJR05fVFlQRVMuaW5jbHVkZXMoZm9ybWF0KSA/ICdhbGlnbicgOiAndHlwZSdcbiAgKTtcbiAgY29uc3QgaXNMaXN0ID0gTElTVF9UWVBFUy5pbmNsdWRlcyhmb3JtYXQpO1xuXG4gIFRyYW5zZm9ybXMudW53cmFwTm9kZXMoZWRpdG9yLCB7XG4gICAgbWF0Y2g6IG4gPT5cbiAgICAgICFFZGl0b3IuaXNFZGl0b3IobikgJiZcbiAgICAgIFNsYXRlRWxlbWVudC5pc0VsZW1lbnQobikgJiZcbiAgICAgIExJU1RfVFlQRVMuaW5jbHVkZXMobi50eXBlKSAmJlxuICAgICAgIVRFWFRfQUxJR05fVFlQRVMuaW5jbHVkZXMoZm9ybWF0KSxcbiAgICBzcGxpdDogdHJ1ZVxuICB9KTtcbiAgbGV0IG5ld1Byb3BlcnRpZXM7XG4gIGlmIChURVhUX0FMSUdOX1RZUEVTLmluY2x1ZGVzKGZvcm1hdCkpIHtcbiAgICBuZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgYWxpZ246IGlzQWN0aXZlID8gdW5kZWZpbmVkIDogZm9ybWF0XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBuZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgdHlwZTogaXNBY3RpdmUgPyAncGFyYWdyYXBoJyA6IGlzTGlzdCA/ICdsaXN0X2l0ZW0nIDogZm9ybWF0XG4gICAgfTtcbiAgfVxuICBUcmFuc2Zvcm1zLnNldE5vZGVzKGVkaXRvciwgbmV3UHJvcGVydGllcyk7XG5cbiAgaWYgKCFpc0FjdGl2ZSAmJiBpc0xpc3QpIHtcbiAgICBjb25zdCBibG9jayA9IHsgdHlwZTogZm9ybWF0LCBjaGlsZHJlbjogW10gfTtcbiAgICBUcmFuc2Zvcm1zLndyYXBOb2RlcyhlZGl0b3IsIGJsb2NrKTtcbiAgfVxufTtcblxuY29uc3QgdG9nZ2xlTWFyayA9IChlZGl0b3IsIGZvcm1hdCkgPT4ge1xuICBjb25zdCBpc0FjdGl2ZSA9IGlzTWFya0FjdGl2ZShlZGl0b3IsIGZvcm1hdCk7XG5cbiAgaWYgKGlzQWN0aXZlKSB7XG4gICAgRWRpdG9yLnJlbW92ZU1hcmsoZWRpdG9yLCBmb3JtYXQpO1xuICB9IGVsc2Uge1xuICAgIEVkaXRvci5hZGRNYXJrKGVkaXRvciwgZm9ybWF0LCB0cnVlKTtcbiAgfVxufTtcblxuY29uc3QgaXNCbG9ja0FjdGl2ZSA9IChlZGl0b3IsIGZvcm1hdCwgYmxvY2tUeXBlID0gJ3R5cGUnKSA9PiB7XG4gIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gIGlmICghc2VsZWN0aW9uKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgW21hdGNoXSA9IEFycmF5LmZyb20oXG4gICAgRWRpdG9yLm5vZGVzKGVkaXRvciwge1xuICAgICAgYXQ6IEVkaXRvci51bmhhbmdSYW5nZShlZGl0b3IsIHNlbGVjdGlvbiksXG4gICAgICBtYXRjaDogbiA9PiAhRWRpdG9yLmlzRWRpdG9yKG4pICYmIFNsYXRlRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbltibG9ja1R5cGVdID09PSBmb3JtYXRcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiAhIW1hdGNoO1xufTtcblxuY29uc3QgaXNNYXJrQWN0aXZlID0gKGVkaXRvciwgZm9ybWF0KSA9PiB7XG4gIGNvbnN0IG1hcmtzID0gRWRpdG9yLm1hcmtzKGVkaXRvcik7XG4gIHJldHVybiBtYXJrcyA/IG1hcmtzW2Zvcm1hdF0gPT09IHRydWUgOiBmYWxzZTtcbn07XG5cbmNvbnN0IEVsZW1lbnQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IGVkaXRvciA9IHVzZVNsYXRlU3RhdGljKCk7XG4gIGNvbnN0IGZvY3VzZWQgPSB1c2VGb2N1c2VkKCk7XG4gIGNvbnN0IHsgYXR0cmlidXRlcywgY2hpbGRyZW4sIGVsZW1lbnQsIHBsdWdpbnMgfSA9IHByb3BzO1xuICBjb25zdCBzdHlsZSA9IHsgdGV4dEFsaWduOiBlbGVtZW50LmFsaWduIH07XG5cbiAgY29uc3Qgbm9kZVByb3BzID0geyAuLi5hdHRyaWJ1dGVzLCAuLi5wcm9wcywgbm9kZTogeyAuLi5lbGVtZW50IH0sIGNoaWxkcmVuIH07XG4gIGNvbnN0IHBsdWdpblRvUmVuZGVyID0gcGx1Z2lucy5maW5kKFxuICAgIHBsdWdpbiA9PiB0eXBlb2YgcGx1Z2luLnN1cHBvcnRzID09PSAnZnVuY3Rpb24nICYmIHBsdWdpbi5zdXBwb3J0cyhlbGVtZW50KVxuICApO1xuXG4gIGlmIChwbHVnaW5Ub1JlbmRlcikge1xuICAgIHJldHVybiBwbHVnaW5Ub1JlbmRlci5yZW5kZXJOb2RlKHsgLi4ubm9kZVByb3BzLCBlZGl0b3IsIGZvY3VzZWQgfSk7XG4gIH1cblxuICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgJ2Jsb2NrLXF1b3RlJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxibG9ja3F1b3RlIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9ibG9ja3F1b3RlPlxuICAgICAgKTtcbiAgICBjYXNlICdidWxsZXRlZC1saXN0JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx1bCBzdHlsZT17c3R5bGV9IHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvdWw+XG4gICAgICApO1xuICAgIGNhc2UgJ2hlYWRpbmctb25lJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxoMSBzdHlsZT17c3R5bGV9IHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvaDE+XG4gICAgICApO1xuICAgIGNhc2UgJ2hlYWRpbmctdHdvJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxoMiBzdHlsZT17c3R5bGV9IHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvaDI+XG4gICAgICApO1xuICAgIGNhc2UgJ2xpc3QtaXRlbSc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGkgc3R5bGU9e3N0eWxlfSB7Li4uYXR0cmlidXRlc30+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2xpPlxuICAgICAgKTtcbiAgICBjYXNlICdudW1iZXJlZC1saXN0JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxvbCBzdHlsZT17c3R5bGV9IHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvb2w+XG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICAgfX1cbiAgICAgICAgICB7Li4uYXR0cmlidXRlc31cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICB9XG59O1xuXG5jb25zdCBMZWFmID0gKHsgYXR0cmlidXRlcywgY2hpbGRyZW4sIGxlYWYgfSkgPT4ge1xuICBpZiAobGVhZi5ib2xkKSB7XG4gICAgY2hpbGRyZW4gPSA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz47XG4gIH1cblxuICBpZiAobGVhZi5jb2RlKSB7XG4gICAgY2hpbGRyZW4gPSA8Y29kZT57Y2hpbGRyZW59PC9jb2RlPjtcbiAgfVxuXG4gIGlmIChsZWFmLml0YWxpYykge1xuICAgIGNoaWxkcmVuID0gPGVtPntjaGlsZHJlbn08L2VtPjtcbiAgfVxuXG4gIGlmIChsZWFmLnVuZGVybGluZSkge1xuICAgIGNoaWxkcmVuID0gPHU+e2NoaWxkcmVufTwvdT47XG4gIH1cblxuICBpZiAobGVhZi5zdHJpa2V0aHJvdWdoKSB7XG4gICAgY2hpbGRyZW4gPSA8ZGVsPntjaGlsZHJlbn08L2RlbD47XG4gIH1cblxuICByZXR1cm4gPHNwYW4gey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L3NwYW4+O1xufTtcblxuY29uc3QgQmxvY2tCdXR0b24gPSAoeyBmb3JtYXQsIGljb24gfSkgPT4ge1xuICBjb25zdCBlZGl0b3IgPSB1c2VTbGF0ZSgpO1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFjdGl2ZT17aXNCbG9ja0FjdGl2ZShlZGl0b3IsIGZvcm1hdCwgVEVYVF9BTElHTl9UWVBFUy5pbmNsdWRlcyhmb3JtYXQpID8gJ2FsaWduJyA6ICd0eXBlJyl9XG4gICAgICBvbk1vdXNlRG93bj17ZXZlbnQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0b2dnbGVCbG9jayhlZGl0b3IsIGZvcm1hdCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxJY29uPntpY29ufTwvSWNvbj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn07XG5cbmNvbnN0IE1hcmtCdXR0b24gPSAoeyBmb3JtYXQsIGljb24gfSkgPT4ge1xuICBjb25zdCBlZGl0b3IgPSB1c2VTbGF0ZSgpO1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFjdGl2ZT17aXNNYXJrQWN0aXZlKGVkaXRvciwgZm9ybWF0KX1cbiAgICAgIG9uTW91c2VEb3duPXtldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRvZ2dsZU1hcmsoZWRpdG9yLCBmb3JtYXQpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8SWNvbj57aWNvbn08L0ljb24+XG4gICAgPC9CdXR0b24+XG4gICk7XG59O1xuXG4vLyBvbGQtZWRpdGFibGVcblxuZXhwb3J0IHsgQUxMX1BMVUdJTlMsIERFRkFVTFRfUExVR0lOUywgc2VyaWFsaXphdGlvbiB9O1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnZWRpdGFibGUtaHRtbDplZGl0b3InKTtcblxuY29uc3QgZGVmYXVsdFRvb2xiYXJPcHRzID0ge1xuICBwb3NpdGlvbjogJ2JvdHRvbScsXG4gIGFsaWdubWVudDogJ2xlZnQnLFxuICBhbHdheXNWaXNpYmxlOiBmYWxzZSxcbiAgc2hvd0RvbmU6IHRydWUsXG4gIGRvbmVPbjogJ2JsdXInXG59O1xuXG5jb25zdCBkZWZhdWx0UmVzcG9uc2VBcmVhUHJvcHMgPSB7XG4gIG9wdGlvbnM6IHt9LFxuICByZXNwQXJlYVRvb2xiYXI6ICgpID0+IHt9LFxuICBvbkhhbmRsZUFyZWFDaGFuZ2U6ICgpID0+IHt9XG59O1xuXG5jb25zdCBkZWZhdWx0TGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMgPSBbXTtcblxuY29uc3QgY3JlYXRlVG9vbGJhck9wdHMgPSB0b29sYmFyT3B0cyA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uZGVmYXVsdFRvb2xiYXJPcHRzLFxuICAgIC4uLnRvb2xiYXJPcHRzXG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uUmVmOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uRWRpdG9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgZGF0YTogUHJvcFR5cGVzLm9iamVjdFxuICAgICAgfSlcbiAgICApLFxuICAgIGltYWdlU3VwcG9ydDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB1cGxvYWRTb3VuZFN1cHBvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBhZGQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgZGVsZXRlOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuICAgIGNoYXJhY3RlcnNMaW1pdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIG1pbkhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIG1heEhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBoaWdobGlnaHRTaGFwZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNwZWxsQ2hlY2s6IFByb3BUeXBlcy5ib29sLFxuICAgIG5vbkVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlU2Nyb2xsYmFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhdXRvV2lkdGhUb29sYmFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwbHVnaW5Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZXNwb25zZUFyZWFQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICAgICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICdpbmxpbmUtZHJvcGRvd24nLFxuICAgICAgICAnZHJhZy1pbi10aGUtYmxhbmsnXG4gICAgICBdKSxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICByZXNwQXJlYVRvb2xiYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgb25IYW5kbGVBcmVhQ2hhbmdlOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuICAgIGxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGxhbmd1YWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBjaGFyYWN0ZXJJY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBjaGFyYWN0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSlcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0b29sYmFyT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAndG9wJ10pLFxuICAgICAgYWxpZ25tZW50OiBQcm9wVHlwZXMub25lT2YoWydsZWZ0JywgJ3JpZ2h0J10pLFxuICAgICAgYWx3YXlzVmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBzaG93RG9uZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBkb25lT246IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBhY3RpdmVQbHVnaW5zOiBQcm9wVHlwZXMuYXJyYXlPZih2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgYWxsVmFsaWQgPSB2YWx1ZXMuZXZlcnkodiA9PiBBTExfUExVR0lOUy5pbmNsdWRlcyh2KSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICFhbGxWYWxpZCAmJlxuICAgICAgICBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWVzOiAke3ZhbHVlc30sIHZhbHVlcyBtdXN0IGJlIG9uZSBvZiBbJHtBTExfUExVR0lOUy5qb2luKCcsJyl9XWApXG4gICAgICApO1xuICAgIH0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtYXhJbWFnZVdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heEltYWdlSGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlVW5kZXJsaW5lOiB0cnVlLFxuICAgIG9uRm9jdXM6ICgpID0+IHt9LFxuICAgIG9uQmx1cjogKCkgPT4ge30sXG4gICAgb25LZXlEb3duOiAoKSA9PiB7fSxcbiAgICB0b29sYmFyT3B0czogZGVmYXVsdFRvb2xiYXJPcHRzLFxuICAgIHJlc3BvbnNlQXJlYVByb3BzOiBkZWZhdWx0UmVzcG9uc2VBcmVhUHJvcHMsXG4gICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHM6IGRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wc1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICB0b29sYmFyT3B0czogY3JlYXRlVG9vbGJhck9wdHMocHJvcHMudG9vbGJhck9wdHMpXG4gICAgfTtcblxuICAgIHRoaXMub25SZXNpemUgPSAoKSA9PiB7XG4gICAgICBwcm9wcy5vbkNoYW5nZSh0aGlzLnN0YXRlLnZhbHVlLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5oYW5kbGVQbHVnaW5zKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgaGFuZGxlUGx1Z2lucyA9IHByb3BzID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMgPSB7XG4gICAgICAuLi5kZWZhdWx0UmVzcG9uc2VBcmVhUHJvcHMsXG4gICAgICAuLi5wcm9wcy5yZXNwb25zZUFyZWFQcm9wc1xuICAgIH07XG5cbiAgICB0aGlzLnBsdWdpbnMgPSBidWlsZFBsdWdpbnMocHJvcHMuYWN0aXZlUGx1Z2lucywge1xuICAgICAgbWF0aDoge1xuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uTWF0aENsaWNrLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uUGx1Z2luRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vblBsdWdpbkJsdXJcbiAgICAgIH0sXG4gICAgICBpbWFnZToge1xuICAgICAgICBvbkRlbGV0ZTpcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQgJiZcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQuZGVsZXRlICYmXG4gICAgICAgICAgKChzcmMsIGRvbmUpID0+IHtcbiAgICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydC5kZWxldGUoc3JjLCBlID0+IHtcbiAgICAgICAgICAgICAgZG9uZShlLCB0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICBpbnNlcnRJbWFnZVJlcXVlc3RlZDpcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQgJiZcbiAgICAgICAgICAoZ2V0SGFuZGxlciA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBoYW5kbGVyIGlzIHRoZSBvYmplY3QgdGhyb3VnaCB3aGljaCB0aGUgb3V0ZXIgY29udGV4dFxuICAgICAgICAgICAgICogY29tbXVuaWNhdGVzIGZpbGUgdXBsb2FkIGV2ZW50cyBsaWtlOiBmaWxlQ2hvc2VuLCBjYW5jZWwsIHByb2dyZXNzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBnZXRIYW5kbGVyKCgpID0+IHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmFkZChoYW5kbGVyKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vblBsdWdpbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25QbHVnaW5CbHVyLFxuICAgICAgICBtYXhJbWFnZVdpZHRoOiB0aGlzLnByb3BzLm1heEltYWdlV2lkdGgsXG4gICAgICAgIG1heEltYWdlSGVpZ2h0OiB0aGlzLnByb3BzLm1heEltYWdlSGVpZ2h0XG4gICAgICB9LFxuICAgICAgdG9vbGJhcjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogVG8gbWluaW1pemUgY29udmVydGluZyBodG1sIC0+IHN0YXRlIC0+IGh0bWxcbiAgICAgICAgICogV2Ugb25seSBlbWl0IG1hcmt1cCBvbmNlICdkb25lJyBpcyBjbGlja2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgZGlzYWJsZVNjcm9sbGJhcjogISFwcm9wcy5kaXNhYmxlU2Nyb2xsYmFyLFxuICAgICAgICBkaXNhYmxlVW5kZXJsaW5lOiBwcm9wcy5kaXNhYmxlVW5kZXJsaW5lLFxuICAgICAgICBhdXRvV2lkdGg6IHByb3BzLmF1dG9XaWR0aFRvb2xiYXJcbiAgICAgIH0sXG4gICAgICB0YWJsZToge1xuICAgICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgbG9nKCdbdGFibGU6b25Gb2N1c10uLi4nKTtcbiAgICAgICAgICB0aGlzLm9uUGx1Z2luRm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgbG9nKCdbdGFibGU6b25CbHVyXS4uLicpO1xuICAgICAgICAgIHRoaXMub25QbHVnaW5CbHVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXNwb25zZUFyZWE6IHtcbiAgICAgICAgdHlwZTogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLnR5cGUsXG4gICAgICAgIG9wdGlvbnM6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5vcHRpb25zLFxuICAgICAgICBtYXhSZXNwb25zZUFyZWFzOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMubWF4UmVzcG9uc2VBcmVhcyxcbiAgICAgICAgcmVzcEFyZWFUb29sYmFyOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMucmVzcEFyZWFUb29sYmFyLFxuICAgICAgICBvbkhhbmRsZUFyZWFDaGFuZ2U6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5vbkhhbmRsZUFyZWFDaGFuZ2UsXG4gICAgICAgIGVycm9yOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMuZXJyb3IsXG4gICAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgICBsb2coJ1t0YWJsZTpvbkZvY3VzXS4uLicpO1xuICAgICAgICAgIHRoaXMub25QbHVnaW5Gb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgICBsb2coJ1t0YWJsZTpvbkJsdXJdLi4uJyk7XG4gICAgICAgICAgdGhpcy5vblBsdWdpbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxhbmd1YWdlQ2hhcmFjdGVyczogcHJvcHMubGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMsXG4gICAgICBtZWRpYToge1xuICAgICAgICBmb2N1czogdGhpcy5mb2N1cyxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydDogcHJvcHMudXBsb2FkU291bmRTdXBwb3J0XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25SZXNpemUpO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yICYmIHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yRE9NID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGBbZGF0YS1rZXk9XCIke3RoaXMuZWRpdG9yLnZhbHVlLmRvY3VtZW50LmtleX1cIl1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChlZGl0b3JET00pIHtcbiAgICAgICAgICAgIGVkaXRvckRPTS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBjb25zdCB7IHRvb2xiYXJPcHRzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld1Rvb2xiYXJPcHRzID0gY3JlYXRlVG9vbGJhck9wdHMobmV4dFByb3BzLnRvb2xiYXJPcHRzKTtcblxuICAgIGlmICghaXNFcXVhbChuZXdUb29sYmFyT3B0cywgdG9vbGJhck9wdHMpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdG9vbGJhck9wdHM6IG5ld1Rvb2xiYXJPcHRzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwobmV4dFByb3BzLmxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzLCB0aGlzLnByb3BzLmxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzKSkge1xuICAgICAgdGhpcy5oYW5kbGVQbHVnaW5zKG5leHRQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIC8vIFRoZSBjdXJzb3IgaXMgb24gYSB6ZXJvIHdpZHRoIGVsZW1lbnQgYW5kIHdoZW4gdGhhdCBpcyBwbGFjZWQgbmVhciB2b2lkIGVsZW1lbnRzLCBpdCBpcyBub3QgdmlzaWJsZVxuICAgIC8vIHNvIHdlIGluY3JlYXNlIHRoZSB3aWR0aCB0byBhdCBsZWFzdCAycHggaW4gb3JkZXIgZm9yIHRoZSB1c2VyIHRvIHNlZSBpdFxuICAgIGNvbnN0IHplcm9XaWR0aEVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNsYXRlLXplcm8td2lkdGg9XCJ6XCJdJyk7XG5cbiAgICBBcnJheS5mcm9tKHplcm9XaWR0aEVscykuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5zdHlsZS5taW5XaWR0aCA9ICcycHgnO1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgIH0pO1xuICB9XG5cbiAgb25QbHVnaW5CbHVyID0gZSA9PiB7XG4gICAgbG9nKCdbb25QbHVnaW5CbHVyXScsIGUgJiYgZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICBjb25zdCB0YXJnZXQgPSBlICYmIGUucmVsYXRlZFRhcmdldDtcblxuICAgIGNvbnN0IG5vZGUgPSB0YXJnZXQgPyBmaW5kTm9kZSh0YXJnZXQsIHRoaXMuc3RhdGUudmFsdWUpIDogbnVsbDtcbiAgICBsb2coJ1tvblBsdWdpbkJsdXJdIG5vZGU6ICcsIG5vZGUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBmb2N1c2VkTm9kZTogbm9kZSB9LCAoKSA9PiB7XG4gICAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICB9KTtcbiAgfTtcblxuICBvblBsdWdpbkZvY3VzID0gZSA9PiB7XG4gICAgbG9nKCdbb25QbHVnaW5Gb2N1c10nLCBlICYmIGUudGFyZ2V0KTtcbiAgICBjb25zdCB0YXJnZXQgPSBlICYmIGUudGFyZ2V0O1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBmaW5kTm9kZSh0YXJnZXQsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgbG9nKCdbb25QbHVnaW5Gb2N1c10gbm9kZTogJywgbm9kZSk7XG5cbiAgICAgIGNvbnN0IHN0YXNoZWRWYWx1ZSA9IHRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlIHx8IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZm9jdXNlZE5vZGU6IG5vZGUsIHN0YXNoZWRWYWx1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZvY3VzZWROb2RlOiBudWxsIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXNoVmFsdWUoKTtcbiAgfTtcblxuICBvbk1hdGhDbGljayA9IG5vZGUgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWxlY3RlZE5vZGU6IG5vZGUgfSk7XG4gIH07XG5cbiAgb25FZGl0aW5nRG9uZSA9IGVkaXRvciA9PiB7XG4gICAgbG9nKCdbb25FZGl0aW5nRG9uZV0nKTtcbiAgICAvLyB0aGlzLnNldFN0YXRlKHsgc3Rhc2hlZFZhbHVlOiBudWxsLCBmb2N1c2VkTm9kZTogbnVsbCB9KTtcbiAgICBsb2coJ1tvbkVkaXRpbmdEb25lXSB2YWx1ZTogJywgdGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShlZGl0b3IsIHRydWUpO1xuICB9O1xuXG4gIG9uRG9uZSA9IGVkaXRvciA9PiB7XG4gICAgY29uc3QgeyBub25FbXB0eSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxvZygnW29uRG9uZV0nKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdG9vbGJhckluRm9jdXM6IGZhbHNlLCBmb2N1c2VkTm9kZTogbnVsbCB9KTtcblxuICAgIHRoaXMub25FZGl0aW5nRG9uZShlZGl0b3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgb25SZXNpemUgZXZlbnQgbGlzdGVuZXJcbiAgICovXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uUmVzaXplKTtcbiAgfVxuXG4gIC8vIEFsbG93aW5nIHRpbWUgZm9yIG9uQ2hhbmdlIHRvIHRha2UgZWZmZWN0IGlmIGl0IGlzIGNhbGxlZFxuICBoYW5kbGVCbHVyID0gcmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgeyBub25FbXB0eSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7XG4gICAgICB0b29sYmFyT3B0czogeyBkb25lT24gfVxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRvb2xiYXJJbkZvY3VzOiBmYWxzZSwgZm9jdXNlZE5vZGU6IG51bGwgfSk7XG5cbiAgICBpZiAoZG9uZU9uID09PSAnYmx1cicpIHtcbiAgICAgIGlmIChub25FbXB0eSAmJiB0aGlzLnN0YXRlLnZhbHVlLnN0YXJ0VGV4dD8udGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWx1ZSh0cnVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uRWRpdGluZ0RvbmUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkVkaXRpbmdEb25lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gZXZlbnQgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm9uQmx1cihldmVudCk7XG4gICAgbG9nKCdbb25CbHVyXScpO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG5cbiAgICBjb25zdCBub2RlID0gUmVhY3RFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCB0YXJnZXQpO1xuXG4gICAgbG9nKCdbb25CbHVyXSBub2RlOiAnLCBub2RlKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHsgcHJlQmx1clZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLCBmb2N1c2VkTm9kZTogIW5vZGUgPyBudWxsIDogbm9kZSB9LFxuICAgICAgICB0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzLCByZXNvbHZlKVxuICAgICAgKTtcbiAgICAgIHRoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVEb21CbHVyID0gZSA9PiB7XG4gICAgY29uc3QgZWRpdG9yRE9NID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEta2V5PVwiJHt0aGlzLnN0YXRlLnZhbHVlLmRvY3VtZW50LmtleX1cIl1gKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZTogc3RhdGVWYWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKCF0aGlzLndyYXBwZXJSZWYpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID1cbiAgICAgICAgIWVkaXRvckRPTSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3QoYFtjbGFzcyo9XCIke2VkaXRvckRPTS5jbGFzc05hbWV9XCJdYCk7XG4gICAgICBjb25zdCB0b29sYmFyRWxlbWVudCA9XG4gICAgICAgICF0aGlzLnRvb2xiYXJSZWYgfHxcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbG9zZXN0KGBbY2xhc3MqPVwiJHt0aGlzLnRvb2xiYXJSZWYuY2xhc3NOYW1lfVwiXWApO1xuICAgICAgY29uc3QgaXNJbkN1cnJlbnRDb21wb25lbnQgPVxuICAgICAgICB0aGlzLndyYXBwZXJSZWYuY29udGFpbnMoZWRpdG9yRWxlbWVudCkgfHwgdGhpcy53cmFwcGVyUmVmLmNvbnRhaW5zKHRvb2xiYXJFbGVtZW50KTtcblxuICAgICAgaWYgKCFpc0luQ3VycmVudENvbXBvbmVudCkge1xuICAgICAgICBlZGl0b3JET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuaGFuZGxlRG9tQmx1cik7XG5cbiAgICAgICAgaWYgKHN0YXRlVmFsdWUuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgdGhpcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA1MCk7XG4gIH07XG5cbiAgLypcbiAgICogTmVlZHMgdG8gYmUgd3JhcHBlZCBvdGhlcndpc2UgaXQgY2F1c2VzIGlzc3VlcyBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9uc1xuICAgKiBLbm93biBpc3N1ZSBmb3Igc2xhdGVqcy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaWFuc3Rvcm10YXlsb3Ivc2xhdGUvaXNzdWVzLzIwOTdcbiAgICogVXNpbmcgdGltZW91dCBJIHdhc24ndCBhYmxlIHRvIHRlc3QgdGhpc1xuICAgKlxuICAgKiBOb3RlOiBUaGUgdXNlIG9mIHByb21pc2VzIGhhcyBiZWVuIGNhdXNpbmcgaXNzdWVzIHdpdGggTWF0aFF1aWxsXG4gICAqICovXG4gIG9uRm9jdXMgPSAoKSA9PlxuICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgZWRpdG9yRE9NID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEta2V5PVwiJHt0aGlzLnN0YXRlLnZhbHVlLmRvY3VtZW50LmtleX1cIl1gKTtcblxuICAgICAgbG9nKCdbb25Gb2N1c10nLCBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sgLSBAc2VlIGNoYW5nZURhdGEgYmVsb3cgZm9yIHNvbWUgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMuX19URU1QT1JBUllfQ0hBTkdFX0RBVEEpIHtcbiAgICAgICAgY29uc3QgeyBrZXksIGRhdGEgfSA9IHRoaXMuX19URU1QT1JBUllfQ0hBTkdFX0RBVEE7XG4gICAgICAgIGNvbnN0IGRvbUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEta2V5PVwiJHtrZXl9XCJdYCk7XG5cbiAgICAgICAgaWYgKGRvbUVsKSB7XG4gICAgICAgICAgbGV0IGNoYW5nZSA9IHRoaXMuc3RhdGUudmFsdWUuY2hhbmdlKCkuc2V0Tm9kZUJ5S2V5KGtleSwgeyBkYXRhIH0pO1xuXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBjaGFuZ2UudmFsdWUgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fX1RFTVBPUkFSWV9DSEFOR0VfREFUQSA9IG51bGw7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGlzIG5lZWRlZCBqdXN0IGluIGNhc2UgdGhlIGJyb3dzZXIgZGVjaWRlcyB0byBtYWtlIHRoZSBlZGl0b3JcbiAgICAgICAqIGxvc2UgZm9jdXMgd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBvbkJsdXIgZXZlbnQgKGNhbiBoYXBwZW4gaW4gYSBmZXcgY2FzZXMpLlxuICAgICAgICogVGhpcyB3aWxsIGFsc28gdHJpZ2dlciBvbkJsdXIgaWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIHBhZ2Ugd2hlbiB0aGUgZWRpdG9yXG4gICAgICAgKiBpcyBmb2N1c2VkLlxuICAgICAgICovXG4gICAgICBpZiAoZWRpdG9yRE9NID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIGVkaXRvckRPTS5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5oYW5kbGVEb21CbHVyKTtcbiAgICAgICAgZWRpdG9yRE9NLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLmhhbmRsZURvbUJsdXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXNoVmFsdWUoKTtcbiAgICAgIHRoaXMucHJvcHMub25Gb2N1cygpO1xuXG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG5cbiAgc3Rhc2hWYWx1ZSA9ICgpID0+IHtcbiAgICBsb2coJ1tzdGFzaFZhbHVlXScpO1xuICAgIGlmICghdGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzdGFzaGVkVmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgdmFsdWUgaWYgdGhlIHVzZXIgZGlkbid0IGNsaWNrIGRvbmUuXG4gICAqL1xuICByZXNldFZhbHVlID0gZm9yY2UgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvY3VzZWROb2RlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3Qgc3RvcFJlc2V0ID0gdGhpcy5wbHVnaW5zLnJlZHVjZSgocywgcCkgPT4ge1xuICAgICAgcmV0dXJuIHMgfHwgKHAuc3RvcFJlc2V0ICYmIHAuc3RvcFJlc2V0KHRoaXMuc3RhdGUudmFsdWUpKTtcbiAgICB9LCBmYWxzZSk7XG5cbiAgICBsb2coJ1tyZXNldFZhbHVlXScsIHZhbHVlLmlzRm9jdXNlZCwgZm9jdXNlZE5vZGUsICdzdG9wUmVzZXQ6ICcsIHN0b3BSZXNldCk7XG4gICAgaWYgKCh0aGlzLnN0YXRlLnN0YXNoZWRWYWx1ZSAmJiAhdmFsdWUuaXNGb2N1c2VkICYmICFmb2N1c2VkTm9kZSAmJiAhc3RvcFJlc2V0KSB8fCBmb3JjZSkge1xuICAgICAgbG9nKCdbcmVzZXRWYWx1ZV0gcmVzZXR0aW5nLi4uJyk7XG4gICAgICBsb2coJ3N0YXNoZWQnLCB0aGlzLnN0YXRlLnN0YXNoZWRWYWx1ZS5kb2N1bWVudC50b09iamVjdCgpKTtcbiAgICAgIGxvZygnY3VycmVudCcsIHRoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQudG9PYmplY3QoKSk7XG5cbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gVmFsdWUuZnJvbUpTT04odGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUudG9KU09OKCkpO1xuXG4gICAgICBsb2coJ25ld1ZhbHVlOiAnLCBuZXdWYWx1ZS5kb2N1bWVudCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogbmV3VmFsdWUsIHN0YXNoZWRWYWx1ZTogbnVsbCB9LCAoKSA9PiB7XG4gICAgICAgICAgICBsb2coJ3ZhbHVlIG5vdzogJywgdGhpcy5zdGF0ZS52YWx1ZS5kb2N1bWVudC50b0pTT04oKSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9XG4gIH07XG5cbiAgb25DaGFuZ2UgPSAoZWRpdG9yLCBkb25lKSA9PiB7XG4gICAgbG9nKCdbb25DaGFuZ2VdJyk7XG4gICAgY29uc3QgeyBjaGFyYWN0ZXJzTGltaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWxsVGV4dCA9IEVkaXRvci5zdHJpbmcoZWRpdG9yLCBbXSk7XG5cbiAgICBpZiAoYWxsVGV4dCA+IGNoYXJhY3RlcnNMaW1pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWwgPSB2YWx1ZVRvSHRtbChlZGl0b3IpO1xuICAgIGNvbnN0IHZhbHVlID0gaHRtbFRvVmFsdWUoaHRtbCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWUgfSwgKCkgPT4ge1xuICAgICAgbG9nKCdbb25DaGFuZ2VdLCBjYWxsIGRvbmUoKScpO1xuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0Rm9jdXNlZFZhbHVlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlLmlzRm9jdXNlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucHJlQmx1clZhbHVlO1xuICB9O1xuXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHByb3BzKSB7XG4gICAgaWYgKCFpc0VxdWFsKHByb3BzLnZhbHVlLCB0aGlzLnByb3BzLnZhbHVlKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB2YWx1ZVRvU2l6ZSA9IHYgPT4ge1xuICAgIGlmICghdikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2LmVuZHNXaXRoKCclJykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAodi5lbmRzV2l0aCgncHgnKSB8fCB2LmVuZHNXaXRoKCd2aCcpIHx8IHYuZW5kc1dpdGgoJ3Z3JykpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHYsIDEwKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IHZhbHVlIDogYCR7dmFsdWV9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gYCR7dn1weGA7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIGJ1aWxkU2l6ZVN0eWxlKCkge1xuICAgIGNvbnN0IHsgd2lkdGgsIG1pbkhlaWdodCwgaGVpZ2h0LCBtYXhIZWlnaHQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMudmFsdWVUb1NpemUod2lkdGgpLFxuICAgICAgaGVpZ2h0OiB0aGlzLnZhbHVlVG9TaXplKGhlaWdodCksXG4gICAgICBtaW5IZWlnaHQ6IHRoaXMudmFsdWVUb1NpemUobWluSGVpZ2h0KSxcbiAgICAgIG1heEhlaWdodDogdGhpcy52YWx1ZVRvU2l6ZShtYXhIZWlnaHQpXG4gICAgfTtcbiAgfVxuXG4gIHZhbGlkYXRlTm9kZSA9IG5vZGUgPT4ge1xuICAgIGlmIChub2RlLm9iamVjdCAhPT0gJ2Jsb2NrJykgcmV0dXJuO1xuXG4gICAgY29uc3QgbGFzdCA9IG5vZGUubm9kZXMubGFzdCgpO1xuICAgIGlmICghbGFzdCkgcmV0dXJuO1xuXG4gICAgaWYgKGxhc3QudHlwZSAhPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG4gICAgbG9nKCdbdmFsaWRhdGVOb2RlXSBsYXN0IGlzIGltYWdlLi4nKTtcblxuICAgIGNvbnN0IHBhcmVudCA9IGxhc3QuZ2V0UGFyZW50KGxhc3Qua2V5KTtcbiAgICBjb25zdCBwID0gQmxvY2suZ2V0UGFyZW50KGxhc3Qua2V5KTtcbiAgICBsb2coJ1t2YWxpZGF0ZU5vZGVdIHBhcmVudDonLCBwYXJlbnQsIHApO1xuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICBmb2N1cyA9IChwb3MsIG5vZGUpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHBvcyB8fCAnZW5kJztcblxuICAgIHRoaXMucHJvcHMuZm9jdXMocG9zaXRpb24sIG5vZGUpO1xuICB9O1xuXG4gIG9uRHJvcFBhc3RlID0gYXN5bmMgKGV2ZW50LCBjaGFuZ2UsIGRyb3BDb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZWRpdG9yID0gY2hhbmdlLmVkaXRvcjtcbiAgICBjb25zdCB0cmFuc2ZlciA9IGdldEV2ZW50VHJhbnNmZXIoZXZlbnQpO1xuICAgIGNvbnN0IGZpbGUgPSB0cmFuc2Zlci5maWxlcyAmJiB0cmFuc2Zlci5maWxlc1swXTtcblxuICAgIGNvbnN0IHR5cGUgPSB0cmFuc2Zlci50eXBlO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gdHJhbnNmZXIuZnJhZ21lbnQ7XG4gICAgY29uc3QgdGV4dCA9IHRyYW5zZmVyLnRleHQ7XG5cbiAgICBpZiAoXG4gICAgICBmaWxlICYmXG4gICAgICAoZmlsZS50eXBlID09PSAnaW1hZ2UvanBlZycgfHwgZmlsZS50eXBlID09PSAnaW1hZ2UvanBnJyB8fCBmaWxlLnR5cGUgPT09ICdpbWFnZS9wbmcnKVxuICAgICkge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmltYWdlU3VwcG9ydCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBsb2coJ1tvbkRyb3BQYXN0ZV0nKTtcbiAgICAgICAgY29uc3Qgc3JjID0gYXdhaXQgZ2V0QmFzZTY0KGZpbGUpO1xuICAgICAgICBjb25zdCBpbmxpbmUgPSBJbmxpbmUuY3JlYXRlKHtcbiAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNyY1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRyb3BDb250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0gZ2V0RXZlbnRSYW5nZShldmVudCwgZWRpdG9yKTtcbiAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIGNoYW5nZS5zZWxlY3QocmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoID0gY2hhbmdlLmluc2VydElubGluZShpbmxpbmUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGNoKTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBJbnNlcnRJbWFnZUhhbmRsZXIoaW5saW5lLCAoKSA9PiB0aGlzLnN0YXRlLnZhbHVlLCB0aGlzLm9uQ2hhbmdlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5wcm9wcy5pbWFnZVN1cHBvcnQuYWRkKGhhbmRsZXIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZygnW29uRHJvcFBhc3RlXSBlcnJvcjogJywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmcmFnbWVudCcpIHtcbiAgICAgIGNoYW5nZS5pbnNlcnRGcmFnbWVudChmcmFnbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcgfHwgdHlwZSA9PT0gJ2h0bWwnKSB7XG4gICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICB2YWx1ZTogeyBkb2N1bWVudCwgc2VsZWN0aW9uLCBzdGFydEJsb2NrIH1cbiAgICAgIH0gPSBjaGFuZ2U7XG5cbiAgICAgIGlmIChzdGFydEJsb2NrLmlzVm9pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRCbG9jayA9IHN0YXJ0QmxvY2s7XG4gICAgICBjb25zdCBkZWZhdWx0TWFya3MgPSBkb2N1bWVudC5nZXRJbnNlcnRNYXJrc0F0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGZyYWcgPSBQbGFpbi5kZXNlcmlhbGl6ZSh0ZXh0LCB7XG4gICAgICAgIGRlZmF1bHRCbG9jayxcbiAgICAgICAgZGVmYXVsdE1hcmtzXG4gICAgICB9KS5kb2N1bWVudDtcbiAgICAgIGNoYW5nZS5pbnNlcnRGcmFnbWVudChmcmFnKTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyUGxhY2Vob2xkZXIgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBlZGl0b3IgfSA9IHByb3BzO1xuICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IGVkaXRvci52YWx1ZTtcblxuICAgIGlmICghZWRpdG9yLnByb3BzLnBsYWNlaG9sZGVyIHx8IGRvY3VtZW50LnRleHQgIT09ICcnIHx8IGRvY3VtZW50Lm5vZGVzLnNpemUgIT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY29udGVudEVkaXRhYmxlPXtmYWxzZX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICB3aWR0aDogJ2ZpdC1jb250ZW50JywgLy8gZm9yIGNlbnRlcmluZyB0aGUgcGxhY2Vob2xkZXIgaWYgdGV4dC1hbGlnbiBpcyBzZXQgdG8gY2VudGVyXG4gICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICAgICAgICBvcGFjaXR5OiAnMC4zMycsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6ICdub25lJ1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7ZWRpdG9yLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgc3BlbGxDaGVjayxcbiAgICAgIGhpZ2hsaWdodFNoYXBlLFxuICAgICAgY2xhc3NlcyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcGx1Z2luUHJvcHMsXG4gICAgICBvbktleURvd25cbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgdmFsdWUsIGZvY3VzZWROb2RlLCB0b29sYmFyT3B0cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGxvZygnW3JlbmRlcl0gdmFsdWU6ICcsIHZhbHVlKTtcbiAgICBjb25zdCBzaXplU3R5bGUgPSB0aGlzLmJ1aWxkU2l6ZVN0eWxlKCk7XG4gICAgY29uc3QgbmFtZXMgPSBjbGFzc05hbWVzKFxuICAgICAge1xuICAgICAgICBbY2xhc3Nlcy53aXRoQmddOiBoaWdobGlnaHRTaGFwZSxcbiAgICAgICAgW2NsYXNzZXMudG9vbGJhck9uVG9wXTogdG9vbGJhck9wdHMuYWx3YXlzVmlzaWJsZSAmJiB0b29sYmFyT3B0cy5wb3NpdGlvbiA9PT0gJ3RvcCdcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbGFzc2VzLnNsYXRlRWRpdG9yXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmID0+ICh0aGlzLndyYXBwZXJSZWYgPSByZWYpfVxuICAgICAgICBzdHlsZT17eyB3aWR0aDogc2l6ZVN0eWxlLndpZHRoIH19XG4gICAgICAgIGNsYXNzTmFtZT17bmFtZXN9XG4gICAgICA+XG4gICAgICAgIDxTbGF0ZUVkaXRvclxuICAgICAgICAgIHBsdWdpbnM9e3RoaXMucGx1Z2luc31cbiAgICAgICAgICB0b29sYmFyUmVmPXtyID0+IHtcbiAgICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9vbGJhclJlZiA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgICBhY3Rpb25zUmVmPXt0aGlzLnByb3BzLm9uUmVmfVxuICAgICAgICAgIG9uRWRpdG9yPXt0aGlzLnByb3BzLm9uRWRpdG9yfVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICBmb2N1cz17dGhpcy5mb2N1c31cbiAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX1cbiAgICAgICAgICBnZXRGb2N1c2VkVmFsdWU9e3RoaXMuZ2V0Rm9jdXNlZFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Ecm9wPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yLCB0cnVlKX1cbiAgICAgICAgICBvblBhc3RlPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yKX1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25FZGl0aW5nRG9uZT17dGhpcy5vbkVkaXRpbmdEb25lfVxuICAgICAgICAgIG9uRG9uZT17dGhpcy5vbkRvbmV9XG4gICAgICAgICAgZm9jdXNlZE5vZGU9e2ZvY3VzZWROb2RlfVxuICAgICAgICAgIG5vcm1hbGl6ZT17dGhpcy5ub3JtYWxpemV9XG4gICAgICAgICAgcmVhZE9ubHk9e2Rpc2FibGVkfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2t9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbY2xhc3Nlcy5ub1BhZGRpbmddOiB0b29sYmFyT3B0cyAmJiB0b29sYmFyT3B0cy5ub0JvcmRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzZXMuc2xhdGVFZGl0b3JcbiAgICAgICAgICApfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBtaW5IZWlnaHQ6IHNpemVTdHlsZS5taW5IZWlnaHQsXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemVTdHlsZS5oZWlnaHQsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IHNpemVTdHlsZS5tYXhIZWlnaHRcbiAgICAgICAgICB9fVxuICAgICAgICAgIHBsdWdpblByb3BzPXtwbHVnaW5Qcm9wc31cbiAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIHJlbmRlclBsYWNlaG9sZGVyPXt0aGlzLnJlbmRlclBsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmID0+ICh0aGlzLndyYXBwZXJSZWYgPSByZWYpfVxuICAgICAgICBzdHlsZT17eyB3aWR0aDogc2l6ZVN0eWxlLndpZHRoIH19XG4gICAgICAgIGNsYXNzTmFtZT17bmFtZXN9XG4gICAgICA+XG4gICAgICAgIDxPbGRTbGF0ZUVkaXRvclxuICAgICAgICAgIHBsdWdpbnM9e3RoaXMucGx1Z2luc31cbiAgICAgICAgICB0b29sYmFyUmVmPXtyID0+IHtcbiAgICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9vbGJhclJlZiA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgZm9jdXM9e3RoaXMuZm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9XG4gICAgICAgICAgZ2V0Rm9jdXNlZFZhbHVlPXt0aGlzLmdldEZvY3VzZWRWYWx1ZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRHJvcD17KGV2ZW50LCBlZGl0b3IpID0+IHRoaXMub25Ecm9wUGFzdGUoZXZlbnQsIGVkaXRvciwgdHJ1ZSl9XG4gICAgICAgICAgb25QYXN0ZT17KGV2ZW50LCBlZGl0b3IpID0+IHRoaXMub25Ecm9wUGFzdGUoZXZlbnQsIGVkaXRvcil9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uRWRpdGluZ0RvbmU9e3RoaXMub25FZGl0aW5nRG9uZX1cbiAgICAgICAgICBmb2N1c2VkTm9kZT17Zm9jdXNlZE5vZGV9XG4gICAgICAgICAgbm9ybWFsaXplPXt0aGlzLm5vcm1hbGl6ZX1cbiAgICAgICAgICByZWFkT25seT17ZGlzYWJsZWR9XG4gICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja31cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtjbGFzc2VzLm5vUGFkZGluZ106IHRvb2xiYXJPcHRzICYmIHRvb2xiYXJPcHRzLm5vQm9yZGVyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xhc3Nlcy5zbGF0ZUVkaXRvclxuICAgICAgICAgICl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1pbkhlaWdodDogc2l6ZVN0eWxlLm1pbkhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZVN0eWxlLmhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogc2l6ZVN0eWxlLm1heEhlaWdodFxuICAgICAgICAgIH19XG4gICAgICAgICAgcGx1Z2luUHJvcHM9e3BsdWdpblByb3BzfVxuICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgcmVuZGVyUGxhY2Vob2xkZXI9e3RoaXMucmVuZGVyUGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIFRPRE8gY29sb3IgLSBoYXJkY29kZWQgZ3JheSBiYWNrZ3JvdW5kIGFuZCBrZXlwYWQgY29sb3JzIHdpbGwgbmVlZCB0byBjaGFuZ2UgdG9vXG5jb25zdCBzdHlsZXMgPSB7XG4gIHdpdGhCZzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC4wNiknXG4gIH0sXG4gIHNsYXRlRWRpdG9yOiB7XG4gICAgZm9udEZhbWlseTogJ1JvYm90bywgc2Fucy1zZXJpZicsXG5cbiAgICAnJiB0YWJsZSc6IHtcbiAgICAgIHRhYmxlTGF5b3V0OiAnZml4ZWQnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGJvcmRlckNvbGxhcHNlOiAnY29sbGFwc2UnLFxuICAgICAgY29sb3I6IGNvbG9yLnRleHQoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpXG4gICAgfSxcbiAgICAnJiB0YWJsZTpub3QoW2JvcmRlcj1cIjFcIl0pIHRyJzoge1xuICAgICAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkICNkZmUyZTUnXG4gICAgICAvLyBUT0RPIHBlcmhhcHMgc2Vjb25kYXJ5IGNvbG9yIGZvciBiYWNrZ3JvdW5kLCBmb3Igbm93IGRpc2FibGVcbiAgICAgIC8vICcmOm50aC1jaGlsZCgybiknOiB7XG4gICAgICAvLyAgIGJhY2tncm91bmRDb2xvcjogJyNmNmY4ZmEnXG4gICAgICAvLyB9XG4gICAgfSxcbiAgICAnJiB0ZCwgdGgnOiB7XG4gICAgICBwYWRkaW5nOiAnLjZlbSAxZW0nLFxuICAgICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICAgIH0sXG4gICAgJyYgdGFibGU6bm90KFtib3JkZXI9XCIxXCJdKSB0ZCwgdGgnOiB7XG4gICAgICBib3JkZXI6ICcxcHggc29saWQgI2RmZTJlNSdcbiAgICB9XG4gIH0sXG4gIHRvb2xiYXJPblRvcDoge1xuICAgIG1hcmdpblRvcDogJzQ1cHgnXG4gIH0sXG4gIG5vUGFkZGluZzoge1xuICAgIHBhZGRpbmc6ICcwICFpbXBvcnRhbnQnXG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoc3R5bGVzKShFZGl0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