@pie-lib/editable-html-tip-tap 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/lib/components/MenuBar.js +7 -7
  2. package/lib/constants.js +2 -5
  3. package/package.json +1 -1
  4. package/src/components/MenuBar.jsx +1 -1
  5. package/src/constants.js +0 -2
  6. package/lib/__tests__/editor.test.js +0 -470
  7. package/lib/__tests__/serialization.test.js +0 -246
  8. package/lib/block-tags.js +0 -25
  9. package/lib/components/CharacterPicker.js.map +0 -1
  10. package/lib/components/EditableHtml.js.map +0 -1
  11. package/lib/components/MenuBar.js.map +0 -1
  12. package/lib/components/TiptapContainer.js.map +0 -1
  13. package/lib/components/buttons/done-button.js +0 -53
  14. package/lib/components/characters/characterUtils.js.map +0 -1
  15. package/lib/components/characters/custom-popper.js.map +0 -1
  16. package/lib/components/common/done-button.js.map +0 -1
  17. package/lib/components/icons/CssIcon.js.map +0 -1
  18. package/lib/components/icons/RespArea.js.map +0 -1
  19. package/lib/components/icons/TableIcons.js.map +0 -1
  20. package/lib/components/icons/TextAlign.js.map +0 -1
  21. package/lib/components/icons/index.js +0 -194
  22. package/lib/components/image/ImageToolbar.js.map +0 -1
  23. package/lib/components/image/InsertImageHandler.js.map +0 -1
  24. package/lib/components/image/alt-dialog.js +0 -2
  25. package/lib/components/media/MediaDialog.js.map +0 -1
  26. package/lib/components/media/MediaToolbar.js.map +0 -1
  27. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +0 -1
  28. package/lib/components/respArea/DragInTheBlank/choice.js.map +0 -1
  29. package/lib/components/respArea/DragInTheBlank.js +0 -94
  30. package/lib/components/respArea/ExplicitConstructedResponse.js.map +0 -1
  31. package/lib/components/respArea/InlineDropdown.js.map +0 -1
  32. package/lib/components/respArea/ToolbarIcon.js.map +0 -1
  33. package/lib/components/respArea/choice.js +0 -2
  34. package/lib/constants.js.map +0 -1
  35. package/lib/editor.js +0 -1356
  36. package/lib/extensions/MediaView.js +0 -112
  37. package/lib/extensions/characters.js +0 -65
  38. package/lib/extensions/component.js.map +0 -1
  39. package/lib/extensions/css.js.map +0 -1
  40. package/lib/extensions/custom-toolbar-wrapper.js.map +0 -1
  41. package/lib/extensions/extended-table.js.map +0 -1
  42. package/lib/extensions/image.js.map +0 -1
  43. package/lib/extensions/index.js.map +0 -1
  44. package/lib/extensions/math.js.map +0 -1
  45. package/lib/extensions/media.js.map +0 -1
  46. package/lib/extensions/responseArea.js.map +0 -1
  47. package/lib/index.js.map +0 -1
  48. package/lib/old-index.js +0 -269
  49. package/lib/parse-html.js +0 -16
  50. package/lib/plugins/characters/custom-popper.js +0 -73
  51. package/lib/plugins/characters/index.js +0 -305
  52. package/lib/plugins/characters/utils.js +0 -381
  53. package/lib/plugins/css/icons/index.js +0 -37
  54. package/lib/plugins/css/index.js +0 -390
  55. package/lib/plugins/customPlugin/index.js +0 -114
  56. package/lib/plugins/html/icons/index.js +0 -38
  57. package/lib/plugins/html/index.js +0 -81
  58. package/lib/plugins/image/__tests__/component.test.js +0 -51
  59. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +0 -56
  60. package/lib/plugins/image/__tests__/image-toolbar.test.js +0 -26
  61. package/lib/plugins/image/__tests__/index.test.js +0 -98
  62. package/lib/plugins/image/__tests__/insert-image-handler.test.js +0 -125
  63. package/lib/plugins/image/__tests__/mock-change.js +0 -25
  64. package/lib/plugins/image/alt-dialog.js +0 -129
  65. package/lib/plugins/image/component.js +0 -419
  66. package/lib/plugins/image/image-toolbar.js +0 -177
  67. package/lib/plugins/image/index.js +0 -263
  68. package/lib/plugins/image/insert-image-handler.js +0 -117
  69. package/lib/plugins/index.js +0 -341
  70. package/lib/plugins/list/__tests__/index.test.js +0 -79
  71. package/lib/plugins/list/index.js +0 -334
  72. package/lib/plugins/math/__tests__/index.test.js +0 -300
  73. package/lib/plugins/math/index.js +0 -454
  74. package/lib/plugins/media/__tests__/index.test.js +0 -71
  75. package/lib/plugins/media/index.js +0 -387
  76. package/lib/plugins/media/media-dialog.js +0 -709
  77. package/lib/plugins/media/media-toolbar.js +0 -101
  78. package/lib/plugins/media/media-wrapper.js +0 -93
  79. package/lib/plugins/rendering/index.js +0 -46
  80. package/lib/plugins/respArea/drag-in-the-blank/choice.js +0 -289
  81. package/lib/plugins/respArea/drag-in-the-blank/index.js +0 -94
  82. package/lib/plugins/respArea/explicit-constructed-response/index.js +0 -120
  83. package/lib/plugins/respArea/icons/index.js +0 -95
  84. package/lib/plugins/respArea/index.js +0 -341
  85. package/lib/plugins/respArea/inline-dropdown/index.js +0 -126
  86. package/lib/plugins/respArea/math-templated/index.js +0 -130
  87. package/lib/plugins/respArea/utils.js +0 -125
  88. package/lib/plugins/table/CustomTablePlugin.js +0 -133
  89. package/lib/plugins/table/__tests__/index.test.js +0 -442
  90. package/lib/plugins/table/__tests__/table-toolbar.test.js +0 -54
  91. package/lib/plugins/table/icons/index.js +0 -69
  92. package/lib/plugins/table/index.js +0 -483
  93. package/lib/plugins/table/table-toolbar.js +0 -187
  94. package/lib/plugins/textAlign/icons/index.js +0 -194
  95. package/lib/plugins/textAlign/index.js +0 -34
  96. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +0 -128
  97. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +0 -51
  98. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +0 -54
  99. package/lib/plugins/toolbar/__tests__/toolbar.test.js +0 -120
  100. package/lib/plugins/toolbar/default-toolbar.js +0 -229
  101. package/lib/plugins/toolbar/done-button.js +0 -53
  102. package/lib/plugins/toolbar/editor-and-toolbar.js +0 -286
  103. package/lib/plugins/toolbar/index.js +0 -34
  104. package/lib/plugins/toolbar/toolbar-buttons.js +0 -194
  105. package/lib/plugins/toolbar/toolbar.js +0 -376
  106. package/lib/plugins/utils.js +0 -62
  107. package/lib/serialization.js +0 -677
  108. package/lib/shared/alert-dialog.js +0 -75
  109. package/lib/styles/editorContainerStyles.js.map +0 -1
  110. package/lib/theme.js.map +0 -1
  111. package/lib/utils/size.js.map +0 -1
