@pie-lib/mask-markup 3.1.6-beta.13 → 3.1.6-beta.15

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.
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
7
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
6
8
  var React = _interopRequireWildcard(require("react"));
7
9
  var _react2 = require("@testing-library/react");
8
10
  var _dragInTheBlank = _interopRequireDefault(require("../drag-in-the-blank"));
9
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
11
+ var _keyboardCoordinates = require("../keyboard-coordinates");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
15
  var markup = "<div>\n <img src=\"https://image.shutterstock.com/image-vector/cow-jumped-over-moon-traditional-260nw-1152899330.jpg\"></img>\n <h5>Hey Diddle Diddle <i>by ?</i></h5>\n <p>1: Hey, diddle, diddle,</p>\n <p>2: The cat and the fiddle,</p>\n <p>3: The cow {{0}} over the moon;</p>\n <p>4: The little dog {{1}},</p>\n <p>5: To see such sport,</p>\n <p>6: And the dish ran away with the {{2}}.</p>\n</div>";
11
16
  var choice = function choice(v, id) {
12
17
  return {
@@ -14,23 +19,22 @@ var choice = function choice(v, id) {
14
19
  id: id
15
20
  };
16
21
  };
22
+ var capturedDragProviderProps;
17
23
 
18
24
  // Mock DragProvider and DragDroppablePlaceholder to avoid DndContext requirement
19
25
  jest.mock('@pie-lib/drag', function () {
20
26
  return {
21
- DragProvider: function DragProvider(_ref) {
22
- var children = _ref.children,
23
- onDragStart = _ref.onDragStart,
24
- onDragEnd = _ref.onDragEnd;
27
+ DragProvider: function DragProvider(props) {
28
+ capturedDragProviderProps = props;
25
29
  // Simple wrapper that doesn't require DndContext
26
30
  return /*#__PURE__*/React.createElement("div", {
27
31
  "data-testid": "drag-provider"
28
- }, children);
32
+ }, props.children);
29
33
  },
30
- DragDroppablePlaceholder: function DragDroppablePlaceholder(_ref2) {
31
- var children = _ref2.children,
32
- disabled = _ref2.disabled,
33
- instanceId = _ref2.instanceId;
34
+ DragDroppablePlaceholder: function DragDroppablePlaceholder(_ref) {
35
+ var children = _ref.children,
36
+ disabled = _ref.disabled,
37
+ instanceId = _ref.instanceId;
34
38
  // Simple wrapper that doesn't require useDroppable
35
39
  return /*#__PURE__*/React.createElement("div", {
36
40
  "data-testid": "drag-droppable-placeholder"
@@ -42,8 +46,8 @@ jest.mock('@pie-lib/drag', function () {
42
46
  // Mock @dnd-kit/core components and hooks used by DragInTheBlank and child components
43
47
  jest.mock('@dnd-kit/core', function () {
44
48
  return {
45
- DragOverlay: function DragOverlay(_ref3) {
46
- var children = _ref3.children;
49
+ DragOverlay: function DragOverlay(_ref2) {
50
+ var children = _ref2.children;
47
51
  return /*#__PURE__*/React.createElement("div", {
48
52
  "data-testid": "drag-overlay"
49
53
  }, children);
@@ -125,5 +129,215 @@ describe('DragInTheBlank', function () {
125
129
  expect(container.firstChild).toBeInTheDocument();
126
130
  });
127
131
  });
132
+ describe('selection state', function () {
133
+ var baseProps = {
134
+ value: {},
135
+ onChange: jest.fn(),
136
+ choices: [{
137
+ id: '0',
138
+ value: 'firstChoice'
139
+ }, {
140
+ id: '1',
141
+ value: 'secondChoice'
142
+ }],
143
+ markup: 'text {{0}} more {{1}} end'
144
+ };
145
+ beforeEach(function () {
146
+ baseProps.onChange.mockClear();
147
+ });
148
+ it('mirrors an active drag into selectedItem on drag start', function () {
149
+ var instance = new _dragInTheBlank["default"](baseProps);
150
+ instance.setState = function (s) {
151
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
152
+ };
153
+ var data = {
154
+ id: '0',
155
+ choice: {
156
+ id: '0',
157
+ value: 'X'
158
+ },
159
+ fromChoice: false,
160
+ type: 'MaskBlank'
161
+ };
162
+ instance.handleDragStart({
163
+ active: {
164
+ data: {
165
+ current: data
166
+ }
167
+ }
168
+ });
169
+ expect(instance.state.selectedItem).toEqual(data);
170
+ });
171
+ it('toggleItemSelection selects, then deselects the same item', function () {
172
+ var instance = new _dragInTheBlank["default"](baseProps);
173
+ instance.setState = function (s) {
174
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
175
+ };
176
+ var data = {
177
+ choice: {
178
+ id: '0'
179
+ },
180
+ fromChoice: true,
181
+ type: 'MaskBlank'
182
+ };
183
+ instance.toggleItemSelection(data);
184
+ expect(instance.state.selectedItem).toEqual(data);
185
+ instance.toggleItemSelection(data);
186
+ expect(instance.state.selectedItem).toBeNull();
187
+ });
188
+ it('placeSelectedItem places a pool choice into a blank via commitPlacement/onChange', function () {
189
+ var instance = new _dragInTheBlank["default"](baseProps);
190
+ instance.setState = function (s) {
191
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
192
+ };
193
+ var poolChoice = {
194
+ choice: {
195
+ id: '0'
196
+ },
197
+ instanceId: 'x',
198
+ fromChoice: true,
199
+ type: 'MaskBlank'
200
+ };
201
+ instance.toggleItemSelection(poolChoice);
202
+ instance.placeSelectedItem('blank-1');
203
+ expect(baseProps.onChange).toHaveBeenCalledWith({
204
+ 'blank-1': '0'
205
+ });
206
+ expect(instance.state.selectedItem).toBeNull();
207
+ });
208
+ it('placeSelectedItem with targetId undefined removes a placed item (returns it to the board)', function () {
209
+ var props = _objectSpread(_objectSpread({}, baseProps), {}, {
210
+ value: {
211
+ 'blank-1': '0'
212
+ }
213
+ });
214
+ var instance = new _dragInTheBlank["default"](props);
215
+ instance.setState = function (s) {
216
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
217
+ };
218
+ var placedItem = {
219
+ id: 'blank-1',
220
+ choice: {
221
+ id: '0'
222
+ },
223
+ instanceId: 'x',
224
+ fromChoice: false,
225
+ type: 'MaskBlank'
226
+ };
227
+ instance.toggleItemSelection(placedItem);
228
+ instance.placeSelectedItem(undefined);
229
+ expect(props.onChange).toHaveBeenCalledWith({});
230
+ });
231
+ it('placeSelectedItem does nothing when nothing is selected', function () {
232
+ var instance = new _dragInTheBlank["default"](baseProps);
233
+ instance.setState = function (s) {
234
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
235
+ };
236
+ instance.placeSelectedItem('blank-1');
237
+ expect(baseProps.onChange).not.toHaveBeenCalled();
238
+ });
239
+ it('onItemClick and onPlacementClick are ignored for a short window right after a drag ends', function () {
240
+ var instance = new _dragInTheBlank["default"](baseProps);
241
+ instance.setState = function (s) {
242
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
243
+ };
244
+ var data = {
245
+ choice: {
246
+ id: '0'
247
+ },
248
+ fromChoice: true,
249
+ type: 'MaskBlank'
250
+ };
251
+ instance.handleDragEnd({
252
+ active: null,
253
+ over: null
254
+ });
255
+ instance.onItemClick(data);
256
+ expect(instance.state.selectedItem).toBeNull();
257
+ });
258
+ it('onPlacementClick is ignored for a short window right after a drag ends', function () {
259
+ var instance = new _dragInTheBlank["default"](baseProps);
260
+ instance.setState = function (s) {
261
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
262
+ };
263
+ var data = {
264
+ choice: {
265
+ id: '0'
266
+ },
267
+ fromChoice: true,
268
+ type: 'MaskBlank'
269
+ };
270
+ instance.handleDragEnd({
271
+ active: null,
272
+ over: null
273
+ });
274
+ // Select an item after the drag-end guard is armed, so placeSelectedItem would
275
+ // have something to place if the guard didn't short-circuit it first.
276
+ instance.toggleItemSelection(data);
277
+ instance.onPlacementClick('blank-1');
278
+ expect(baseProps.onChange).not.toHaveBeenCalled();
279
+ expect(instance.state.selectedItem).toEqual(data);
280
+ });
281
+ it("onDragEnd dropping a blank's own content back onto its own slot is a no-op", function () {
282
+ var props = _objectSpread(_objectSpread({}, baseProps), {}, {
283
+ value: {
284
+ 'blank-1': '0'
285
+ }
286
+ });
287
+ var instance = new _dragInTheBlank["default"](props);
288
+ instance.setState = function (s) {
289
+ return Object.assign(instance.state, typeof s === 'function' ? s(instance.state) : s);
290
+ };
291
+ var draggedItem = {
292
+ id: 'blank-1',
293
+ choice: {
294
+ id: '0'
295
+ },
296
+ fromChoice: false,
297
+ type: 'MaskBlank'
298
+ };
299
+ instance.handleDragEnd({
300
+ active: {
301
+ data: {
302
+ current: draggedItem
303
+ }
304
+ },
305
+ over: {
306
+ data: {
307
+ current: {
308
+ id: 'blank-1',
309
+ accepts: ['MaskBlank']
310
+ }
311
+ }
312
+ }
313
+ });
314
+ expect(props.onChange).not.toHaveBeenCalled();
315
+ });
316
+ });
317
+ describe('DragProvider wiring', function () {
318
+ it('passes the Tab/Shift+Tab coordinate getter and keyboard codes to DragProvider', function () {
319
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_dragInTheBlank["default"], {
320
+ value: {},
321
+ onChange: jest.fn(),
322
+ choices: [],
323
+ markup: "text {{0}} end"
324
+ }));
325
+ expect(capturedDragProviderProps.keyboardCoordinateGetter).toBe(_keyboardCoordinates.closestDroppableKeyboardCoordinates);
326
+ expect(capturedDragProviderProps.keyboardCodes).toEqual({
327
+ start: ['Space', 'Enter'],
328
+ cancel: ['Escape'],
329
+ end: ['Space', 'Enter']
330
+ });
331
+ });
332
+ it('passes onDragCancel to DragProvider', function () {
333
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_dragInTheBlank["default"], {
334
+ value: {},
335
+ onChange: jest.fn(),
336
+ choices: [],
337
+ markup: "text {{0}} end"
338
+ }));
339
+ expect((0, _typeof2["default"])(capturedDragProviderProps.onDragCancel)).toBe('function');
340
+ });
341
+ });
128
342
  });
129
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfZHJhZ0luVGhlQmxhbmsiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJtYXJrdXAiLCJjaG9pY2UiLCJ2IiwiaWQiLCJ2YWx1ZSIsImplc3QiLCJtb2NrIiwiRHJhZ1Byb3ZpZGVyIiwiX3JlZiIsImNoaWxkcmVuIiwib25EcmFnU3RhcnQiLCJvbkRyYWdFbmQiLCJjcmVhdGVFbGVtZW50IiwiRHJhZ0Ryb3BwYWJsZVBsYWNlaG9sZGVyIiwiX3JlZjIiLCJkaXNhYmxlZCIsImluc3RhbmNlSWQiLCJEcmFnT3ZlcmxheSIsIl9yZWYzIiwiY2xvc2VzdENlbnRlciIsImZuIiwidXNlRHJhZ2dhYmxlIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsInNldE5vZGVSZWYiLCJ0cmFuc2Zvcm0iLCJpc0RyYWdnaW5nIiwidXNlRHJvcHBhYmxlIiwiaXNPdmVyIiwiYWN0aXZlIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJkZXNjcmliZSIsImRlZmF1bHRQcm9wcyIsImZlZWRiYWNrIiwiY2hvaWNlcyIsInVuZGVmaW5lZCIsIml0IiwiX3JlbmRlciIsInJlbmRlciIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsIl9yZW5kZXIyIiwiX2V4dGVuZHMyIiwiX3JlbmRlcjMiLCJjb3JyZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9kcmFnLWluLXRoZS1ibGFuay50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgRHJhZ0luVGhlQmxhbmsgZnJvbSAnLi4vZHJhZy1pbi10aGUtYmxhbmsnO1xuXG5jb25zdCBtYXJrdXAgPSBgPGRpdj5cbiAgPGltZyBzcmM9XCJodHRwczovL2ltYWdlLnNodXR0ZXJzdG9jay5jb20vaW1hZ2UtdmVjdG9yL2Nvdy1qdW1wZWQtb3Zlci1tb29uLXRyYWRpdGlvbmFsLTI2MG53LTExNTI4OTkzMzAuanBnXCI+PC9pbWc+XG4gICA8aDU+SGV5IERpZGRsZSBEaWRkbGUgPGk+YnkgPzwvaT48L2g1PlxuIDxwPjE6IEhleSwgZGlkZGxlLCBkaWRkbGUsPC9wPlxuIDxwPjI6IFRoZSBjYXQgYW5kIHRoZSBmaWRkbGUsPC9wPlxuIDxwPjM6IFRoZSBjb3cge3swfX0gb3ZlciB0aGUgbW9vbjs8L3A+XG4gPHA+NDogVGhlIGxpdHRsZSBkb2cge3sxfX0sPC9wPlxuIDxwPjU6IFRvIHNlZSBzdWNoIHNwb3J0LDwvcD5cbiA8cD42OiBBbmQgdGhlIGRpc2ggcmFuIGF3YXkgd2l0aCB0aGUge3syfX0uPC9wPlxuPC9kaXY+YDtcbmNvbnN0IGNob2ljZSA9ICh2LCBpZCkgPT4gKHsgdmFsdWU6IHYsIGlkIH0pO1xuXG4vLyBNb2NrIERyYWdQcm92aWRlciBhbmQgRHJhZ0Ryb3BwYWJsZVBsYWNlaG9sZGVyIHRvIGF2b2lkIERuZENvbnRleHQgcmVxdWlyZW1lbnRcbmplc3QubW9jaygnQHBpZS1saWIvZHJhZycsICgpID0+ICh7XG4gIERyYWdQcm92aWRlcjogKHsgY2hpbGRyZW4sIG9uRHJhZ1N0YXJ0LCBvbkRyYWdFbmQgfSkgPT4ge1xuICAgIC8vIFNpbXBsZSB3cmFwcGVyIHRoYXQgZG9lc24ndCByZXF1aXJlIERuZENvbnRleHRcbiAgICByZXR1cm4gPGRpdiBkYXRhLXRlc3RpZD1cImRyYWctcHJvdmlkZXJcIj57Y2hpbGRyZW59PC9kaXY+O1xuICB9LFxuICBEcmFnRHJvcHBhYmxlUGxhY2Vob2xkZXI6ICh7IGNoaWxkcmVuLCBkaXNhYmxlZCwgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgLy8gU2ltcGxlIHdyYXBwZXIgdGhhdCBkb2Vzbid0IHJlcXVpcmUgdXNlRHJvcHBhYmxlXG4gICAgcmV0dXJuIDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnLWRyb3BwYWJsZS1wbGFjZWhvbGRlclwiPntjaGlsZHJlbn08L2Rpdj47XG4gIH0sXG59KSk7XG5cbi8vIE1vY2sgQGRuZC1raXQvY29yZSBjb21wb25lbnRzIGFuZCBob29rcyB1c2VkIGJ5IERyYWdJblRoZUJsYW5rIGFuZCBjaGlsZCBjb21wb25lbnRzXG5qZXN0Lm1vY2soJ0BkbmQta2l0L2NvcmUnLCAoKSA9PiAoe1xuICBEcmFnT3ZlcmxheTogKHsgY2hpbGRyZW4gfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImRyYWctb3ZlcmxheVwiPntjaGlsZHJlbn08L2Rpdj4sXG4gIGNsb3Nlc3RDZW50ZXI6IGplc3QuZm4oKSxcbiAgdXNlRHJhZ2dhYmxlOiBqZXN0LmZuKCgpID0+ICh7XG4gICAgYXR0cmlidXRlczoge30sXG4gICAgbGlzdGVuZXJzOiB7fSxcbiAgICBzZXROb2RlUmVmOiBqZXN0LmZuKCksXG4gICAgdHJhbnNmb3JtOiBudWxsLFxuICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICB9KSksXG4gIHVzZURyb3BwYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIHNldE5vZGVSZWY6IGplc3QuZm4oKSxcbiAgICBpc092ZXI6IGZhbHNlLFxuICAgIGFjdGl2ZTogbnVsbCxcbiAgfSkpLFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BkbmQta2l0L3V0aWxpdGllcycsICgpID0+ICh7XG4gIENTUzoge1xuICAgIFRyYW5zbGF0ZToge1xuICAgICAgdG9TdHJpbmc6IGplc3QuZm4oKCkgPT4gJ3RyYW5zbGF0ZTNkKDAsIDAsIDApJyksXG4gICAgfSxcbiAgfSxcbn0pKTtcblxuZGVzY3JpYmUoJ0RyYWdJblRoZUJsYW5rJywgKCkgPT4ge1xuICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGZlZWRiYWNrOiB7fSxcbiAgICBtYXJrdXAsXG4gICAgY2hvaWNlczogW1xuICAgICAgY2hvaWNlKCdKdW1wZWQnLCAnMCcpLFxuICAgICAgY2hvaWNlKCdMYXVnaGVkJywgJzEnKSxcbiAgICAgIGNob2ljZSgnU3Bvb24nLCAnMicpLFxuICAgICAgY2hvaWNlKCdGb3JrJywgJzMnKSxcbiAgICAgIGNob2ljZSgnQnVtcGVkJywgJzQnKSxcbiAgICAgIGNob2ljZSgnU21pbGVkJywgJzUnKSxcbiAgICBdLFxuXG4gICAgdmFsdWU6IHtcbiAgICAgIDA6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXInLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggZGVmYXVsdCBwcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPERyYWdJblRoZUJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIC8vIENoZWNrIHRoYXQgbWFya3VwIGNvbnRlbnQgaXMgcmVuZGVyZWRcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KC9IZXkgRGlkZGxlIERpZGRsZS8pKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoL0hleSwgZGlkZGxlLCBkaWRkbGUsLykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBkaXNhYmxlZCBwcm9wIGFzIHRydWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxEcmFnSW5UaGVCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkaXNhYmxlZD17dHJ1ZX0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggZmVlZGJhY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8RHJhZ0luVGhlQmxhbmtcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxuICAgICAgICAgIGZlZWRiYWNrPXt7XG4gICAgICAgICAgICAwOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnSnVtcGVkJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogJ0p1bXBlZCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMToge1xuICAgICAgICAgICAgICB2YWx1ZTogJ0xhdWdoZWQnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiAnTGF1Z2hlZCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMjoge1xuICAgICAgICAgICAgICB2YWx1ZTogJ1Nwb29uJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogJ1Nwb29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgLz4sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUFrRCxTQUFBRCx3QkFBQUssQ0FBQSxFQUFB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
343
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfZHJhZ0luVGhlQmxhbmsiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2tleWJvYXJkQ29vcmRpbmF0ZXMiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIm1hcmt1cCIsImNob2ljZSIsInYiLCJpZCIsInZhbHVlIiwiY2FwdHVyZWREcmFnUHJvdmlkZXJQcm9wcyIsImplc3QiLCJtb2NrIiwiRHJhZ1Byb3ZpZGVyIiwicHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiY2hpbGRyZW4iLCJEcmFnRHJvcHBhYmxlUGxhY2Vob2xkZXIiLCJfcmVmIiwiZGlzYWJsZWQiLCJpbnN0YW5jZUlkIiwiRHJhZ092ZXJsYXkiLCJfcmVmMiIsImNsb3Nlc3RDZW50ZXIiLCJmbiIsInVzZURyYWdnYWJsZSIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwidHJhbnNmb3JtIiwiaXNEcmFnZ2luZyIsInVzZURyb3BwYWJsZSIsImlzT3ZlciIsImFjdGl2ZSIsIkNTUyIsIlRyYW5zbGF0ZSIsInRvU3RyaW5nIiwiZGVzY3JpYmUiLCJkZWZhdWx0UHJvcHMiLCJmZWVkYmFjayIsImNob2ljZXMiLCJ1bmRlZmluZWQiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJzY3JlZW4iLCJnZXRCeVRleHQiLCJfcmVuZGVyMiIsIl9leHRlbmRzMiIsIl9yZW5kZXIzIiwiY29ycmVjdCIsImJhc2VQcm9wcyIsIm9uQ2hhbmdlIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsImluc3RhbmNlIiwiRHJhZ0luVGhlQmxhbmsiLCJzZXRTdGF0ZSIsInMiLCJhc3NpZ24iLCJzdGF0ZSIsImRhdGEiLCJmcm9tQ2hvaWNlIiwidHlwZSIsImhhbmRsZURyYWdTdGFydCIsImN1cnJlbnQiLCJzZWxlY3RlZEl0ZW0iLCJ0b0VxdWFsIiwidG9nZ2xlSXRlbVNlbGVjdGlvbiIsInRvQmVOdWxsIiwicG9vbENob2ljZSIsInBsYWNlU2VsZWN0ZWRJdGVtIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJwbGFjZWRJdGVtIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCIsImhhbmRsZURyYWdFbmQiLCJvdmVyIiwib25JdGVtQ2xpY2siLCJvblBsYWNlbWVudENsaWNrIiwiZHJhZ2dlZEl0ZW0iLCJhY2NlcHRzIiwia2V5Ym9hcmRDb29yZGluYXRlR2V0dGVyIiwidG9CZSIsImNsb3Nlc3REcm9wcGFibGVLZXlib2FyZENvb3JkaW5hdGVzIiwia2V5Ym9hcmRDb2RlcyIsInN0YXJ0IiwiY2FuY2VsIiwiZW5kIiwiX3R5cGVvZjIiLCJvbkRyYWdDYW5jZWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2RyYWctaW4tdGhlLWJsYW5rLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBEcmFnSW5UaGVCbGFuayBmcm9tICcuLi9kcmFnLWluLXRoZS1ibGFuayc7XG5pbXBvcnQgeyBjbG9zZXN0RHJvcHBhYmxlS2V5Ym9hcmRDb29yZGluYXRlcyB9IGZyb20gJy4uL2tleWJvYXJkLWNvb3JkaW5hdGVzJztcblxuY29uc3QgbWFya3VwID0gYDxkaXY+XG4gIDxpbWcgc3JjPVwiaHR0cHM6Ly9pbWFnZS5zaHV0dGVyc3RvY2suY29tL2ltYWdlLXZlY3Rvci9jb3ctanVtcGVkLW92ZXItbW9vbi10cmFkaXRpb25hbC0yNjBudy0xMTUyODk5MzMwLmpwZ1wiPjwvaW1nPlxuICAgPGg1PkhleSBEaWRkbGUgRGlkZGxlIDxpPmJ5ID88L2k+PC9oNT5cbiA8cD4xOiBIZXksIGRpZGRsZSwgZGlkZGxlLDwvcD5cbiA8cD4yOiBUaGUgY2F0IGFuZCB0aGUgZmlkZGxlLDwvcD5cbiA8cD4zOiBUaGUgY293IHt7MH19IG92ZXIgdGhlIG1vb247PC9wPlxuIDxwPjQ6IFRoZSBsaXR0bGUgZG9nIHt7MX19LDwvcD5cbiA8cD41OiBUbyBzZWUgc3VjaCBzcG9ydCw8L3A+XG4gPHA+NjogQW5kIHRoZSBkaXNoIHJhbiBhd2F5IHdpdGggdGhlIHt7Mn19LjwvcD5cbjwvZGl2PmA7XG5jb25zdCBjaG9pY2UgPSAodiwgaWQpID0+ICh7IHZhbHVlOiB2LCBpZCB9KTtcblxubGV0IGNhcHR1cmVkRHJhZ1Byb3ZpZGVyUHJvcHM7XG5cbi8vIE1vY2sgRHJhZ1Byb3ZpZGVyIGFuZCBEcmFnRHJvcHBhYmxlUGxhY2Vob2xkZXIgdG8gYXZvaWQgRG5kQ29udGV4dCByZXF1aXJlbWVudFxuamVzdC5tb2NrKCdAcGllLWxpYi9kcmFnJywgKCkgPT4gKHtcbiAgRHJhZ1Byb3ZpZGVyOiAocHJvcHMpID0+IHtcbiAgICBjYXB0dXJlZERyYWdQcm92aWRlclByb3BzID0gcHJvcHM7XG4gICAgLy8gU2ltcGxlIHdyYXBwZXIgdGhhdCBkb2Vzbid0IHJlcXVpcmUgRG5kQ29udGV4dFxuICAgIHJldHVybiA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZy1wcm92aWRlclwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj47XG4gIH0sXG4gIERyYWdEcm9wcGFibGVQbGFjZWhvbGRlcjogKHsgY2hpbGRyZW4sIGRpc2FibGVkLCBpbnN0YW5jZUlkIH0pID0+IHtcbiAgICAvLyBTaW1wbGUgd3JhcHBlciB0aGF0IGRvZXNuJ3QgcmVxdWlyZSB1c2VEcm9wcGFibGVcbiAgICByZXR1cm4gPGRpdiBkYXRhLXRlc3RpZD1cImRyYWctZHJvcHBhYmxlLXBsYWNlaG9sZGVyXCI+e2NoaWxkcmVufTwvZGl2PjtcbiAgfSxcbn0pKTtcblxuLy8gTW9jayBAZG5kLWtpdC9jb3JlIGNvbXBvbmVudHMgYW5kIGhvb2tzIHVzZWQgYnkgRHJhZ0luVGhlQmxhbmsgYW5kIGNoaWxkIGNvbXBvbmVudHNcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIERyYWdPdmVybGF5OiAoeyBjaGlsZHJlbiB9KSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZy1vdmVybGF5XCI+e2NoaWxkcmVufTwvZGl2PixcbiAgY2xvc2VzdENlbnRlcjogamVzdC5mbigpLFxuICB1c2VEcmFnZ2FibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBsaXN0ZW5lcnM6IHt9LFxuICAgIHNldE5vZGVSZWY6IGplc3QuZm4oKSxcbiAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gIH0pKSxcbiAgdXNlRHJvcHBhYmxlOiBqZXN0LmZuKCgpID0+ICh7XG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIGlzT3ZlcjogZmFsc2UsXG4gICAgYWN0aXZlOiBudWxsLFxuICB9KSksXG59KSk7XG5cbmplc3QubW9jaygnQGRuZC1raXQvdXRpbGl0aWVzJywgKCkgPT4gKHtcbiAgQ1NTOiB7XG4gICAgVHJhbnNsYXRlOiB7XG4gICAgICB0b1N0cmluZzogamVzdC5mbigoKSA9PiAndHJhbnNsYXRlM2QoMCwgMCwgMCknKSxcbiAgICB9LFxuICB9LFxufSkpO1xuXG5kZXNjcmliZSgnRHJhZ0luVGhlQmxhbmsnLCAoKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgZmVlZGJhY2s6IHt9LFxuICAgIG1hcmt1cCxcbiAgICBjaG9pY2VzOiBbXG4gICAgICBjaG9pY2UoJ0p1bXBlZCcsICcwJyksXG4gICAgICBjaG9pY2UoJ0xhdWdoZWQnLCAnMScpLFxuICAgICAgY2hvaWNlKCdTcG9vbicsICcyJyksXG4gICAgICBjaG9pY2UoJ0ZvcmsnLCAnMycpLFxuICAgICAgY2hvaWNlKCdCdW1wZWQnLCAnNCcpLFxuICAgICAgY2hvaWNlKCdTbWlsZWQnLCAnNScpLFxuICAgIF0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgMDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8RHJhZ0luVGhlQmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgLy8gQ2hlY2sgdGhhdCBtYXJrdXAgY29udGVudCBpcyByZW5kZXJlZFxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoL0hleSBEaWRkbGUgRGlkZGxlLykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgvSGV5LCBkaWRkbGUsIGRpZGRsZSwvKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGNvcnJlY3RseSB3aXRoIGRpc2FibGVkIHByb3AgYXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPERyYWdJblRoZUJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVkPXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBmZWVkYmFjaycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxEcmFnSW5UaGVCbGFua1xuICAgICAgICAgIHsuLi5kZWZhdWx0UHJvcHN9XG4gICAgICAgICAgZmVlZGJhY2s9e3tcbiAgICAgICAgICAgIDA6IHtcbiAgICAgICAgICAgICAgdmFsdWU6ICdKdW1wZWQnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiAnSnVtcGVkJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnTGF1Z2hlZCcsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6ICdMYXVnaGVkJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAyOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnU3Bvb24nLFxuICAgICAgICAgICAgICBjb3JyZWN0OiAnU3Bvb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPixcbiAgICAgICk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZWxlY3Rpb24gc3RhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgdmFsdWU6IHt9LFxuICAgICAgb25DaGFuZ2U6IGplc3QuZm4oKSxcbiAgICAgIGNob2ljZXM6IFt7IGlkOiAnMCcsIHZhbHVlOiAnZmlyc3RDaG9pY2UnIH0sIHsgaWQ6ICcxJywgdmFsdWU6ICdzZWNvbmRDaG9pY2UnIH1dLFxuICAgICAgbWFya3VwOiAndGV4dCB7ezB9fSBtb3JlIHt7MX19IGVuZCcsXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgYmFzZVByb3BzLm9uQ2hhbmdlLm1vY2tDbGVhcigpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21pcnJvcnMgYW4gYWN0aXZlIGRyYWcgaW50byBzZWxlY3RlZEl0ZW0gb24gZHJhZyBzdGFydCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyYWdJblRoZUJsYW5rKGJhc2VQcm9wcyk7XG4gICAgICBpbnN0YW5jZS5zZXRTdGF0ZSA9IChzKSA9PiBPYmplY3QuYXNzaWduKGluc3RhbmNlLnN0YXRlLCB0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJyA/IHMoaW5zdGFuY2Uuc3RhdGUpIDogcyk7XG4gICAgICBjb25zdCBkYXRhID0geyBpZDogJzAnLCBjaG9pY2U6IHsgaWQ6ICcwJywgdmFsdWU6ICdYJyB9LCBmcm9tQ2hvaWNlOiBmYWxzZSwgdHlwZTogJ01hc2tCbGFuaycgfTtcblxuICAgICAgaW5zdGFuY2UuaGFuZGxlRHJhZ1N0YXJ0KHsgYWN0aXZlOiB7IGRhdGE6IHsgY3VycmVudDogZGF0YSB9IH0gfSk7XG5cbiAgICAgIGV4cGVjdChpbnN0YW5jZS5zdGF0ZS5zZWxlY3RlZEl0ZW0pLnRvRXF1YWwoZGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9nZ2xlSXRlbVNlbGVjdGlvbiBzZWxlY3RzLCB0aGVuIGRlc2VsZWN0cyB0aGUgc2FtZSBpdGVtJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRHJhZ0luVGhlQmxhbmsoYmFzZVByb3BzKTtcbiAgICAgIGluc3RhbmNlLnNldFN0YXRlID0gKHMpID0+IE9iamVjdC5hc3NpZ24oaW5zdGFuY2Uuc3RhdGUsIHR5cGVvZiBzID09PSAnZnVuY3Rpb24nID8gcyhpbnN0YW5jZS5zdGF0ZSkgOiBzKTtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IGNob2ljZTogeyBpZDogJzAnIH0sIGZyb21DaG9pY2U6IHRydWUsIHR5cGU6ICdNYXNrQmxhbmsnIH07XG5cbiAgICAgIGluc3RhbmNlLnRvZ2dsZUl0ZW1TZWxlY3Rpb24oZGF0YSk7XG4gICAgICBleHBlY3QoaW5zdGFuY2Uuc3RhdGUuc2VsZWN0ZWRJdGVtKS50b0VxdWFsKGRhdGEpO1xuXG4gICAgICBpbnN0YW5jZS50b2dnbGVJdGVtU2VsZWN0aW9uKGRhdGEpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLnN0YXRlLnNlbGVjdGVkSXRlbSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwbGFjZVNlbGVjdGVkSXRlbSBwbGFjZXMgYSBwb29sIGNob2ljZSBpbnRvIGEgYmxhbmsgdmlhIGNvbW1pdFBsYWNlbWVudC9vbkNoYW5nZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyYWdJblRoZUJsYW5rKGJhc2VQcm9wcyk7XG4gICAgICBpbnN0YW5jZS5zZXRTdGF0ZSA9IChzKSA9PiBPYmplY3QuYXNzaWduKGluc3RhbmNlLnN0YXRlLCB0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJyA/IHMoaW5zdGFuY2Uuc3RhdGUpIDogcyk7XG4gICAgICBjb25zdCBwb29sQ2hvaWNlID0geyBjaG9pY2U6IHsgaWQ6ICcwJyB9LCBpbnN0YW5jZUlkOiAneCcsIGZyb21DaG9pY2U6IHRydWUsIHR5cGU6ICdNYXNrQmxhbmsnIH07XG5cbiAgICAgIGluc3RhbmNlLnRvZ2dsZUl0ZW1TZWxlY3Rpb24ocG9vbENob2ljZSk7XG4gICAgICBpbnN0YW5jZS5wbGFjZVNlbGVjdGVkSXRlbSgnYmxhbmstMScpO1xuXG4gICAgICBleHBlY3QoYmFzZVByb3BzLm9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7ICdibGFuay0xJzogJzAnIH0pO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLnN0YXRlLnNlbGVjdGVkSXRlbSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwbGFjZVNlbGVjdGVkSXRlbSB3aXRoIHRhcmdldElkIHVuZGVmaW5lZCByZW1vdmVzIGEgcGxhY2VkIGl0ZW0gKHJldHVybnMgaXQgdG8gdGhlIGJvYXJkKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0geyAuLi5iYXNlUHJvcHMsIHZhbHVlOiB7ICdibGFuay0xJzogJzAnIH0gfTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyYWdJblRoZUJsYW5rKHByb3BzKTtcbiAgICAgIGluc3RhbmNlLnNldFN0YXRlID0gKHMpID0+IE9iamVjdC5hc3NpZ24oaW5zdGFuY2Uuc3RhdGUsIHR5cGVvZiBzID09PSAnZnVuY3Rpb24nID8gcyhpbnN0YW5jZS5zdGF0ZSkgOiBzKTtcbiAgICAgIGNvbnN0IHBsYWNlZEl0ZW0gPSB7IGlkOiAnYmxhbmstMScsIGNob2ljZTogeyBpZDogJzAnIH0sIGluc3RhbmNlSWQ6ICd4JywgZnJvbUNob2ljZTogZmFsc2UsIHR5cGU6ICdNYXNrQmxhbmsnIH07XG5cbiAgICAgIGluc3RhbmNlLnRvZ2dsZUl0ZW1TZWxlY3Rpb24ocGxhY2VkSXRlbSk7XG4gICAgICBpbnN0YW5jZS5wbGFjZVNlbGVjdGVkSXRlbSh1bmRlZmluZWQpO1xuXG4gICAgICBleHBlY3QocHJvcHMub25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdwbGFjZVNlbGVjdGVkSXRlbSBkb2VzIG5vdGhpbmcgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRHJhZ0luVGhlQmxhbmsoYmFzZVByb3BzKTtcbiAgICAgIGluc3RhbmNlLnNldFN0YXRlID0gKHMpID0+IE9iamVjdC5hc3NpZ24oaW5zdGFuY2Uuc3RhdGUsIHR5cGVvZiBzID09PSAnZnVuY3Rpb24nID8gcyhpbnN0YW5jZS5zdGF0ZSkgOiBzKTtcblxuICAgICAgaW5zdGFuY2UucGxhY2VTZWxlY3RlZEl0ZW0oJ2JsYW5rLTEnKTtcblxuICAgICAgZXhwZWN0KGJhc2VQcm9wcy5vbkNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdvbkl0ZW1DbGljayBhbmQgb25QbGFjZW1lbnRDbGljayBhcmUgaWdub3JlZCBmb3IgYSBzaG9ydCB3aW5kb3cgcmlnaHQgYWZ0ZXIgYSBkcmFnIGVuZHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEcmFnSW5UaGVCbGFuayhiYXNlUHJvcHMpO1xuICAgICAgaW5zdGFuY2Uuc2V0U3RhdGUgPSAocykgPT4gT2JqZWN0LmFzc2lnbihpbnN0YW5jZS5zdGF0ZSwgdHlwZW9mIHMgPT09ICdmdW5jdGlvbicgPyBzKGluc3RhbmNlLnN0YXRlKSA6IHMpO1xuICAgICAgY29uc3QgZGF0YSA9IHsgY2hvaWNlOiB7IGlkOiAnMCcgfSwgZnJvbUNob2ljZTogdHJ1ZSwgdHlwZTogJ01hc2tCbGFuaycgfTtcblxuICAgICAgaW5zdGFuY2UuaGFuZGxlRHJhZ0VuZCh7IGFjdGl2ZTogbnVsbCwgb3ZlcjogbnVsbCB9KTtcbiAgICAgIGluc3RhbmNlLm9uSXRlbUNsaWNrKGRhdGEpO1xuXG4gICAgICBleHBlY3QoaW5zdGFuY2Uuc3RhdGUuc2VsZWN0ZWRJdGVtKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29uUGxhY2VtZW50Q2xpY2sgaXMgaWdub3JlZCBmb3IgYSBzaG9ydCB3aW5kb3cgcmlnaHQgYWZ0ZXIgYSBkcmFnIGVuZHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEcmFnSW5UaGVCbGFuayhiYXNlUHJvcHMpO1xuICAgICAgaW5zdGFuY2Uuc2V0U3RhdGUgPSAocykgPT4gT2JqZWN0LmFzc2lnbihpbnN0YW5jZS5zdGF0ZSwgdHlwZW9mIHMgPT09ICdmdW5jdGlvbicgPyBzKGluc3RhbmNlLnN0YXRlKSA6IHMpO1xuICAgICAgY29uc3QgZGF0YSA9IHsgY2hvaWNlOiB7IGlkOiAnMCcgfSwgZnJvbUNob2ljZTogdHJ1ZSwgdHlwZTogJ01hc2tCbGFuaycgfTtcblxuICAgICAgaW5zdGFuY2UuaGFuZGxlRHJhZ0VuZCh7IGFjdGl2ZTogbnVsbCwgb3ZlcjogbnVsbCB9KTtcbiAgICAgIC8vIFNlbGVjdCBhbiBpdGVtIGFmdGVyIHRoZSBkcmFnLWVuZCBndWFyZCBpcyBhcm1lZCwgc28gcGxhY2VTZWxlY3RlZEl0ZW0gd291bGRcbiAgICAgIC8vIGhhdmUgc29tZXRoaW5nIHRvIHBsYWNlIGlmIHRoZSBndWFyZCBkaWRuJ3Qgc2hvcnQtY2lyY3VpdCBpdCBmaXJzdC5cbiAgICAgIGluc3RhbmNlLnRvZ2dsZUl0ZW1TZWxlY3Rpb24oZGF0YSk7XG4gICAgICBpbnN0YW5jZS5vblBsYWNlbWVudENsaWNrKCdibGFuay0xJyk7XG5cbiAgICAgIGV4cGVjdChiYXNlUHJvcHMub25DaGFuZ2UpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBleHBlY3QoaW5zdGFuY2Uuc3RhdGUuc2VsZWN0ZWRJdGVtKS50b0VxdWFsKGRhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJvbkRyYWdFbmQgZHJvcHBpbmcgYSBibGFuaydzIG93biBjb250ZW50IGJhY2sgb250byBpdHMgb3duIHNsb3QgaXMgYSBuby1vcFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IHsgLi4uYmFzZVByb3BzLCB2YWx1ZTogeyAnYmxhbmstMSc6ICcwJyB9IH07XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEcmFnSW5UaGVCbGFuayhwcm9wcyk7XG4gICAgICBpbnN0YW5jZS5zZXRTdGF0ZSA9IChzKSA9PiBPYmplY3QuYXNzaWduKGluc3RhbmNlLnN0YXRlLCB0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJyA/IHMoaW5zdGFuY2Uuc3RhdGUpIDogcyk7XG4gICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHsgaWQ6ICdibGFuay0xJywgY2hvaWNlOiB7IGlkOiAnMCcgfSwgZnJvbUNob2ljZTogZmFsc2UsIHR5cGU6ICdNYXNrQmxhbmsnIH07XG5cbiAgICAgIGluc3RhbmNlLmhhbmRsZURyYWdFbmQoe1xuICAgICAgICBhY3RpdmU6IHsgZGF0YTogeyBjdXJyZW50OiBkcmFnZ2VkSXRlbSB9IH0sXG4gICAgICAgIG92ZXI6IHsgZGF0YTogeyBjdXJyZW50OiB7IGlkOiAnYmxhbmstMScsIGFjY2VwdHM6IFsnTWFza0JsYW5rJ10gfSB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHByb3BzLm9uQ2hhbmdlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRHJhZ1Byb3ZpZGVyIHdpcmluZycsICgpID0+IHtcbiAgICBpdCgncGFzc2VzIHRoZSBUYWIvU2hpZnQrVGFiIGNvb3JkaW5hdGUgZ2V0dGVyIGFuZCBrZXlib2FyZCBjb2RlcyB0byBEcmFnUHJvdmlkZXInLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxEcmFnSW5UaGVCbGFua1xuICAgICAgICAgIHZhbHVlPXt7fX1cbiAgICAgICAgICBvbkNoYW5nZT17amVzdC5mbigpfVxuICAgICAgICAgIGNob2ljZXM9e1tdfVxuICAgICAgICAgIG1hcmt1cD1cInRleHQge3swfX0gZW5kXCJcbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QoY2FwdHVyZWREcmFnUHJvdmlkZXJQcm9wcy5rZXlib2FyZENvb3JkaW5hdGVHZXR0ZXIpLnRvQmUoY2xvc2VzdERyb3BwYWJsZUtleWJvYXJkQ29vcmRpbmF0ZXMpO1xuICAgICAgZXhwZWN0KGNhcHR1cmVkRHJhZ1Byb3ZpZGVyUHJvcHMua2V5Ym9hcmRDb2RlcykudG9FcXVhbCh7XG4gICAgICAgIHN0YXJ0OiBbJ1NwYWNlJywgJ0VudGVyJ10sXG4gICAgICAgIGNhbmNlbDogWydFc2NhcGUnXSxcbiAgICAgICAgZW5kOiBbJ1NwYWNlJywgJ0VudGVyJ10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgb25EcmFnQ2FuY2VsIHRvIERyYWdQcm92aWRlcicsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPERyYWdJblRoZUJsYW5rXG4gICAgICAgICAgdmFsdWU9e3t9fVxuICAgICAgICAgIG9uQ2hhbmdlPXtqZXN0LmZuKCl9XG4gICAgICAgICAgY2hvaWNlcz17W119XG4gICAgICAgICAgbWFya3VwPVwidGV4dCB7ezB9fSBlbmRcIlxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdCh0eXBlb2YgY2FwdHVyZWREcmFnUHJvdmlkZXJQcm9wcy5vbkRyYWdDYW5jZWwpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxlQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxvQkFBQSxHQUFBSixPQUFBO0FBQThFLFNBQUFELHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUix1QkFBQSxZQUFBQSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxRQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsY0FBQU0sRUFBQSxJQUFBZCxDQUFBLGdCQUFBYyxFQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxFQUFBLE9BQUFQLENBQUEsSUFBQUQsQ0FBQSxHQUFBVyxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbkIsQ0FBQSxFQUFBYyxFQUFBLE9BQUFQLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFNLEVBQUEsRUFBQVAsQ0FBQSxJQUFBQyxDQUFBLENBQUFNLEVBQUEsSUFBQWQsQ0FBQSxDQUFBYyxFQUFBLFdBQUFOLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQW1CLFFBQUFwQixDQUFBLEVBQUFHLENBQUEsUUFBQUYsQ0FBQSxHQUFBZ0IsTUFBQSxDQUFBSSxJQUFBLENBQUFyQixDQUFBLE9BQUFpQixNQUFBLENBQUFLLHFCQUFBLFFBQUFoQixDQUFBLEdBQUFXLE1BQUEsQ0FBQUsscUJBQUEsQ0FBQXRCLENBQUEsR0FBQUcsQ0FBQSxLQUFBRyxDQUFBLEdBQUFBLENBQUEsQ0FBQWlCLE1BQUEsV0FBQXBCLENBQUEsV0FBQWMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbkIsQ0FBQSxFQUFBRyxDQUFBLEVBQUFxQixVQUFBLE9BQUF2QixDQUFBLENBQUF3QixJQUFBLENBQUFDLEtBQUEsQ0FBQXpCLENBQUEsRUFBQUssQ0FBQSxZQUFBTCxDQUFBO0FBQUEsU0FBQTBCLGNBQUEzQixDQUFBLGFBQUFHLENBQUEsTUFBQUEsQ0FBQSxHQUFBeUIsU0FBQSxDQUFBQyxNQUFBLEVBQUExQixDQUFBLFVBQUFGLENBQUEsV0FBQTJCLFNBQUEsQ0FBQXpCLENBQUEsSUFBQXlCLFNBQUEsQ0FBQXpCLENBQUEsUUFBQUEsQ0FBQSxPQUFBaUIsT0FBQSxDQUFBSCxNQUFBLENBQUFoQixDQUFBLE9BQUE2QixPQUFBLFdBQUEzQixDQUFBLFFBQUE0QixnQkFBQSxhQUFBL0IsQ0FBQSxFQUFBRyxDQUFBLEVBQUFGLENBQUEsQ0FBQUUsQ0FBQSxTQUFBYyxNQUFBLENBQUFlLHlCQUFBLEdBQUFmLE1BQUEsQ0FBQWdCLGdCQUFBLENBQUFqQyxDQUFBLEVBQUFpQixNQUFBLENBQUFlLHlCQUFBLENBQUEvQixDQUFBLEtBQUFtQixPQUFBLENBQUFILE1BQUEsQ0FBQWhCLENBQUEsR0FBQTZCLE9BQUEsV0FBQTNCLENBQUEsSUFBQWMsTUFBQSxDQUFBQyxjQUFBLENBQUFsQixDQUFBLEVBQUFHLENBQUEsRUFBQWMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBRSxDQUFBLGlCQUFBSCxDQUFBO0FBRTlFLElBQU1rQyxNQUFNLHVaQVNMO0FBQ1AsSUFBTUMsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUlDLENBQUMsRUFBRUMsRUFBRTtFQUFBLE9BQU07SUFBRUMsS0FBSyxFQUFFRixDQUFDO0lBQUVDLEVBQUUsRUFBRkE7RUFBRyxDQUFDO0FBQUEsQ0FBQztBQUU1QyxJQUFJRSx5QkFBeUI7O0FBRTdCO0FBQ0FDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLGVBQWUsRUFBRTtFQUFBLE9BQU87SUFDaENDLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFHQyxLQUFLLEVBQUs7TUFDdkJKLHlCQUF5QixHQUFHSSxLQUFLO01BQ2pDO01BQ0Esb0JBQU9sRCxLQUFBLENBQUFtRCxhQUFBO1FBQUssZUFBWTtNQUFlLEdBQUVELEtBQUssQ0FBQ0UsUUFBYyxDQUFDO0lBQ2hFLENBQUM7SUFDREMsd0JBQXdCLEVBQUUsU0FBMUJBLHdCQUF3QkEsQ0FBQUMsSUFBQSxFQUEwQztNQUFBLElBQXJDRixRQUFRLEdBQUFFLElBQUEsQ0FBUkYsUUFBUTtRQUFFRyxRQUFRLEdBQUFELElBQUEsQ0FBUkMsUUFBUTtRQUFFQyxVQUFVLEdBQUFGLElBQUEsQ0FBVkUsVUFBVTtNQUN6RDtNQUNBLG9CQUFPeEQsS0FBQSxDQUFBbUQsYUFBQTtRQUFLLGVBQVk7TUFBNEIsR0FBRUMsUUFBYyxDQUFDO0lBQ3ZFO0VBQ0YsQ0FBQztBQUFBLENBQUMsQ0FBQzs7QUFFSDtBQUNBTCxJQUFJLENBQUNDLElBQUksQ0FBQyxlQUFlLEVBQUU7RUFBQSxPQUFPO0lBQ2hDUyxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBQUMsS0FBQTtNQUFBLElBQUtOLFFBQVEsR0FBQU0sS0FBQSxDQUFSTixRQUFRO01BQUEsb0JBQU9wRCxLQUFBLENBQUFtRCxhQUFBO1FBQUssZUFBWTtNQUFjLEdBQUVDLFFBQWMsQ0FBQztJQUFBO0lBQy9FTyxhQUFhLEVBQUVaLElBQUksQ0FBQ2EsRUFBRSxDQUFDLENBQUM7SUFDeEJDLFlBQVksRUFBRWQsSUFBSSxDQUFDYSxFQUFFLENBQUM7TUFBQSxPQUFPO1FBQzNCRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2RDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYkMsVUFBVSxFQUFFakIsSUFBSSxDQUFDYSxFQUFFLENBQUMsQ0FBQztRQUNyQkssU0FBUyxFQUFFLElBQUk7UUFDZkMsVUFBVSxFQUFFO01BQ2QsQ0FBQztJQUFBLENBQUMsQ0FBQztJQUNIQyxZQUFZLEVBQUVwQixJQUFJLENBQUNhLEVBQUUsQ0FBQztNQUFBLE9BQU87UUFDM0JJLFVBQVUsRUFBRWpCLElBQUksQ0FBQ2EsRUFBRSxDQUFDLENBQUM7UUFDckJRLE1BQU0sRUFBRSxLQUFLO1FBQ2JDLE1BQU0sRUFBRTtNQUNWLENBQUM7SUFBQSxDQUFDO0VBQ0osQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVIdEIsSUFBSSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7RUFBQSxPQUFPO0lBQ3JDc0IsR0FBRyxFQUFFO01BQ0hDLFNBQVMsRUFBRTtRQUNUQyxRQUFRLEVBQUV6QixJQUFJLENBQUNhLEVBQUUsQ0FBQztVQUFBLE9BQU0sc0JBQXNCO1FBQUE7TUFDaEQ7SUFDRjtFQUNGLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSGEsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFlBQU07RUFDL0IsSUFBTUMsWUFBWSxHQUFHO0lBQ25CbkIsUUFBUSxFQUFFLEtBQUs7SUFDZm9CLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDWmxDLE1BQU0sRUFBTkEsTUFBTTtJQUNObUMsT0FBTyxFQUFFLENBQ1BsQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUNyQkEsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFDdEJBLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQ3BCQSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUNuQkEsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDckJBLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQ3RCO0lBRURHLEtBQUssRUFBRTtNQUNMLENBQUMsRUFBRWdDO0lBQ0w7RUFDRixDQUFDO0VBRURKLFFBQVEsQ0FBQyxRQUFRLEVBQUUsWUFBTTtJQUN2QkssRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFlBQU07TUFDL0MsSUFBQUMsT0FBQSxHQUFzQixJQUFBQyxjQUFNLGVBQUNoRixLQUFBLENBQUFtRCxhQUFBLENBQUMvQyxlQUFBLFdBQWMsRUFBS3NFLFlBQWUsQ0FBQyxDQUFDO1FBQTFETyxTQUFTLEdBQUFGLE9BQUEsQ0FBVEUsU0FBUztNQUNqQkMsTUFBTSxDQUFDRCxTQUFTLENBQUNFLFVBQVUsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hEO01BQ0FGLE1BQU0sQ0FBQ0csY0FBTSxDQUFDQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDRixpQkFBaUIsQ0FBQyxDQUFDO01BQ2pFRixNQUFNLENBQUNHLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQ0YsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUM7SUFFRk4sRUFBRSxDQUFDLDhDQUE4QyxFQUFFLFlBQU07TUFDdkQsSUFBQVMsUUFBQSxHQUFzQixJQUFBUCxjQUFNLGVBQUNoRixLQUFBLENBQUFtRCxhQUFBLENBQUMvQyxlQUFBLFdBQWMsTUFBQW9GLFNBQUEsaUJBQUtkLFlBQVk7VUFBRW5CLFFBQVEsRUFBRTtRQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQTFFMEIsU0FBUyxHQUFBTSxRQUFBLENBQVROLFNBQVM7TUFDakJDLE1BQU0sQ0FBQ0QsU0FBUyxDQUFDRSxVQUFVLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUM7SUFFRk4sRUFBRSxDQUFDLGlDQUFpQyxFQUFFLFlBQU07TUFDMUMsSUFBQVcsUUFBQSxHQUFzQixJQUFBVCxjQUFNLGVBQzFCaEYsS0FBQSxDQUFBbUQsYUFBQSxDQUFDL0MsZUFBQSxXQUFjLE1BQUFvRixTQUFBLGlCQUNUZCxZQUFZO1VBQ2hCQyxRQUFRLEVBQUU7WUFDUixDQUFDLEVBQUU7Y0FDRDlCLEtBQUssRUFBRSxRQUFRO2NBQ2Y2QyxPQUFPLEVBQUU7WUFDWCxDQUFDO1lBQ0QsQ0FBQyxFQUFFO2NBQ0Q3QyxLQUFLLEVBQUUsU0FBUztjQUNoQjZDLE9BQU8sRUFBRTtZQUNYLENBQUM7WUFDRCxDQUFDLEVBQUU7Y0FDRDdDLEtBQUssRUFBRSxPQUFPO2NBQ2Q2QyxPQUFPLEVBQUU7WUFDWDtVQUNGO1FBQUUsRUFDSCxDQUNILENBQUM7UUFsQk9ULFNBQVMsR0FBQVEsUUFBQSxDQUFUUixTQUFTO01BbUJqQkMsTUFBTSxDQUFDRCxTQUFTLENBQUNFLFVBQVUsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGWCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsWUFBTTtJQUNoQyxJQUFNa0IsU0FBUyxHQUFHO01BQ2hCOUMsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUNUK0MsUUFBUSxFQUFFN0MsSUFBSSxDQUFDYSxFQUFFLENBQUMsQ0FBQztNQUNuQmdCLE9BQU8sRUFBRSxDQUFDO1FBQUVoQyxFQUFFLEVBQUUsR0FBRztRQUFFQyxLQUFLLEVBQUU7TUFBYyxDQUFDLEVBQUU7UUFBRUQsRUFBRSxFQUFFLEdBQUc7UUFBRUMsS0FBSyxFQUFFO01BQWUsQ0FBQyxDQUFDO01BQ2hGSixNQUFNLEVBQUU7SUFDVixDQUFDO0lBRURvRCxVQUFVLENBQUMsWUFBTTtNQUNmRixTQUFTLENBQUNDLFFBQVEsQ0FBQ0UsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRUZoQixFQUFFLENBQUMsd0RBQXdELEVBQUUsWUFBTTtNQUNqRSxJQUFNaUIsUUFBUSxHQUFHLElBQUlDLDBCQUFjLENBQUNMLFNBQVMsQ0FBQztNQUM5Q0ksUUFBUSxDQUFDRSxRQUFRLEdBQUcsVUFBQ0MsQ0FBQztRQUFBLE9BQUsxRSxNQUFNLENBQUMyRSxNQUFNLENBQUNKLFFBQVEsQ0FBQ0ssS0FBSyxFQUFFLE9BQU9GLENBQUMsS0FBSyxVQUFVLEdBQUdBLENBQUMsQ0FBQ0gsUUFBUSxDQUFDSyxLQUFLLENBQUMsR0FBR0YsQ0FBQyxDQUFDO01BQUE7TUFDekcsSUFBTUcsSUFBSSxHQUFHO1FBQUV6RCxFQUFFLEVBQUUsR0FBRztRQUFFRixNQUFNLEVBQUU7VUFBRUUsRUFBRSxFQUFFLEdBQUc7VUFBRUMsS0FBSyxFQUFFO1FBQUksQ0FBQztRQUFFeUQsVUFBVSxFQUFFLEtBQUs7UUFBRUMsSUFBSSxFQUFFO01BQVksQ0FBQztNQUUvRlIsUUFBUSxDQUFDUyxlQUFlLENBQUM7UUFBRW5DLE1BQU0sRUFBRTtVQUFFZ0MsSUFBSSxFQUFFO1lBQUVJLE9BQU8sRUFBRUo7VUFBSztRQUFFO01BQUUsQ0FBQyxDQUFDO01BRWpFbkIsTUFBTSxDQUFDYSxRQUFRLENBQUNLLEtBQUssQ0FBQ00sWUFBWSxDQUFDLENBQUNDLE9BQU8sQ0FBQ04sSUFBSSxDQUFDO0lBQ25ELENBQUMsQ0FBQztJQUVGdkIsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLFlBQU07TUFDcEUsSUFBTWlCLFFBQVEsR0FBRyxJQUFJQywwQkFBYyxDQUFDTCxTQUFTLENBQUM7TUFDOUNJLFFBQVEsQ0FBQ0UsUUFBUSxHQUFHLFVBQUNDLENBQUM7UUFBQSxPQUFLMUUsTUFBTSxDQUFDMkUsTUFBTSxDQUFDSixRQUFRLENBQUNLLEtBQUssRUFBRSxPQUFPRixDQUFDLEtBQUssVUFBVSxHQUFHQSxDQUFDLENBQUNILFFBQVEsQ0FBQ0ssS0FBSyxDQUFDLEdBQUdGLENBQUMsQ0FBQztNQUFBO01BQ3pHLElBQU1HLElBQUksR0FBRztRQUFFM0QsTUFBTSxFQUFFO1VBQUVFLEVBQUUsRUFBRTtRQUFJLENBQUM7UUFBRTBELFVBQVUsRUFBRSxJQUFJO1FBQUVDLElBQUksRUFBRTtNQUFZLENBQUM7TUFFekVSLFFBQVEsQ0FBQ2EsbUJBQW1CLENBQUNQLElBQUksQ0FBQztNQUNsQ25CLE1BQU0sQ0FBQ2EsUUFBUSxDQUFDSyxLQUFLLENBQUNNLFlBQVksQ0FBQyxDQUFDQyxPQUFPLENBQUNOLElBQUksQ0FBQztNQUVqRE4sUUFBUSxDQUFDYSxtQkFBbUIsQ0FBQ1AsSUFBSSxDQUFDO01BQ2xDbkIsTUFBTSxDQUFDYSxRQUFRLENBQUNLLEtBQUssQ0FBQ00sWUFBWSxDQUFDLENBQUNHLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQztJQUVGL0IsRUFBRSxDQUFDLGtGQUFrRixFQUFFLFlBQU07TUFDM0YsSUFBTWlCLFFBQVEsR0FBRyxJQUFJQywwQkFBYyxDQUFDTCxTQUFTLENBQUM7TUFDOUNJLFFBQVEsQ0FBQ0UsUUFBUSxHQUFHLFVBQUNDLENBQUM7UUFBQSxPQUFLMUUsTUFBTSxDQUFDMkUsTUFBTSxDQUFDSixRQUFRLENBQUNLLEtBQUssRUFBRSxPQUFPRixDQUFDLEtBQUssVUFBVSxHQUFHQSxDQUFDLENBQUNILFFBQVEsQ0FBQ0ssS0FBSyxDQUFDLEdBQUdGLENBQUMsQ0FBQztNQUFBO01BQ3pHLElBQU1ZLFVBQVUsR0FBRztRQUFFcEUsTUFBTSxFQUFFO1VBQUVFLEVBQUUsRUFBRTtRQUFJLENBQUM7UUFBRVksVUFBVSxFQUFFLEdBQUc7UUFBRThDLFVBQVUsRUFBRSxJQUFJO1FBQUVDLElBQUksRUFBRTtNQUFZLENBQUM7TUFFaEdSLFFBQVEsQ0FBQ2EsbUJBQW1CLENBQUNFLFVBQVUsQ0FBQztNQUN4Q2YsUUFBUSxDQUFDZ0IsaUJBQWlCLENBQUMsU0FBUyxDQUFDO01BRXJDN0IsTUFBTSxDQUFDUyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxDQUFDb0Isb0JBQW9CLENBQUM7UUFBRSxTQUFTLEVBQUU7TUFBSSxDQUFDLENBQUM7TUFDbkU5QixNQUFNLENBQUNhLFFBQVEsQ0FBQ0ssS0FBSyxDQUFDTSxZQUFZLENBQUMsQ0FBQ0csUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYvQixFQUFFLENBQUMsMkZBQTJGLEVBQUUsWUFBTTtNQUNwRyxJQUFNNUIsS0FBSyxHQUFBaEIsYUFBQSxDQUFBQSxhQUFBLEtBQVF5RCxTQUFTO1FBQUU5QyxLQUFLLEVBQUU7VUFBRSxTQUFTLEVBQUU7UUFBSTtNQUFDLEVBQUU7TUFDekQsSUFBTWtELFFBQVEsR0FBRyxJQUFJQywwQkFBYyxDQUFDOUMsS0FBSyxDQUFDO01BQzFDNkMsUUFBUSxDQUFDRSxRQUFRLEdBQUcsVUFBQ0MsQ0FBQztRQUFBLE9BQUsxRSxNQUFNLENBQUMyRSxNQUFNLENBQUNKLFFBQVEsQ0FBQ0ssS0FBSyxFQUFFLE9BQU9GLENBQUMsS0FBSyxVQUFVLEdBQUdBLENBQUMsQ0FBQ0gsUUFBUSxDQUFDSyxLQUFLLENBQUMsR0FBR0YsQ0FBQyxDQUFDO01BQUE7TUFDekcsSUFBTWUsVUFBVSxHQUFHO1FBQUVyRSxFQUFFLEVBQUUsU0FBUztRQUFFRixNQUFNLEVBQUU7VUFBRUUsRUFBRSxFQUFFO1FBQUksQ0FBQztRQUFFWSxVQUFVLEVBQUUsR0FBRztRQUFFOEMsVUFBVSxFQUFFLEtBQUs7UUFBRUMsSUFBSSxFQUFFO01BQVksQ0FBQztNQUVoSFIsUUFBUSxDQUFDYSxtQkFBbUIsQ0FBQ0ssVUFBVSxDQUFDO01BQ3hDbEIsUUFBUSxDQUFDZ0IsaUJBQWlCLENBQUNsQyxTQUFTLENBQUM7TUFFckNLLE1BQU0sQ0FBQ2hDLEtBQUssQ0FBQzBDLFFBQVEsQ0FBQyxDQUFDb0Isb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDO0lBRUZsQyxFQUFFLENBQUMseURBQXlELEVBQUUsWUFBTTtNQUNsRSxJQUFNaUIsUUFBUSxHQUFHLElBQUlDLDBCQUFjLENBQUNMLFNBQVMsQ0FBQztNQUM5Q0ksUUFBUSxDQUFDRSxRQUFRLEdBQUcsVUFBQ0MsQ0FBQztRQUFBLE9BQUsxRSxNQUFNLENBQUMyRSxNQUFNLENBQUNKLFFBQVEsQ0FBQ0ssS0FBSyxFQUFFLE9BQU9GLENBQUMsS0FBSyxVQUFVLEdBQUdBLENBQUMsQ0FBQ0gsUUFBUSxDQUFDSyxLQUFLLENBQUMsR0FBR0YsQ0FBQyxDQUFDO01BQUE7TUFFekdILFFBQVEsQ0FBQ2dCLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztNQUVyQzdCLE1BQU0sQ0FBQ1MsU0FBUyxDQUFDQyxRQUFRLENBQUMsQ0FBQ3NCLEdBQUcsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUM7SUFFRnJDLEVBQUUsQ0FBQyx5RkFBeUYsRUFBRSxZQUFNO01BQ2xHLElBQU1pQixRQUFRLEdBQUcsSUFBSUMsMEJBQWMsQ0FBQ0wsU0FBUyxDQUFDO01BQzlDSSxRQUFRLENBQUNFLFFBQVEsR0FBRyxVQUFDQyxDQUFDO1FBQUEsT0FBSzFFLE1BQU0sQ0FBQzJFLE1BQU0sQ0FBQ0osUUFBUSxDQUFDSyxLQUFLLEVBQUUsT0FBT0YsQ0FBQyxLQUFLLFVBQVUsR0FBR0EsQ0FBQyxDQUFDSCxRQUFRLENBQUNLLEtBQUssQ0FBQyxHQUFHRixDQUFDLENBQUM7TUFBQTtNQUN6RyxJQUFNRyxJQUFJLEdBQUc7UUFBRTNELE1BQU0sRUFBRTtVQUFFRSxFQUFFLEVBQUU7UUFBSSxDQUFDO1FBQUUwRCxVQUFVLEVBQUUsSUFBSTtRQUFFQyxJQUFJLEVBQUU7TUFBWSxDQUFDO01BRXpFUixRQUFRLENBQUNxQixhQUFhLENBQUM7UUFBRS9DLE1BQU0sRUFBRSxJQUFJO1FBQUVnRCxJQUFJLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDcER0QixRQUFRLENBQUN1QixXQUFXLENBQUNqQixJQUFJLENBQUM7TUFFMUJuQixNQUFNLENBQUNhLFFBQVEsQ0FBQ0ssS0FBSyxDQUFDTSxZQUFZLENBQUMsQ0FBQ0csUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYvQixFQUFFLENBQUMsd0VBQXdFLEVBQUUsWUFBTTtNQUNqRixJQUFNaUIsUUFBUSxHQUFHLElBQUlDLDBCQUFjLENBQUNMLFNBQVMsQ0FBQztNQUM5Q0ksUUFBUSxDQUFDRSxRQUFRLEdBQUcsVUFBQ0MsQ0FBQztRQUFBLE9BQUsxRSxNQUFNLENBQUMyRSxNQUFNLENBQUNKLFFBQVEsQ0FBQ0ssS0FBSyxFQUFFLE9BQU9GLENBQUMsS0FBSyxVQUFVLEdBQUdBLENBQUMsQ0FBQ0gsUUFBUSxDQUFDSyxLQUFLLENBQUMsR0FBR0YsQ0FBQyxDQUFDO01BQUE7TUFDekcsSUFBTUcsSUFBSSxHQUFHO1FBQUUzRCxNQUFNLEVBQUU7VUFBRUUsRUFBRSxFQUFFO1FBQUksQ0FBQztRQUFFMEQsVUFBVSxFQUFFLElBQUk7UUFBRUMsSUFBSSxFQUFFO01BQVksQ0FBQztNQUV6RVIsUUFBUSxDQUFDcUIsYUFBYSxDQUFDO1FBQUUvQyxNQUFNLEVBQUUsSUFBSTtRQUFFZ0QsSUFBSSxFQUFFO01BQUssQ0FBQyxDQUFDO01BQ3BEO01BQ0E7TUFDQXRCLFFBQVEsQ0FBQ2EsbUJBQW1CLENBQUNQLElBQUksQ0FBQztNQUNsQ04sUUFBUSxDQUFDd0IsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO01BRXBDckMsTUFBTSxDQUFDUyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxDQUFDc0IsR0FBRyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ2pEakMsTUFBTSxDQUFDYSxRQUFRLENBQUNLLEtBQUssQ0FBQ00sWUFBWSxDQUFDLENBQUNDLE9BQU8sQ0FBQ04sSUFBSSxDQUFDO0lBQ25ELENBQUMsQ0FBQztJQUVGdkIsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLFlBQU07TUFDckYsSUFBTTVCLEtBQUssR0FBQWhCLGFBQUEsQ0FBQUEsYUFBQSxLQUFReUQsU0FBUztRQUFFOUMsS0FBSyxFQUFFO1VBQUUsU0FBUyxFQUFFO1FBQUk7TUFBQyxFQUFFO01BQ3pELElBQU1rRCxRQUFRLEdBQUcsSUFBSUMsMEJBQWMsQ0FBQzlDLEtBQUssQ0FBQztNQUMxQzZDLFFBQVEsQ0FBQ0UsUUFBUSxHQUFHLFVBQUNDLENBQUM7UUFBQSxPQUFLMUUsTUFBTSxDQUFDMkUsTUFBTSxDQUFDSixRQUFRLENBQUNLLEtBQUssRUFBRSxPQUFPRixDQUFDLEtBQUssVUFBVSxHQUFHQSxDQUFDLENBQUNILFFBQVEsQ0FBQ0ssS0FBSyxDQUFDLEdBQUdGLENBQUMsQ0FBQztNQUFBO01BQ3pHLElBQU1zQixXQUFXLEdBQUc7UUFBRTVFLEVBQUUsRUFBRSxTQUFTO1FBQUVGLE1BQU0sRUFBRTtVQUFFRSxFQUFFLEVBQUU7UUFBSSxDQUFDO1FBQUUwRCxVQUFVLEVBQUUsS0FBSztRQUFFQyxJQUFJLEVBQUU7TUFBWSxDQUFDO01BRWhHUixRQUFRLENBQUNxQixhQUFhLENBQUM7UUFDckIvQyxNQUFNLEVBQUU7VUFBRWdDLElBQUksRUFBRTtZQUFFSSxPQUFPLEVBQUVlO1VBQVk7UUFBRSxDQUFDO1FBQzFDSCxJQUFJLEVBQUU7VUFBRWhCLElBQUksRUFBRTtZQUFFSSxPQUFPLEVBQUU7Y0FBRTdELEVBQUUsRUFBRSxTQUFTO2NBQUU2RSxPQUFPLEVBQUUsQ0FBQyxXQUFXO1lBQUU7VUFBRTtRQUFFO01BQ3ZFLENBQUMsQ0FBQztNQUVGdkMsTUFBTSxDQUFDaEMsS0FBSyxDQUFDMEMsUUFBUSxDQUFDLENBQUNzQixHQUFHLENBQUNDLGdCQUFnQixDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUYxQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsWUFBTTtJQUNwQ0ssRUFBRSxDQUFDLCtFQUErRSxFQUFFLFlBQU07TUFDeEYsSUFBQUUsY0FBTSxlQUNKaEYsS0FBQSxDQUFBbUQsYUFBQSxDQUFDL0MsZUFBQSxXQUFjO1FBQ2J5QyxLQUFLLEVBQUUsQ0FBQyxDQUFFO1FBQ1YrQyxRQUFRLEVBQUU3QyxJQUFJLENBQUNhLEVBQUUsQ0FBQyxDQUFFO1FBQ3BCZ0IsT0FBTyxFQUFFLEVBQUc7UUFDWm5DLE1BQU0sRUFBQztNQUFnQixDQUN4QixDQUNILENBQUM7TUFFRHlDLE1BQU0sQ0FBQ3BDLHlCQUF5QixDQUFDNEUsd0JBQXdCLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyx3REFBbUMsQ0FBQztNQUNwRzFDLE1BQU0sQ0FBQ3BDLHlCQUF5QixDQUFDK0UsYUFBYSxDQUFDLENBQUNsQixPQUFPLENBQUM7UUFDdERtQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ3pCQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDbEJDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPO01BQ3hCLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGbEQsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLFlBQU07TUFDOUMsSUFBQUUsY0FBTSxlQUNKaEYsS0FBQSxDQUFBbUQsYUFBQSxDQUFDL0MsZUFBQSxXQUFjO1FBQ2J5QyxLQUFLLEVBQUUsQ0FBQyxDQUFFO1FBQ1YrQyxRQUFRLEVBQUU3QyxJQUFJLENBQUNhLEVBQUUsQ0FBQyxDQUFFO1FBQ3BCZ0IsT0FBTyxFQUFFLEVBQUc7UUFDWm5DLE1BQU0sRUFBQztNQUFnQixDQUN4QixDQUNILENBQUM7TUFFRHlDLE1BQU0sS0FBQStDLFFBQUEsYUFBUW5GLHlCQUF5QixDQUFDb0YsWUFBWSxFQUFDLENBQUNQLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDeEUsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119