easy-richtextarea 4.0.26 → 4.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example.js +315 -304
- package/lib/mixins/event.js +66 -0
- package/lib/operation/delete.js +2 -2
- package/lib/richTextarea.js +152 -230
- package/lib/selection.js +15 -8
- package/package.json +2 -2
- package/src/mixins/event.js +92 -0
- package/src/operation/delete.js +1 -1
- package/src/richTextarea.js +192 -248
- package/src/selection.js +16 -8
package/lib/richTextarea.js
CHANGED
|
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
var _easy = require("easy");
|
|
12
12
|
var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
|
|
13
13
|
var _undoBuffer = /*#__PURE__*/ _interopRequireDefault(require("./undoBuffer"));
|
|
14
|
+
var _event = /*#__PURE__*/ _interopRequireDefault(require("./mixins/event"));
|
|
14
15
|
var _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
|
|
15
16
|
var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
|
|
16
17
|
var _content = /*#__PURE__*/ _interopRequireDefault(require("./transform/content"));
|
|
@@ -211,77 +212,26 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
211
212
|
_classCallCheck(this, RichTextarea);
|
|
212
213
|
var _this;
|
|
213
214
|
_this = _super.call(this, selector);
|
|
214
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
215
|
-
var
|
|
216
|
-
if (
|
|
217
|
-
|
|
218
|
-
_this.setContent(content);
|
|
219
|
-
}
|
|
220
|
-
var content1 = _this.getContent(), selection = _this.getSelection(), contentChanged = _this.hasContentChanged(), changed = contentChanged || selectionChanged;
|
|
221
|
-
if (changed) {
|
|
222
|
-
_this.callHandlers(eventType, event, element);
|
|
223
|
-
}
|
|
224
|
-
if (undoable) {
|
|
225
|
-
if (contentChanged) {
|
|
226
|
-
var previousContent1 = _this.getPreviousContent(), operations = (0, _generate.default)(previousContent1, content1);
|
|
227
|
-
_this.undoBuffer.addOperations(operations);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
var previousContent2 = content1, previousSelection = selection; ///
|
|
231
|
-
_this.setPreviousContent(previousContent2);
|
|
232
|
-
_this.setPreviousSelection(previousSelection);
|
|
233
|
-
});
|
|
234
|
-
_defineProperty(_assertThisInitialized(_this), "selectChangeHandler", function(event, element) {
|
|
235
|
-
if (_this.focused) {
|
|
236
|
-
element = _assertThisInitialized(_this); ///
|
|
237
|
-
_this.intermediateHandler(event, element);
|
|
215
|
+
_defineProperty(_assertThisInitialized(_this), "cutHandler", function(event, element) {
|
|
216
|
+
var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
|
|
217
|
+
if (selectionEmpty) {
|
|
218
|
+
return;
|
|
238
219
|
}
|
|
239
|
-
|
|
240
|
-
|
|
220
|
+
var selectedContent = _this.getSelectedContent();
|
|
221
|
+
navigator.clipboard.writeText(selectedContent);
|
|
222
|
+
var content = _this.getContent(), deleteOperation = _delete.default.fromContentAndSelection(content, selection), operation = deleteOperation; ///
|
|
223
|
+
_this.applyOperation(operation);
|
|
224
|
+
_this.intermediateHandler(event, element);
|
|
241
225
|
event.preventDefault();
|
|
242
226
|
});
|
|
243
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
244
|
-
var
|
|
245
|
-
if (
|
|
246
|
-
|
|
247
|
-
switch(keyCode){
|
|
248
|
-
case _keyCodes.F_KEY_CODE:
|
|
249
|
-
{
|
|
250
|
-
_this.find(event, element);
|
|
251
|
-
event.preventDefault();
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
case _keyCodes.Z_KEY_CODE:
|
|
255
|
-
{
|
|
256
|
-
var shiftKey = event.shiftKey;
|
|
257
|
-
shiftKey ? _this.redo(event, element) : _this.undo(event, element);
|
|
258
|
-
event.preventDefault();
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
227
|
+
_defineProperty(_assertThisInitialized(_this), "copyHandler", function(event, element) {
|
|
228
|
+
var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
|
|
229
|
+
if (selectionEmpty) {
|
|
230
|
+
return;
|
|
262
231
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
});
|
|
267
|
-
_defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
|
|
268
|
-
var eventType = _eventTypes.SCROLL_EVENT_TYPE;
|
|
269
|
-
_this.callHandlers(eventType, event, element);
|
|
270
|
-
});
|
|
271
|
-
_defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
|
|
272
|
-
_this.focused = true;
|
|
273
|
-
defer(function() {
|
|
274
|
-
var undoable = true, eventType = _eventTypes.FOCUS_EVENT_TYPE, selectionChanged = true;
|
|
275
|
-
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
_defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
|
|
279
|
-
_this.focused = false;
|
|
280
|
-
var undoable = true, eventType = _eventTypes.BLUR_EVENT_TYPE, selectionChanged = true;
|
|
281
|
-
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
282
|
-
});
|
|
283
|
-
_defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
|
|
284
|
-
_this.intermediateHandler(event, element);
|
|
232
|
+
var selectedContent = _this.getSelectedContent();
|
|
233
|
+
navigator.clipboard.writeText(selectedContent);
|
|
234
|
+
event.preventDefault();
|
|
285
235
|
});
|
|
286
236
|
_defineProperty(_assertThisInitialized(_this), "pasteHandler", function(event, element) {
|
|
287
237
|
var clipboardData = event.clipboardData, textData = clipboardData.getData(_constants.TEXT);
|
|
@@ -298,26 +248,72 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
298
248
|
_this.intermediateHandler(event, element);
|
|
299
249
|
event.preventDefault();
|
|
300
250
|
});
|
|
301
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
302
|
-
|
|
303
|
-
|
|
251
|
+
_defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
|
|
252
|
+
_this.intermediateHandler(event, element);
|
|
253
|
+
});
|
|
254
|
+
_defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
|
|
255
|
+
_this.focused = false;
|
|
256
|
+
var undoable = true, eventType = _eventTypes.BLUR_EVENT_TYPE, selectionChanged = true;
|
|
257
|
+
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
258
|
+
});
|
|
259
|
+
_defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
|
|
260
|
+
_this.focused = true;
|
|
261
|
+
defer(function() {
|
|
262
|
+
var undoable = true, eventType = _eventTypes.FOCUS_EVENT_TYPE, selectionChanged = true;
|
|
263
|
+
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
_defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
|
|
267
|
+
var eventType = _eventTypes.SCROLL_EVENT_TYPE;
|
|
268
|
+
_this.callHandlers(eventType, event, element);
|
|
269
|
+
});
|
|
270
|
+
_defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
|
|
271
|
+
var preventDefault = false;
|
|
272
|
+
var keyCode = event.keyCode;
|
|
273
|
+
switch(keyCode){
|
|
274
|
+
case _keyCodes.Z_KEY_CODE:
|
|
275
|
+
preventDefault = _this.zKeyDown(event, element);
|
|
276
|
+
break;
|
|
277
|
+
case _keyCodes.F_KEY_CODE:
|
|
278
|
+
preventDefault = _this.fKeyDown(event, element);
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
if (preventDefault) {
|
|
282
|
+
event.preventDefault();
|
|
304
283
|
return;
|
|
305
284
|
}
|
|
306
|
-
|
|
307
|
-
|
|
285
|
+
defer(function() {
|
|
286
|
+
_this.intermediateHandler(event, element);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
_defineProperty(_assertThisInitialized(_this), "contextmenuHandler", function(event, element) {
|
|
308
290
|
event.preventDefault();
|
|
309
291
|
});
|
|
310
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
292
|
+
_defineProperty(_assertThisInitialized(_this), "selectChangeHandler", function(event, element) {
|
|
293
|
+
if (_this.focused) {
|
|
294
|
+
element = _assertThisInitialized(_this); ///
|
|
295
|
+
_this.intermediateHandler(event, element);
|
|
314
296
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
var
|
|
318
|
-
_this.
|
|
319
|
-
|
|
320
|
-
|
|
297
|
+
});
|
|
298
|
+
_defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element) {
|
|
299
|
+
var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _eventTypes.CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
|
|
300
|
+
if (_this.readOnly) {
|
|
301
|
+
var previousContent = _this.getPreviousContent(), content = previousContent; ///
|
|
302
|
+
_this.setContent(content);
|
|
303
|
+
}
|
|
304
|
+
var content1 = _this.getContent(), selection = _this.getSelection(), contentChanged = _this.hasContentChanged(), changed = contentChanged || selectionChanged;
|
|
305
|
+
if (changed) {
|
|
306
|
+
_this.callHandlers(eventType, event, element);
|
|
307
|
+
}
|
|
308
|
+
if (undoable) {
|
|
309
|
+
if (contentChanged) {
|
|
310
|
+
var previousContent1 = _this.getPreviousContent(), operations = (0, _generate.default)(previousContent1, content1);
|
|
311
|
+
_this.undoBuffer.addOperations(operations);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
var previousContent2 = content1, previousSelection = selection; ///
|
|
315
|
+
_this.setPreviousContent(previousContent2);
|
|
316
|
+
_this.setPreviousSelection(previousSelection);
|
|
321
317
|
});
|
|
322
318
|
_this.focused = focused;
|
|
323
319
|
_this.readOnly = readOnly;
|
|
@@ -355,6 +351,29 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
355
351
|
this.readOnly = readOnly;
|
|
356
352
|
}
|
|
357
353
|
},
|
|
354
|
+
{
|
|
355
|
+
key: "callHandlers",
|
|
356
|
+
value: function callHandlers(eventType) {
|
|
357
|
+
for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
|
|
358
|
+
remainingArguments[_key - 1] = arguments[_key];
|
|
359
|
+
}
|
|
360
|
+
var _this = this;
|
|
361
|
+
var eventListeners = this.findEventListeners(eventType);
|
|
362
|
+
eventListeners.forEach(function(eventListener) {
|
|
363
|
+
var element = eventListener.element;
|
|
364
|
+
var handler = eventListener.handler, handlerElement = element; ///
|
|
365
|
+
element = _this; ///
|
|
366
|
+
if (handler !== _this.cutHandler && handler !== _this.copyHandler && handler !== _this.pasteHandler && handler !== _this.inputHandler && handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler && handler !== _this.keyDownHandler && handler !== _this.contextmenuHandler && handler !== _this.selectChangeHandler) {
|
|
367
|
+
var _handler;
|
|
368
|
+
(_handler = handler).call.apply(_handler, [
|
|
369
|
+
handlerElement
|
|
370
|
+
].concat(_toConsumableArray(remainingArguments), [
|
|
371
|
+
element
|
|
372
|
+
]));
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
},
|
|
358
377
|
{
|
|
359
378
|
key: "isActive",
|
|
360
379
|
value: function isActive() {
|
|
@@ -424,39 +443,34 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
424
443
|
}
|
|
425
444
|
},
|
|
426
445
|
{
|
|
427
|
-
key: "
|
|
428
|
-
value: function
|
|
429
|
-
var
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
value: function undo(event, element) {
|
|
436
|
-
var undoOperation = this.undoBuffer.undo();
|
|
437
|
-
if (undoOperation !== null) {
|
|
438
|
-
var operation = undoOperation; ///
|
|
439
|
-
this.revert(event, element, operation);
|
|
446
|
+
key: "fKeyDown",
|
|
447
|
+
value: function fKeyDown(event, element) {
|
|
448
|
+
var preventDefault = false;
|
|
449
|
+
var ctrlKey = event.ctrlKey, metaKey = event.metaKey;
|
|
450
|
+
if (ctrlKey || metaKey) {
|
|
451
|
+
var eventType = _eventTypes.FIND_EVENT_TYPE;
|
|
452
|
+
this.callHandlers(eventType, event, element);
|
|
453
|
+
preventDefault = true;
|
|
440
454
|
}
|
|
455
|
+
return preventDefault;
|
|
441
456
|
}
|
|
442
457
|
},
|
|
443
458
|
{
|
|
444
|
-
key: "
|
|
445
|
-
value: function
|
|
446
|
-
var
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
this.
|
|
459
|
+
key: "zKeyDown",
|
|
460
|
+
value: function zKeyDown(event, element) {
|
|
461
|
+
var preventDefault = false;
|
|
462
|
+
var ctrlKey = event.ctrlKey, metaKey = event.metaKey, shiftKey = event.shiftKey;
|
|
463
|
+
if (ctrlKey || metaKey) {
|
|
464
|
+
var operation = shiftKey ? this.undoBuffer.redo() : this.undoBuffer.undo();
|
|
465
|
+
if (operation !== null) {
|
|
466
|
+
var undoable = false, eventType = _eventTypes.CHANGE_EVENT_TYPE, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
|
|
467
|
+
this.applyOperation(operation);
|
|
468
|
+
this.setSelection(selection, setPreviousSelection);
|
|
469
|
+
this.intermediateHandler(event, element, undoable, eventType);
|
|
470
|
+
}
|
|
471
|
+
preventDefault = true;
|
|
450
472
|
}
|
|
451
|
-
|
|
452
|
-
},
|
|
453
|
-
{
|
|
454
|
-
key: "revert",
|
|
455
|
-
value: function revert(event, element, operation) {
|
|
456
|
-
var undoable = false, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
|
|
457
|
-
this.applyOperation(operation);
|
|
458
|
-
this.setSelection(selection, setPreviousSelection);
|
|
459
|
-
this.intermediateHandler(event, element, undoable);
|
|
473
|
+
return preventDefault;
|
|
460
474
|
}
|
|
461
475
|
},
|
|
462
476
|
{
|
|
@@ -474,29 +488,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
474
488
|
this.intermediateHandler(event, element, undoable, eventType);
|
|
475
489
|
}
|
|
476
490
|
},
|
|
477
|
-
{
|
|
478
|
-
key: "callHandlers",
|
|
479
|
-
value: function callHandlers(eventType) {
|
|
480
|
-
for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
|
|
481
|
-
remainingArguments[_key - 1] = arguments[_key];
|
|
482
|
-
}
|
|
483
|
-
var _this = this;
|
|
484
|
-
var eventListeners = this.findEventListeners(eventType);
|
|
485
|
-
eventListeners.forEach(function(eventListener) {
|
|
486
|
-
var element = eventListener.element;
|
|
487
|
-
var handler = eventListener.handler, handlerElement = element; ///
|
|
488
|
-
element = _this; ///
|
|
489
|
-
if (handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler) {
|
|
490
|
-
var _handler;
|
|
491
|
-
(_handler = handler).call.apply(_handler, [
|
|
492
|
-
handlerElement
|
|
493
|
-
].concat(_toConsumableArray(remainingArguments), [
|
|
494
|
-
element
|
|
495
|
-
]));
|
|
496
|
-
}
|
|
497
|
-
});
|
|
498
|
-
}
|
|
499
|
-
},
|
|
500
491
|
{
|
|
501
492
|
key: "applyOperation",
|
|
502
493
|
value: function applyOperation(operation) {
|
|
@@ -512,95 +503,35 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
512
503
|
{
|
|
513
504
|
key: "activate",
|
|
514
505
|
value: function activate() {
|
|
515
|
-
this.on(_eventTypes.
|
|
516
|
-
this.on(_eventTypes.
|
|
517
|
-
this.on(_eventTypes.
|
|
518
|
-
this.on(_eventTypes.
|
|
519
|
-
this.on(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler
|
|
506
|
+
this.on(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
|
|
507
|
+
this.on(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
|
|
508
|
+
this.on(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
|
|
509
|
+
this.on(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler);
|
|
510
|
+
this.on(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler);
|
|
511
|
+
this.on(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler);
|
|
512
|
+
this.on(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler);
|
|
513
|
+
this.on(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler);
|
|
514
|
+
this.on(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
515
|
+
_easy.document.on(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
520
516
|
this.addClass("active");
|
|
521
517
|
}
|
|
522
518
|
},
|
|
523
519
|
{
|
|
524
520
|
key: "deactivate",
|
|
525
521
|
value: function deactivate() {
|
|
526
|
-
this.off(_eventTypes.
|
|
527
|
-
this.off(_eventTypes.
|
|
528
|
-
this.off(_eventTypes.
|
|
529
|
-
this.off(_eventTypes.
|
|
530
|
-
this.off(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler
|
|
522
|
+
this.off(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
|
|
523
|
+
this.off(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
|
|
524
|
+
this.off(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
|
|
525
|
+
this.off(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler);
|
|
526
|
+
this.off(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler);
|
|
527
|
+
this.off(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler);
|
|
528
|
+
this.off(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler);
|
|
529
|
+
this.off(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler);
|
|
530
|
+
this.off(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
531
|
+
_easy.document.off(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
531
532
|
this.removeClass("active");
|
|
532
533
|
}
|
|
533
534
|
},
|
|
534
|
-
{
|
|
535
|
-
key: "onFind",
|
|
536
|
-
value: function onFind(findHandler, element) {
|
|
537
|
-
var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
|
|
538
|
-
this.addEventListener(eventType, handler, element);
|
|
539
|
-
}
|
|
540
|
-
},
|
|
541
|
-
{
|
|
542
|
-
key: "offFind",
|
|
543
|
-
value: function offFind(findHandler, element) {
|
|
544
|
-
var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
|
|
545
|
-
this.removeEventListener(eventType, handler, element);
|
|
546
|
-
}
|
|
547
|
-
},
|
|
548
|
-
{
|
|
549
|
-
key: "onBlur",
|
|
550
|
-
value: function onBlur(blurHandler, element) {
|
|
551
|
-
var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
|
|
552
|
-
this.addEventListener(eventType, handler, element);
|
|
553
|
-
}
|
|
554
|
-
},
|
|
555
|
-
{
|
|
556
|
-
key: "offBlur",
|
|
557
|
-
value: function offBlur(blurHandler, element) {
|
|
558
|
-
var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
|
|
559
|
-
this.removeEventListener(eventType, handler, element);
|
|
560
|
-
}
|
|
561
|
-
},
|
|
562
|
-
{
|
|
563
|
-
key: "onFocus",
|
|
564
|
-
value: function onFocus(blurHandler, element) {
|
|
565
|
-
var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
|
|
566
|
-
this.addEventListener(eventType, handler, element);
|
|
567
|
-
}
|
|
568
|
-
},
|
|
569
|
-
{
|
|
570
|
-
key: "offFocus",
|
|
571
|
-
value: function offFocus(blurHandler, element) {
|
|
572
|
-
var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
|
|
573
|
-
this.removeEventListener(eventType, handler, element);
|
|
574
|
-
}
|
|
575
|
-
},
|
|
576
|
-
{
|
|
577
|
-
key: "onScroll",
|
|
578
|
-
value: function onScroll(scrollHandler, element) {
|
|
579
|
-
var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
|
|
580
|
-
this.addEventListener(eventType, handler, element);
|
|
581
|
-
}
|
|
582
|
-
},
|
|
583
|
-
{
|
|
584
|
-
key: "offScroll",
|
|
585
|
-
value: function offScroll(scrollHandler, element) {
|
|
586
|
-
var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
|
|
587
|
-
this.removeEventListener(eventType, handler, element);
|
|
588
|
-
}
|
|
589
|
-
},
|
|
590
|
-
{
|
|
591
|
-
key: "onChange",
|
|
592
|
-
value: function onChange(changeHandler, element) {
|
|
593
|
-
var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
|
|
594
|
-
this.addEventListener(eventType, handler, element);
|
|
595
|
-
}
|
|
596
|
-
},
|
|
597
|
-
{
|
|
598
|
-
key: "offChange",
|
|
599
|
-
value: function offChange(changeHandler, element) {
|
|
600
|
-
var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
|
|
601
|
-
this.removeEventListener(eventType, handler, element);
|
|
602
|
-
}
|
|
603
|
-
},
|
|
604
535
|
{
|
|
605
536
|
key: "getPreviousContent",
|
|
606
537
|
value: function getPreviousContent() {
|
|
@@ -634,34 +565,24 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
634
565
|
{
|
|
635
566
|
key: "didMount",
|
|
636
567
|
value: function didMount() {
|
|
637
|
-
var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus,
|
|
568
|
+
var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onScroll = _this_properties.onScroll, onChange = _this_properties.onChange, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, scrollHandler = onScroll, changeHandler = onChange; ///
|
|
638
569
|
this.updateInitialState();
|
|
639
570
|
findHandler && this.onFind(findHandler, this);
|
|
640
571
|
blurHandler && this.onBlur(blurHandler, this);
|
|
641
572
|
focusHandler && this.onFocus(focusHandler, this);
|
|
642
|
-
changeHandler && this.onChange(changeHandler, this);
|
|
643
573
|
scrollHandler && this.onScroll(scrollHandler, this);
|
|
644
|
-
this.
|
|
645
|
-
this.on(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
|
|
646
|
-
this.on(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
|
|
647
|
-
this.on(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
648
|
-
_easy.document.on(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
574
|
+
changeHandler && this.onChange(changeHandler, this);
|
|
649
575
|
}
|
|
650
576
|
},
|
|
651
577
|
{
|
|
652
578
|
key: "willUnmount",
|
|
653
579
|
value: function willUnmount() {
|
|
654
|
-
var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus,
|
|
580
|
+
var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onScroll = _this_properties.onScroll, onChange = _this_properties.onChange, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, scrollHandler = onScroll, changeHandler = onChange; ///
|
|
655
581
|
findHandler && this.offFind(findHandler, this);
|
|
656
582
|
blurHandler && this.offBlur(blurHandler, this);
|
|
657
583
|
focusHandler && this.offFocus(focusHandler, this);
|
|
658
|
-
changeHandler && this.offChange(changeHandler, this);
|
|
659
584
|
scrollHandler && this.offScroll(scrollHandler, this);
|
|
660
|
-
this.
|
|
661
|
-
this.off(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
|
|
662
|
-
this.off(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
|
|
663
|
-
this.off(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
664
|
-
_easy.document.off(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
585
|
+
changeHandler && this.offChange(changeHandler, this);
|
|
665
586
|
var active = this.isActive();
|
|
666
587
|
if (active) {
|
|
667
588
|
this.deactivate();
|
|
@@ -718,14 +639,15 @@ _defineProperty(RichTextarea, "ignoredProperties", [
|
|
|
718
639
|
"onFind",
|
|
719
640
|
"onBlur",
|
|
720
641
|
"onFocus",
|
|
721
|
-
"
|
|
722
|
-
"
|
|
642
|
+
"onScroll",
|
|
643
|
+
"onChange"
|
|
723
644
|
]);
|
|
724
645
|
_defineProperty(RichTextarea, "defaultProperties", {
|
|
725
646
|
className: "rich"
|
|
726
647
|
});
|
|
648
|
+
Object.assign(RichTextarea.prototype, _event.default);
|
|
727
649
|
function defer(func) {
|
|
728
650
|
setTimeout(func, 0);
|
|
729
651
|
}
|
|
730
652
|
|
|
731
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBURVhULCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRl9LRVlfQ09ERSwgWl9LRVlfQ09ERSB9IGZyb20gXCIuL2tleUNvZGVzXCI7XHJcbmltcG9ydCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT1BZX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBQQVNURV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEtFWURPV05fRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIpIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICB9XHJcblxyXG4gIGlzRm9jdXNlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XHJcbiAgfVxyXG5cclxuICBpc1JlYWRPbmx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHk7XHJcbiAgfVxyXG5cclxuICBnZXRVbmRvQnVmZmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudW5kb0J1ZmZlcjtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzZWQoZm9jdXNlZCkge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgfVxyXG5cclxuICBpbnRlcm1lZGlhdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSA9IHRydWUsIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLCBzZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5oYXNTZWxlY3Rpb25DaGFuZ2VkKCkpID0+IHtcclxuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwcmV2aW91c0NvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkKCksXHJcbiAgICAgICAgICBjaGFuZ2VkID0gKGNvbnRlbnRDaGFuZ2VkIHx8IHNlbGVjdGlvbkNoYW5nZWQpO1xyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1bmRvYWJsZSkge1xyXG4gICAgICBpZiAoY29udGVudENoYW5nZWQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSB0aGlzLmdldFByZXZpb3VzQ29udGVudCgpLFxyXG4gICAgICAgICAgICAgIG9wZXJhdGlvbnMgPSBnZW5lcmF0ZU9wZXJhdGlvbnMocHJldmlvdXNDb250ZW50LCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy51bmRvQnVmZmVyLmFkZE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb250ZXh0bWVudUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBrZXlEb3duSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICBpZiAoY3RybEtleSB8fCBtZXRhS2V5KSB7XHJcbiAgICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcclxuICAgICAgICBjYXNlIEZfS0VZX0NPREU6IHtcclxuICAgICAgICAgIHRoaXMuZmluZChldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlIFpfS0VZX0NPREU6IHtcclxuICAgICAgICAgIGNvbnN0IHsgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG5cclxuICAgICAgICAgIHNoaWZ0S2V5ID9cclxuICAgICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgICAgdGhpcy51bmRvKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWZlcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNjcm9sbEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgY29uc3QgdW5kb2FibGUgPSB0cnVlLFxyXG4gICAgICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUsIHNlbGVjdGlvbkNoYW5nZWQpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcGFzdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCB7IGNsaXBib2FyZERhdGEgfSA9IGV2ZW50LFxyXG4gICAgICAgICAgdGV4dERhdGEgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoVEVYVCk7XHJcblxyXG4gICAgaWYgKHRleHREYXRhID09PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb25FbXB0eSkge1xyXG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFNlbGVjdGlvbihjb250ZW50LCBzZWxlY3Rpb24pLFxyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247XHJcblxyXG4gICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRleHREYXRhLCAvLy9cclxuICAgICAgICAgIGluc2VydE9wZXJhdGlvbiA9IEluc2VydE9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFNlbGVjdGlvbihjb250ZW50LCBzZWxlY3Rpb24pLFxyXG4gICAgICAgICAgb3BlcmF0aW9uID0gaW5zZXJ0T3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGNvcHlIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb25FbXB0eSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gdGhpcy5nZXRTZWxlY3RlZENvbnRlbnQoKTtcclxuXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzZWxlY3RlZENvbnRlbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBjdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb25FbXB0eSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gdGhpcy5nZXRTZWxlY3RlZENvbnRlbnQoKTtcclxuXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzZWxlY3RlZENvbnRlbnQpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFNlbGVjdGlvbihjb250ZW50LCBzZWxlY3Rpb24pLFxyXG4gICAgICAgICAgb3BlcmF0aW9uID0gZGVsZXRlT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCkge1xyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5oYXNDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHsgdmFsdWUgfSA9IGRvbUVsZW1lbnQsXHJcbiAgICAgICAgICBjb250ZW50ID0gdmFsdWU7ICAvLy9cclxuXHJcbiAgICByZXR1cm4gY29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbigpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IFNlbGVjdGlvbi5mcm9tRE9NRWxlbWVudChkb21FbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRDb250ZW50KCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGVkQ29udGVudCA9IGNvbnRlbnQuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGVkQ29udGVudDtcclxuICB9XHJcblxyXG4gIGhhc0NvbnRlbnRDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnRQcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCA9PT0gcHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gIWNvbnRlbnRQcmV2aW91c0NvbnRlbnQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRXF1YWxUbyhwcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gIXNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNDb250ZW50KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBkb21FbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICB1bmRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCB1bmRvT3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnVuZG8oKTtcclxuXHJcbiAgICBpZiAodW5kb09wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB1bmRvT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnJldmVydChldmVudCwgZWxlbWVudCwgb3BlcmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZG8oZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHJlZG9PcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIucmVkbygpO1xyXG5cclxuICAgIGlmIChyZWRvT3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHJlZG9PcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbU9wZXJhdGlvbihvcGVyYXRpb24pLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0ob3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucyksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24sIG9wZXJhdGlvbnMpO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy51bmRvQnVmZmVyLnRyYW5zZm9ybShvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBldmVudCA9IG51bGwsXHJcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcyxcclxuICAgICAgICAgIHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBsZXQgeyBlbGVtZW50IH0gPSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgICAgY29uc3QgeyBoYW5kbGVyIH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25GaW5kKGZpbmRIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gZmluZEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZpbmQoZmluZEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBmaW5kSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c0NvbnRlbnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzQ29udGVudFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25DaGFuZ2UsIG9uU2Nyb2xsIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBmaW5kSGFuZGxlciA9IG9uRmluZCwgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1ciwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGw7IC8vL1xyXG5cclxuICAgIHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKCk7XHJcblxyXG4gICAgZmluZEhhbmRsZXIgJiYgdGhpcy5vbkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vbihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25DaGFuZ2UsIG9uU2Nyb2xsIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXIsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsOyAvLy9cclxuXHJcbiAgICBmaW5kSGFuZGxlciAmJiB0aGlzLm9mZkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUluaXRpYWxTdGF0ZSgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBudWxsLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnQsXHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpc2UoKSB7XHJcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRhZ05hbWUgPSBcInRleHRhcmVhXCI7XHJcblxyXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcclxuICAgIFwib25GaW5kXCIsXHJcbiAgICBcIm9uQmx1clwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICBcIm9uU2Nyb2xsXCIsXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZm9jdXNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIHVuZG9CdWZmZXIgPSBVbmRvQnVmZmVyLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgICByaWNoVGV4dGFyZWEgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHJpY2hUZXh0YXJlYTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmVyKGZ1bmMpIHtcclxuICBzZXRUaW1lb3V0KGZ1bmMsIDApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSaWNoVGV4dGFyZWEiLCJzZWxlY3RvciIsImZvY3VzZWQiLCJyZWFkT25seSIsInVuZG9CdWZmZXIiLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwidW5kb2FibGUiLCJldmVudFR5cGUiLCJDSEFOR0VfRVZFTlRfVFlQRSIsInNlbGVjdGlvbkNoYW5nZWQiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwicHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNDb250ZW50IiwiY29udGVudCIsInNldENvbnRlbnQiLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiY29udGVudENoYW5nZWQiLCJoYXNDb250ZW50Q2hhbmdlZCIsImNoYW5nZWQiLCJjYWxsSGFuZGxlcnMiLCJvcGVyYXRpb25zIiwiZ2VuZXJhdGVPcGVyYXRpb25zIiwiYWRkT3BlcmF0aW9ucyIsInByZXZpb3VzU2VsZWN0aW9uIiwic2V0UHJldmlvdXNDb250ZW50Iiwic2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiY29udGV4dG1lbnVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJrZXlEb3duSGFuZGxlciIsImN0cmxLZXkiLCJtZXRhS2V5Iiwia2V5Q29kZSIsIkZfS0VZX0NPREUiLCJmaW5kIiwiWl9LRVlfQ09ERSIsInNoaWZ0S2V5IiwicmVkbyIsInVuZG8iLCJkZWZlciIsInNjcm9sbEhhbmRsZXIiLCJTQ1JPTExfRVZFTlRfVFlQRSIsImZvY3VzSGFuZGxlciIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJibHVySGFuZGxlciIsIkJMVVJfRVZFTlRfVFlQRSIsImlucHV0SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwic2VsZWN0aW9uRW1wdHkiLCJpc0VtcHR5IiwiZGVsZXRlT3BlcmF0aW9uIiwiRGVsZXRlT3BlcmF0aW9uIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJvcGVyYXRpb24iLCJhcHBseU9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsImNvcHlIYW5kbGVyIiwic2VsZWN0ZWRDb250ZW50IiwiZ2V0U2VsZWN0ZWRDb250ZW50IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiY3V0SGFuZGxlciIsImlzRm9jdXNlZCIsImlzUmVhZE9ubHkiLCJnZXRVbmRvQnVmZmVyIiwic2V0Rm9jdXNlZCIsInNldFJlYWRPbmx5IiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsImVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJjb250ZW50UHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiIsImlzRXF1YWxUbyIsIk9iamVjdCIsImFzc2lnbiIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJGSU5EX0VWRU5UX1RZUEUiLCJ1bmRvT3BlcmF0aW9uIiwicmV2ZXJ0IiwicmVkb09wZXJhdGlvbiIsImZyb21PcGVyYXRpb24iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1lZENvbnRlbnQiLCJ0cmFuc2Zvcm1Db250ZW50IiwidHJhbnNmb3JtZWRTZWxlY3Rpb24iLCJ0cmFuc2Zvcm1TZWxlY3Rpb24iLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImFjdGl2YXRlIiwib24iLCJLRVlET1dOX0VWRU5UX1RZUEUiLCJJTlBVVF9FVkVOVF9UWVBFIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkZpbmQiLCJmaW5kSGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvZmZGaW5kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uQmx1ciIsIm9mZkJsdXIiLCJvbkZvY3VzIiwib2ZmRm9jdXMiLCJvblNjcm9sbCIsIm9mZlNjcm9sbCIsIm9uQ2hhbmdlIiwiY2hhbmdlSGFuZGxlciIsIm9mZkNoYW5nZSIsImdldFN0YXRlIiwidXBkYXRlU3RhdGUiLCJkaWRNb3VudCIsInByb3BlcnRpZXMiLCJ1cGRhdGVJbml0aWFsU3RhdGUiLCJDVVRfRVZFTlRfVFlQRSIsIkNPUFlfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiZG9jdW1lbnQiLCJTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSIsIndpbGxVbm1vdW50Iiwic2V0SW5pdGlhbFN0YXRlIiwic2V0U3RhdGUiLCJpbml0aWFsaXNlIiwiZnJvbUNsYXNzIiwiQ2xhc3MiLCJFbGVtZW50IiwiVW5kb0J1ZmZlciIsImZyb21Ob3RoaW5nIiwicmljaFRleHRhcmVhIiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJmdW5jIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUEyQnFCQTs7O29CQXpCYTs4REFFWjsrREFDQzsyREFDSzsyREFDQTs0REFDQzsrREFDRTs2REFDQTt5QkFFSTt3QkFDSTswQkFZSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLElBQUEsQUFBTUEsNkJBc25CcEIsQUF0bkJjO2NBQU1BOzhCQUFBQTthQUFBQSxhQUNQQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxVQUFVOzhCQURoQ0o7O2tDQUVYQztRQTJCUkksK0NBQUFBLHVCQUFzQixTQUFDQyxPQUFPQyxTQUEyRztnQkFBbEdDLDRFQUFXLElBQUksRUFBRUMsNkVBQVlDLDZCQUFpQixFQUFFQyxvRkFBbUIsTUFBS0MsbUJBQW1CO1lBQ2hJLElBQUksTUFBS1QsUUFBUSxFQUFFO2dCQUNqQixJQUFNVSxrQkFBa0IsTUFBS0Msa0JBQWtCLElBQ3pDQyxVQUFVRixpQkFBa0IsR0FBRztnQkFFckMsTUFBS0csVUFBVSxDQUFDRDtZQUNsQixDQUFDO1lBRUQsSUFBTUEsV0FBVSxNQUFLRSxVQUFVLElBQ3pCQyxZQUFZLE1BQUtDLFlBQVksSUFDN0JDLGlCQUFpQixNQUFLQyxpQkFBaUIsSUFDdkNDLFVBQVdGLGtCQUFrQlQ7WUFFbkMsSUFBSVcsU0FBUztnQkFDWCxNQUFLQyxZQUFZLENBQUNkLFdBQVdILE9BQU9DO1lBQ3RDLENBQUM7WUFFRCxJQUFJQyxVQUFVO2dCQUNaLElBQUlZLGdCQUFnQjtvQkFDbEIsSUFBTVAsbUJBQWtCLE1BQUtDLGtCQUFrQixJQUN6Q1UsYUFBYUMsSUFBQUEsaUJBQWtCLEVBQUNaLGtCQUFpQkU7b0JBRXZELE1BQUtYLFVBQVUsQ0FBQ3NCLGFBQWEsQ0FBQ0Y7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBTVgsbUJBQWtCRSxVQUNsQlksb0JBQW9CVCxXQUFZLEdBQUc7WUFFekMsTUFBS1Usa0JBQWtCLENBQUNmO1lBRXhCLE1BQUtnQixvQkFBb0IsQ0FBQ0Y7UUFDNUI7UUFFQUcsK0NBQUFBLHVCQUFzQixTQUFDeEIsT0FBT0MsU0FBWTtZQUN4QyxJQUFJLE1BQUtMLE9BQU8sRUFBRTtnQkFDaEJLLHlDQUFnQixHQUFHO2dCQUVuQixNQUFLRixtQkFBbUIsQ0FBQ0MsT0FBT0M7WUFDbEMsQ0FBQztRQUNIO1FBRUF3QiwrQ0FBQUEsc0JBQXFCLFNBQUN6QixPQUFPQyxTQUFZO1lBQ3ZDRCxNQUFNMEIsY0FBYztRQUN0QjtRQUVBQywrQ0FBQUEsa0JBQWlCLFNBQUMzQixPQUFPQyxTQUFZO1lBQ25DLElBQVEyQixVQUFxQjVCLE1BQXJCNEIsU0FBU0MsVUFBWTdCLE1BQVo2QjtZQUVqQixJQUFJRCxXQUFXQyxTQUFTO2dCQUN0QixJQUFNLEFBQUVDLFVBQVk5QixNQUFaOEI7Z0JBRVIsT0FBUUE7b0JBQ04sS0FBS0Msb0JBQVU7d0JBQUU7NEJBQ2YsTUFBS0MsSUFBSSxDQUFDaEMsT0FBT0M7NEJBRWpCRCxNQUFNMEIsY0FBYzs0QkFFcEI7d0JBQ0Y7b0JBRUEsS0FBS08sb0JBQVU7d0JBQUU7NEJBQ2YsSUFBTSxBQUFFQyxXQUFhbEMsTUFBYmtDOzRCQUVSQSxXQUNFLE1BQUtDLElBQUksQ0FBQ25DLE9BQU9DLFdBQ2YsTUFBS21DLElBQUksQ0FBQ3BDLE9BQU9DLFFBQVE7NEJBRTdCRCxNQUFNMEIsY0FBYzs0QkFFcEI7d0JBQ0Y7Z0JBQ0Y7WUFDRixDQUFDO1lBRURXLE1BQU0sV0FBTTtnQkFDVixNQUFLdEMsbUJBQW1CLENBQUNDLE9BQU9DO1lBQ2xDO1FBQ0Y7UUFFQXFDLCtDQUFBQSxpQkFBZ0IsU0FBQ3RDLE9BQU9DLFNBQVk7WUFDbEMsSUFBTUUsWUFBWW9DLDZCQUFpQjtZQUVuQyxNQUFLdEIsWUFBWSxDQUFDZCxXQUFXSCxPQUFPQztRQUN0QztRQUVBdUMsK0NBQUFBLGdCQUFlLFNBQUN4QyxPQUFPQyxTQUFZO1lBQ2pDLE1BQUtMLE9BQU8sR0FBRyxJQUFJO1lBRW5CeUMsTUFBTSxXQUFNO2dCQUNWLElBQU1uQyxXQUFXLElBQUksRUFDZkMsWUFBWXNDLDRCQUFnQixFQUM1QnBDLG1CQUFtQixJQUFJO2dCQUU3QixNQUFLTixtQkFBbUIsQ0FBQ0MsT0FBT0MsU0FBU0MsVUFBVUMsV0FBV0U7WUFDaEU7UUFDRjtRQUVBcUMsK0NBQUFBLGVBQWMsU0FBQzFDLE9BQU9DLFNBQVk7WUFDaEMsTUFBS0wsT0FBTyxHQUFHLEtBQUs7WUFFcEIsSUFBTU0sV0FBVyxJQUFJLEVBQ2ZDLFlBQVl3QywyQkFBZSxFQUMzQnRDLG1CQUFtQixJQUFJO1lBRTdCLE1BQUtOLG1CQUFtQixDQUFDQyxPQUFPQyxTQUFTQyxVQUFVQyxXQUFXRTtRQUNoRTtRQUVBdUMsK0NBQUFBLGdCQUFlLFNBQUM1QyxPQUFPQyxTQUFZO1lBQ2pDLE1BQUtGLG1CQUFtQixDQUFDQyxPQUFPQztRQUNsQztRQUVBNEMsK0NBQUFBLGdCQUFlLFNBQUM3QyxPQUFPQyxTQUFZO1lBQ2pDLElBQU0sQUFBRTZDLGdCQUFrQjlDLE1BQWxCOEMsZUFDRkMsV0FBV0QsY0FBY0UsT0FBTyxDQUFDQyxlQUFJO1lBRTNDLElBQUlGLGFBQWFHLHVCQUFZLEVBQUU7Z0JBQzdCO1lBQ0YsQ0FBQztZQUVELElBQU10QyxZQUFZLE1BQUtDLFlBQVksSUFDN0JzQyxpQkFBaUJ2QyxVQUFVd0MsT0FBTztZQUV4QyxJQUFJLENBQUNELGdCQUFnQjtnQkFDbkIsSUFBTTFDLFVBQVUsTUFBS0UsVUFBVSxJQUN6QjBDLGtCQUFrQkMsZUFBZSxDQUFDQyx1QkFBdUIsQ0FBQzlDLFNBQVNHLFlBQ25FNEMsWUFBWUg7Z0JBRWxCLE1BQUtJLGNBQWMsQ0FBQ0Q7WUFDdEIsQ0FBQztZQUVELElBQU0vQyxXQUFVc0MsVUFDVlcsa0JBQWtCQyxlQUFlLENBQUNKLHVCQUF1QixDQUFDOUMsVUFBU0csWUFDbkU0QyxhQUFZRSxpQkFBa0IsR0FBRztZQUV2QyxNQUFLRCxjQUFjLENBQUNEO1lBRXBCLE1BQUt6RCxtQkFBbUIsQ0FBQ0MsT0FBT0M7WUFFaENELE1BQU0wQixjQUFjO1FBQ3RCO1FBRUFrQywrQ0FBQUEsZUFBYyxTQUFDNUQsT0FBT0MsU0FBWTtZQUNoQyxJQUFNVyxZQUFZLE1BQUtDLFlBQVksSUFDN0JzQyxpQkFBaUJ2QyxVQUFVd0MsT0FBTztZQUV4QyxJQUFJRCxnQkFBZ0I7Z0JBQ2xCO1lBQ0YsQ0FBQztZQUVELElBQU1VLGtCQUFrQixNQUFLQyxrQkFBa0I7WUFFL0NDLFVBQVVDLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDSjtZQUU5QjdELE1BQU0wQixjQUFjO1FBQ3RCO1FBRUF3QywrQ0FBQUEsY0FBYSxTQUFDbEUsT0FBT0MsU0FBWTtZQUMvQixJQUFNVyxZQUFZLE1BQUtDLFlBQVksSUFDN0JzQyxpQkFBaUJ2QyxVQUFVd0MsT0FBTztZQUV4QyxJQUFJRCxnQkFBZ0I7Z0JBQ2xCO1lBQ0YsQ0FBQztZQUVELElBQU1VLGtCQUFrQixNQUFLQyxrQkFBa0I7WUFFL0NDLFVBQVVDLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDSjtZQUU5QixJQUFNcEQsVUFBVSxNQUFLRSxVQUFVLElBQ3pCMEMsa0JBQWtCQyxlQUFlLENBQUNDLHVCQUF1QixDQUFDOUMsU0FBU0csWUFDbkU0QyxZQUFZSCxpQkFBa0IsR0FBRztZQUV2QyxNQUFLSSxjQUFjLENBQUNEO1lBRXBCLE1BQUt6RCxtQkFBbUIsQ0FBQ0MsT0FBT0M7WUFFaENELE1BQU0wQixjQUFjO1FBQ3RCO1FBM01FLE1BQUs5QixPQUFPLEdBQUdBO1FBQ2YsTUFBS0MsUUFBUSxHQUFHQTtRQUNoQixNQUFLQyxVQUFVLEdBQUdBOzs7aUJBTkRKOztZQVNuQnlFLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFZO2dCQUNWLE9BQU8sSUFBSSxDQUFDdkUsT0FBTztZQUNyQjs7O1lBRUF3RSxLQUFBQTttQkFBQUEsU0FBQUEsYUFBYTtnQkFDWCxPQUFPLElBQUksQ0FBQ3ZFLFFBQVE7WUFDdEI7OztZQUVBd0UsS0FBQUE7bUJBQUFBLFNBQUFBLGdCQUFnQjtnQkFDZCxPQUFPLElBQUksQ0FBQ3ZFLFVBQVU7WUFDeEI7OztZQUVBd0UsS0FBQUE7bUJBQUFBLFNBQUFBLFdBQVcxRSxPQUFPLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQ0EsT0FBTyxHQUFHQTtZQUNqQjs7O1lBRUEyRSxLQUFBQTttQkFBQUEsU0FBQUEsWUFBWTFFLFFBQVEsRUFBRTtnQkFDcEIsSUFBSSxDQUFDQSxRQUFRLEdBQUdBO1lBQ2xCOzs7WUFzTEEyRSxLQUFBQTttQkFBQUEsU0FBQUEsV0FBVztnQkFDVCxJQUFNQyxTQUFTLElBQUksQ0FBQ0MsUUFBUSxDQUFDO2dCQUU3QixPQUFPRDtZQUNUOzs7WUFFQTlELEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLElBQU1nRSxhQUFhLElBQUksQ0FBQ0MsYUFBYSxJQUMvQixBQUFFQyxRQUFVRixXQUFWRSxPQUNGcEUsVUFBVW9FLE9BQVEsR0FBRztnQkFFM0IsT0FBT3BFO1lBQ1Q7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUEsZUFBZTtnQkFDYixJQUFNOEQsYUFBYSxJQUFJLENBQUNDLGFBQWEsSUFDL0JoRSxZQUFZa0Usa0JBQVMsQ0FBQ0MsY0FBYyxDQUFDSjtnQkFFM0MsT0FBTy9EO1lBQ1Q7OztZQUVBa0QsS0FBQUE7bUJBQUFBLFNBQUFBLHFCQUFxQjtnQkFDbkIsSUFBTXJELFVBQVUsSUFBSSxDQUFDRSxVQUFVLElBQ3pCQyxZQUFZLElBQUksQ0FBQ0MsWUFBWSxJQUM3Qm1FLGNBQWNwRSxVQUFVcUUsY0FBYyxJQUN0Q0MsZ0JBQWdCdEUsVUFBVXVFLGdCQUFnQixJQUMxQ0MsUUFBUUYsZUFDUkcsTUFBTUwsYUFDTm5CLGtCQUFrQnBELFFBQVE2RSxLQUFLLENBQUNGLE9BQU9DO2dCQUU3QyxPQUFPeEI7WUFDVDs7O1lBRUE5QyxLQUFBQTttQkFBQUEsU0FBQUEsb0JBQW9CO2dCQUNsQixJQUFNTixVQUFVLElBQUksQ0FBQ0UsVUFBVSxJQUN6Qkosa0JBQWtCLElBQUksQ0FBQ0Msa0JBQWtCLElBQ3pDK0UseUJBQTBCOUUsWUFBWUYsaUJBQ3RDTyxpQkFBaUIsQ0FBQ3lFO2dCQUV4QixPQUFPekU7WUFDVDs7O1lBRUFSLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0I7Z0JBQ3BCLElBQU1NLFlBQVksSUFBSSxDQUFDQyxZQUFZLElBQzdCUSxvQkFBb0IsSUFBSSxDQUFDbUUsb0JBQW9CLElBQzdDQyw2QkFBNkI3RSxVQUFVOEUsU0FBUyxDQUFDckUsb0JBQ2pEaEIsbUJBQW1CLENBQUNvRiw0QkFBNEIsR0FBRztnQkFFekQsT0FBT3BGO1lBQ1Q7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUEsV0FBV0QsT0FBTyxFQUE2QjtvQkFBM0JhLHFCQUFBQSxpRUFBcUIsSUFBSTtnQkFDM0MsSUFBTXVELFFBQVFwRSxTQUNSa0UsYUFBYSxJQUFJLENBQUNDLGFBQWE7Z0JBRXJDZSxPQUFPQyxNQUFNLENBQUNqQixZQUFZO29CQUN4QkUsT0FBQUE7Z0JBQ0Y7Z0JBRUEsSUFBSXZELG9CQUFvQjtvQkFDdEIsSUFBTWYsa0JBQWtCRSxTQUFVLEdBQUc7b0JBRXJDLElBQUksQ0FBQ2Esa0JBQWtCLENBQUNmO2dCQUMxQixDQUFDO1lBQ0g7OztZQUVBc0YsS0FBQUE7bUJBQUFBLFNBQUFBLGFBQWFqRixTQUFTLEVBQStCO29CQUE3QlcsdUJBQUFBLGlFQUF1QixJQUFJO2dCQUNqRCxJQUFNdUUseUJBQXlCbEYsVUFBVXVFLGdCQUFnQixJQUNuRFksdUJBQXVCbkYsVUFBVXFFLGNBQWMsSUFDL0NlLGlCQUFpQkYsd0JBQ2pCRyxlQUFlRixzQkFDZnBCLGFBQWEsSUFBSSxDQUFDQyxhQUFhO2dCQUVyQ0QsV0FBV3VCLGlCQUFpQixDQUFDRixnQkFBZ0JDO2dCQUU3QyxJQUFJMUUsc0JBQXNCO29CQUN4QixJQUFNRixvQkFBb0JULFdBQVksR0FBRztvQkFFekMsSUFBSSxDQUFDVyxvQkFBb0IsQ0FBQ0Y7Z0JBQzVCLENBQUM7WUFDSDs7O1lBRUFXLEtBQUFBO21CQUFBQSxTQUFBQSxLQUFLaEMsS0FBSyxFQUFFQyxPQUFPLEVBQUU7Z0JBQ25CLElBQU1FLFlBQVlnRywyQkFBZTtnQkFFakMsSUFBSSxDQUFDbEYsWUFBWSxDQUFDZCxXQUFXSCxPQUFPQztZQUN0Qzs7O1lBRUFtQyxLQUFBQTttQkFBQUEsU0FBQUEsS0FBS3BDLEtBQUssRUFBRUMsT0FBTyxFQUFFO2dCQUNuQixJQUFNbUcsZ0JBQWdCLElBQUksQ0FBQ3RHLFVBQVUsQ0FBQ3NDLElBQUk7Z0JBRTFDLElBQUlnRSxrQkFBa0IsSUFBSSxFQUFFO29CQUMxQixJQUFNNUMsWUFBWTRDLGVBQWdCLEdBQUc7b0JBRXJDLElBQUksQ0FBQ0MsTUFBTSxDQUFDckcsT0FBT0MsU0FBU3VEO2dCQUM5QixDQUFDO1lBQ0g7OztZQUVBckIsS0FBQUE7bUJBQUFBLFNBQUFBLEtBQUtuQyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtnQkFDbkIsSUFBTXFHLGdCQUFnQixJQUFJLENBQUN4RyxVQUFVLENBQUNxQyxJQUFJO2dCQUUxQyxJQUFJbUUsa0JBQWtCLElBQUksRUFBRTtvQkFDMUIsSUFBTTlDLFlBQVk4QyxlQUFnQixHQUFHO29CQUVyQyxJQUFJLENBQUNELE1BQU0sQ0FBQ3JHLE9BQU9DLFNBQVN1RDtnQkFDOUIsQ0FBQztZQUNIOzs7WUFFQTZDLEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPckcsS0FBSyxFQUFFQyxPQUFPLEVBQUV1RCxTQUFTLEVBQUU7Z0JBQ2hDLElBQU10RCxXQUFXLEtBQUssRUFDaEJVLFlBQVlrRSxrQkFBUyxDQUFDeUIsYUFBYSxDQUFDL0MsWUFDcENqQyx1QkFBdUIsS0FBSztnQkFFbEMsSUFBSSxDQUFDa0MsY0FBYyxDQUFDRDtnQkFFcEIsSUFBSSxDQUFDcUMsWUFBWSxDQUFDakYsV0FBV1c7Z0JBRTdCLElBQUksQ0FBQ3hCLG1CQUFtQixDQUFDQyxPQUFPQyxTQUFTQztZQUMzQzs7O1lBRUFzRyxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVXRGLFVBQVUsRUFBRTtnQkFDcEIsSUFBSVQsVUFBVSxJQUFJLENBQUNFLFVBQVUsSUFDekJDLFlBQVksSUFBSSxDQUFDQyxZQUFZO2dCQUVqQyxJQUFNNEYscUJBQXFCQyxJQUFBQSxnQkFBZ0IsRUFBQ2pHLFNBQVNTLGFBQy9DeUYsdUJBQXVCQyxJQUFBQSxtQkFBa0IsRUFBQ2hHLFdBQVdNO2dCQUUzRFQsVUFBVWdHLG9CQUFvQixHQUFHO2dCQUVqQzdGLFlBQVkrRixzQkFBc0IsR0FBRztnQkFFckMsSUFBTXJGLHFCQUFxQixLQUFLLEVBQzFCQyx1QkFBdUIsS0FBSztnQkFFbEMsSUFBSSxDQUFDYixVQUFVLENBQUNELFNBQVNhO2dCQUV6QixJQUFJLENBQUN1RSxZQUFZLENBQUNqRixXQUFXVztnQkFFN0IsSUFBSSxDQUFDekIsVUFBVSxDQUFDMEcsU0FBUyxDQUFDdEY7Z0JBRTFCLElBQU1sQixRQUFRLElBQUksRUFDWkMsVUFBVSxJQUFJLEVBQ2RDLFdBQVcsS0FBSyxFQUNoQkMsWUFBWUMsNkJBQWlCO2dCQUVuQyxJQUFJLENBQUNMLG1CQUFtQixDQUFDQyxPQUFPQyxTQUFTQyxVQUFVQztZQUNyRDs7O1lBRUFjLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhZCxTQUFTLEVBQXlCO2dCQUF2QixJQUFBLElBQUEsT0FBQSxVQUFBLFFBQUEsQUFBRzBHLHFCQUFILFVBQUEsT0FBQSxJQUFBLE9BQUEsS0FBcUIsR0FBckIsT0FBQSxHQUFBLE9BQUEsTUFBQSxPQUFBO29CQUFHQSxtQkFBSCxPQUFBLEtBQUEsU0FBQSxDQUFBLEtBQXFCO2dCQUFEOztnQkFDMUMsSUFBTUMsaUJBQWlCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUM1RztnQkFFL0MyRyxlQUFlRSxPQUFPLENBQUMsU0FBQ0MsZUFBa0I7b0JBQ3hDLElBQUksQUFBRWhILFVBQVlnSCxjQUFaaEg7b0JBRU4sSUFBTSxBQUFFaUgsVUFBWUQsY0FBWkMsU0FDQUMsaUJBQWlCbEgsU0FBUyxHQUFHO29CQUVyQ0EsaUJBQWdCLEdBQUc7b0JBRW5CLElBQUksQUFBQ2lILFlBQVksTUFBS3hFLFdBQVcsSUFBTXdFLFlBQVksTUFBSzFFLFlBQVksSUFBTTBFLFlBQVksTUFBSzVFLGFBQWEsRUFBRzs0QkFDekc0RTt3QkFBQUEsQ0FBQUEsV0FBQUEsU0FBUUUsSUFBSSxDQUFaRixNQUFBQSxVQUFBQTs0QkFBYUM7eUJBQStDLENBQTVERCxPQUE2QixtQkFBR0wscUJBQWhDSzs0QkFBb0RqSDt5QkFBUTtvQkFDOUQsQ0FBQztnQkFDSDtZQUNGOzs7WUFFQXdELEtBQUFBO21CQUFBQSxTQUFBQSxlQUFlRCxTQUFTLEVBQUU7Z0JBQ3hCLElBQUkvQyxVQUFVLElBQUksQ0FBQ0UsVUFBVSxJQUN6QkMsWUFBWSxJQUFJLENBQUNDLFlBQVk7Z0JBRWpDLElBQU00RixxQkFBcUJqRCxVQUFVa0QsZ0JBQWdCLENBQUNqRyxVQUNoRGtHLHVCQUF1Qm5ELFVBQVVvRCxrQkFBa0IsQ0FBQ2hHO2dCQUUxREgsVUFBVWdHLG9CQUFvQixHQUFHO2dCQUVqQzdGLFlBQVkrRixzQkFBc0IsR0FBRztnQkFFckMsSUFBTXJGLHFCQUFxQixLQUFLLEVBQzFCQyx1QkFBdUIsS0FBSztnQkFFbEMsSUFBSSxDQUFDYixVQUFVLENBQUNELFNBQVNhO2dCQUV6QixJQUFJLENBQUN1RSxZQUFZLENBQUNqRixXQUFXVztZQUMvQjs7O1lBRUE4RixLQUFBQTttQkFBQUEsU0FBQUEsV0FBVztnQkFDVCxJQUFJLENBQUNDLEVBQUUsQ0FBQ0MsOEJBQWtCLEVBQUUsSUFBSSxDQUFDNUYsY0FBYyxFQUFFLElBQUk7Z0JBRXJELElBQUksQ0FBQzJGLEVBQUUsQ0FBQ0UsNEJBQWdCLEVBQUUsSUFBSSxDQUFDNUUsWUFBWSxFQUFFLElBQUk7Z0JBRWpELElBQUksQ0FBQzBFLEVBQUUsQ0FBQy9FLDZCQUFpQixFQUFFLElBQUksQ0FBQ0QsYUFBYSxFQUFFLElBQUk7Z0JBRW5ELElBQUksQ0FBQ2dGLEVBQUUsQ0FBQzdFLDRCQUFnQixFQUFFLElBQUksQ0FBQ0QsWUFBWSxFQUFFLElBQUk7Z0JBRWpELElBQUksQ0FBQzhFLEVBQUUsQ0FBQzNFLDJCQUFlLEVBQUUsSUFBSSxDQUFDRCxXQUFXLEVBQUUsSUFBSTtnQkFFL0MsSUFBSSxDQUFDK0UsUUFBUSxDQUFDO1lBQ2hCOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGFBQWE7Z0JBQ1gsSUFBSSxDQUFDQyxHQUFHLENBQUNKLDhCQUFrQixFQUFFLElBQUksQ0FBQzVGLGNBQWMsRUFBRSxJQUFJO2dCQUV0RCxJQUFJLENBQUNnRyxHQUFHLENBQUNILDRCQUFnQixFQUFFLElBQUksQ0FBQzVFLFlBQVksRUFBRSxJQUFJO2dCQUVsRCxJQUFJLENBQUMrRSxHQUFHLENBQUNwRiw2QkFBaUIsRUFBRSxJQUFJLENBQUNELGFBQWEsRUFBRSxJQUFJO2dCQUVwRCxJQUFJLENBQUNxRixHQUFHLENBQUNsRiw0QkFBZ0IsRUFBRSxJQUFJLENBQUNELFlBQVksRUFBRSxJQUFJO2dCQUVsRCxJQUFJLENBQUNtRixHQUFHLENBQUNoRiwyQkFBZSxFQUFFLElBQUksQ0FBQ0QsV0FBVyxFQUFFLElBQUk7Z0JBRWhELElBQUksQ0FBQ2tGLFdBQVcsQ0FBQztZQUNuQjs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPQyxXQUFXLEVBQUU3SCxPQUFPLEVBQUU7Z0JBQzNCLElBQU1FLFlBQVlnRywyQkFBZSxFQUMzQmUsVUFBVVksYUFBYyxHQUFHO2dCQUVqQyxJQUFJLENBQUNDLGdCQUFnQixDQUFDNUgsV0FBVytHLFNBQVNqSDtZQUM1Qzs7O1lBRUErSCxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUUYsV0FBVyxFQUFFN0gsT0FBTyxFQUFFO2dCQUM1QixJQUFNRSxZQUFZZ0csMkJBQWUsRUFDM0JlLFVBQVVZLGFBQWMsR0FBRztnQkFFakMsSUFBSSxDQUFDRyxtQkFBbUIsQ0FBQzlILFdBQVcrRyxTQUFTakg7WUFDL0M7OztZQUVBaUksS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU94RixXQUFXLEVBQUV6QyxPQUFPLEVBQUU7Z0JBQzNCLElBQU1FLFlBQVl3QywyQkFBZSxFQUMzQnVFLFVBQVV4RSxhQUFjLEdBQUc7Z0JBRWpDLElBQUksQ0FBQ3FGLGdCQUFnQixDQUFDNUgsV0FBVytHLFNBQVNqSDtZQUM1Qzs7O1lBRUFrSSxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUXpGLFdBQVcsRUFBRXpDLE9BQU8sRUFBRTtnQkFDNUIsSUFBTUUsWUFBWXdDLDJCQUFlLEVBQzNCdUUsVUFBVXhFLGFBQWMsR0FBRztnQkFFakMsSUFBSSxDQUFDdUYsbUJBQW1CLENBQUM5SCxXQUFXK0csU0FBU2pIO1lBQy9DOzs7WUFFQW1JLEtBQUFBO21CQUFBQSxTQUFBQSxRQUFRMUYsV0FBVyxFQUFFekMsT0FBTyxFQUFFO2dCQUM1QixJQUFNRSxZQUFZc0MsNEJBQWdCLEVBQzVCeUUsVUFBVXhFLGFBQWMsR0FBRztnQkFFakMsSUFBSSxDQUFDcUYsZ0JBQWdCLENBQUM1SCxXQUFXK0csU0FBU2pIO1lBQzVDOzs7WUFFQW9JLEtBQUFBO21CQUFBQSxTQUFBQSxTQUFTM0YsV0FBVyxFQUFFekMsT0FBTyxFQUFFO2dCQUM3QixJQUFNRSxZQUFZc0MsNEJBQWdCLEVBQzVCeUUsVUFBVXhFLGFBQWMsR0FBRztnQkFFakMsSUFBSSxDQUFDdUYsbUJBQW1CLENBQUM5SCxXQUFXK0csU0FBU2pIO1lBQy9DOzs7WUFFQXFJLEtBQUFBO21CQUFBQSxTQUFBQSxTQUFTaEcsYUFBYSxFQUFFckMsT0FBTyxFQUFFO2dCQUMvQixJQUFNRSxZQUFZb0MsNkJBQWlCLEVBQzdCMkUsVUFBVTVFLGVBQWdCLEdBQUc7Z0JBRW5DLElBQUksQ0FBQ3lGLGdCQUFnQixDQUFDNUgsV0FBVytHLFNBQVNqSDtZQUM1Qzs7O1lBRUFzSSxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVWpHLGFBQWEsRUFBRXJDLE9BQU8sRUFBRTtnQkFDaEMsSUFBTUUsWUFBWW9DLDZCQUFpQixFQUM3QjJFLFVBQVU1RSxlQUFnQixHQUFHO2dCQUVuQyxJQUFJLENBQUMyRixtQkFBbUIsQ0FBQzlILFdBQVcrRyxTQUFTakg7WUFDL0M7OztZQUVBdUksS0FBQUE7bUJBQUFBLFNBQUFBLFNBQVNDLGFBQWEsRUFBRXhJLE9BQU8sRUFBRTtnQkFDL0IsSUFBTUUsWUFBWUMsNkJBQWlCLEVBQzdCOEcsVUFBVXVCLGVBQWdCLEdBQUc7Z0JBRW5DLElBQUksQ0FBQ1YsZ0JBQWdCLENBQUM1SCxXQUFXK0csU0FBU2pIO1lBQzVDOzs7WUFFQXlJLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVRCxhQUFhLEVBQUV4SSxPQUFPLEVBQUU7Z0JBQ2hDLElBQU1FLFlBQVlDLDZCQUFpQixFQUM3QjhHLFVBQVV1QixlQUFnQixHQUFHO2dCQUVuQyxJQUFJLENBQUNSLG1CQUFtQixDQUFDOUgsV0FBVytHLFNBQVNqSDtZQUMvQzs7O1lBRUFPLEtBQUFBO21CQUFBQSxTQUFBQSxxQkFBcUI7Z0JBQ25CLElBQU0sQUFBRUQsa0JBQW9CLElBQUksQ0FBQ29JLFFBQVEsR0FBakNwSTtnQkFFUixPQUFPQTtZQUNUOzs7WUFFQWlGLEtBQUFBO21CQUFBQSxTQUFBQSx1QkFBdUI7Z0JBQ3JCLElBQU0sQUFBRW5FLG9CQUFzQixJQUFJLENBQUNzSCxRQUFRLEdBQW5DdEg7Z0JBRVIsT0FBT0E7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxtQkFBbUJmLGVBQWUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDcUksV0FBVyxDQUFDO29CQUNmckksaUJBQUFBO2dCQUNGO1lBQ0Y7OztZQUVBZ0IsS0FBQUE7bUJBQUFBLFNBQUFBLHFCQUFxQkYsaUJBQWlCLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQ3VILFdBQVcsQ0FBQztvQkFDZnZILG1CQUFBQTtnQkFDRjtZQUNGOzs7WUFFQXdILEtBQUFBO21CQUFBQSxTQUFBQSxXQUFXO2dCQUNULElBQXdELG1CQUFBLElBQUksQ0FBQ0MsVUFBVSxFQUEvRGpCLFNBQWdELGlCQUFoREEsUUFBUUssU0FBd0MsaUJBQXhDQSxRQUFRRSxVQUFnQyxpQkFBaENBLFNBQVNJLFdBQXVCLGlCQUF2QkEsVUFBVUYsV0FBYSxpQkFBYkEsVUFDckNSLGNBQWNELFFBQ2RuRixjQUFjd0YsUUFDZDFGLGVBQWU0RixTQUNmSyxnQkFBZ0JELFVBQ2hCbEcsZ0JBQWdCZ0csVUFBVSxHQUFHO2dCQUVuQyxJQUFJLENBQUNTLGtCQUFrQjtnQkFFdkJqQixlQUFlLElBQUksQ0FBQ0QsTUFBTSxDQUFDQyxhQUFhLElBQUk7Z0JBRTVDcEYsZUFBZSxJQUFJLENBQUN3RixNQUFNLENBQUN4RixhQUFhLElBQUk7Z0JBRTVDRixnQkFBZ0IsSUFBSSxDQUFDNEYsT0FBTyxDQUFDNUYsY0FBYyxJQUFJO2dCQUUvQ2lHLGlCQUFpQixJQUFJLENBQUNELFFBQVEsQ0FBQ0MsZUFBZSxJQUFJO2dCQUVsRG5HLGlCQUFpQixJQUFJLENBQUNnRyxRQUFRLENBQUNoRyxlQUFlLElBQUk7Z0JBRWxELElBQUksQ0FBQ2dGLEVBQUUsQ0FBQzBCLDBCQUFjLEVBQUUsSUFBSSxDQUFDOUUsVUFBVTtnQkFFdkMsSUFBSSxDQUFDb0QsRUFBRSxDQUFDMkIsMkJBQWUsRUFBRSxJQUFJLENBQUNyRixXQUFXO2dCQUV6QyxJQUFJLENBQUMwRCxFQUFFLENBQUM0Qiw0QkFBZ0IsRUFBRSxJQUFJLENBQUNyRyxZQUFZO2dCQUUzQyxJQUFJLENBQUN5RSxFQUFFLENBQUM2QixrQ0FBc0IsRUFBRSxJQUFJLENBQUMxSCxrQkFBa0I7Z0JBRXZEMkgsY0FBUSxDQUFDOUIsRUFBRSxDQUFDK0Isc0NBQTBCLEVBQUUsSUFBSSxDQUFDN0gsbUJBQW1CO1lBQ2xFOzs7WUFFQThILEtBQUFBO21CQUFBQSxTQUFBQSxjQUFjO2dCQUNaLElBQXdELG1CQUFBLElBQUksQ0FBQ1IsVUFBVSxFQUEvRGpCLFNBQWdELGlCQUFoREEsUUFBUUssU0FBd0MsaUJBQXhDQSxRQUFRRSxVQUFnQyxpQkFBaENBLFNBQVNJLFdBQXVCLGlCQUF2QkEsVUFBVUYsV0FBYSxpQkFBYkEsVUFDbkNSLGNBQWNELFFBQ2RuRixjQUFjd0YsUUFDZDFGLGVBQWU0RixTQUNmSyxnQkFBZ0JELFVBQ2hCbEcsZ0JBQWdCZ0csVUFBVSxHQUFHO2dCQUVyQ1IsZUFBZSxJQUFJLENBQUNFLE9BQU8sQ0FBQ0YsYUFBYSxJQUFJO2dCQUU3Q3BGLGVBQWUsSUFBSSxDQUFDeUYsT0FBTyxDQUFDekYsYUFBYSxJQUFJO2dCQUU3Q0YsZ0JBQWdCLElBQUksQ0FBQzZGLFFBQVEsQ0FBQzdGLGNBQWMsSUFBSTtnQkFFaERpRyxpQkFBaUIsSUFBSSxDQUFDQyxTQUFTLENBQUNELGVBQWUsSUFBSTtnQkFFbkRuRyxpQkFBaUIsSUFBSSxDQUFDaUcsU0FBUyxDQUFDakcsZUFBZSxJQUFJO2dCQUVuRCxJQUFJLENBQUNxRixHQUFHLENBQUNxQiwwQkFBYyxFQUFFLElBQUksQ0FBQzlFLFVBQVU7Z0JBRXhDLElBQUksQ0FBQ3lELEdBQUcsQ0FBQ3NCLDJCQUFlLEVBQUUsSUFBSSxDQUFDckYsV0FBVztnQkFFMUMsSUFBSSxDQUFDK0QsR0FBRyxDQUFDdUIsNEJBQWdCLEVBQUUsSUFBSSxDQUFDckcsWUFBWTtnQkFFNUMsSUFBSSxDQUFDOEUsR0FBRyxDQUFDd0Isa0NBQXNCLEVBQUUsSUFBSSxDQUFDMUgsa0JBQWtCO2dCQUV4RDJILGNBQVEsQ0FBQ3pCLEdBQUcsQ0FBQzBCLHNDQUEwQixFQUFFLElBQUksQ0FBQzdILG1CQUFtQjtnQkFFakUsSUFBTWlELFNBQVMsSUFBSSxDQUFDRCxRQUFRO2dCQUU1QixJQUFJQyxRQUFRO29CQUNWLElBQUksQ0FBQ2lELFVBQVU7Z0JBQ2pCLENBQUM7WUFDSDs7O1lBRUFxQixLQUFBQTttQkFBQUEsU0FBQUEscUJBQXFCO2dCQUNuQixJQUFNdEksVUFBVSxJQUFJLENBQUNFLFVBQVUsSUFDekJDLFlBQVksSUFBSSxDQUFDQyxZQUFZLElBQzdCTixrQkFBa0JFLFNBQ2xCWSxvQkFBb0JULFdBQVksR0FBRztnQkFFekMsSUFBSSxDQUFDVSxrQkFBa0IsQ0FBQ2Y7Z0JBRXhCLElBQUksQ0FBQ2dCLG9CQUFvQixDQUFDRjtZQUM1Qjs7O1lBRUFrSSxLQUFBQTttQkFBQUEsU0FBQUEsa0JBQWtCO2dCQUNoQixJQUFNaEosa0JBQWtCLElBQUksRUFDdEJjLG9CQUFvQixJQUFJO2dCQUU5QixJQUFJLENBQUNtSSxRQUFRLENBQUM7b0JBQ1pqSixpQkFBQUE7b0JBQ0FjLG1CQUFBQTtnQkFDRjtZQUNGOzs7WUFFQW9JLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLElBQUksQ0FBQ0YsZUFBZTtZQUN0Qjs7OztZQWdCT0csS0FBQUE7bUJBQVAsU0FBT0EsVUFBVUMsS0FBSyxFQUFFYixVQUFVLEVBQXlCO2dCQUF2QixJQUFBLElBQUEsT0FBQSxVQUFBLFFBQUEsQUFBR2pDLHFCQUFILFVBQUEsT0FBQSxJQUFBLE9BQUEsS0FBcUIsR0FBckIsT0FBQSxHQUFBLE9BQUEsTUFBQSxPQUFBO29CQUFHQSxtQkFBSCxPQUFBLEtBQUEsU0FBQSxDQUFBLEtBQXFCO2dCQUFEO29CQUlqQytDO2dCQUhyQixJQUFNaEssVUFBVSxLQUFLLEVBQ2ZDLFdBQVcsS0FBSyxFQUNoQkMsYUFBYStKLG1CQUFVLENBQUNDLFdBQVcsSUFDbkNDLGVBQWVILENBQUFBLFdBQUFBLGFBQU8sRUFBQ0YsU0FBUyxDQUFqQkUsTUFBQUEsVUFBQUE7b0JBQWtCRDtvQkFBT2I7b0JBQVlsSjtvQkFBU0M7b0JBQVVDO2lCQUFrQyxDQUExRjhKLE9BQW9FLG1CQUFHL0M7Z0JBRTVGLE9BQU9rRDtZQUNUOzs7V0FubkJtQnJLO21CQUFxQmtLLGFBQU87QUE4bEIvQyxnQkE5bEJtQmxLLGNBOGxCWnNLLFdBQVU7QUFFakIsZ0JBaG1CbUJ0SyxjQWdtQlp1SyxxQkFBb0I7SUFDekI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQsZ0JBeG1CbUJ2SyxjQXdtQlp3SyxxQkFBb0I7SUFDekJDLFdBQVc7QUFDYjtBQVlGLFNBQVM5SCxNQUFNK0gsSUFBSSxFQUFFO0lBQ25CQyxXQUFXRCxNQUFNO0FBQ25CIn0=
|
|
653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xyXG5pbXBvcnQgSW5zZXJ0T3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9pbnNlcnRcIjtcclxuaW1wb3J0IERlbGV0ZU9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vZGVsZXRlXCI7XHJcbmltcG9ydCB0cmFuc2Zvcm1Db250ZW50IGZyb20gXCIuL3RyYW5zZm9ybS9jb250ZW50XCI7XHJcbmltcG9ydCB0cmFuc2Zvcm1TZWxlY3Rpb24gZnJvbSBcIi4vdHJhbnNmb3JtL3NlbGVjdGlvblwiO1xyXG5pbXBvcnQgZ2VuZXJhdGVPcGVyYXRpb25zIGZyb20gXCIuL29wZXJhdGlvbnMvZ2VuZXJhdGVcIjtcclxuXHJcbmltcG9ydCB7IFRFWFQsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBGX0tFWV9DT0RFLCBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgQ1VUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICAgRklORF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIFBBU1RFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT05URVhUTUVOVV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJpY2hUZXh0YXJlYSBleHRlbmRzIEVsZW1lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCBmb2N1c2VkLCByZWFkT25seSwgdW5kb0J1ZmZlcikge1xyXG4gICAgc3VwZXIoc2VsZWN0b3IpO1xyXG5cclxuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgICB0aGlzLnVuZG9CdWZmZXIgPSB1bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIHBhc3RlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgeyBjbGlwYm9hcmREYXRhIH0gPSBldmVudCxcclxuICAgICAgICAgIHRleHREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFRFWFQpO1xyXG5cclxuICAgIGlmICh0ZXh0RGF0YSA9PT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gZGVsZXRlT3BlcmF0aW9uO1xyXG5cclxuICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXh0RGF0YSwgLy8vXHJcbiAgICAgICAgICBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgIG9wZXJhdGlvbiA9IGluc2VydE9wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBibHVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdW5kb2FibGUgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUsIHNlbGVjdGlvbkNoYW5nZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGtleURvd25IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBsZXQgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xyXG5cclxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xyXG4gICAgICBjYXNlIFpfS0VZX0NPREU6XHJcbiAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLnpLZXlEb3duKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEZfS0VZX0NPREU6XHJcbiAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLmZLZXlEb3duKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb250ZXh0bWVudUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnRlcm1lZGlhdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSA9IHRydWUsIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLCBzZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5oYXNTZWxlY3Rpb25DaGFuZ2VkKCkpID0+IHtcclxuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwcmV2aW91c0NvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkKCksXHJcbiAgICAgICAgICBjaGFuZ2VkID0gKGNvbnRlbnRDaGFuZ2VkIHx8IHNlbGVjdGlvbkNoYW5nZWQpO1xyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1bmRvYWJsZSkge1xyXG4gICAgICBpZiAoY29udGVudENoYW5nZWQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSB0aGlzLmdldFByZXZpb3VzQ29udGVudCgpLFxyXG4gICAgICAgICAgICAgIG9wZXJhdGlvbnMgPSBnZW5lcmF0ZU9wZXJhdGlvbnMocHJldmlvdXNDb250ZW50LCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy51bmRvQnVmZmVyLmFkZE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcclxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTtcclxuXHJcbiAgICBldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XHJcbiAgICAgIGxldCB7IGVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXI7XHJcblxyXG4gICAgICBjb25zdCB7IGhhbmRsZXIgfSA9IGV2ZW50TGlzdGVuZXIsXHJcbiAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoIChoYW5kbGVyICE9PSB0aGlzLmN1dEhhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMuY29weUhhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMucGFzdGVIYW5kbGVyKVxyXG4gICAgICAgICYmIChoYW5kbGVyICE9PSB0aGlzLmlucHV0SGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5ibHVySGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5mb2N1c0hhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5rZXlEb3duSGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2VsZWN0Q2hhbmdlSGFuZGxlcikgKSB7XHJcblxyXG4gICAgICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHZhbHVlIH0gPSBkb21FbGVtZW50LFxyXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBzZWxlY3RlZENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50UHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgPT09IHByZXZpb3VzQ29udGVudCksXHJcbiAgICAgICAgICBjb250ZW50Q2hhbmdlZCA9ICFjb250ZW50UHJldmlvdXNDb250ZW50O1xyXG5cclxuICAgIHJldHVybiBjb250ZW50Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLmdldFByZXZpb3VzU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0VxdWFsVG8ocHJldmlvdXNTZWxlY3Rpb24pLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9ICFzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNldFByZXZpb3VzQ29udGVudCkge1xyXG4gICAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgZG9tRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgcHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb247ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZktleURvd24oZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGxldCBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHsgY3RybEtleSwgbWV0YUtleSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGN0cmxLZXkgfHwgbWV0YUtleSkge1xyXG4gICAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJldmVudERlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICB6S2V5RG93bihldmVudCwgZWxlbWVudCkge1xyXG4gICAgbGV0IHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGN0cmxLZXkgfHwgbWV0YUtleSkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBzaGlmdEtleSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmRvQnVmZmVyLnJlZG8oKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuZG9CdWZmZXIudW5kbygpO1xyXG5cclxuICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21PcGVyYXRpb24ob3BlcmF0aW9uKSxcclxuICAgICAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByZXZlbnREZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKG9wZXJhdGlvbnMpIHtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZENvbnRlbnQgPSB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQsIG9wZXJhdGlvbnMpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uLCBvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMudW5kb0J1ZmZlci50cmFuc2Zvcm0ob3BlcmF0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZXZlbnQgPSBudWxsLFxyXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMsXHJcbiAgICAgICAgICB1bmRvYWJsZSA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IG9wZXJhdGlvbi50cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBvcGVyYXRpb24udHJhbnNmb3JtU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcblxyXG4gICAgY29udGVudCA9IHRyYW5zZm9ybWVkQ29udGVudDsgLy8vXHJcblxyXG4gICAgc2VsZWN0aW9uID0gdHJhbnNmb3JtZWRTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIGNvbnN0IHNldFByZXZpb3VzQ29udGVudCA9IGZhbHNlLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50KTtcclxuXHJcbiAgICB0aGlzLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHNldFByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vbihDVVRfRVZFTlRfVFlQRSwgdGhpcy5jdXRIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPUFlfRVZFTlRfVFlQRSwgdGhpcy5jb3B5SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9uKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCB0aGlzLnNlbGVjdENoYW5nZUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c0NvbnRlbnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzQ29udGVudFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25TY3JvbGwsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBmaW5kSGFuZGxlciA9IG9uRmluZCwgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1ciwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2U7IC8vL1xyXG5cclxuICAgIHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKCk7XHJcblxyXG4gICAgZmluZEhhbmRsZXIgJiYgdGhpcy5vbkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25TY3JvbGwsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXIsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlOyAvLy9cclxuXHJcbiAgICBmaW5kSGFuZGxlciAmJiB0aGlzLm9mZkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG5cclxuICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3QgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXNlKCkge1xyXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uRmluZFwiLFxyXG4gICAgXCJvbkJsdXJcIixcclxuICAgIFwib25Gb2N1c1wiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkNoYW5nZVwiXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZm9jdXNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIHVuZG9CdWZmZXIgPSBVbmRvQnVmZmVyLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgICByaWNoVGV4dGFyZWEgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHJpY2hUZXh0YXJlYTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5hc3NpZ24oUmljaFRleHRhcmVhLnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xyXG5cclxuZnVuY3Rpb24gZGVmZXIoZnVuYykge1xyXG4gIHNldFRpbWVvdXQoZnVuYywgMCk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsInNlbGVjdG9yIiwiZm9jdXNlZCIsInJlYWRPbmx5IiwidW5kb0J1ZmZlciIsImN1dEhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25FbXB0eSIsImlzRW1wdHkiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsImRlbGV0ZU9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwib3BlcmF0aW9uIiwiYXBwbHlPcGVyYXRpb24iLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJjb3B5SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwiaW5zZXJ0T3BlcmF0aW9uIiwiSW5zZXJ0T3BlcmF0aW9uIiwiaW5wdXRIYW5kbGVyIiwiYmx1ckhhbmRsZXIiLCJ1bmRvYWJsZSIsImV2ZW50VHlwZSIsIkJMVVJfRVZFTlRfVFlQRSIsInNlbGVjdGlvbkNoYW5nZWQiLCJmb2N1c0hhbmRsZXIiLCJkZWZlciIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJzY3JvbGxIYW5kbGVyIiwiU0NST0xMX0VWRU5UX1RZUEUiLCJjYWxsSGFuZGxlcnMiLCJrZXlEb3duSGFuZGxlciIsImtleUNvZGUiLCJaX0tFWV9DT0RFIiwiektleURvd24iLCJGX0tFWV9DT0RFIiwiZktleURvd24iLCJjb250ZXh0bWVudUhhbmRsZXIiLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwicHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNDb250ZW50Iiwic2V0Q29udGVudCIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJjaGFuZ2VkIiwib3BlcmF0aW9ucyIsImdlbmVyYXRlT3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJwcmV2aW91c1NlbGVjdGlvbiIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwiaXNGb2N1c2VkIiwiaXNSZWFkT25seSIsImdldFVuZG9CdWZmZXIiLCJzZXRGb2N1c2VkIiwic2V0UmVhZE9ubHkiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImlzQWN0aXZlIiwiYWN0aXZlIiwiaGFzQ2xhc3MiLCJkb21FbGVtZW50IiwiZ2V0RE9NRWxlbWVudCIsInZhbHVlIiwiU2VsZWN0aW9uIiwiZnJvbURPTUVsZW1lbnQiLCJlbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzdGFydCIsImVuZCIsInNsaWNlIiwiY29udGVudFByZXZpb3VzQ29udGVudCIsImdldFByZXZpb3VzU2VsZWN0aW9uIiwic2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb24iLCJpc0VxdWFsVG8iLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInNldFNlbGVjdGlvblJhbmdlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJGSU5EX0VWRU5UX1RZUEUiLCJzaGlmdEtleSIsInJlZG8iLCJ1bmRvIiwiZnJvbU9wZXJhdGlvbiIsInRyYW5zZm9ybSIsInRyYW5zZm9ybWVkQ29udGVudCIsInRyYW5zZm9ybUNvbnRlbnQiLCJ0cmFuc2Zvcm1lZFNlbGVjdGlvbiIsInRyYW5zZm9ybVNlbGVjdGlvbiIsImFjdGl2YXRlIiwib24iLCJDVVRfRVZFTlRfVFlQRSIsIkNPUFlfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJJTlBVVF9FVkVOVF9UWVBFIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsImRvY3VtZW50IiwiU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUiLCJhZGRDbGFzcyIsImRlYWN0aXZhdGUiLCJvZmYiLCJyZW1vdmVDbGFzcyIsImdldFN0YXRlIiwidXBkYXRlU3RhdGUiLCJkaWRNb3VudCIsInByb3BlcnRpZXMiLCJvbkZpbmQiLCJvbkJsdXIiLCJvbkZvY3VzIiwib25TY3JvbGwiLCJvbkNoYW5nZSIsImZpbmRIYW5kbGVyIiwiY2hhbmdlSGFuZGxlciIsInVwZGF0ZUluaXRpYWxTdGF0ZSIsIndpbGxVbm1vdW50Iiwib2ZmRmluZCIsIm9mZkJsdXIiLCJvZmZGb2N1cyIsIm9mZlNjcm9sbCIsIm9mZkNoYW5nZSIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiaW5pdGlhbGlzZSIsImZyb21DbGFzcyIsIkNsYXNzIiwiRWxlbWVudCIsIlVuZG9CdWZmZXIiLCJmcm9tTm90aGluZyIsInJpY2hUZXh0YXJlYSIsInRhZ05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsImRlZmF1bHRQcm9wZXJ0aWVzIiwiY2xhc3NOYW1lIiwicHJvdG90eXBlIiwiZXZlbnRNaXhpbnMiLCJmdW5jIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUE0QnFCQTs7O29CQTFCYTs4REFFWjsrREFDQzswREFDQzsyREFDSTsyREFDQTs0REFDQzsrREFDRTs2REFDQTt5QkFFSTt3QkFDSTswQkFZSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLElBQUEsQUFBTUEsNkJBMmpCcEIsQUEzakJjO2NBQU1BOzhCQUFBQTthQUFBQSxhQUNQQyxRQUFRLEVBQUVDLE9BQU8sRUFB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
|