qms-angular 1.0.79 → 1.0.83
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/bundles/qms-angular.umd.js +117 -97
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/related/popup/related-popup.component.js +48 -56
- package/esm2015/lib/components/select-one/select-one.component.js +3 -6
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +65 -34
- package/esm2015/lib/components/tree/tree.component.js +3 -3
- package/fesm2015/qms-angular.js +115 -95
- package/fesm2015/qms-angular.js.map +1 -1
- package/package.json +1 -1
- package/src/themes/core/_form.scss +4 -0
@@ -209,21 +209,23 @@ export class SelectProcessDocumentPopupComponent {
|
|
209
209
|
removeCheckedNodeList(item) {
|
210
210
|
this.selectedData = [];
|
211
211
|
this.selectedData2 = [];
|
212
|
-
this.checkedNodeList = this.checkedNodeList.filter(x => (x.id.toLowerCase() !== item.id.toLowerCase() || x.parentId.toLowerCase() !== item.parentId.toLowerCase()));
|
212
|
+
this.checkedNodeList = this.checkedNodeList.filter(x => { var _a, _b; return (x.id.toLowerCase() !== item.id.toLowerCase() || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== ((_b = item.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())); });
|
213
213
|
const tempArr = [];
|
214
214
|
const tempArrDocument = [];
|
215
215
|
const newSelectProcessList = [];
|
216
216
|
const newSelectDocumentList = [];
|
217
217
|
this.commonCheckedList.forEach(element => {
|
218
218
|
this.checkedNodeList.forEach(x => {
|
219
|
-
|
219
|
+
var _a, _b;
|
220
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && ((_a = element.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) {
|
220
221
|
tempArr.push(element);
|
221
222
|
}
|
222
223
|
});
|
223
224
|
});
|
224
225
|
this.singleProcessList.forEach(element => {
|
225
226
|
this.checkedNodeList.forEach(x => {
|
226
|
-
|
227
|
+
var _a, _b;
|
228
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && ((_a = element.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) {
|
227
229
|
newSelectProcessList.push(element);
|
228
230
|
}
|
229
231
|
});
|
@@ -234,14 +236,16 @@ export class SelectProcessDocumentPopupComponent {
|
|
234
236
|
}
|
235
237
|
this.documentCheckedList.forEach(element => {
|
236
238
|
this.checkedNodeList.forEach(x => {
|
237
|
-
|
239
|
+
var _a, _b;
|
240
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && ((_a = element.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) {
|
238
241
|
tempArrDocument.push(element);
|
239
242
|
}
|
240
243
|
});
|
241
244
|
});
|
242
245
|
this.singleDocumentList.forEach(element => {
|
243
246
|
this.checkedNodeList.forEach(x => {
|
244
|
-
|
247
|
+
var _a, _b;
|
248
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && ((_a = element.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) {
|
245
249
|
newSelectDocumentList.push(element);
|
246
250
|
}
|
247
251
|
});
|
@@ -311,15 +315,16 @@ export class SelectProcessDocumentPopupComponent {
|
|
311
315
|
this.selectedNode = [];
|
312
316
|
if (this.treeConfig1.showCheckBox) {
|
313
317
|
index = this.checkedNodeList.findIndex(x => {
|
314
|
-
|
318
|
+
var _a, _b;
|
319
|
+
return x.id.toLowerCase() === item.id.toLowerCase() && ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = item.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()) && x.itemType === item.itemType;
|
315
320
|
});
|
316
321
|
}
|
317
322
|
if (index < 0) {
|
318
323
|
if (item.itemType === this.dataType.document || item.itemType === this.dataType.folder) {
|
319
324
|
// document
|
320
325
|
const isExistInDisabled = this.disabledList2.findIndex(x => {
|
321
|
-
var _a;
|
322
|
-
return ((_a = x.id) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === item.id.toLowerCase() && (!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase() && x.itemType === item.itemType);
|
326
|
+
var _a, _b, _c;
|
327
|
+
return ((_a = x.id) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === item.id.toLowerCase() && (!item.parentId || ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === ((_c = item.parentId) === null || _c === void 0 ? void 0 : _c.toLowerCase()) && x.itemType === item.itemType);
|
323
328
|
}) >= 0;
|
324
329
|
if (isExistInDisabled) {
|
325
330
|
return;
|
@@ -328,8 +333,8 @@ export class SelectProcessDocumentPopupComponent {
|
|
328
333
|
}
|
329
334
|
else if (item.itemType === this.dataType.area || item.itemType === this.dataType.process) {
|
330
335
|
const isExistInDisabled = this.disabledList.findIndex(x => {
|
331
|
-
var _a;
|
332
|
-
return ((_a = x.id) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === item.id.toLowerCase() && (!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase() && x.itemType === item.itemType);
|
336
|
+
var _a, _b, _c;
|
337
|
+
return ((_a = x.id) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === item.id.toLowerCase() && (!item.parentId || ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === ((_c = item.parentId) === null || _c === void 0 ? void 0 : _c.toLowerCase()) && x.itemType === item.itemType);
|
333
338
|
}) >= 0;
|
334
339
|
if (isExistInDisabled) {
|
335
340
|
return;
|
@@ -351,14 +356,20 @@ export class SelectProcessDocumentPopupComponent {
|
|
351
356
|
newNodeDocs.displayId = +item.itemNumberId;
|
352
357
|
newNodeDocs.expandable = item.itemType == DataType.folder || item.itemType == DataType.area ? true : false;
|
353
358
|
if (item.itemType == DataType.folder || item.itemType == DataType.document) {
|
354
|
-
if (this.treeData2.findIndex(x =>
|
355
|
-
|
359
|
+
if (this.treeData2.findIndex(x => {
|
360
|
+
var _a, _b;
|
361
|
+
return x.id.toLowerCase() === newNodeDocs.id.toLowerCase() &&
|
362
|
+
(!newNodeDocs.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = newNodeDocs.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable === newNodeDocs.expandable;
|
363
|
+
}) >= 0) {
|
356
364
|
this.treeData2 = [...this.treeData2, newNodeDocs];
|
357
365
|
}
|
358
366
|
}
|
359
367
|
else {
|
360
|
-
if (this.treeData1.findIndex(x =>
|
361
|
-
|
368
|
+
if (this.treeData1.findIndex(x => {
|
369
|
+
var _a, _b;
|
370
|
+
return x.id.toLowerCase() === newNodeDocs.id.toLowerCase() &&
|
371
|
+
(!newNodeDocs.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = newNodeDocs.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable === newNodeDocs.expandable;
|
372
|
+
}) >= 0) {
|
362
373
|
this.treeData1 = [...this.treeData1, newNodeDocs];
|
363
374
|
}
|
364
375
|
}
|
@@ -377,11 +388,14 @@ export class SelectProcessDocumentPopupComponent {
|
|
377
388
|
this.documentCheckedList = [];
|
378
389
|
this.commonCheckedList = [];
|
379
390
|
}
|
380
|
-
const index = this.checkedNodeList.findIndex(x =>
|
381
|
-
|
391
|
+
const index = this.checkedNodeList.findIndex(x => {
|
392
|
+
var _a, _b;
|
393
|
+
return x.id.toLowerCase() === newNodeDocs.id.toLowerCase() &&
|
394
|
+
(!newNodeDocs.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = newNodeDocs.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable === newNodeDocs.expandable;
|
395
|
+
});
|
382
396
|
if (index < 0) {
|
383
397
|
if (item.itemType == DataType.folder || item.itemType == DataType.document) {
|
384
|
-
if (this.documentCheckedList.findIndex(x => x.id.toLowerCase() === newNodeDocs.id.toLowerCase() && x.parentId.toLowerCase() === newNodeDocs.parentId.toLowerCase()) < 0) {
|
398
|
+
if (this.documentCheckedList.findIndex(x => { var _a, _b; return x.id.toLowerCase() === newNodeDocs.id.toLowerCase() && ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = newNodeDocs.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()); }) < 0) {
|
385
399
|
this.documentCheckedList.push({
|
386
400
|
id: newNodeDocs.id,
|
387
401
|
name: newNodeDocs.name,
|
@@ -396,7 +410,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
396
410
|
}
|
397
411
|
}
|
398
412
|
else {
|
399
|
-
if (this.commonCheckedList.findIndex(x => x.id.toLowerCase() === newNodeDocs.id.toLowerCase() && x.parentId.toLowerCase() === newNodeDocs.parentId.toLowerCase()) < 0) {
|
413
|
+
if (this.commonCheckedList.findIndex(x => { var _a, _b; return x.id.toLowerCase() === newNodeDocs.id.toLowerCase() && ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = newNodeDocs.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()); }) < 0) {
|
400
414
|
this.commonCheckedList.push({
|
401
415
|
id: newNodeDocs.id,
|
402
416
|
name: newNodeDocs.name,
|
@@ -448,16 +462,18 @@ export class SelectProcessDocumentPopupComponent {
|
|
448
462
|
};
|
449
463
|
if (x.itemType === DataType.area || x.itemType === DataType.process) {
|
450
464
|
this.treeData1.forEach(item => {
|
465
|
+
var _a, _b;
|
451
466
|
if (item.id && x.id.toLowerCase() === item.id.toLowerCase() &&
|
452
|
-
(!x.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase())) {
|
467
|
+
(!x.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = item.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()))) {
|
453
468
|
selectProcess.push(node);
|
454
469
|
}
|
455
470
|
});
|
456
471
|
}
|
457
472
|
else {
|
458
473
|
this.treeData2.forEach(item => {
|
474
|
+
var _a, _b;
|
459
475
|
if (item.id && x.id.toLowerCase() === item.id.toLowerCase() &&
|
460
|
-
(!x.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase())) {
|
476
|
+
(!x.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = item.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()))) {
|
461
477
|
selectDocument.push(node);
|
462
478
|
}
|
463
479
|
});
|
@@ -469,14 +485,20 @@ export class SelectProcessDocumentPopupComponent {
|
|
469
485
|
this.selectedData2 = [...this.selectedData2, ...selectDocument];
|
470
486
|
}
|
471
487
|
if (item.itemType === DataType.folder || item.itemType === DataType.document) {
|
472
|
-
if (this.selectedData2.findIndex(x =>
|
473
|
-
|
488
|
+
if (this.selectedData2.findIndex(x => {
|
489
|
+
var _a, _b;
|
490
|
+
return x.id.toLowerCase() === item.id.toLowerCase() &&
|
491
|
+
(!item.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = item.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable === item.expandable;
|
492
|
+
}) < 0) {
|
474
493
|
this.selectedData2 = [...this.selectedData2, item];
|
475
494
|
}
|
476
495
|
}
|
477
496
|
else {
|
478
|
-
if (this.selectedData.findIndex(x =>
|
479
|
-
|
497
|
+
if (this.selectedData.findIndex(x => {
|
498
|
+
var _a, _b;
|
499
|
+
return x.id.toLowerCase() === item.id.toLowerCase() &&
|
500
|
+
(!item.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = item.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable === item.expandable;
|
501
|
+
}) < 0) {
|
480
502
|
this.selectedData = [...this.selectedData, item];
|
481
503
|
}
|
482
504
|
}
|
@@ -614,7 +636,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
614
636
|
return null;
|
615
637
|
}
|
616
638
|
toggleSelectItem(node) {
|
617
|
-
const selectedNode = this.checkedNodeList.find(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase()));
|
639
|
+
const selectedNode = this.checkedNodeList.find(x => { var _a, _b; return (x.id.toLowerCase() === node.id.toLowerCase() && ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = node.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())); });
|
618
640
|
if (selectedNode) {
|
619
641
|
this.removeCheckedNodeList({
|
620
642
|
id: selectedNode.id,
|
@@ -634,7 +656,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
634
656
|
}
|
635
657
|
}
|
636
658
|
isNodeSelected(node) {
|
637
|
-
return this.checkedNodeList.filter(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase())).length > 0;
|
659
|
+
return this.checkedNodeList.filter(x => { var _a, _b; return (x.id.toLowerCase() === node.id.toLowerCase() && ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = node.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())); }).length > 0;
|
638
660
|
}
|
639
661
|
getChildrenOfFolder(node, type) {
|
640
662
|
let item = new QMSProcessDocumentItem();
|
@@ -657,8 +679,11 @@ export class SelectProcessDocumentPopupComponent {
|
|
657
679
|
if (!node.itemType) {
|
658
680
|
return;
|
659
681
|
}
|
660
|
-
const index = this.checkedNodeList.findIndex(x =>
|
661
|
-
|
682
|
+
const index = this.checkedNodeList.findIndex(x => {
|
683
|
+
var _a, _b;
|
684
|
+
return x.id.toLowerCase() === node.id.toLowerCase()
|
685
|
+
&& (!node.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = node.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.itemType === node.itemType;
|
686
|
+
});
|
662
687
|
if (index >= 0) {
|
663
688
|
this.removeCheckedNodeList({
|
664
689
|
id: node.id,
|
@@ -676,12 +701,18 @@ export class SelectProcessDocumentPopupComponent {
|
|
676
701
|
let status = 0;
|
677
702
|
let statusName = '';
|
678
703
|
if (node.itemType == DataType.folder || node.itemType == DataType.document) {
|
679
|
-
item = this.treeData2.find(x =>
|
680
|
-
|
704
|
+
item = this.treeData2.find(x => {
|
705
|
+
var _a, _b;
|
706
|
+
return x.id.toLowerCase() === node.id.toLowerCase()
|
707
|
+
&& (!node.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = node.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable == node.expandable;
|
708
|
+
});
|
681
709
|
}
|
682
710
|
else {
|
683
|
-
item = this.treeData1.find(x =>
|
684
|
-
|
711
|
+
item = this.treeData1.find(x => {
|
712
|
+
var _a, _b;
|
713
|
+
return x.id.toLowerCase() === node.id.toLowerCase()
|
714
|
+
&& (!node.parentId || ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = node.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase())) && x.expandable == node.expandable;
|
715
|
+
});
|
685
716
|
}
|
686
717
|
if (item) {
|
687
718
|
statusName = item.statusName;
|
@@ -749,7 +780,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
749
780
|
SelectProcessDocumentPopupComponent.decorators = [
|
750
781
|
{ type: Component, args: [{
|
751
782
|
selector: 'qms-select-process-document',
|
752
|
-
template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ moduleName | uppercase }}</span>\r\n </div>\r\n </div>\r\n\r\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n (optionSelected)=\"selectRelated($event.option.value)\"\r\n [displayWith]=\"displayWhenSelectRelatedOption\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n [class.related-viewport]=\"isInputValue\"\r\n *ngIf=\"filteredOptions.length\"\r\n >\r\n <ng-container *ngFor=\"let type of searchOrder\">\r\n <div\r\n class=\"search__module-result\"\r\n *ngIf=\"canShowSearchOption(type.value)\"\r\n >\r\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n type=\"image-square\"\r\n [svgIcon]=\"getNodeIcon(option)\"\r\n ></mat-icon>\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n <div\r\n class=\"caption\"\r\n *ngIf=\"option.breadcumbs && option.breadcumbs.length\"\r\n >\r\n <qms-breadcrumb\r\n class=\"breadcrumb-containe\"\r\n type=\"table\"\r\n numDisplayItem=\"1\"\r\n [nodes]=\"option.breadcumbs\"\r\n >\r\n </qms-breadcrumb>\r\n </div>\r\n </div>\r\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\r\n <span class=\"material-icons-outlined search__description-icon\">\r\n local_offer\r\n </span>\r\n {{ getItemId(option) }}\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n\r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length,\r\n 'col-6': splitView,\r\n 'col-12': !splitView\r\n }\"\r\n >\r\n <mat-expansion-panel\r\n hideToggle\r\n id=\"qmslib_related_popup_common_001\"\r\n [expanded]=\"isCommonExpanded\"\r\n (opened)=\"isCommonExpanded = true\"\r\n (closed)=\"isCommonExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\r\n {{ LANG.PROCESSES | uppercase }}\r\n </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData1\"\r\n [treeConfig]=\"treeConfig1\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n <div\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n class=\"line__divider\"\r\n ></div>\r\n\r\n <mat-expansion-panel\r\n hideToggle\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n id=\"qmslib_related_popup_document_001\"\r\n [expanded]=\"isDocumentExpanded\"\r\n (opened)=\"isDocumentExpanded = true\"\r\n (closed)=\"isDocumentExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\r\n {{ splitViewTitle }}\r\n </div>\r\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n [checked]=\"isNodeSelected(node)\"\r\n (change)=\"toggleSelectItem(node)\"\r\n *ngIf=\"!hideSplitviewCheckbox\"\r\n >\r\n </mat-checkbox>\r\n <button\r\n class=\"button-boder\"\r\n mat-icon-button\r\n [disableRipple]=\"true\"\r\n (click)=\"toggleSelectItem(node)\"\r\n *ngIf=\"node.itemName\"\r\n >\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n >\r\n </mat-icon>\r\n </button>\r\n <span\r\n class=\"text-node-item\"\r\n style=\"cursor: pointer\"\r\n (click)=\"toggleSelectItem(node)\"\r\n [class.bgSelected]=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >\r\n <span\r\n class=\"text-node\"\r\n [class.select-one-checked]=\"\r\n isSelectOne &&\r\n idCheckIconSplitView ==\r\n idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >{{ node.itemName }}</span\r\n >\r\n <mat-icon\r\n class=\"select-one-checked\"\r\n *ngIf=\"\r\n isSelectOne &&\r\n idCheckIconSplitView ==\r\n idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >\r\n done\r\n </mat-icon>\r\n </span>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n <div\r\n *ngIf=\"splitView\"\r\n class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\"\r\n >\r\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\r\n {{ splitViewTitle }}\r\n </div>\r\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n [checked]=\"isNodeSelected(node)\"\r\n (change)=\"toggleSelectItem(node)\"\r\n ></mat-checkbox>\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n ></mat-icon>\r\n <span class=\"text-node\">{{ node.itemName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 pr-0 pe-0\">\r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>{{\r\n getItemChipName(item)\r\n }}</span>\r\n <mat-icon\r\n *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\r\n (click)=\"removeCheckedNodeList(item)\"\r\n >cancel</mat-icon\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n</div>\r\n",
|
783
|
+
template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ moduleName | uppercase }}</span>\r\n </div>\r\n </div>\r\n\r\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n (optionSelected)=\"selectRelated($event.option.value)\"\r\n [displayWith]=\"displayWhenSelectRelatedOption\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n [class.related-viewport]=\"isInputValue\"\r\n *ngIf=\"filteredOptions.length\"\r\n >\r\n <ng-container *ngFor=\"let type of searchOrder\">\r\n <div\r\n class=\"search__module-result\"\r\n *ngIf=\"canShowSearchOption(type.value)\"\r\n >\r\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n type=\"image-square\"\r\n [svgIcon]=\"getNodeIcon(option)\"\r\n ></mat-icon>\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n <div\r\n class=\"caption\"\r\n *ngIf=\"option.breadcumbs && option.breadcumbs.length\"\r\n >\r\n <qms-breadcrumb\r\n class=\"breadcrumb-containe\"\r\n type=\"table\"\r\n numDisplayItem=\"1\"\r\n [nodes]=\"option.breadcumbs\"\r\n >\r\n </qms-breadcrumb>\r\n </div>\r\n </div>\r\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\r\n <span class=\"material-icons-outlined search__description-icon\">\r\n local_offer\r\n </span>\r\n {{ getItemId(option) }}\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n\r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length,\r\n 'col-6': splitView,\r\n 'col-12': !splitView\r\n }\"\r\n >\r\n <mat-expansion-panel\r\n hideToggle\r\n id=\"qmslib_related_popup_common_001\"\r\n [expanded]=\"isCommonExpanded\"\r\n (opened)=\"isCommonExpanded = true\"\r\n (closed)=\"isCommonExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\r\n {{ LANG.PROCESSES | uppercase }}\r\n </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData1\"\r\n [treeConfig]=\"treeConfig1\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n <div\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n class=\"line__divider\"\r\n ></div>\r\n\r\n <mat-expansion-panel\r\n hideToggle\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n id=\"qmslib_related_popup_document_001\"\r\n [expanded]=\"isDocumentExpanded\"\r\n (opened)=\"isDocumentExpanded = true\"\r\n (closed)=\"isDocumentExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title> {{ LANG.DOCUMENTS | uppercase }} </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isDocumentExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_document_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData2\"\r\n [treeConfig]=\"treeConfig2\"\r\n [selectedData]=\"selectedData2\"\r\n [disabledList]=\"disabledList2\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.folder)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n <div\r\n *ngIf=\"splitView\"\r\n class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\"\r\n >\r\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\r\n {{ splitViewTitle }}\r\n </div>\r\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n [checked]=\"isNodeSelected(node)\"\r\n (change)=\"toggleSelectItem(node)\"\r\n ></mat-checkbox>\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n ></mat-icon>\r\n <span class=\"text-node\">{{ node.itemName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 pr-0 pe-0\">\r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>{{\r\n getItemChipName(item)\r\n }}</span>\r\n <mat-icon\r\n *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\r\n (click)=\"removeCheckedNodeList(item)\"\r\n >cancel</mat-icon\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n</div>\r\n",
|
753
784
|
encapsulation: ViewEncapsulation.None,
|
754
785
|
styles: [".qms-scrollbar::-webkit-scrollbar{width:12px}.qms-scrollbar::-webkit-scrollbar-track{background:rgba(0,0,0,.12);background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.38);border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5);background-clip:content-box;border:4px solid transparent}.qms-scrollbar.none-scroll-bg::-webkit-scrollbar-track{background:transparent;background-clip:content-box}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:#fff;padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:#9e360f;margin-left:10px}.qms__danger .yellow{background-color:#e4cf53;margin-left:10px;color:#323232}.qms__danger .green{background-color:#00804c;margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:#f8f9f9}.confirm__button__groups .confirm:hover{background:#001983;color:#fff}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:#f8f9f9}.confirm__button__groups .cancel:hover{background:#001983;color:#fff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:#eee}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:#e5e5e5;max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:#8e8e8e;font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{height:30px;font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .text-node-item{margin-left:8px;display:flex;align-items:center;min-height:32px;justify-content:space-between;width:100%}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .text-node-item .select-one-checked{color:#1954a9}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:rgba(0,0,0,.38)}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-containe .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{margin-bottom:20px;padding:0;font-weight:600;font-family:Raleway}.padding-5{padding:5px}.mat-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-autocomplete_related-viewport .related-viewport{min-height:300px}"]
|
755
786
|
},] }
|
@@ -770,4 +801,4 @@ SelectProcessDocumentPopupComponent.propDecorators = {
|
|
770
801
|
autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
|
771
802
|
onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
|
772
803
|
};
|
773
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFD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VyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsWUFBWSxDQUFDLENBQUM7UUFDNUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsWUFBWSxDQUFDLENBQUM7UUFDOUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0MsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxRyxJQUFHLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUM7WUFDdEUsSUFBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BGLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLFVBQVUsQ0FBRSxJQUFJLENBQUMsRUFBQztnQkFDekksSUFB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dCB7IEksIFAgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IERvY3VtZW50Tm9kZVR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bS9kb2N1bWVudC1ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE1vZHVsZVR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bS9tb2R1bGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUmVsYXRlZENvbnN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL3JlbGF0ZWQuY29uc3QnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlRmxhdE5vZGUgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgTmV3VHJlZU1vZGVsIH0gZnJvbSAnLi4vdHJlZU5ldy9tb2RlbC90cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgTmV3VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3RyZWVOZXcvdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGEgfSBmcm9tICcuL21vZGVscy9wb3AtdXAtZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0gfSBmcm9tICcuL21vZGVscy9xbXMtcHJvY2Vzcy1kb2N1bWVudC1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0ZWQtcHJvY2Vzcy1kb2N1bWVudC1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQtZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1wcm9jZXNzLWRvY3VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBMQU5HOiBhbnk7XHJcbiAgICBtb2R1bGVJZCA9IDA7XHJcbiAgICBtb2R1bGVOYW1lID0gJyc7XHJcbiAgICB0cmVlRGF0YTE6IEFycmF5PE5ld1RyZWVNb2RlbD4gPSBbXTtcclxuICAgIHRyZWVEYXRhMjogQXJyYXk8TmV3VHJlZU1vZGVsPiA9IFtdO1xyXG4gICAgdHJlZUNvbmZpZzE6IFRyZWVDb25maWc7XHJcbiAgICB0cmVlQ29uZmlnMjogVHJlZUNvbmZpZztcclxuXHJcbiAgICBjaGVja2VkTm9kZUxpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcclxuICAgIHNlbGVjdGVkTm9kZTogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gICAgc2VsZWN0ZWREYXRhOiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcbiAgICBzZWxlY3RlZERhdGEyOiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcblxyXG4gICAgY29tbW9uQ2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICAgIGRvY3VtZW50Q2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICAgIHNpbmdsZVByb2Nlc3NMaXN0OiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgICBzaW5nbGVEb2N1bWVudExpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcclxuICAgIHNwbGl0VmlldzogYm9vbGVhbjtcclxuXHJcbiAgICBtb2R1bGUgPSBNb2R1bGVUeXBlO1xyXG4gICAgZGF0YVR5cGUgPSBEYXRhVHlwZTtcclxuICAgIGl0ZW1UeXBlID0gMDtcclxuICAgIHNlbGVjdGVkUmlza0RhdGE6IGFueSA9IFtdO1xyXG4gICAgZGlzYWJsZWRMaXN0OiBhbnkgPSBbXTtcclxuICAgIGRpc2FibGVkTGlzdDI6IGFueSA9IFtdO1xyXG4gICAgaXNTZWxlY3RPbmU6IGJvb2xlYW47XHJcbiAgICBjYW5Pbmx5U2VsZWN0SXRlbTogYm9vbGVhbjtcclxuXHJcbiAgICBpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgICBzaW5nbGVTZWxlY3RlZE5vZGUgPSBmYWxzZTtcclxuICAgIHNlYXJjaE9yZGVyID0gW107XHJcblxyXG4gICAgbXlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSA9IFtdO1xyXG4gICAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgaXRlbUluU3BsaXR2aWV3OiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcclxuICAgIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xyXG4gICAgc3BsaXRWaWV3VGl0bGU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsaXN0Q2hpbGRyZW5TZWxlY3RPbmU6IGFueSA9IFtdO1xyXG5cclxuICAgIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgb25TZWxlY3RGb2xkZXJJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xyXG4gICAgb25FeHBhbmRQcm9jZXNzQXJlYSA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TUHJvY2Vzc0RvY3VtZW50SXRlbT4oKTtcclxuICAgIG9uRXhwYW5kRm9sZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xyXG4gICAgcGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xyXG4gICAgdHJlZUNvbnRyb2xOb2RlUHJvY2VzczogYW55O1xyXG4gICAgdHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQ6IGFueTtcclxuICAgIGlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gJyc7XHJcbiAgICBoaWRlU3BsaXR2aWV3Q2hlY2tib3ggPSBmYWxzZTtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKE5ld1RyZWVDb21wb25lbnQsIHt9KSBkYXRhVHJlZXM6IFF1ZXJ5TGlzdDxOZXdUcmVlQ29tcG9uZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBhdXRvQ29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQ+LFxyXG4gICAgICAgIHB1YmxpYyBnbG9iYWxTZXJ2aWNlOiBRTVNTZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXHJcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgICAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbTogRWxlbWVudFJlZixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVJZCA9IGRhdGEubW9kdWxlSWQ7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVOYW1lID0gZGF0YS5tb2R1bGVOYW1lO1xyXG4gICAgICAgIHRoaXMudHJlZURhdGExID0gZGF0YS50cmVlRGF0YTE7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBkYXRhLnRyZWVEYXRhMjtcclxuICAgICAgICB0aGlzLnRyZWVDb25maWcxID0gZGF0YS50cmVlQ29uZmlnMTtcclxuICAgICAgICB0aGlzLnRyZWVDb25maWcyID0gZGF0YS50cmVlQ29uZmlnMjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmlza0RhdGEgPSBkYXRhPy5zZWxlY3RlZE5vZGUgfHwgW107XHJcbiAgICAgICAgdGhpcy5zaW5nbGVTZWxlY3RlZE5vZGUgPSBkYXRhLnRyZWVDb25maWcxLnNpbmdsZVNlbGVjdGVkTm9kZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IGRhdGEuZGlzYWJsZWRMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0MiA9IGRhdGEuZGlzYWJsZWRMaXN0MiB8fCBbXTtcclxuICAgICAgICB0aGlzLnNwbGl0VmlldyA9IGRhdGEuc3BsaXRWaWV3O1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RPbmUgPSBkYXRhLmlzU2VsZWN0T25lO1xyXG4gICAgICAgIHRoaXMuY2FuT25seVNlbGVjdEl0ZW0gPSBkYXRhLmNhbk9ubHlTZWxlY3RJdGVtO1xyXG4gICAgICAgIHRoaXMuaGlkZVNwbGl0dmlld0NoZWNrYm94ID0gZGF0YS5oaWRlU3BsaXR2aWV3Q2hlY2tib3g7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQoW10pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gICAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQpIHtcclxuICAgICAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2VhcmNoUmVsYXRlZC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudG9SZWxhdGVkT3B0aW9ucyhyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNwbGl0Vmlld1ZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbUluU3BsaXR2aWV3ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAocmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpc3ROb2RlUHJvY2VzczogTmV3VHJlZU1vZGVsW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IE5ld1RyZWVNb2RlbFtdID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGVQcm9jZXNzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3MucGFyZW50SWQgPSBpdGVtLnBhcmVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE5vZGVQcm9jZXNzLnB1c2gobmV3Tm9kZVByb2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdOb2RlRG9jcyA9IG5ldyBOZXdUcmVlTW9kZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZURvY3Muc3RhdHVzTmFtZSA9IGl0ZW0uc3RhdHVzTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE5vZGVEb2NzLnB1c2gobmV3Tm9kZURvY3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0UHJvY2VzczogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiAoeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiAoeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGExLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2gobmV3Tm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQgPT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RG9jdW1lbnQucHVzaChuZXdOb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgLi4uc2VsZWN0RG9jdW1lbnRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gdGhpcy5pZFRvQ2hlY2tTZWxlY3RPbmUodGhpcy5jaGVja2VkTm9kZUxpc3RbMF0uaWQsIHRoaXMuY2hlY2tlZE5vZGVMaXN0WzBdLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0UHJvY2Vzc0FyZWFDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMubGVuZ3RoID4gMCAmJiB0aGlzLmRhdGFUcmVlcyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm90U2hvd25DaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCAmJiBpdGVtLnBhcmVudElkID09PSB4LnBhcmVudElkICYmIHguZXhwYW5kYWJsZSA9PSBpdGVtLmV4cGFuZGFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBbLi4udGhpcy50cmVlRGF0YTEsIC4uLm5vdFNob3duQ2hpbGRyZW5dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMubGVuZ3RoID4gMCAmJiB0aGlzLmRhdGFUcmVlcyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm90U2hvd25DaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCAmJiBpdGVtLnBhcmVudElkID09PSB4LnBhcmVudElkICYmIHguZXhwYW5kYWJsZSA9PSBpdGVtLmV4cGFuZGFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBbLi4udGhpcy50cmVlRGF0YTIsIC4uLm5vdFNob3duQ2hpbGRyZW5dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLnByb2Nlc3M7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hPcmRlciA9IHRoaXMuZ2V0U2VhcmNoT3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0SGVpZ2h0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNoZWNrZWROb2RlTGlzdChpdGVtOiBTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBBcnIgPSBbXTtcclxuICAgICAgICBjb25zdCB0ZW1wQXJyRG9jdW1lbnQgPSBbXTtcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3RQcm9jZXNzTGlzdCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdERvY3VtZW50TGlzdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdFByb2Nlc3NMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0ID0gbmV3U2VsZWN0UHJvY2Vzc0xpc3Q7XHJcbiAgICAgICAgaWYodGVtcEFyci5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbLi4udGVtcEFycl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBBcnJEb2N1bWVudC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdERvY3VtZW50TGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdCA9IG5ld1NlbGVjdERvY3VtZW50TGlzdDtcclxuICAgICAgICBpZih0ZW1wQXJyRG9jdW1lbnQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50ZW1wQXJyRG9jdW1lbnRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSkge1xyXG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSA0ODQ7XHJcbiAgICAgICAgY29uc3QgcG9wdXBfY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Ftc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnQnKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaW5lX19kaXZpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZV9fZGl2aWRlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChwb3B1cF9jb250ZW50ICYmIGxpbmVfX2RpdmlkZXIpIHtcclxuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAodmlld3JlcG9ydHMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IDw9IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4SGVpZ2h0fXB4YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgKF92YWwpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoISFfdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoX3ZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbC5pZCA9PT0gc2Vjb25kRWwuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKHggPT4geC5pdGVtVHlwZSA9PT0gbW9kdWxlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZWFyY2hSZXN1bHQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RSZWxhdGVkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVDb25maWcxLnNob3dDaGVja0JveCkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCB8fCBpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgLy8gZG9jdW1lbnQgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdDIuZmluZEluZGV4KHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmlkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpICYmIHguaXRlbVR5cGUgPT09IGl0ZW0uaXRlbVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgfSkgPj0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNFeGlzdEluRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEgfHwgaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0V4aXN0SW5EaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbmRJbmRleCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC5pZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcclxuICAgICAgICAgICAgICAgIH0pID49IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNFeGlzdEluRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb24oJGV2ZW50OiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTm9kZVRvVHJlZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKXtcclxuICAgICAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnN0YXR1c05hbWUgPSBpdGVtPy5bJ3N0YXR1c05hbWUnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8ICBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWE/IHRydWU6IGZhbHNlO1xyXG4gICAgICAgIGlmKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IG5ld05vZGVEb2NzLmV4cGFuZGFibGUgKSA+PSAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCBuZXdOb2RlRG9jc107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgICAgICAgICAoIW5ld05vZGVEb2NzLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQudG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBuZXdOb2RlRG9jcy5leHBhbmRhYmxlICkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMSA9IFsuLi50aGlzLnRyZWVEYXRhMSwgbmV3Tm9kZURvY3NdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZFRvQ2hlY2tsaXN0Tm9kZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKXtcclxuICAgICAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnN0YXR1c05hbWUgPSBpdGVtPy5bJ3N0YXR1c05hbWUnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8ICBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWE/IHRydWU6IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuaXNTZWxlY3RPbmUpe1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25DaGVja2VkTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAoIW5ld05vZGVEb2NzLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQudG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBuZXdOb2RlRG9jcy5leHBhbmRhYmxlICk7XHJcbiAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5ld05vZGVEb2NzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuZXdOb2RlRG9jcy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogaXRlbS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IG5ld05vZGVEb2NzLmxldmVsVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IG5ld05vZGVEb2NzLmV4cGFuZGFibGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpIDwgMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25DaGVja2VkTGlzdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuZXdOb2RlRG9jcy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IG5ld05vZGVEb2NzLmxldmVsVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBuZXdOb2RlRG9jcy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnBhcmVudE5hbWUsXHJcbiAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uaXRlbU51bWJlcklkLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZSxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiBpdGVtLnN0YXR1c05hbWUsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGl0ZW0uc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUlkOiBOdW1iZXIucGFyc2VGbG9hdChpdGVtLml0ZW1OdW1iZXJJZClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pZENoZWNrSWNvblNwbGl0VmlldyA9IHRoaXMuaWRUb0NoZWNrU2VsZWN0T25lKGl0ZW0uaWQsIG5ld05vZGVEb2NzLnBhcmVudElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRTZWxlY3RlZERhdGEoaXRlbTogVHJlZUZsYXROb2RlKXtcclxuICAgICAgICBjb25zdCBzZWxlY3RQcm9jZXNzID0gW107XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0RG9jdW1lbnQgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UHJvY2Vzcy5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdERvY3VtZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuaXNTZWxlY3RPbmUpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uc2VsZWN0UHJvY2Vzc107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWREYXRhMi5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSApIDwgMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCBpdGVtXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkRGF0YS5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSApIDwgMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgaXRlbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DaGVja2xpc3ROb2RlQW5kU2VsZWN0ZWREYXRhKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pe1xyXG4gICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcclxuICAgICAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIG9uQWRkQ2xpY2soKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmNoZWNrZWROb2RlTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzTmFtZShpZCkge1xyXG4gICAgICAgIGxldCBzdGF0dXNOYW1lID0gJydcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c05hbWUgPSB4LnN0YXR1c05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdHVzTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVEb2N1bWVudCh0cmVlTm9kZXMpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQuZGF0YU5vZGVzID0gdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVQcm9jZXNzKHRyZWVOb2Rlcykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2VzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MuZGF0YU5vZGVzLmZpbHRlcih4ID0+IHgubmFtZSAhPT0gbnVsbCAmJiB4Lm5hbWUgIT09ICcnKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzRG9jcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzUHJvY2VzcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMS5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZWxtSGVpZ2h0ID0gMCwgZWxtTWFyZ2luID0gMDtcclxuXHJcbiAgICAgICAgZWxtSGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgIGVsbU1hcmdpbiA9IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wLnJlcGxhY2UoJ3B4JywgJycpKSArIHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tLnJlcGxhY2UoJ3B4JywgJycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQ2hpcE5hbWUoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBlID8gKGUuY2xpZW50V2lkdGggPCBlLnNjcm9sbFdpZHRoKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vZGVJY29uKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5EZXBhcnRtZW50Rm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdsb2NhbF9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6IHtcclxuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmxldmVsVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9lbnRlcnByaXNlJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VhcmNoT3JkZXIoKSB7XHJcbiAgICAgICAgbGV0IHNlYXJjaFR5cGVzID0gT2JqZWN0LmtleXModGhpcy5kYXRhVHlwZSlcclxuICAgICAgICAubWFwKGtleSA9PiAoeyB2YWx1ZTogdGhpcy5kYXRhVHlwZVtrZXldLCBrZXk6IGtleSB9KSk7XHJcbiAgICAgICAgc2VhcmNoVHlwZXMgPSBzZWFyY2hUeXBlcy5zbGljZShzZWFyY2hUeXBlcy5sZW5ndGggLyAyKTtcclxuICAgICAgICByZXR1cm4gc2VhcmNoVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NFUztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkZPTERFUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUlkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5QUk9DRVNTX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLkRPQ1VNRU5UX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZE5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBzZWxlY3RlZE5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBzZWxlY3RlZE5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogc2VsZWN0ZWROb2RlLml0ZW1OdW1iZXJJZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVsYXRlZChub2RlKTtcclxuICAgICAgICAgICAgaWYodGhpcy5zcGxpdFZpZXcgJiYgdGhpcy5pc1NlbGVjdE9uZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gdGhpcy5pZFRvQ2hlY2tTZWxlY3RPbmUobm9kZS5pZCwgbm9kZS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb2RlU2VsZWN0ZWQobm9kZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZWROb2RlTGlzdC5maWx0ZXIoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xyXG4gICAgICAgIGxldCBpdGVtID0gbmV3IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0oKTtcclxuICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICBpdGVtLml0ZW1UeXBlID0gdHlwZTtcclxuICAgICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcclxuICAgICAgICBpZihpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEpXHJcbiAgICAgICAgICAgIHRoaXMub25FeHBhbmRQcm9jZXNzQXJlYS5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhblNob3dTZWFyY2hPcHRpb24obW9kdWxlSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZCkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3ROb2RlVHJlZUV2ZW50KG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICghbm9kZS5pdGVtVHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpIFxyXG4gICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguaXRlbVR5cGUgPT09IG5vZGUuaXRlbVR5cGUpO1xyXG4gICAgICAgIGlmKGluZGV4ID49IDApe1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoZWNrZWROb2RlTGlzdCh7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA6IE5ld1RyZWVNb2RlbDtcclxuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBzdGF0dXNOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIGlmKG5vZGUuaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IG5vZGUuaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMudHJlZURhdGEyLmZpbmQoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSBcclxuICAgICAgICAgICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PSBub2RlLmV4cGFuZGFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy50cmVlRGF0YTEuZmluZCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpIFxyXG4gICAgICAgICAgICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT0gbm9kZS5leHBhbmRhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihpdGVtKXtcclxuICAgICAgICAgICAgICAgIHN0YXR1c05hbWUgPSBpdGVtLnN0YXR1c05hbWU7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBpdGVtLnN0YXR1c0lkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHN0YXR1c05hbWUsXHJcbiAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZFNlbGVjdGVkRGF0YShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGROb2RlU2VsZWN0T25lKGxpc3RDaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gW107XHJcbiAgICAgICAgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUgPSBsaXN0Q2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbU9mRm9sZGVyKG5vZGU6IFRyZWVGbGF0Tm9kZSwgdHlwZTogRGF0YVR5cGUpe1xyXG4gICAgICAgIGlmICh0aGlzLnNwbGl0Vmlldykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRUZXh0cyA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXh0LW5vZGUtcGFyZW50Jyk7XHJcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChwYXJlbnRUZXh0cywgKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUtaXRlbScpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQgOiAnJ31fJHtub2RlLmlkfV8ke25vZGUubGV2ZWx9YCk7XHJcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChpdGVtRWxlbWVudCwgKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtaXRlbScpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuRE9DVU1FTlRTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IHRoaXMuZGF0YVR5cGUuYXJlYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdUaXRsZSA9IGAke3RoaXMuTEFORy5NRVNTQUdFLlBST0NFU1NFU19JTi50b1VwcGVyQ2FzZSgpfSBcIiR7bm9kZS5uYW1lfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IG5ldyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKCk7XHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBub2RlLmlkO1xyXG4gICAgICAgICAgICBpdGVtLml0ZW1UeXBlID0gdHlwZTtcclxuICAgICAgICAgICAgaXRlbS5pdGVtTmFtZSA9IG5vZGUubmFtZTtcclxuICAgICAgICAgICAgaXRlbS5sZXZlbFR5cGUgPSBub2RlLmxldmVsVHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudE5vZGVTZWxlY3RlZCA9IHsgLi4ubm9kZSB9O1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0Rm9sZGVySXRlbS5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYXNTZWxlY3RlZChyZWxhdGVkOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgYXJyRGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuY29uY2F0KHRoaXMuZGlzYWJsZWRMaXN0Mik7XHJcbiAgICAgICAgcmV0dXJuIGFyckRpc2FibGVkTGlzdC5zb21lKG5vZGUgPT4gbm9kZS5pZC50b1VwcGVyQ2FzZSgpID09PSByZWxhdGVkLmlkLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1JlbGF0ZWRPcHRpb25zKHJlbGF0ZWRzOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10pOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHM6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcmVsYXRlZCBvZiByZWxhdGVkcykge1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2goeyAuLi5yZWxhdGVkLCBkaXNhYmxlZDogdGhpcy5oYXNTZWxlY3RlZChyZWxhdGVkKSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgaWRUb0NoZWNrU2VsZWN0T25lKGlkOiBzdHJpbmcsIHBhcmVudElkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7aWR9LSR7cGFyZW50SWR9YDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
804
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFD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LENBQUMsUUFBa0M7UUFDL0MsTUFBTSxPQUFPLEdBQTZCLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxpQ0FBTSxPQUFPLEtBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUcsQ0FBQztTQUNyRTtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsUUFBZ0I7UUFDM0MsT0FBTyxHQUFHLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7WUF6ekJKLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNkJBQTZCO2dCQUN2QyxrOVNBQXVEO2dCQUV2RCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7OztZQTdCMEIsaUJBQWlCO1lBWW5DLHVCQUF1QjtZQVR2QixZQUFZO1lBa0JaLHFDQUFxQztZQWpCckMsZUFBZTtZQUNmLFlBQVk7WUFRWixzQkFBc0I7WUFiMEIsVUFBVTtZQWtCMUQsOEJBQThCLHVCQWdGOUIsTUFBTSxTQUFDLGVBQWU7Ozt3QkFiMUIsWUFBWSxTQUFDLGdCQUFnQixFQUFFLEVBQUU7MkJBRWpDLFNBQVMsU0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQXlDbkYsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSSwgUCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL2RhdGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBSZWxhdGVkQ29uc3QgfSBmcm9tICcuLi8uLi9jb21tb24vcmVsYXRlZC5jb25zdCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmVlQ29uZmlnIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVGbGF0Tm9kZSB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBOZXdUcmVlTW9kZWwgfSBmcm9tICcuLi90cmVlTmV3L21vZGVsL3RyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBOZXdUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJlZU5ldy90cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gJy4vbW9kZWxzL3BvcC11cC1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1wcm9jZXNzLWRvY3VtZW50LWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0gfSBmcm9tICcuL21vZGVscy9zZWxlY3RlZC1wcm9jZXNzLWRvY3VtZW50LWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC1nbG9iYWwuc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIExBTkc6IGFueTtcclxuICAgIG1vZHVsZUlkID0gMDtcclxuICAgIG1vZHVsZU5hbWUgPSAnJztcclxuICAgIHRyZWVEYXRhMTogQXJyYXk8TmV3VHJlZU1vZGVsPiA9IFtdO1xyXG4gICAgdHJlZURhdGEyOiBBcnJheTxOZXdUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnMTogVHJlZUNvbmZpZztcclxuICAgIHRyZWVDb25maWcyOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gICAgc2VsZWN0ZWROb2RlOiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgICBzZWxlY3RlZERhdGE6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTI6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuXHJcbiAgICBjb21tb25DaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgZG9jdW1lbnRDaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgc2luZ2xlUHJvY2Vzc0xpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcclxuICAgIHNpbmdsZURvY3VtZW50TGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gICAgc3BsaXRWaWV3OiBib29sZWFuO1xyXG5cclxuICAgIG1vZHVsZSA9IE1vZHVsZVR5cGU7XHJcbiAgICBkYXRhVHlwZSA9IERhdGFUeXBlO1xyXG4gICAgaXRlbVR5cGUgPSAwO1xyXG4gICAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3Q6IGFueSA9IFtdO1xyXG4gICAgZGlzYWJsZWRMaXN0MjogYW55ID0gW107XHJcbiAgICBpc1NlbGVjdE9uZTogYm9vbGVhbjtcclxuICAgIGNhbk9ubHlTZWxlY3RJdGVtOiBib29sZWFuO1xyXG5cclxuICAgIGlzRG9jdW1lbnRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICBpc0NvbW1vbkV4cGFuZGVkID0gdHJ1ZTtcclxuICAgIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xyXG4gICAgc2VhcmNoT3JkZXIgPSBbXTtcclxuXHJcbiAgICBteUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgIGZpbHRlcmVkT3B0aW9uczogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XHJcbiAgICBpc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBpdGVtSW5TcGxpdHZpZXc6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSA9IFtdO1xyXG4gICAgc2VsZWN0ZWRGb2xkZXI6IFRyZWVGbGF0Tm9kZSA9IG51bGw7XHJcbiAgICBzcGxpdFZpZXdUaXRsZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxpc3RDaGlsZHJlblNlbGVjdE9uZTogYW55ID0gW107XHJcblxyXG4gICAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBvblNlbGVjdEZvbGRlckl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgICBvbkV4cGFuZFByb2Nlc3NBcmVhID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xyXG4gICAgb25FeHBhbmRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgICBwYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XHJcbiAgICB0cmVlQ29udHJvbE5vZGVQcm9jZXNzOiBhbnk7XHJcbiAgICB0cmVlQ29udHJvbE5vZGVEb2N1bWVudDogYW55O1xyXG4gICAgaWRDaGVja0ljb25TcGxpdFZpZXcgPSAnJztcclxuICAgIGhpZGVTcGxpdHZpZXdDaGVja2JveCA9IGZhbHNlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oTmV3VHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PE5ld1RyZWVDb21wb25lbnQ+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0U2VhcmNoJywgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudD4sXHJcbiAgICAgICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLm1vZHVsZUlkID0gZGF0YS5tb2R1bGVJZDtcclxuICAgICAgICB0aGlzLm1vZHVsZU5hbWUgPSBkYXRhLm1vZHVsZU5hbWU7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBkYXRhLnRyZWVEYXRhMTtcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMiA9IGRhdGEudHJlZURhdGEyO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbmZpZzEgPSBkYXRhLnRyZWVDb25maWcxO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbmZpZzIgPSBkYXRhLnRyZWVDb25maWcyO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgICAgICB0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSA9IGRhdGEudHJlZUNvbmZpZzEuc2luZ2xlU2VsZWN0ZWROb2RlO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gZGF0YS5kaXNhYmxlZExpc3QgfHwgW107XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QyID0gZGF0YS5kaXNhYmxlZExpc3QyIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuc3BsaXRWaWV3ID0gZGF0YS5zcGxpdFZpZXc7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9uZSA9IGRhdGEuaXNTZWxlY3RPbmU7XHJcbiAgICAgICAgdGhpcy5jYW5Pbmx5U2VsZWN0SXRlbSA9IGRhdGEuY2FuT25seVNlbGVjdEl0ZW07XHJcbiAgICAgICAgdGhpcy5oaWRlU3BsaXR2aWV3Q2hlY2tib3ggPSBkYXRhLmhpZGVTcGxpdHZpZXdDaGVja2JveDtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChbXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gUmVsYXRlZENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy50b1JlbGF0ZWRPcHRpb25zKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc3BsaXRWaWV3VmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGlzdE5vZGVQcm9jZXNzOiBOZXdUcmVlTW9kZWxbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpc3ROb2RlRG9jczogTmV3VHJlZU1vZGVsW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3Tm9kZVByb2Nlc3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmRpc3BsYXlJZCA9ICtpdGVtLml0ZW1OdW1iZXJJZDtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3Muc3RhdHVzSWQgPSBpdGVtLnN0YXR1cztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Tm9kZVByb2Nlc3MucHVzaChuZXdOb2RlUHJvY2Vzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Tm9kZURvY3MucHVzaChuZXdOb2RlRG9jcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RQcm9jZXNzOiBUcmVlRmxhdE5vZGVbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3REb2N1bWVudDogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6ICh4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6ICh4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguaXRlbVR5cGUgPT09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiB4LmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdFByb2Nlc3MucHVzaChuZXdOb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGEyLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKG5ld05vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLnNlbGVjdFByb2Nlc3NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCAuLi5zZWxlY3REb2N1bWVudF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zcGxpdFZpZXcgJiYgdGhpcy5pc1NlbGVjdE9uZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZSh0aGlzLmNoZWNrZWROb2RlTGlzdFswXS5pZCwgdGhpcy5jaGVja2VkTm9kZUxpc3RbMF0ucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRQcm9jZXNzQXJlYUNoaWxkcmVuLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKXtcclxuICAgICAgICAgICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RTaG93bkNoaWxkcmVuLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMSA9IFsuLi50aGlzLnRyZWVEYXRhMSwgLi4ubm90U2hvd25DaGlsZHJlbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLmdldEZvbGRlckNoaWxkcmVuLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKXtcclxuICAgICAgICAgICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZURhdGEyLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RTaG93bkNoaWxkcmVuLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMiA9IFsuLi50aGlzLnRyZWVEYXRhMiwgLi4ubm90U2hvd25DaGlsZHJlbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUucHJvY2VzcztcclxuICAgICAgICB0aGlzLnNlYXJjaE9yZGVyID0gdGhpcy5nZXRTZWFyY2hPcmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW06IFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBjb25zdCB0ZW1wQXJyID0gW107XHJcbiAgICAgICAgY29uc3QgdGVtcEFyckRvY3VtZW50ID0gW107XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0UHJvY2Vzc0xpc3QgPSBbXTtcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3REb2N1bWVudExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tb25DaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0UHJvY2Vzc0xpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QgPSBuZXdTZWxlY3RQcm9jZXNzTGlzdDtcclxuICAgICAgICBpZih0ZW1wQXJyLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50ZW1wQXJyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wQXJyRG9jdW1lbnQucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdERvY3VtZW50TGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdCA9IG5ld1NlbGVjdERvY3VtZW50TGlzdDtcclxuICAgICAgICBpZih0ZW1wQXJyRG9jdW1lbnQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50ZW1wQXJyRG9jdW1lbnRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSkge1xyXG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSA0ODQ7XHJcbiAgICAgICAgY29uc3QgcG9wdXBfY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Ftc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnQnKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaW5lX19kaXZpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZV9fZGl2aWRlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChwb3B1cF9jb250ZW50ICYmIGxpbmVfX2RpdmlkZXIpIHtcclxuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAodmlld3JlcG9ydHMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IDw9IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4SGVpZ2h0fXB4YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgKF92YWwpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoISFfdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoX3ZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbC5pZCA9PT0gc2Vjb25kRWwuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKHggPT4geC5pdGVtVHlwZSA9PT0gbW9kdWxlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZWFyY2hSZXN1bHQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RSZWxhdGVkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVDb25maWcxLnNob3dDaGVja0JveCkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICYmIHguaXRlbVR5cGUgPT09IGl0ZW0uaXRlbVR5cGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50IHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2N1bWVudCAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0V4aXN0SW5EaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRMaXN0Mi5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcclxuICAgICAgICAgICAgICAgIH0pID49IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRXhpc3RJbkRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5hcmVhIHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcclxuICAgICAgICAgICAgICAgIH0pID49IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNFeGlzdEluRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb24oJGV2ZW50OiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTm9kZVRvVHJlZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKXtcclxuICAgICAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnN0YXR1c05hbWUgPSBpdGVtPy5bJ3N0YXR1c05hbWUnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8ICBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWE/IHRydWU6IGZhbHNlO1xyXG4gICAgICAgIGlmKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSApID49IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBbLi4udGhpcy50cmVlRGF0YTIsIG5ld05vZGVEb2NzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZih0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSApID49IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBbLi4udGhpcy50cmVlRGF0YTEsIG5ld05vZGVEb2NzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NoZWNrbGlzdE5vZGUoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSl7XHJcbiAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmlkID0gaXRlbS5pZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3Muc3RhdHVzSWQgPSBpdGVtPy5bJ2l0ZW1TdGF0dXMnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmV4cGFuZGFibGUgPSBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCAgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgKCFuZXdOb2RlRG9jcy5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBuZXdOb2RlRG9jcy5leHBhbmRhYmxlICk7XHJcbiAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVEb2NzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogbmV3Tm9kZURvY3MubGV2ZWxUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY29tbW9uQ2hlY2tlZExpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5ld05vZGVEb2NzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBuZXdOb2RlRG9jcy5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogaXRlbS5wYXJlbnROYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLml0ZW1OdW1iZXJJZCxcclxuICAgICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogaXRlbS5zdGF0dXNOYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogTnVtYmVyLnBhcnNlRmxvYXQoaXRlbS5pdGVtTnVtYmVySWQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShpdGVtLmlkLCBuZXdOb2RlRG9jcy5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2VsZWN0ZWREYXRhKGl0ZW06IFRyZWVGbGF0Tm9kZSl7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0UHJvY2VzcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdERvY3VtZW50ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAoIXgucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UHJvY2Vzcy5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RG9jdW1lbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5pc1NlbGVjdE9uZSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgLi4uc2VsZWN0RG9jdW1lbnRdOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZERhdGEyLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgICAgICAgICAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBpdGVtLmV4cGFuZGFibGUgKSA8IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgaXRlbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZERhdGEuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSApIDwgMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgaXRlbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DaGVja2xpc3ROb2RlQW5kU2VsZWN0ZWREYXRhKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pe1xyXG4gICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcclxuICAgICAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIG9uQWRkQ2xpY2soKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmNoZWNrZWROb2RlTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzTmFtZShpZCkge1xyXG4gICAgICAgIGxldCBzdGF0dXNOYW1lID0gJydcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c05hbWUgPSB4LnN0YXR1c05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdHVzTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVEb2N1bWVudCh0cmVlTm9kZXMpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQuZGF0YU5vZGVzID0gdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVQcm9jZXNzKHRyZWVOb2Rlcykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2VzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MuZGF0YU5vZGVzLmZpbHRlcih4ID0+IHgubmFtZSAhPT0gbnVsbCAmJiB4Lm5hbWUgIT09ICcnKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzRG9jcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzUHJvY2VzcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMS5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZWxtSGVpZ2h0ID0gMCwgZWxtTWFyZ2luID0gMDtcclxuXHJcbiAgICAgICAgZWxtSGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgIGVsbU1hcmdpbiA9IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wLnJlcGxhY2UoJ3B4JywgJycpKSArIHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tLnJlcGxhY2UoJ3B4JywgJycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQ2hpcE5hbWUoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBlID8gKGUuY2xpZW50V2lkdGggPCBlLnNjcm9sbFdpZHRoKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vZGVJY29uKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5EZXBhcnRtZW50Rm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdsb2NhbF9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6IHtcclxuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmxldmVsVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9lbnRlcnByaXNlJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VhcmNoT3JkZXIoKSB7XHJcbiAgICAgICAgbGV0IHNlYXJjaFR5cGVzID0gT2JqZWN0LmtleXModGhpcy5kYXRhVHlwZSlcclxuICAgICAgICAubWFwKGtleSA9PiAoeyB2YWx1ZTogdGhpcy5kYXRhVHlwZVtrZXldLCBrZXk6IGtleSB9KSk7XHJcbiAgICAgICAgc2VhcmNoVHlwZXMgPSBzZWFyY2hUeXBlcy5zbGljZShzZWFyY2hUeXBlcy5sZW5ndGggLyAyKTtcclxuICAgICAgICByZXR1cm4gc2VhcmNoVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NFUztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkZPTERFUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUlkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5QUk9DRVNTX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLkRPQ1VNRU5UX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkTm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IHNlbGVjdGVkTm9kZS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBzZWxlY3RlZE5vZGUuaXRlbU51bWJlcklkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWxhdGVkKG5vZGUpO1xyXG4gICAgICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShub2RlLmlkLCBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZHJlbk9mRm9sZGVyKG5vZGU6IFRyZWVGbGF0Tm9kZSwgdHlwZTogRGF0YVR5cGUpIHtcclxuICAgICAgICBsZXQgaXRlbSA9IG5ldyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKCk7XHJcbiAgICAgICAgaXRlbS5pZCA9IG5vZGUuaWQ7XHJcbiAgICAgICAgaXRlbS5pdGVtVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgaXRlbS5pdGVtTmFtZSA9IG5vZGUubmFtZTtcclxuICAgICAgICBpdGVtLmxldmVsVHlwZSA9IG5vZGUubGV2ZWxUeXBlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBub2RlO1xyXG4gICAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xyXG4gICAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0geyAuLi5ub2RlIH07XHJcbiAgICAgICAgaWYoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhKVxyXG4gICAgICAgICAgICB0aGlzLm9uRXhwYW5kUHJvY2Vzc0FyZWEuZW1pdChpdGVtKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMub25FeHBhbmRGb2xkZXIuZW1pdChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5TaG93U2VhcmNoT3B0aW9uKG1vZHVsZUlkOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnMobW9kdWxlSWQpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0Tm9kZVRyZWVFdmVudChub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBpZiAoIW5vZGUuaXRlbVR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSBcclxuICAgICAgICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguaXRlbVR5cGUgPT09IG5vZGUuaXRlbVR5cGUpO1xyXG4gICAgICAgIGlmKGluZGV4ID49IDApe1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoZWNrZWROb2RlTGlzdCh7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA6IE5ld1RyZWVNb2RlbDtcclxuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBzdGF0dXNOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIGlmKG5vZGUuaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IG5vZGUuaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMudHJlZURhdGEyLmZpbmQoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSBcclxuICAgICAgICAgICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnRyZWVEYXRhMS5maW5kKHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgXHJcbiAgICAgICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoaXRlbSl7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gaXRlbS5zdGF0dXNJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBub2RlLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiBzdGF0dXNOYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLmRpc3BsYXlJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RlZERhdGEobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkTm9kZVNlbGVjdE9uZShsaXN0Q2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IFtdO1xyXG4gICAgICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gbGlzdENoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUsIHR5cGU6IERhdGFUeXBlKXtcclxuICAgICAgICBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50VGV4dHMgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGV4dC1ub2RlLXBhcmVudCcpO1xyXG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwocGFyZW50VGV4dHMsIChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI18ke25vZGUucGFyZW50SWQgPyBub2RlLnBhcmVudElkIDogJyd9XyR7bm9kZS5pZH1fJHtub2RlLmxldmVsfWApO1xyXG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwoaXRlbUVsZW1lbnQsIChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdUaXRsZSA9IGAke3RoaXMuTEFORy5NRVNTQUdFLkRPQ1VNRU5UU19JTi50b1VwcGVyQ2FzZSgpfSBcIiR7bm9kZS5uYW1lfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3VGl0bGUgPSBgJHt0aGlzLkxBTkcuTUVTU0FHRS5QUk9DRVNTRVNfSU4udG9VcHBlckNhc2UoKX0gXCIke25vZGUubmFtZX1cImA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBuZXcgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSgpO1xyXG4gICAgICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICAgICAgaXRlbS5pdGVtVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIGl0ZW0uaXRlbU5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICAgICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBub2RlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudE5vZGVTZWxlY3RlZCA9IG5ldyBUcmVlRmxhdE5vZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdEZvbGRlckl0ZW0uZW1pdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFzU2VsZWN0ZWQocmVsYXRlZDogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGFyckRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmNvbmNhdCh0aGlzLmRpc2FibGVkTGlzdDIpO1xyXG4gICAgICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdG9SZWxhdGVkT3B0aW9ucyhyZWxhdGVkczogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdKTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJlbGF0ZWQgb2YgcmVsYXRlZHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHsgLi4ucmVsYXRlZCwgZGlzYWJsZWQ6IHRoaXMuaGFzU2VsZWN0ZWQocmVsYXRlZCkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlkVG9DaGVja1NlbGVjdE9uZShpZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2lkfS0ke3BhcmVudElkfWA7XHJcbiAgICB9XHJcbn1cclxuIl19
|