@@ -1,341 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.buildPlugins = exports.SuperscriptIcon = exports.SubscriptIcon = exports.HeadingIcon = exports.EXTENSIONS_LIST = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _slateHotkeys = _interopRequireDefault(require("slate-hotkeys"));
15
-
16
- var _slateDevEnvironment = require("slate-dev-environment");
17
-
18
- var _slate = require("slate");
19
-
20
- var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
21
-
22
- var _FormatQuote = _interopRequireDefault(require("@material-ui/icons/FormatQuote"));
23
-
24
- var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
25
-
26
- var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
27
-
28
- var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
29
-
30
- var _Image = _interopRequireDefault(require("@material-ui/icons/Image"));
31
-
32
- var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
33
-
34
- var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
35
-
36
- var _image = _interopRequireDefault(require("./image"));
37
-
38
- var _media = _interopRequireDefault(require("./media"));
39
-
40
- var _characters = _interopRequireDefault(require("./characters"));
41
-
42
- var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
43
-
44
- var _math = _interopRequireDefault(require("./math"));
45
-
46
- var _react = _interopRequireDefault(require("react"));
47
-
48
- var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
49
-
50
- var _toolbar = _interopRequireDefault(require("./toolbar"));
51
-
52
- var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
53
-
54
- var _compact = _interopRequireDefault(require("lodash/compact"));
55
-
56
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
57
-
58
- var _slateSoftBreak = _interopRequireDefault(require("slate-soft-break"));
59
-
60
- var _debug = _interopRequireDefault(require("debug"));
61
-
62
- var _list = _interopRequireDefault(require("./list"));
63
-
64
- var _table = _interopRequireDefault(require("./table"));
65
-
66
- var _respArea = _interopRequireDefault(require("./respArea"));
67
-
68
- var _html = _interopRequireDefault(require("./html"));
69
-
70
- var _css = _interopRequireDefault(require("./css"));
71
-
72
- var _customPlugin = _interopRequireDefault(require("./customPlugin"));
73
-
74
- var _textAlign = _interopRequireDefault(require("./textAlign"));
75
-
76
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
77
-
78
- 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; }
79
-
80
- var log = (0, _debug["default"])('@pie-lib:editable-html:plugins');
81
-
82
- var SuperscriptIcon = function SuperscriptIcon() {
83
- return /*#__PURE__*/_react["default"].createElement("svg", {
84
- xmlns: "http://www.w3.org/2000/svg",
85
- height: "24px",
86
- viewBox: "0 0 24 24",
87
- width: "24px",
88
- fill: "none"
89
- }, /*#__PURE__*/_react["default"].createElement("path", {
90
- d: "M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z",
91
- fill: "currentColor"
92
- }));
93
- };
94
-
95
- exports.SuperscriptIcon = SuperscriptIcon;
96
-
97
- var SubscriptIcon = function SubscriptIcon() {
98
- return /*#__PURE__*/_react["default"].createElement("svg", {
99
- xmlns: "http://www.w3.org/2000/svg",
100
- height: "24px",
101
- viewBox: "0 0 24 24",
102
- width: "24px",
103
- fill: "none"
104
- }, /*#__PURE__*/_react["default"].createElement("path", {
105
- d: "M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z",
106
- fill: "currentColor"
107
- }));
108
- };
109
-
110
- exports.SubscriptIcon = SubscriptIcon;
111
-
112
- var HeadingIcon = function HeadingIcon() {
113
- return /*#__PURE__*/_react["default"].createElement("svg", {
114
- width: "30",
115
- height: "28",
116
- viewBox: "0 0 30 28",
117
- fill: "none",
118
- xmlns: "http://www.w3.org/2000/svg",
119
- style: {
120
- width: '20px',
121
- height: '18px'
122
- }
123
- }, /*#__PURE__*/_react["default"].createElement("path", {
124
- d: "M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z",
125
- fill: "currentColor"
126
- }));
127
- };
128
-
129
- exports.HeadingIcon = HeadingIcon;
130
- var STYLES_MAP = {
131
- h3: {
132
- fontSize: 'inherit',
133
- fontWeight: 'inherit'
134
- },
135
- blockquote: {
136
- background: '#f9f9f9',
137
- borderLeft: '5px solid #ccc',
138
- margin: '1.5em 10px',
139
- padding: '.5em 10px'
140
- }
141
- };
142
-
143
- function MarkHotkey(options) {
144
- var type = options.type,
145
- key = options.key,
146
- icon = options.icon,
147
- tag = options.tag; // Return our "plugin" object, containing the `onKeyDown` handler.
148
-
149
- return {
150
- name: type,
151
- toolbar: {
152
- isMark: true,
153
- type: type,
154
- icon: icon,
155
- onToggle: function onToggle(change) {
156
- log('[onToggleMark] type: ', type);
157
- var selection = change.value.selection;
158
-
159
- if (['blockquote', 'h3'].includes(type)) {
160
- var texts = change.value.document.getTextsAtRangeAsArray(selection);
161
- var onlyOneText = texts.length === 1;
162
- var hasMark = false;
163
- var sameMark = true;
164
- texts.forEach(function (t) {
165
- var marks = t.getMarksAsArray();
166
- var markIsThere = marks.find(function (m) {
167
- return m.type === type;
168
- });
169
-
170
- if (!markIsThere) {
171
- // not all texts have this mark
172
- sameMark = false;
173
- } else {
174
- // at least one mark
175
- hasMark = true;
176
- }
177
- });
178
- var shouldContinue = onlyOneText || sameMark || !hasMark;
179
-
180
- if (!shouldContinue) {
181
- return change;
182
- }
183
-
184
- if (selection.startKey === selection.endKey && selection.anchorOffset === selection.focusOffset) {
185
- var textNode = change.value.document.getNode(selection.startKey); // select the whole line if there is no selection
186
-
187
- change.moveFocusTo(textNode.key, 0).moveAnchorTo(textNode.key, textNode.text.length); // remove toggle
188
-
189
- var _hasMark = change.value.activeMarks.find(function (entry) {
190
- return entry.type === type;
191
- });
192
-
193
- if (_hasMark) {
194
- change.removeMark(_hasMark);
195
- } else {
196
- var newMark = _slate.Mark.create(type);
197
-
198
- change.addMark(newMark);
199
- } // move focus to end of text
200
-
201
-
202
- return change.moveFocusTo(textNode.key, textNode.text.length).moveAnchorTo(textNode.key, textNode.text.length);
203
- }
204
- }
205
-
206
- return change.toggleMark(type);
207
- }
208
- },
209
- renderMark: function renderMark(props) {
210
- if (props.mark.type === type) {
211
- var _ref = props.node || {},
212
- data = _ref.data;
213
-
214
- var jsonData = (data === null || data === void 0 ? void 0 : data.toJSON()) || {};
215
- var K = tag || type;
216
- var additionalStyles = STYLES_MAP[K];
217
-
218
- if (additionalStyles) {
219
- if (!jsonData.attributes) {
220
- jsonData.attributes = {};
221
- }
222
-
223
- jsonData.attributes.style = _objectSpread(_objectSpread({}, jsonData.attributes.style), additionalStyles);
224
- }
225
-
226
- return /*#__PURE__*/_react["default"].createElement(K, jsonData.attributes, props.children);
227
- }
228
- },
229
- onKeyDown: function onKeyDown(event, change) {
230
- // Check that the key pressed matches our `key` option.
231
- if (!event.metaKey || event.key != key) return; // Prevent the default characters from being inserted.
232
-
233
- event.preventDefault(); // Toggle the mark `type`.
234
-
235
- change.toggleMark(type);
236
- return true;
237
- }
238
- };
239
- }
240
-
241
- var ALL_PLUGINS = ['bold', // 'code',
242
- 'html', 'extraCSSRules', 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'text-align', 'blockquote', 'h3', 'table', 'video', 'audio', 'responseArea', 'redo', 'undo', 'superscript', 'subscript'];
243
- exports.ALL_PLUGINS = ALL_PLUGINS;
244
- var DEFAULT_PLUGINS = ALL_PLUGINS.filter(function (plug) {
245
- return !['responseArea', 'h3', 'blockquote'].includes(plug);
246
- });
247
- exports.DEFAULT_PLUGINS = DEFAULT_PLUGINS;
248
- var EXTENSIONS_LIST = [_GridOn["default"], _FormatBold["default"], _FormatItalic["default"], _FormatStrikethrough["default"], _FormatUnderlined["default"], SuperscriptIcon, SubscriptIcon, _Image["default"], HeadingIcon, _FormatListBulleted["default"], _FormatListNumbered["default"], _FormatQuote["default"]];
249
- exports.EXTENSIONS_LIST = EXTENSIONS_LIST;
250
- var ICON_MAP = {
251
- undo: _Undo["default"],
252
- redo: _Redo["default"]
253
- };
254
-
255
- function UndoRedo(type) {
256
- var IconToUse = ICON_MAP[type];
257
- return {
258
- name: type,
259
- toolbar: {
260
- type: type,
261
- icon: /*#__PURE__*/_react["default"].createElement(IconToUse, null),
262
- ariaLabel: type === 'undo' ? 'Undo (revert the last action)' : 'Redo (reapply the last undone action)',
263
- onClick: function onClick(value, onChange) {
264
- var change = value.change();
265
- onChange(change[type]());
266
- }
267
- }
268
- };
269
- }
270
-
271
- var buildPlugins = function buildPlugins(activePlugins, customPlugins, opts) {
272
- log('[buildPlugins] opts: ', opts);
273
- activePlugins = activePlugins || DEFAULT_PLUGINS;
274
-
275
- var addIf = function addIf(key) {
276
- return activePlugins.includes(key) && key;
277
- };
278
-
279
- var imagePlugin = opts.image && opts.image.onDelete && (0, _image["default"])(opts.image);
280
- var mathPlugin = opts.math && (0, _math["default"])(opts.math);
281
- var respAreaPlugin = opts.responseArea && opts.responseArea.type && (0, _respArea["default"])(opts.responseArea, (0, _compact["default"])([mathPlugin]));
282
- var cssPlugin = !(0, _isEmpty["default"])(opts.extraCSSRules) && (0, _css["default"])(opts.extraCSSRules);
283
- var languageCharactersPlugins = ((opts === null || opts === void 0 ? void 0 : opts.languageCharacters) || []).map(function (config) {
284
- return (0, _characters["default"])(_objectSpread(_objectSpread({}, config), {}, {
285
- keyPadCharacterRef: opts.keyPadCharacterRef,
286
- setKeypadInteraction: opts.setKeypadInteraction
287
- }));
288
- });
289
- var tablePlugins = [imagePlugin, mathPlugin, respAreaPlugin].concat((0, _toConsumableArray2["default"])(languageCharactersPlugins));
290
-
291
- if (opts.responseArea && opts.responseArea.type === 'math-templated') {
292
- tablePlugins.push(respAreaPlugin);
293
- }
294
-
295
- var builtCustomPlugins = [];
296
- customPlugins === null || customPlugins === void 0 ? void 0 : customPlugins.forEach(function (customPlugin) {
297
- var _ref2 = customPlugin || {},
298
- event = _ref2.event,
299
- icon = _ref2.icon,
300
- iconType = _ref2.iconType,
301
- iconAlt = _ref2.iconAlt;
302
-
303
- function isValidEventName(eventName) {
304
- // Check if eventName is a non-empty string
305
- if (typeof eventName !== 'string' || eventName.length === 0) {
306
- return false;
307
- } // Regular expression to match valid event names (only alphanumeric characters and underscore)
308
-
309
-
310
- var regex = /^[a-zA-Z0-9_]+$/; // Check if the eventName matches the regular expression
311
-
312
- return regex.test(eventName);
313
- }
314
-
315
- if (!isValidEventName(event)) {
316
- console.error("The event name: ".concat(event, " is not a valid event name!"));
317
- return;
318
- }
319
-
320
- if (!icon && !iconType && !iconAlt) {
321
- console.error('Your custom button requires icon, iconType and iconAlt');
322
- return;
323
- }
324
-
325
- builtCustomPlugins.push((0, _customPlugin["default"])('custom-plugin', customPlugin));
326
- });
327
- return (0, _compact["default"])([addIf('table'), addIf('bold'), // addIf('code'),
328
- addIf('italic'), addIf('strikethrough', MarkHotkey({
329
- key: '~',
330
- type: 'strikethrough',
331
- icon: /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null),
332
- tag: 'del'
333
- })), addIf('underline'), // icon should be modifies accordingly
334
- addIf('superscript'), // icon should be modifies accordingly
335
- addIf('subscript'), addIf('image'), addIf('video'), addIf('audio'), addIf('math')].concat((0, _toConsumableArray2["default"])(languageCharactersPlugins.map(function () {
336
- return addIf('languageCharacters');
337
- })), [addIf('text-align'), addIf('blockquote'), addIf('h3'), addIf('bulleted-list'), addIf('numbered-list'), addIf('undo'), addIf('redo')], builtCustomPlugins, [addIf('responseArea'), cssPlugin, addIf('html')]));
338
- };
339
-
340
- exports.buildPlugins = buildPlugins;
341
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wbHVnaW5zL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJsb2ciLCJTdXBlcnNjcmlwdEljb24iLCJTdWJzY3JpcHRJY29uIiwiSGVhZGluZ0ljb24iLCJ3aWR0aCIsImhlaWdodCIsIlNUWUxFU19NQVAiLCJoMyIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImJsb2NrcXVvdGUiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyTGVmdCIsIm1hcmdpbiIsInBhZGRpbmciLCJNYXJrSG90a2V5Iiwib3B0aW9ucyIsInR5cGUiLCJrZXkiLCJpY29uIiwidGFnIiwibmFtZSIsInRvb2xiYXIiLCJpc01hcmsiLCJvblRvZ2dsZSIsImNoYW5nZSIsInNlbGVjdGlvbiIsInZhbHVlIiwiaW5jbHVkZXMiLCJ0ZXh0cyIsImRvY3VtZW50IiwiZ2V0VGV4dHNBdFJhbmdlQXNBcnJheSIsIm9ubHlPbmVUZXh0IiwibGVuZ3RoIiwiaGFzTWFyayIsInNhbWVNYXJrIiwiZm9yRWFjaCIsInQiLCJtYXJrcyIsImdldE1hcmtzQXNBcnJheSIsIm1hcmtJc1RoZXJlIiwiZmluZCIsIm0iLCJzaG91bGRDb250aW51ZSIsInN0YXJ0S2V5IiwiZW5kS2V5IiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNPZmZzZXQiLCJ0ZXh0Tm9kZSIsImdldE5vZGUiLCJtb3ZlRm9jdXNUbyIsIm1vdmVBbmNob3JUbyIsInRleHQiLCJhY3RpdmVNYXJrcyIsImVudHJ5IiwicmVtb3ZlTWFyayIsIm5ld01hcmsiLCJNYXJrIiwiY3JlYXRlIiwiYWRkTWFyayIsInRvZ2dsZU1hcmsiLCJyZW5kZXJNYXJrIiwicHJvcHMiLCJtYXJrIiwibm9kZSIsImRhdGEiLCJqc29uRGF0YSIsInRvSlNPTiIsIksiLCJhZGRpdGlvbmFsU3R5bGVzIiwiYXR0cmlidXRlcyIsInN0eWxlIiwiY2hpbGRyZW4iLCJvbktleURvd24iLCJldmVudCIsIm1ldGFLZXkiLCJwcmV2ZW50RGVmYXVsdCIsIkFMTF9QTFVHSU5TIiwiREVGQVVMVF9QTFVHSU5TIiwiZmlsdGVyIiwicGx1ZyIsIkVYVEVOU0lPTlNfTElTVCIsIkdyaWRPbiIsIkJvbGQiLCJJdGFsaWMiLCJTdHJpa2V0aHJvdWdoIiwiVW5kZXJsaW5lIiwiSW1hZ2UiLCJCdWxsZXRlZExpc3RJY29uIiwiTnVtYmVyZWRMaXN0SWNvbiIsIkZvcm1hdFF1b3RlIiwiSUNPTl9NQVAiLCJ1bmRvIiwiVW5kbyIsInJlZG8iLCJSZWRvIiwiVW5kb1JlZG8iLCJJY29uVG9Vc2UiLCJhcmlhTGFiZWwiLCJvbkNsaWNrIiwib25DaGFuZ2UiLCJidWlsZFBsdWdpbnMiLCJhY3RpdmVQbHVnaW5zIiwiY3VzdG9tUGx1Z2lucyIsIm9wdHMiLCJhZGRJZiIsImltYWdlUGx1Z2luIiwiaW1hZ2UiLCJvbkRlbGV0ZSIsIm1hdGhQbHVnaW4iLCJtYXRoIiwicmVzcEFyZWFQbHVnaW4iLCJyZXNwb25zZUFyZWEiLCJjc3NQbHVnaW4iLCJleHRyYUNTU1J1bGVzIiwibGFuZ3VhZ2VDaGFyYWN0ZXJzUGx1Z2lucyIsImxhbmd1YWdlQ2hhcmFjdGVycyIsIm1hcCIsImNvbmZpZyIsImtleVBhZENoYXJhY3RlclJlZiIsInNldEtleXBhZEludGVyYWN0aW9uIiwidGFibGVQbHVnaW5zIiwicHVzaCIsImJ1aWx0Q3VzdG9tUGx1Z2lucyIsImN1c3RvbVBsdWdpbiIsImljb25UeXBlIiwiaWNvbkFsdCIsImlzVmFsaWRFdmVudE5hbWUiLCJldmVudE5hbWUiLCJyZWdleCIsInRlc3QiLCJjb25zb2xlIiwiZXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7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S0FBSyxDQUFDLE1BQUQsQ0E3QkEsRUE4QkxBLEtBQUssQ0FBQyxNQUFELENBOUJBLEdBK0JGa0Isa0JBL0JFLEdBZ0NMbEIsS0FBSyxDQUFDLGNBQUQsQ0FoQ0EsRUFpQ0xRLFNBakNLLEVBa0NMUixLQUFLLENBQUMsTUFBRCxDQWxDQSxHQUFQO0FBb0NELENBOUZNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhvdGtleXMgZnJvbSAnc2xhdGUtaG90a2V5cyc7XG5pbXBvcnQgeyBJU19JT1MgfSBmcm9tICdzbGF0ZS1kZXYtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgTWFyayB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCBCb2xkIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRCb2xkJztcbmltcG9ydCBGb3JtYXRRdW90ZSBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0UXVvdGUnO1xuLy9pbXBvcnQgQ29kZSBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvQ29kZSc7XG5pbXBvcnQgQnVsbGV0ZWRMaXN0SWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0TGlzdEJ1bGxldGVkJztcbmltcG9ydCBOdW1iZXJlZExpc3RJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRMaXN0TnVtYmVyZWQnO1xuaW1wb3J0IEdyaWRPbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvR3JpZE9uJztcbmltcG9ydCBJbWFnZSBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvSW1hZ2UnO1xuaW1wb3J0IFJlZG8gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1JlZG8nO1xuaW1wb3J0IFVuZG8gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1VuZG8nO1xuaW1wb3J0IEltYWdlUGx1Z2luIGZyb20gJy4vaW1hZ2UnO1xuaW1wb3J0IE1lZGlhUGx1Z2luIGZyb20gJy4vbWVkaWEnO1xuaW1wb3J0IENoYXJhY3RlcnNQbHVnaW4gZnJvbSAnLi9jaGFyYWN0ZXJzJztcbmltcG9ydCBJdGFsaWMgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdEl0YWxpYyc7XG5pbXBvcnQgTWF0aFBsdWdpbiBmcm9tICcuL21hdGgnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdHJpa2V0aHJvdWdoIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRTdHJpa2V0aHJvdWdoJztcbmltcG9ydCBUb29sYmFyUGx1Z2luIGZyb20gJy4vdG9vbGJhcic7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRVbmRlcmxpbmVkJztcbmltcG9ydCBjb21wYWN0IGZyb20gJ2xvZGFzaC9jb21wYWN0JztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBTb2Z0QnJlYWtQbHVnaW4gZnJvbSAnc2xhdGUtc29mdC1icmVhayc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IExpc3QgZnJvbSAnLi9saXN0JztcbmltcG9ydCBUYWJsZVBsdWdpbiBmcm9tICcuL3RhYmxlJztcbmltcG9ydCBSZXNwQXJlYVBsdWdpbiBmcm9tICcuL3Jlc3BBcmVhJztcbmltcG9ydCBIdG1sUGx1Z2luIGZyb20gJy4vaHRtbCc7XG5pbXBvcnQgQ1NTUGx1Z2luIGZyb20gJy4vY3NzJztcbmltcG9ydCBDdXN0b21QbHVnaW4gZnJvbSAnLi9jdXN0b21QbHVnaW4nO1xuaW1wb3J0IFRleHRBbGlnbiBmcm9tICcuL3RleHRBbGlnbic7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnMnKTtcblxuZXhwb3J0IGNvbnN0IFN1cGVyc2NyaXB0SWNvbiA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwibm9uZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTIyLDdoLTJ2MWgzdjFoLTRWN2MwLTAuNTUsMC40NS0xLDEtMWgyVjVoLTNWNGgzYzAuNTUsMCwxLDAuNDUsMSwxdjFDMjMsNi41NSwyMi41NSw3LDIyLDd6IE01Ljg4LDIwaDIuNjZsMy40LTUuNDJoMC4xMiBsMy40LDUuNDJoMi42NmwtNC42NS03LjI3TDE3LjgxLDZoLTIuNjhsLTMuMDcsNC45OWgtMC4xMkw4Ljg1LDZINi4xOWw0LjMyLDYuNzNMNS44OCwyMHpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5leHBvcnQgY29uc3QgU3Vic2NyaXB0SWNvbiA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwibm9uZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTIyLDE4aC0ydjFoM3YxaC00di0yYzAtMC41NSwwLjQ1LTEsMS0xaDJ2LTFoLTN2LTFoM2MwLjU1LDAsMSwwLjQ1LDEsMXYxQzIzLDE3LjU1LDIyLjU1LDE4LDIyLDE4eiBNNS44OCwxOGgyLjY2IGwzLjQtNS40MmgwLjEybDMuNCw1LjQyaDIuNjZsLTQuNjUtNy4yN0wxNy44MSw0aC0yLjY4bC0zLjA3LDQuOTloLTAuMTJMOC44NSw0SDYuMTlsNC4zMiw2LjczTDUuODgsMTh6XCJcbiAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKTtcblxuZXhwb3J0IGNvbnN0IEhlYWRpbmdJY29uID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgd2lkdGg9XCIzMFwiXG4gICAgaGVpZ2h0PVwiMjhcIlxuICAgIHZpZXdCb3g9XCIwIDAgMzAgMjhcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICBzdHlsZT17eyB3aWR0aDogJzIwcHgnLCBoZWlnaHQ6ICcxOHB4JyB9fVxuICA+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjcgNFYyNEgyOUMyOS41IDI0IDMwIDI0LjUgMzAgMjVWMjdDMzAgMjcuNTYyNSAyOS41IDI4IDI5IDI4SDE5QzE4LjQzNzUgMjggMTggMjcuNTYyNSAxOCAyN1YyNUMxOCAyNC41IDE4LjQzNzUgMjQgMTkgMjRIMjFWMTZIOVYyNEgxMUMxMS41IDI0IDEyIDI0LjUgMTIgMjVWMjdDMTIgMjcuNTYyNSAxMS41IDI4IDExIDI4SDFDMC40Mzc1IDI4IDAgMjcuNTYyNSAwIDI3VjI1QzAgMjQuNSAwLjQzNzUgMjQgMSAyNEgzVjRIMUMwLjQzNzUgNCAwIDMuNTYyNSAwIDNWMUMwIDAuNSAwLjQzNzUgMCAxIDBIMTFDMTEuNSAwIDEyIDAuNSAxMiAxVjNDMTIgMy41NjI1IDExLjUgNCAxMSA0SDlWMTJIMjFWNEgxOUMxOC40Mzc1IDQgMTggMy41NjI1IDE4IDNWMUMxOCAwLjUgMTguNDM3NSAwIDE5IDBIMjlDMjkuNSAwIDMwIDAuNSAzMCAxVjNDMzAgMy41NjI1IDI5LjUgNCAyOSA0SDI3WlwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5jb25zdCBTVFlMRVNfTUFQID0ge1xuICBoMzoge1xuICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICB9LFxuICBibG9ja3F1b3RlOiB7XG4gICAgYmFja2dyb3VuZDogJyNmOWY5ZjknLFxuICAgIGJvcmRlckxlZnQ6ICc1cHggc29saWQgI2NjYycsXG4gICAgbWFyZ2luOiAnMS41ZW0gMTBweCcsXG4gICAgcGFkZGluZzogJy41ZW0gMTBweCcsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBNYXJrSG90a2V5KG9wdGlvbnMpIHtcbiAgY29uc3QgeyB0eXBlLCBrZXksIGljb24sIHRhZyB9ID0gb3B0aW9ucztcblxuICAvLyBSZXR1cm4gb3VyIFwicGx1Z2luXCIgb2JqZWN0LCBjb250YWluaW5nIHRoZSBgb25LZXlEb3duYCBoYW5kbGVyLlxuICByZXR1cm4ge1xuICAgIG5hbWU6IHR5cGUsXG4gICAgdG9vbGJhcjoge1xuICAgICAgaXNNYXJrOiB0cnVlLFxuICAgICAgdHlwZSxcbiAgICAgIGljb24sXG4gICAgICBvblRvZ2dsZTogKGNoYW5nZSkgPT4ge1xuICAgICAgICBsb2coJ1tvblRvZ2dsZU1hcmtdIHR5cGU6ICcsIHR5cGUpO1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gY2hhbmdlLnZhbHVlO1xuXG4gICAgICAgIGlmIChbJ2Jsb2NrcXVvdGUnLCAnaDMnXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgIGNvbnN0IHRleHRzID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmdldFRleHRzQXRSYW5nZUFzQXJyYXkoc2VsZWN0aW9uKTtcbiAgICAgICAgICBjb25zdCBvbmx5T25lVGV4dCA9IHRleHRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICBsZXQgaGFzTWFyayA9IGZhbHNlO1xuICAgICAgICAgIGxldCBzYW1lTWFyayA9IHRydWU7XG5cbiAgICAgICAgICB0ZXh0cy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXJrcyA9IHQuZ2V0TWFya3NBc0FycmF5KCk7XG4gICAgICAgICAgICBjb25zdCBtYXJrSXNUaGVyZSA9IG1hcmtzLmZpbmQoKG0pID0+IG0udHlwZSA9PT0gdHlwZSk7XG5cbiAgICAgICAgICAgIGlmICghbWFya0lzVGhlcmUpIHtcbiAgICAgICAgICAgICAgLy8gbm90IGFsbCB0ZXh0cyBoYXZlIHRoaXMgbWFya1xuICAgICAgICAgICAgICBzYW1lTWFyayA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIG1hcmtcbiAgICAgICAgICAgICAgaGFzTWFyayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzaG91bGRDb250aW51ZSA9IG9ubHlPbmVUZXh0IHx8IHNhbWVNYXJrIHx8ICFoYXNNYXJrO1xuXG4gICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLnN0YXJ0S2V5ID09PSBzZWxlY3Rpb24uZW5kS2V5ICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHNlbGVjdGlvbi5mb2N1c09mZnNldCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBjaGFuZ2UudmFsdWUuZG9jdW1lbnQuZ2V0Tm9kZShzZWxlY3Rpb24uc3RhcnRLZXkpO1xuXG4gICAgICAgICAgICAvLyBzZWxlY3QgdGhlIHdob2xlIGxpbmUgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uXG4gICAgICAgICAgICBjaGFuZ2UubW92ZUZvY3VzVG8odGV4dE5vZGUua2V5LCAwKS5tb3ZlQW5jaG9yVG8odGV4dE5vZGUua2V5LCB0ZXh0Tm9kZS50ZXh0Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSB0b2dnbGVcbiAgICAgICAgICAgIGNvbnN0IGhhc01hcmsgPSBjaGFuZ2UudmFsdWUuYWN0aXZlTWFya3MuZmluZCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGUgPT09IHR5cGU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGhhc01hcmspIHtcbiAgICAgICAgICAgICAgY2hhbmdlLnJlbW92ZU1hcmsoaGFzTWFyayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBuZXdNYXJrID0gTWFyay5jcmVhdGUodHlwZSk7XG5cbiAgICAgICAgICAgICAgY2hhbmdlLmFkZE1hcmsobmV3TWFyayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gZW5kIG9mIHRleHRcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VcbiAgICAgICAgICAgICAgLm1vdmVGb2N1c1RvKHRleHROb2RlLmtleSwgdGV4dE5vZGUudGV4dC5sZW5ndGgpXG4gICAgICAgICAgICAgIC5tb3ZlQW5jaG9yVG8odGV4dE5vZGUua2V5LCB0ZXh0Tm9kZS50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYW5nZS50b2dnbGVNYXJrKHR5cGUpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHJlbmRlck1hcmsocHJvcHMpIHtcbiAgICAgIGlmIChwcm9wcy5tYXJrLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBwcm9wcy5ub2RlIHx8IHt9O1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IGRhdGE/LnRvSlNPTigpIHx8IHt9O1xuICAgICAgICBjb25zdCBLID0gdGFnIHx8IHR5cGU7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxTdHlsZXMgPSBTVFlMRVNfTUFQW0tdO1xuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3R5bGVzKSB7XG4gICAgICAgICAgaWYgKCFqc29uRGF0YS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBqc29uRGF0YS5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAganNvbkRhdGEuYXR0cmlidXRlcy5zdHlsZSA9IHtcbiAgICAgICAgICAgIC4uLmpzb25EYXRhLmF0dHJpYnV0ZXMuc3R5bGUsXG4gICAgICAgICAgICAuLi5hZGRpdGlvbmFsU3R5bGVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gPEsgey4uLmpzb25EYXRhLmF0dHJpYnV0ZXN9Pntwcm9wcy5jaGlsZHJlbn08L0s+O1xuICAgICAgfVxuICAgIH0sXG4gICAgb25LZXlEb3duKGV2ZW50LCBjaGFuZ2UpIHtcbiAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGtleSBwcmVzc2VkIG1hdGNoZXMgb3VyIGBrZXlgIG9wdGlvbi5cbiAgICAgIGlmICghZXZlbnQubWV0YUtleSB8fCBldmVudC5rZXkgIT0ga2V5KSByZXR1cm47XG5cbiAgICAgIC8vIFByZXZlbnQgdGhlIGRlZmF1bHQgY2hhcmFjdGVycyBmcm9tIGJlaW5nIGluc2VydGVkLlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gVG9nZ2xlIHRoZSBtYXJrIGB0eXBlYC5cbiAgICAgIGNoYW5nZS50b2dnbGVNYXJrKHR5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEFMTF9QTFVHSU5TID0gW1xuICAnYm9sZCcsXG4gIC8vICdjb2RlJyxcbiAgJ2h0bWwnLFxuICAnZXh0cmFDU1NSdWxlcycsXG4gICdpdGFsaWMnLFxuICAndW5kZXJsaW5lJyxcbiAgJ3N0cmlrZXRocm91Z2gnLFxuICAnYnVsbGV0ZWQtbGlzdCcsXG4gICdudW1iZXJlZC1saXN0JyxcbiAgJ2ltYWdlJyxcbiAgJ21hdGgnLFxuICAnbGFuZ3VhZ2VDaGFyYWN0ZXJzJyxcbiAgJ3RleHQtYWxpZ24nLFxuICAnYmxvY2txdW90ZScsXG4gICdoMycsXG4gICd0YWJsZScsXG4gICd2aWRlbycsXG4gICdhdWRpbycsXG4gICdyZXNwb25zZUFyZWEnLFxuICAncmVkbycsXG4gICd1bmRvJyxcbiAgJ3N1cGVyc2NyaXB0JyxcbiAgJ3N1YnNjcmlwdCcsXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QTFVHSU5TID0gQUxMX1BMVUdJTlMuZmlsdGVyKChwbHVnKSA9PiAhWydyZXNwb25zZUFyZWEnLCAnaDMnLCAnYmxvY2txdW90ZSddLmluY2x1ZGVzKHBsdWcpKTtcblxuZXhwb3J0IGNvbnN0IEVYVEVOU0lPTlNfTElTVCA9IFtcbiAgR3JpZE9uLFxuICBCb2xkLFxuICBJdGFsaWMsXG4gIFN0cmlrZXRocm91Z2gsXG4gIFVuZGVybGluZSxcbiAgU3VwZXJzY3JpcHRJY29uLFxuICBTdWJzY3JpcHRJY29uLFxuICBJbWFnZSxcbiAgSGVhZGluZ0ljb24sXG4gIEJ1bGxldGVkTGlzdEljb24sXG4gIE51bWJlcmVkTGlzdEljb24sXG4gIEZvcm1hdFF1b3RlLFxuXTtcblxuY29uc3QgSUNPTl9NQVAgPSB7XG4gIHVuZG86IFVuZG8sXG4gIHJlZG86IFJlZG8sXG59O1xuZnVuY3Rpb24gVW5kb1JlZG8odHlwZSkge1xuICBjb25zdCBJY29uVG9Vc2UgPSBJQ09OX01BUFt0eXBlXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IHR5cGUsXG4gICAgdG9vbGJhcjoge1xuICAgICAgdHlwZSxcbiAgICAgIGljb246IDxJY29uVG9Vc2UgLz4sXG4gICAgICBhcmlhTGFiZWw6IHR5cGUgPT09ICd1bmRvJyA/ICdVbmRvIChyZXZlcnQgdGhlIGxhc3QgYWN0aW9uKScgOiAnUmVkbyAocmVhcHBseSB0aGUgbGFzdCB1bmRvbmUgYWN0aW9uKScsXG4gICAgICBvbkNsaWNrOiAodmFsdWUsIG9uQ2hhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlLmNoYW5nZSgpO1xuXG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZVt0eXBlXSgpKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkUGx1Z2lucyA9IChhY3RpdmVQbHVnaW5zLCBjdXN0b21QbHVnaW5zLCBvcHRzKSA9PiB7XG4gIGxvZygnW2J1aWxkUGx1Z2luc10gb3B0czogJywgb3B0cyk7XG5cbiAgYWN0aXZlUGx1Z2lucyA9IGFjdGl2ZVBsdWdpbnMgfHwgREVGQVVMVF9QTFVHSU5TO1xuXG4gIGNvbnN0IGFkZElmID0gKGtleSkgPT4gYWN0aXZlUGx1Z2lucy5pbmNsdWRlcyhrZXkpICYmIGtleTtcblxuICBjb25zdCBpbWFnZVBsdWdpbiA9IG9wdHMuaW1hZ2UgJiYgb3B0cy5pbWFnZS5vbkRlbGV0ZSAmJiBJbWFnZVBsdWdpbihvcHRzLmltYWdlKTtcbiAgY29uc3QgbWF0aFBsdWdpbiA9IG9wdHMubWF0aCAmJiBNYXRoUGx1Z2luKG9wdHMubWF0aCk7XG4gIGNvbnN0IHJlc3BBcmVhUGx1Z2luID1cbiAgICBvcHRzLnJlc3BvbnNlQXJlYSAmJiBvcHRzLnJlc3BvbnNlQXJlYS50eXBlICYmIFJlc3BBcmVhUGx1Z2luKG9wdHMucmVzcG9uc2VBcmVhLCBjb21wYWN0KFttYXRoUGx1Z2luXSkpO1xuICBjb25zdCBjc3NQbHVnaW4gPSAhaXNFbXB0eShvcHRzLmV4dHJhQ1NTUnVsZXMpICYmIENTU1BsdWdpbihvcHRzLmV4dHJhQ1NTUnVsZXMpO1xuXG4gIGNvbnN0IGxhbmd1YWdlQ2hhcmFjdGVyc1BsdWdpbnMgPSAob3B0cz8ubGFuZ3VhZ2VDaGFyYWN0ZXJzIHx8IFtdKS5tYXAoKGNvbmZpZykgPT5cbiAgICBDaGFyYWN0ZXJzUGx1Z2luKHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGtleVBhZENoYXJhY3RlclJlZjogb3B0cy5rZXlQYWRDaGFyYWN0ZXJSZWYsXG4gICAgICBzZXRLZXlwYWRJbnRlcmFjdGlvbjogb3B0cy5zZXRLZXlwYWRJbnRlcmFjdGlvbixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCB0YWJsZVBsdWdpbnMgPSBbaW1hZ2VQbHVnaW4sIG1hdGhQbHVnaW4sIHJlc3BBcmVhUGx1Z2luLCAuLi5sYW5ndWFnZUNoYXJhY3RlcnNQbHVnaW5zXTtcblxuICBpZiAob3B0cy5yZXNwb25zZUFyZWEgJiYgb3B0cy5yZXNwb25zZUFyZWEudHlwZSA9PT0gJ21hdGgtdGVtcGxhdGVkJykge1xuICAgIHRhYmxlUGx1Z2lucy5wdXNoKHJlc3BBcmVhUGx1Z2luKTtcbiAgfVxuXG4gIGxldCBidWlsdEN1c3RvbVBsdWdpbnMgPSBbXTtcblxuICBjdXN0b21QbHVnaW5zPy5mb3JFYWNoKChjdXN0b21QbHVnaW4pID0+IHtcbiAgICBjb25zdCB7IGV2ZW50LCBpY29uLCBpY29uVHlwZSwgaWNvbkFsdCB9ID0gY3VzdG9tUGx1Z2luIHx8IHt9O1xuXG4gICAgZnVuY3Rpb24gaXNWYWxpZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGV2ZW50TmFtZSBpcyBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJyB8fCBldmVudE5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGV2ZW50IG5hbWVzIChvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3JlKVxuICAgICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlfXSskLztcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50TmFtZSBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgIHJldHVybiByZWdleC50ZXN0KGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkRXZlbnROYW1lKGV2ZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGV2ZW50IG5hbWU6ICR7ZXZlbnR9IGlzIG5vdCBhIHZhbGlkIGV2ZW50IG5hbWUhYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpY29uICYmICFpY29uVHlwZSAmJiAhaWNvbkFsdCkge1xuICAgICAgY29uc29sZS5lcnJvcignWW91ciBjdXN0b20gYnV0dG9uIHJlcXVpcmVzIGljb24sIGljb25UeXBlIGFuZCBpY29uQWx0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVpbHRDdXN0b21QbHVnaW5zLnB1c2goQ3VzdG9tUGx1Z2luKCdjdXN0b20tcGx1Z2luJywgY3VzdG9tUGx1Z2luKSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb21wYWN0KFtcbiAgICBhZGRJZigndGFibGUnKSxcbiAgICBhZGRJZignYm9sZCcpLFxuICAgIC8vIGFkZElmKCdjb2RlJyksXG4gICAgYWRkSWYoJ2l0YWxpYycpLFxuICAgIGFkZElmKFxuICAgICAgJ3N0cmlrZXRocm91Z2gnLFxuICAgICAgTWFya0hvdGtleSh7XG4gICAgICAgIGtleTogJ34nLFxuICAgICAgICB0eXBlOiAnc3RyaWtldGhyb3VnaCcsXG4gICAgICAgIGljb246IDxTdHJpa2V0aHJvdWdoIC8+LFxuICAgICAgICB0YWc6ICdkZWwnLFxuICAgICAgfSksXG4gICAgKSxcbiAgICBhZGRJZigndW5kZXJsaW5lJyksXG4gICAgLy8gaWNvbiBzaG91bGQgYmUgbW9kaWZpZXMgYWNjb3JkaW5nbHlcbiAgICBhZGRJZignc3VwZXJzY3JpcHQnKSxcbiAgICAvLyBpY29uIHNob3VsZCBiZSBtb2RpZmllcyBhY2NvcmRpbmdseVxuICAgIGFkZElmKCdzdWJzY3JpcHQnKSxcbiAgICBhZGRJZignaW1hZ2UnKSxcbiAgICBhZGRJZigndmlkZW8nKSxcbiAgICBhZGRJZignYXVkaW8nKSxcbiAgICBhZGRJZignbWF0aCcpLFxuICAgIC4uLmxhbmd1YWdlQ2hhcmFjdGVyc1BsdWdpbnMubWFwKCgpID0+IGFkZElmKCdsYW5ndWFnZUNoYXJhY3RlcnMnKSksXG4gICAgYWRkSWYoJ3RleHQtYWxpZ24nKSxcbiAgICBhZGRJZignYmxvY2txdW90ZScpLFxuICAgIGFkZElmKCdoMycpLFxuICAgIGFkZElmKCdidWxsZXRlZC1saXN0JyksXG4gICAgYWRkSWYoJ251bWJlcmVkLWxpc3QnKSxcbiAgICBhZGRJZigndW5kbycpLFxuICAgIGFkZElmKCdyZWRvJyksXG4gICAgLi4uYnVpbHRDdXN0b21QbHVnaW5zLFxuICAgIGFkZElmKCdyZXNwb25zZUFyZWEnKSxcbiAgICBjc3NQbHVnaW4sXG4gICAgYWRkSWYoJ2h0bWwnKSxcbiAgXSk7XG59O1xuIl19
@@ -1,79 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- var _react = _interopRequireDefault(require("react"));
8
-
9
- var _index = _interopRequireWildcard(require("../index"));
10
-
11
- var _debug = _interopRequireDefault(require("debug"));
12
-
13
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
-
15
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
-
17
- var log = (0, _debug["default"])('@pie-lib:editable-html:test:plugins:list');
18
- describe('ListPlugin', function () {
19
- var next;
20
- describe('deserialize', function () {
21
- next = jest.fn();
22
-
23
- var assertDeserialize = function assertDeserialize(tagName, expectedType) {
24
- it("should deserialize ".concat(tagName, " to ").concat(expectedType), function () {
25
- var out = _index.serialization.deserialize({
26
- tagName: tagName,
27
- children: [],
28
- childNodes: []
29
- }, next);
30
-
31
- expect(out).toMatchObject({
32
- object: 'block',
33
- type: expectedType
34
- });
35
- expect(next).toHaveBeenCalledWith([]);
36
- });
37
- };
38
-
39
- assertDeserialize('ul', 'ul_list');
40
- assertDeserialize('ol', 'ol_list');
41
- assertDeserialize('li', 'list_item');
42
- });
43
- describe('serialize', function () {
44
- var assertSerialize = function assertSerialize(type, expectedType) {
45
- it("should serialize ".concat(type, " to ").concat(expectedType), function () {
46
- var out = _index.serialization.serialize({
47
- object: 'block',
48
- type: type
49
- }, {});
50
-
51
- log('out: ', out);
52
- expect(out.type).toMatch(expectedType);
53
- });
54
- };
55
-
56
- assertSerialize('ul_list', 'ul');
57
- assertSerialize('ol_list', 'ol');
58
- assertSerialize('list_item', 'li');
59
- });
60
- describe('renderNode', function () {
61
- var plugin = (0, _index["default"])({});
62
-
63
- var assertRenderNode = function assertRenderNode(type, expectedType) {
64
- it("should renderNode ".concat(type, " to ").concat(expectedType), function () {
65
- var out = plugin.renderNode({
66
- node: {
67
- type: type
68
- }
69
- });
70
- expect(out.type).toMatch(expectedType);
71
- });
72
- };
73
-
74
- assertRenderNode('ul_list', 'ul');
75
- assertRenderNode('ol_list', 'ol');
76
- assertRenderNode('list_item', 'li');
77
- });
78
- });
79
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL2xpc3QvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwibmFtZXMiOlsibG9nIiwiZGVzY3JpYmUiLCJuZXh0IiwiamVzdCIsImZuIiwiYXNzZXJ0RGVzZXJpYWxpemUiLCJ0YWdOYW1lIiwiZXhwZWN0ZWRUeXBlIiwiaXQiLCJvdXQiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJjaGlsZHJlbiIsImNoaWxkTm9kZXMiLCJleHBlY3QiLCJ0b01hdGNoT2JqZWN0Iiwib2JqZWN0IiwidHlwZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiYXNzZXJ0U2VyaWFsaXplIiwic2VyaWFsaXplIiwidG9NYXRjaCIsInBsdWdpbiIsImFzc2VydFJlbmRlck5vZGUiLCJyZW5kZXJOb2RlIiwibm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSwwQ0FBTixDQUFaO0FBRUFDLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBTTtBQUMzQixNQUFJQyxJQUFKO0FBRUFELEVBQUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFDNUJDLElBQUFBLElBQUksR0FBR0MsSUFBSSxDQUFDQyxFQUFMLEVBQVA7O0FBRUEsUUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDQyxPQUFELEVBQVVDLFlBQVYsRUFBMkI7QUFDbkRDLE1BQUFBLEVBQUUsOEJBQXVCRixPQUF2QixpQkFBcUNDLFlBQXJDLEdBQXFELFlBQU07QUFDM0QsWUFBTUUsR0FBRyxHQUFHQyxxQkFBY0MsV0FBZCxDQUEwQjtBQUFFTCxVQUFBQSxPQUFPLEVBQVBBLE9BQUY7QUFBV00sVUFBQUEsUUFBUSxFQUFFLEVBQXJCO0FBQXlCQyxVQUFBQSxVQUFVLEVBQUU7QUFBckMsU0FBMUIsRUFBcUVYLElBQXJFLENBQVo7O0FBRUFZLFFBQUFBLE1BQU0sQ0FBQ0wsR0FBRCxDQUFOLENBQVlNLGFBQVosQ0FBMEI7QUFBRUMsVUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJDLFVBQUFBLElBQUksRUFBRVY7QUFBekIsU0FBMUI7QUFDQU8sUUFBQUEsTUFBTSxDQUFDWixJQUFELENBQU4sQ0FBYWdCLG9CQUFiLENBQWtDLEVBQWxDO0FBQ0QsT0FMQyxDQUFGO0FBTUQsS0FQRDs7QUFRQWIsSUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPLFNBQVAsQ0FBakI7QUFDQUEsSUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPLFNBQVAsQ0FBakI7QUFDQUEsSUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPLFdBQVAsQ0FBakI7QUFDRCxHQWRPLENBQVI7QUFnQkFKLEVBQUFBLFFBQVEsQ0FBQyxXQUFELEVBQWMsWUFBTTtBQUMxQixRQUFNa0IsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDRixJQUFELEVBQU9WLFlBQVAsRUFBd0I7QUFDOUNDLE1BQUFBLEVBQUUsNEJBQXFCUyxJQUFyQixpQkFBZ0NWLFlBQWhDLEdBQWdELFlBQU07QUFDdEQsWUFBTUUsR0FBRyxHQUFHQyxxQkFBY1UsU0FBZCxDQUF3QjtBQUFFSixVQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQkMsVUFBQUEsSUFBSSxFQUFKQTtBQUFuQixTQUF4QixFQUFtRCxFQUFuRCxDQUFaOztBQUNBakIsUUFBQUEsR0FBRyxDQUFDLE9BQUQsRUFBVVMsR0FBVixDQUFIO0FBQ0FLLFFBQUFBLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDUSxJQUFMLENBQU4sQ0FBaUJJLE9BQWpCLENBQXlCZCxZQUF6QjtBQUNELE9BSkMsQ0FBRjtBQUtELEtBTkQ7O0FBT0FZLElBQUFBLGVBQWUsQ0FBQyxTQUFELEVBQVksSUFBWixDQUFmO0FBQ0FBLElBQUFBLGVBQWUsQ0FBQyxTQUFELEVBQVksSUFBWixDQUFmO0FBQ0FBLElBQUFBLGVBQWUsQ0FBQyxXQUFELEVBQWMsSUFBZCxDQUFmO0FBQ0QsR0FYTyxDQUFSO0FBYUFsQixFQUFBQSxRQUFRLENBQUMsWUFBRCxFQUFlLFlBQU07QUFDM0IsUUFBSXFCLE1BQU0sR0FBRyx1QkFBSyxFQUFMLENBQWI7O0FBRUEsUUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDTixJQUFELEVBQU9WLFlBQVAsRUFBd0I7QUFDL0NDLE1BQUFBLEVBQUUsNkJBQXNCUyxJQUF0QixpQkFBaUNWLFlBQWpDLEdBQWlELFlBQU07QUFDdkQsWUFBTUUsR0FBRyxHQUFHYSxNQUFNLENBQUNFLFVBQVAsQ0FBa0I7QUFBRUMsVUFBQUEsSUFBSSxFQUFFO0FBQUVSLFlBQUFBLElBQUksRUFBSkE7QUFBRjtBQUFSLFNBQWxCLENBQVo7QUFDQUgsUUFBQUEsTUFBTSxDQUFDTCxHQUFHLENBQUNRLElBQUwsQ0FBTixDQUFpQkksT0FBakIsQ0FBeUJkLFlBQXpCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FMRDs7QUFPQWdCLElBQUFBLGdCQUFnQixDQUFDLFNBQUQsRUFBWSxJQUFaLENBQWhCO0FBQ0FBLElBQUFBLGdCQUFnQixDQUFDLFNBQUQsRUFBWSxJQUFaLENBQWhCO0FBQ0FBLElBQUFBLGdCQUFnQixDQUFDLFdBQUQsRUFBYyxJQUFkLENBQWhCO0FBQ0QsR0FiTyxDQUFSO0FBY0QsQ0E5Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBMaXN0LCB7IHNlcmlhbGl6YXRpb24gfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDp0ZXN0OnBsdWdpbnM6bGlzdCcpO1xuXG5kZXNjcmliZSgnTGlzdFBsdWdpbicsICgpID0+IHtcbiAgbGV0IG5leHQ7XG5cbiAgZGVzY3JpYmUoJ2Rlc2VyaWFsaXplJywgKCkgPT4ge1xuICAgIG5leHQgPSBqZXN0LmZuKCk7XG5cbiAgICBjb25zdCBhc3NlcnREZXNlcmlhbGl6ZSA9ICh0YWdOYW1lLCBleHBlY3RlZFR5cGUpID0+IHtcbiAgICAgIGl0KGBzaG91bGQgZGVzZXJpYWxpemUgJHt0YWdOYW1lfSB0byAke2V4cGVjdGVkVHlwZX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoeyB0YWdOYW1lLCBjaGlsZHJlbjogW10sIGNoaWxkTm9kZXM6IFtdIH0sIG5leHQpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLnRvTWF0Y2hPYmplY3QoeyBvYmplY3Q6ICdibG9jaycsIHR5cGU6IGV4cGVjdGVkVHlwZSB9KTtcbiAgICAgICAgZXhwZWN0KG5leHQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtdKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgYXNzZXJ0RGVzZXJpYWxpemUoJ3VsJywgJ3VsX2xpc3QnKTtcbiAgICBhc3NlcnREZXNlcmlhbGl6ZSgnb2wnLCAnb2xfbGlzdCcpO1xuICAgIGFzc2VydERlc2VyaWFsaXplKCdsaScsICdsaXN0X2l0ZW0nKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NlcmlhbGl6ZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRTZXJpYWxpemUgPSAodHlwZSwgZXhwZWN0ZWRUeXBlKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHNlcmlhbGl6ZSAke3R5cGV9IHRvICR7ZXhwZWN0ZWRUeXBlfWAsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0ID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoeyBvYmplY3Q6ICdibG9jaycsIHR5cGUgfSwge30pO1xuICAgICAgICBsb2coJ291dDogJywgb3V0KTtcbiAgICAgICAgZXhwZWN0KG91dC50eXBlKS50b01hdGNoKGV4cGVjdGVkVHlwZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFzc2VydFNlcmlhbGl6ZSgndWxfbGlzdCcsICd1bCcpO1xuICAgIGFzc2VydFNlcmlhbGl6ZSgnb2xfbGlzdCcsICdvbCcpO1xuICAgIGFzc2VydFNlcmlhbGl6ZSgnbGlzdF9pdGVtJywgJ2xpJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJOb2RlJywgKCkgPT4ge1xuICAgIGxldCBwbHVnaW4gPSBMaXN0KHt9KTtcblxuICAgIGNvbnN0IGFzc2VydFJlbmRlck5vZGUgPSAodHlwZSwgZXhwZWN0ZWRUeXBlKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHJlbmRlck5vZGUgJHt0eXBlfSB0byAke2V4cGVjdGVkVHlwZX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dCA9IHBsdWdpbi5yZW5kZXJOb2RlKHsgbm9kZTogeyB0eXBlIH0gfSk7XG4gICAgICAgIGV4cGVjdChvdXQudHlwZSkudG9NYXRjaChleHBlY3RlZFR5cGUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFJlbmRlck5vZGUoJ3VsX2xpc3QnLCAndWwnKTtcbiAgICBhc3NlcnRSZW5kZXJOb2RlKCdvbF9saXN0JywgJ29sJyk7XG4gICAgYXNzZXJ0UmVuZGVyTm9kZSgnbGlzdF9pdGVtJywgJ2xpJyk7XG4gIH0pO1xufSk7XG4iXX0=