mmhglobal-dynamicform 1.3.10 → 1.3.13
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/README.md +13 -0
- package/esm2020/lib/directives/elementcontainer.directive.mjs +16 -0
- package/esm2020/lib/directives/fieldelement.directive.mjs +4 -4
- package/esm2020/lib/directives/scrollbar.theme.directive.mjs +4 -4
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +15 -10
- package/esm2020/lib/services/main.service.mjs +45 -14
- package/esm2020/lib/services/zcomponent.debug.service.mjs +4 -4
- package/esm2020/lib/services/zcomponent.service.mjs +4 -4
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +4 -4
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +4 -4
- package/esm2020/lib/uicontainer/uicontainer.component.mjs +24 -0
- package/esm2020/lib/uicontent/uicontent.component.mjs +4 -4
- package/esm2020/lib/uiheader/uiheader.component.mjs +4 -4
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +4 -4
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +4 -4
- package/esm2020/lib/uipage/uipage.component.mjs +4 -4
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +4 -4
- package/esm2020/lib/zbullet/zbullet.component.mjs +4 -4
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +4 -4
- package/esm2020/lib/zcard/zcard.component.mjs +4 -4
- package/esm2020/lib/zchart/zchart.component.mjs +4 -4
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +4 -4
- package/esm2020/lib/zchip/zchip.component.mjs +4 -4
- package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +4 -4
- package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +4 -4
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +4 -4
- package/esm2020/lib/zdatetime/dateParser.pipe.mjs +4 -4
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +4 -4
- package/esm2020/lib/zdiv/zdiv.component.mjs +4 -4
- package/esm2020/lib/zdiv/zdiv.pipe.mjs +4 -4
- package/esm2020/lib/zform/zform.component.mjs +4 -4
- package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +4 -4
- package/esm2020/lib/zgauge/zgauge.component.mjs +4 -4
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +4 -4
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +4 -4
- package/esm2020/lib/zgrid/zgrid.component.mjs +4 -4
- package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +4 -4
- package/esm2020/lib/zimg/zimg.component.mjs +4 -4
- package/esm2020/lib/zkcard/zkcard.component.mjs +4 -4
- package/esm2020/lib/zlabel/zlabel.component.mjs +4 -4
- package/esm2020/lib/zmfb/zmfb.component.mjs +4 -4
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +4 -4
- package/esm2020/lib/zmodal/zmodal.component.mjs +4 -4
- package/esm2020/lib/znumeric/znumeric.component.mjs +4 -4
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +4 -4
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +4 -4
- package/esm2020/lib/zreport/zreport.component.mjs +81 -51
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +4 -4
- package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +4 -4
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +5 -5
- package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +4 -4
- package/esm2020/lib/ztab/ztab.component.mjs +4 -4
- package/esm2020/lib/ztab/ztab.pipe.mjs +4 -4
- package/esm2020/lib/ztext/ztext.component.mjs +4 -4
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +4 -4
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +4 -4
- package/esm2020/lib/ztree/ztree.component.mjs +4 -4
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +4 -4
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +4 -4
- package/esm2020/lib/zudf/zudf.component.mjs +4 -4
- package/esm2020/lib/zunknown/zunknown.component.mjs +4 -4
- package/esm2020/lib/zupload/zupload.component.mjs +4 -4
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +4 -4
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/mmhglobal-dynamicform.mjs +349 -360
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +345 -360
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/directives/elementcontainer.directive.d.ts +8 -0
- package/lib/mmhglobal-dynamicform.module.d.ts +81 -80
- package/lib/services/main.service.d.ts +2 -0
- package/lib/uicontainer/uicontainer.component.d.ts +15 -0
- package/lib/zreport/zreport.component.d.ts +14 -9
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/esm2020/lib/zreport/zreport.config.mjs +0 -117
- package/lib/zreport/zreport.config.d.ts +0 -25
|
@@ -4,7 +4,7 @@ import { Injectable } from '@angular/core';
|
|
|
4
4
|
import { BehaviorSubject, of } from 'rxjs';
|
|
5
5
|
import { tap, switchMap, map } from 'rxjs/operators';
|
|
6
6
|
/********** Component & Service **********/
|
|
7
|
-
import { MESSAGETYPE, ZComponentHelper } from 'mmhglobal-zcore';
|
|
7
|
+
import { MESSAGETYPE, ZComponentHelper, ZGroup } from 'mmhglobal-zcore';
|
|
8
8
|
import { ZmodalComponent } from '../zmodal/zmodal.component';
|
|
9
9
|
import { ZmodalMobileComponent } from '../zmodal/zmodal-mobile.component';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
@@ -268,6 +268,11 @@ export class MainService {
|
|
|
268
268
|
return this.webApiService.handleError(res);
|
|
269
269
|
}
|
|
270
270
|
backNavigation(event, group, me) {
|
|
271
|
+
if (group['isEmbeddedPage']) {
|
|
272
|
+
group['isTriggered'] = false;
|
|
273
|
+
this.closeContainerView(group);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
271
276
|
if (group.beforeBackNavigationPage) {
|
|
272
277
|
group.beforeBackNavigationPage(group).subscribe(() => {
|
|
273
278
|
group['isTriggered'] = false;
|
|
@@ -293,6 +298,10 @@ export class MainService {
|
|
|
293
298
|
}
|
|
294
299
|
historyBack() {
|
|
295
300
|
this.group.isTriggered = false;
|
|
301
|
+
if (this.group['isEmbeddedPage']) {
|
|
302
|
+
this.closeContainerView(this.group);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
296
305
|
this.navController.pop();
|
|
297
306
|
}
|
|
298
307
|
refreshGrid(event, group, me, gridOptionName) {
|
|
@@ -444,7 +453,7 @@ export class MainService {
|
|
|
444
453
|
_group.referenceId = _group.zModel.Id;
|
|
445
454
|
fg.markAsPristine();
|
|
446
455
|
}
|
|
447
|
-
return this.afterCreateModel(_group);
|
|
456
|
+
return this.afterCreateModel(_group, zmodel);
|
|
448
457
|
}), tap((resp) => {
|
|
449
458
|
if (createModelres.ProcessingStatus == null || createModelres.ProcessingStatus == true) {
|
|
450
459
|
if (resp && _group.zModel.Id !== 0) {
|
|
@@ -508,7 +517,7 @@ export class MainService {
|
|
|
508
517
|
group.isTriggered = false;
|
|
509
518
|
_group.isTriggered = false;
|
|
510
519
|
fg.markAsPristine();
|
|
511
|
-
return this.afterUpdateModel(_group);
|
|
520
|
+
return this.afterUpdateModel(_group, zmodel);
|
|
512
521
|
}))
|
|
513
522
|
.subscribe();
|
|
514
523
|
// Object.assign(group.zModel, fg.value);
|
|
@@ -569,7 +578,7 @@ export class MainService {
|
|
|
569
578
|
.httpPut$(_group.resourceURL + "/" + _group.zModel.Id, _group.zModel)
|
|
570
579
|
.pipe(map((res) => this.handleSuccess(res, "Record is deleted successfully.")), switchMap((zmodel) => {
|
|
571
580
|
console.log("After deleted, zModel:", zmodel);
|
|
572
|
-
return this.afterDeleteModel(_group);
|
|
581
|
+
return this.afterDeleteModel(_group, zmodel);
|
|
573
582
|
}), tap((resp) => {
|
|
574
583
|
this.historyBack();
|
|
575
584
|
}));
|
|
@@ -633,26 +642,26 @@ export class MainService {
|
|
|
633
642
|
}
|
|
634
643
|
return group.afterNewModel(group);
|
|
635
644
|
}
|
|
636
|
-
afterCreateModel(group) {
|
|
645
|
+
afterCreateModel(group, zmodel) {
|
|
637
646
|
if (!group.afterCreateModel) {
|
|
638
647
|
console.warn("group.afterCreateModel is not defined");
|
|
639
648
|
return of({});
|
|
640
649
|
}
|
|
641
|
-
return group.afterCreateModel(group);
|
|
650
|
+
return group.afterCreateModel(group, zmodel);
|
|
642
651
|
}
|
|
643
|
-
afterUpdateModel(group) {
|
|
652
|
+
afterUpdateModel(group, zmodel) {
|
|
644
653
|
if (!group.afterUpdateModel) {
|
|
645
654
|
console.warn("group.afterUpdateModel is not defined");
|
|
646
655
|
return of({});
|
|
647
656
|
}
|
|
648
|
-
return group.afterUpdateModel(group);
|
|
657
|
+
return group.afterUpdateModel(group, zmodel);
|
|
649
658
|
}
|
|
650
|
-
afterDeleteModel(group) {
|
|
659
|
+
afterDeleteModel(group, zmodel) {
|
|
651
660
|
if (!group.afterDeleteModel) {
|
|
652
661
|
console.warn("group.afterDeleteModel is not defined");
|
|
653
662
|
return of({});
|
|
654
663
|
}
|
|
655
|
-
return group.afterDeleteModel(group);
|
|
664
|
+
return group.afterDeleteModel(group, zmodel);
|
|
656
665
|
}
|
|
657
666
|
afterPageInitialise(group) {
|
|
658
667
|
if (!group.afterPageInitialise) {
|
|
@@ -733,10 +742,32 @@ export class MainService {
|
|
|
733
742
|
}
|
|
734
743
|
}));
|
|
735
744
|
}
|
|
745
|
+
async loadContainerView(elementContainer, containerPage, group) {
|
|
746
|
+
if (!elementContainer) {
|
|
747
|
+
console.log("ElementContainer is null.");
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
if (!containerPage) {
|
|
751
|
+
console.log("ContainerPage is null.");
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
const viewContainerRef = elementContainer.viewContainerRef;
|
|
755
|
+
viewContainerRef.clear();
|
|
756
|
+
group = group ? group : new ZGroup;
|
|
757
|
+
const componentRef = viewContainerRef.createComponent(containerPage);
|
|
758
|
+
Object.assign(componentRef.instance["group"], group);
|
|
759
|
+
Object.assign(componentRef.instance["group"], { isEmbeddedPage: true, elementContainer: elementContainer });
|
|
760
|
+
}
|
|
761
|
+
async closeContainerView(group) {
|
|
762
|
+
const viewContainerRef = group.elementContainer.viewContainerRef;
|
|
763
|
+
if (viewContainerRef) {
|
|
764
|
+
viewContainerRef.clear();
|
|
765
|
+
}
|
|
766
|
+
}
|
|
736
767
|
}
|
|
737
|
-
MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
738
|
-
MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
739
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
768
|
+
MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MainService, deps: [{ token: i1.Router }, { token: i2.ModalController }, { token: i2.NavController }, { token: i3.AlertService }, { token: i3.CacheService }, { token: i3.FieldService }, { token: i3.ResourceApiService }, { token: i3.ToastService }, { token: i3.WebApiService }, { token: i3.ZCoreService }, { token: i4.ModalService }, { token: i5.ZComponentDebugService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
769
|
+
MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MainService, providedIn: 'root' });
|
|
770
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MainService, decorators: [{
|
|
740
771
|
type: Injectable,
|
|
741
772
|
args: [{
|
|
742
773
|
providedIn: 'root',
|
|
@@ -749,4 +780,4 @@ export function refreshGrid(group) {
|
|
|
749
780
|
}
|
|
750
781
|
group.isTriggered = false;
|
|
751
782
|
}
|
|
752
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvbWFpbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzNDLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsZUFBZSxFQUFnQixFQUFFLEVBQVEsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQVEsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsMkNBQTJDO0FBQzNDLE9BQU8sRUFDUSxXQUFXLEVBRXhCLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBSXpCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQUUxRSxzREFBc0Q7QUFFdEQscUhBQXFIO0FBQ3JILDBEQUEwRDtBQUsxRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNVLE1BQWMsRUFDZCxTQUEwQixFQUMxQixhQUE0QixFQUM1QixZQUEwQixFQUMxQixZQUEwQixFQUMxQixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsWUFBb0M7UUFYcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHVCQUFrQixHQUFs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SCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVNLHlCQUF5QixDQUFDLElBQVk7UUFDM0MsMEJBQTBCO1FBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyw2QkFBNkIsQ0FBQztRQUNoRixNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkYsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsT0FBTyxHQUFHLENBQUM7YUFDWjtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOzt3R0EvNEJVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBbTVCRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWE7SUFDdkMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBVSxDQUFDO0lBQ25ELElBQUksWUFBWSxFQUFFO1FBQ2hCLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN4QjtJQUNELEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgZnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgdGFrZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBNRVNTQUdFVFlQRSwgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIEFsZXJ0U2VydmljZSwgQ2FjaGVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvbXBvbmVudFNpemUsIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXBcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UsIE1vZGFsUmVzcG9uc2UgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuLy8gaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vem1vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50RGVidWdTZXJ2aWNlIH0gZnJvbSAnLi96Y29tcG9uZW50LmRlYnVnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBabW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi96bW9kYWwvem1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFptb2RhbE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwtbW9iaWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpHcmlkIH0gZnJvbSAnLi4vemdyaWQvemdyaWQuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgWm1vZGFsUGFnZSB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwucGFnZSc7XHJcblxyXG4vLyBpbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIE1vZGFsUGFnZVBhcmFtcywgWkdyaWQgfSBmcm9tICcuLi9keW5hbWljZm9ybS96Y29tcG9uZW50Lm1vZGVsJztcclxuLy8gaW1wb3J0IHsgWkdyb3VwLCBaRmllbGQgfSBmcm9tICcuLi9tb2RlbC96Z3JvdXAubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1haW5TZXJ2aWNlIHtcclxuICBwcml2YXRlIGdyb3VwOiBaR3JvdXA7XHJcbiAgcHJpdmF0ZSBvYXV0aEVudmlyb25tZW50VXJsOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZWJ1Z1NlcnZpY2U6IFpDb21wb25lbnREZWJ1Z1NlcnZpY2VcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdNYWluU2VydmljZSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgdGhpcy5vYXV0aEVudmlyb25tZW50VXJsID0gdGhpcy56Y29yZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKS5lMU9hdXRoVXJsICsgJy8nO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRVcCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdBdCBtYWluLnNlcnZpY2UgKFN0YXJ0VXApIC4uLicpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JvdXAoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5ncm91cCA9IGdyb3VwO1xyXG4gICAgdGhpcy5maWVsZFNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNldEdyb3VwKGdyb3VwKTtcclxuICAgIGNvbnN0IGlzRGVidWdnaW5nID0gdGhpcy56Y29yZVNlcnZpY2UuaXNEZWJ1Z1Nlc3Npb24oKSB8fCBmYWxzZTtcclxuICAgIGlmIChpc0RlYnVnZ2luZykge1xyXG4gICAgICB0aGlzLmRlYnVnU2VydmljZS5vbkluaXREZWJ1Z2dlcihncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNlcnZlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIGdldEdyb3VwRmllbGRzKFxyXG4gICAgY3RybE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1UeXBlOiBcIkxpc3RGaWVsZFwiIHwgXCJGb3JtRmllbGRcIixcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIGN0cmxOYW1lLFxyXG4gICAgICBmb3JtVHlwZSxcclxuICAgICAgZ3JvdXAsXHJcbiAgICAgIHByb3BlcnR5TmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVHcm91cChcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBjdHJsTmFtZTogc3RyaW5nLFxyXG4gICAgcGFnZU5hbWU6IHN0cmluZyxcclxuICAgIG1lOiBhbnlcclxuICApOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGdyb3VwLnJlc291cmNlVVJMTmFtZSB8fCBjdHJsTmFtZTtcclxuICAgIGdyb3VwLnJlc291cmNlVVJMTmFtZSA9IHJlc291cmNlTmFtZTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGdyb3VwLCB7XHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwocmVzb3VyY2VOYW1lKSxcclxuICAgICAgZ3JpZENvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICBjdHJsTmFtZSxcclxuICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBjdHJsU2NvcGU6IG1lLFxyXG4gICAgICBwYWdlTmFtZSxcclxuICAgICAgY3RybE5hbWUsXHJcbiAgICAgIC8vIGNyZWF0ZU1vZGVsVVJMOiBcIi9jcmVhdGVcIiArIGN0cmxOYW1lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgIGVkaXRNb2RlbFVSTDogY3RybE5hbWUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgLy8gbGlzdE1vZGVsVVJMOiBcIi9saXN0XCIgKyBjdHJsTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAvLyBmb3JtSGVhZGVyOiBcIi4uLlwiLFxyXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXHJcbiAgICAgIGZpZWxkczogW10sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHpDb21wb25lbnRzOiB7fSxcclxuICAgICAgekRhdGE6IHt9LFxyXG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PFpDb21wb25lbnRPdXRwdXRFdmVudD4obnVsbCksXHJcbiAgICAgIC8vIGZvcm06IG51bGwgYXMgRm9ybUdyb3VwLCAvLyByZW1vdmVkIGZvciBidWcgZml4LlxyXG4gICAgICBjYW5jZWxCdXR0b25OYW1lOiBcIkNsb3NlXCIsXHJcbiAgICAgIHpCdXR0b25zQ291bnQ6IDAsXHJcbiAgICAgIC8vIHRvcFJpZ2h0QWN0aW9uQnV0dG9uOiBbXSxcclxuICAgICAgLy8gb25BY3Rpb246IHRoaXMub25BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgYmFja05hdmlnYXRpb246IHRoaXMuYmFja05hdmlnYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgaGlzdG9yeUJhY2s6IHRoaXMuaGlzdG9yeUJhY2suYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFBhZ2U6IHRoaXMucmVmcmVzaFBhZ2UsXHJcbiAgICAgIHJlZnJlc2hHcmlkOiB0aGlzLnJlZnJlc2hHcmlkLmJpbmQodGhpcyksXHJcbiAgICAgIHVwZGF0ZU1vZGVsOiB0aGlzLnVwZGF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNyZWF0ZU1vZGVsOiB0aGlzLmNyZWF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNsb25lTmV3TW9kZWw6IHRoaXMuY2xvbmVOZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBkZWxldGVNb2RlbDogdGhpcy5kZWxldGVNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBuZXdNb2RlbDogdGhpcy5uZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBfaXNEZWJ1Z2dpbmc6IGVudmlyb25tZW50LmRlYnVnU2Vzc2lvbiB8fCBmYWxzZSxcclxuICAgICAgLy8gX2RlYnVnOiB7XHJcbiAgICAgIC8vICAgekRhdGE6ICB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH1cclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBhZnRlckdldE1vZGVsU3VjY2VzczogbnVsbCxcclxuICAgICAgLy8gYmVmb3JlVXBkYXRlTW9kZWw6IG51bGwsXHJcbiAgICAgIC8vIGlzRWRpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGdyb3VwLnN1YmplY3Quc3Vic2NyaWJlKChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSA9PlxyXG4gICAgICB0aGlzLnN1YmplY3RFdmVudChldmVudCwgZ3JvdXAsIG1lKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbWUuc3Vic2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBaR3JvdXAsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2VcclxuICAgICAgLmh0dHBHZXQkKGdyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyByZWNJZCwgbnVsbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgIGdyb3VwLnpNb2RlbCA9IHptb2RlbDtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGQgJiZcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoem1vZGVsKS5pbmRleE9mKGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkKSAhPT0gLTEgJiZcclxuICAgICAgICAgICAgIWdyb3VwLmJhY2tOYXZpZ2F0aW9uUGFnZS5lbmRzV2l0aChcIi5lZGl0XCIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlID1cclxuICAgICAgICAgICAgICBncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UgK1xyXG4gICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICB6bW9kZWxbZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGRdLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAgIFwiL2VkaXRcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGNhbkV4aXQoZm9ybTogRm9ybUdyb3VwKTogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFmb3JtIHx8ICFmb3JtLmRpcnR5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtWydza2lwRGlydHlDaGVjayddKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZVxyXG4gICAgICAuc2hvdyhcIkRhdGEgbm90IHNhdmUgeWV0XCIsIFwiQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGlzY2FyZCB0aGUgY2hhbmdlcz9cIiwgW1xyXG4gICAgICAgIFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgICAgXSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcGx5ID09PSBcIkRpc2NhcmQgQ2hhbmdlc1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIC8vIGNvbnN0IHJlcGx5U3ViID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAgIC8vIHRoaXMuYWxlcnRDdHJsXHJcbiAgICAvLyAgIC5jcmVhdGUoe1xyXG4gICAgLy8gICAgIGhlYWRlcjogXCJEYXRhIG5vdCBzYXZlIHlldFwiLFxyXG4gICAgLy8gICAgIC8vIHN1YkhlYWRlcjogJ1N1YkhlYWRlciBzdGF0ZW1lbnQgaGVyZScsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogXCJBcmUgeW91IHN1cmUgd2FudCB0byBkaXNjYXJkIHRoZSBjaGFuZ2VzP1wiLFxyXG4gICAgLy8gICAgIGJ1dHRvbnM6IFtcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJDYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgcm9sZTogXCJjYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwic2Vjb25kYXJ5XCIsXHJcbiAgICAvLyAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgIC8vICAgICAgICAgICByZXBseVN1Yi5uZXh0KGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwid2FybmluZ1wiLFxyXG4gICAgLy8gICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgcmVwbHlTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIF1cclxuICAgIC8vICAgfSlcclxuICAgIC8vICAgLnRoZW4oYWxlcnRFbGVtZW50ID0+IHtcclxuICAgIC8vICAgICBhbGVydEVsZW1lbnQucHJlc2VudCgpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIHJldHVybiByZXBseVN1Yi5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgb3Blbk1vZGFsRm9ybShtb2RhbFBhcmFtczogTW9kYWxQYWdlUGFyYW1zKSB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhcIm9wZW5Nb2RhbEZvcm1cIik7XHJcbiAgLy8gICBjb25zb2xlLmVycm9yKFxyXG4gIC8vICAgICBcIlBsZWFzZSB1c2UgTW9kYWxTZXJ2aWNlLnNob3cgaW5zdGVhZCBvZiBNYWluU2VydmljZS5vcGVuTW9kYWxGb3JtIVwiXHJcbiAgLy8gICApO1xyXG4gIC8vICAgLy8gY29uc3QgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFyYW1zLmNvbEZpZWxkcyQgfHwgbW9kYWxQYXJhbXMuY29udHJvbGxlck5hbWUsIG1vZGFsUGFyYW1zLnBhcmVudEdyb3VwLFxyXG4gIC8vICAgLy8gICBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyLCBtb2RhbFBhcmFtcy56TW9kZWwsIG1vZGFsUGFyYW1zLnJlZmVySWQpO1xyXG4gIC8vICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xyXG4gIC8vICAgICBjb21wb25lbnQ6IFptb2RhbFBhZ2UsXHJcbiAgLy8gICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcclxuICAvLyAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAvLyAgICAgICBtb2RhbFBhcmFtcyxcclxuICAvLyAgICAgfSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgbW9kYWwucHJlc2VudCgpO1xyXG4gIC8vICAgcmV0dXJuIG1vZGFsO1xyXG4gIC8vICAgLy8gLm9uV2lsbERpc21pc3MoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgLy8gICAvLyAgIHRoaXMuXHJcbiAgLy8gICAvLyB9KTtcclxuICAvLyB9XHJcblxyXG4gIGNsb3NlTW9kYWxGb3JtKCkge1xyXG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aChcIm1vZGFsR3JvdXAuXCIpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwiPj4gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBncm91cC5jdHJsU2NvcGUsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShldmVudC5UYXJnZXQsIGdyb3VwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkVycm9yIHdoZW4gZ2V0R3JvdXBWYWx1ZTogXCIsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgIGVycm9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlLmVuZHNXaXRoKFwib25OYXZpZ2F0ZVRvXCIpKSB7XHJcbiAgICAgICAgY29uc3QgblVybCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKFwiLzppZFwiLCBcIi9cIiArIGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuVXJsXSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIC8vIChjYWxsRnVuYy5zdGFydHNXaXRoKCdlZGl0JykpIHsgIHpncmlkLWNlbGxDbGlja1xyXG4gICAgICAgIGNvbnN0IGNOYW1lID0gY2FsbEZ1bmMuc2xpY2UoNCk7XHJcbiAgICAgICAgLy8gLy8gZGVidWdnZXI7XHJcbiAgICAgICAgLy8gY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjTmFtZTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG5cclxuICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjTmFtZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgXCJcIixcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjYWxsRnVuYy5jdHJsTmFtZTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5mb3JtSGVhZGVyID0gY2FsbEZ1bmMuZm9ybUhlYWRlcjtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybShtb2RhbEdyb3VwUGFyYW0pO1xyXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhcclxuICAgICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjYWxsRnVuYy5jdHJsTmFtZSxcclxuICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgIGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIkludmFsaWQgY2FsbEZ1bmMgdHlwZTogXCIsXHJcbiAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgIFwiIGV2ZW50LlRhcmdldDogXCIsXHJcbiAgICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybUJ5Q29tcG9uZW50KGNhbGxGdW5jLnR5cGUsIGV2ZW50LkRhdGEuSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIFwiRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAgZm9yOiBcIixcclxuICAgICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICBpZiAocmVzLlByb2Nlc3NpbmdTdGF0dXMpIHtcclxuICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoXHJcbiAgICAgICAgICBNRVNTQUdFVFlQRS5TdWNjZXNzLFxyXG4gICAgICAgICAgc3VjY2Vzc01zZyxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJhY2tOYXZpZ2F0aW9uKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmIChncm91cC5iZWZvcmVCYWNrTmF2aWdhdGlvblBhZ2UpIHtcclxuICAgICAgZ3JvdXAuYmVmb3JlQmFja05hdmlnYXRpb25QYWdlKGdyb3VwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2dyb3VwLmJhY2tOYXZpZ2F0aW9uUGFnZV0pO1xyXG5cclxuICAgICAgICAvL2lmIChncm91cFsncmVsb2FkJ10pIHtcclxuICAgICAgICAvLyAgZ3JvdXBbJ2lzVHJpZ2dlcmVkJ10gPSBmYWxzZTtcclxuICAgICAgICAvLyAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIC8vICB9XHJcbiAgICAgICAgLy8gIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcclxuICAgICAgICAvL31cclxuICAgICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFtncm91cC5iYWNrTmF2aWdhdGlvblBhZ2VdLCk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZ3JvdXBbJ2lzVHJpZ2dlcmVkJ10gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIC8vfVxyXG4gICAgICAvL3RoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcclxuXHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtncm91cC5iYWNrTmF2aWdhdGlvblBhZ2VdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlzdG9yeUJhY2soKSB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIucG9wKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoXHJcbiAgICBldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gICAgZ3JvdXA6IFpHcm91cCxcclxuICAgIG1lOiBhbnksXHJcbiAgICBncmlkT3B0aW9uTmFtZT86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgZ3JpZE9wdGlvbk5hbWUgPSBncmlkT3B0aW9uTmFtZSB8fCBcImdyaWRPcHRpb25zXCI7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgIGNvbnN0IGdyaWRPcHRpb24gPSBldmVudC50YXJnZXRcclxuICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIoXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCJncm91cC5yZWZyZXNoR3JpZFwiLCBcIlwiKTtcclxuICAgICAgaWYgKGdyaWRPcHRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWRPcHRpb25OYW1lID0gZ3JpZE9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHpncmlkQ29udHJvbCA9IGdyb3VwW2dyaWRPcHRpb25OYW1lXSBhcyBaR3JpZDtcclxuICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgIH1cclxuICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ1BhdGg6ICcsIHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jcm0vY3VzdG9tZXInXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbG9uZU5ld0NhY2hlWk1vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGNhY2hlWk1vZGVsID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgaWYgKGNhY2hlWk1vZGVsKSB7XHJcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyQ2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgICBncm91cC56TW9kZWwgPSBjYWNoZVpNb2RlbDtcclxuICAgICAgZ3JvdXAuek1vZGVsLklkID0gMDtcclxuICAgIH1cclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb2YoW10pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBuZXcsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZU5ld01vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZ3JvdXAucGFyZW50UmVmZXJlbmNlSWQgfHwgXCIwXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImN1cnJlbnQgdXJsOiBcIiwgdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gcGF0aFNlZ21lbnRbcGF0aFNlZ21lbnQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICBpZiAobGFzdFNlZ21lbnQgPT09IFwiZWRpdFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoU2VnbWVudC5zbGljZSgwLCBwYXRoU2VnbWVudC5sZW5ndGggLSAyKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKHJlZmVyZW5jZUlkKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKFwibmV3XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZVpNb2RlbCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldENhY2hlKFwiY2xvbmVOZXdNb2RlbFwiKTtcclxuICAgICAgICAgICAgaWYgKCFjYWNoZVpNb2RlbCkge1xyXG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgaXQgQ2xvbmVOZXdcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cC5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0U2VnbWVudCA9PT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICBncm91cC56TW9kZWwgPSB7fTtcclxuICAgICAgICAgICAgZ3JvdXAuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL2dyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGdyb3VwLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZ3JvdXAuek1vZGVsW1xyXG4gICAgICAgICAgICAgIGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkXHJcbiAgICAgICAgICAgIF0gPSBncm91cC5wYXJlbnRSZWZlcmVuY2VJZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2dyb3VwLmVkaXRNb2RlbFVSTCwgcmVmZXJlbmNlSWQsIFwibmV3XCJdLCB7XHJcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogZ3JvdXAuY3RybFNjb3BlLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuZWRpdE1vZGVsVVJMLCByZWZlcmVuY2VJZCwgXCJuZXdcIl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU1vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBjcmVhdGVNb2RlbHJlcyA9IG51bGw7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBjcmVhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUNyZWF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IE9iamVjdC5hc3NpZ24oe30sIF9ncm91cC56TW9kZWwpO1xyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVOdWxsRmllbGRzKG5ld01vZGVsKTtcclxuICAgICAgICAgIC8vIE9iamVjdC5rZXlzKG5ld01vZGVsKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIC8vICAgaWYgKG5ld01vZGVsW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICBkZWxldGUgbmV3TW9kZWxba2V5XTtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBpZiAoIW5ld01vZGVsLklkKSB7XHJcbiAgICAgICAgICAvLyAgIG5ld01vZGVsLklkID0gMDtcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUG9zdCQoXHJcbiAgICAgICAgICAgICAgX2dyb3VwLnJlc291cmNlVVJMLCAvLyArIFwiL1wiICsgZ3JvdXAuek1vZGVsLklkLFxyXG4gICAgICAgICAgICAgIG5ld01vZGVsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVNb2RlbHJlcyA9IHJlc3A7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcDtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBjcmVhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsKSB7XHJcblxyXG4gICAgICAgICAgICAvL3N1cHBvcnQgb2xkIGFuZCBuZXcgd2ViYXBpIG1ldGhvZFxyXG4gICAgICAgICAgICBpZiAoem1vZGVsLkRhdGEpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh6bW9kZWxbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF9ncm91cC5yZWZlcmVuY2VJZCA9IF9ncm91cC56TW9kZWwuSWQ7XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJDcmVhdGVNb2RlbChfZ3JvdXApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcCgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNyZWF0ZU1vZGVscmVzLlByb2Nlc3NpbmdTdGF0dXMgPT0gbnVsbCB8fCBjcmVhdGVNb2RlbHJlcy5Qcm9jZXNzaW5nU3RhdHVzID09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3AgJiYgX2dyb3VwLnpNb2RlbC5JZCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgIF9ncm91cC5pc05ldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIF9ncm91cC5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIF9ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIF9ncm91cC5jYW5jZWxCdXR0b25OYW1lID0gXCJDbG9zZVwiO1xyXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgcmVzcCk7XHJcbiAgICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZShyZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmZy5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmcubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRG9uZSB1cGRhdGVNb2RlbCB1cGRhdGVkIHpNb2RlbDpcIiwgZmcudmFsdWUpO1xyXG4gICAgICAgICAgLy8gdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhcIlJlY29yZCBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5cIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlTW9kZWwoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgbGV0IGZnOiBGb3JtR3JvdXAgPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBmZyA9IGdyb3VwWydfJyArIGV2ZW50LmRhdGEuU3ViVHlwZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgX2dyb3VwID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmcuZGlydHkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgcmVjb3JkIGlzIG5vdCBzYXZlLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmcudmFsaWQpIHtcclxuICAgICAgY29uc3QgZXJyb3JzID0gWkNvbXBvbmVudEhlbHBlci5nZXRGb3JtR3JvdXBFcnJvcnMoZmcsIHRoaXMuYWxlcnRTZXJ2aWNlLCBncm91cCk7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkZvcm0gVmFsaWRhdGlvbiBnb3QgZXJyb3Iocyk6XCIsIGVycm9ycyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBvZihfZ3JvdXAuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJCZWZvcmUgdXBkYXRlLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVVcGRhdGVNb2RlbChfZ3JvdXApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgICAgICAgICAuaHR0cFB1dCQoX2dyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyBfZ3JvdXAuek1vZGVsLklkLCBfZ3JvdXAuek1vZGVsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIHVwZGF0ZWQsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIGlmICh6bW9kZWwgJiYgem1vZGVsLkRhdGEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCB6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIGZnLnBhdGNoVmFsdWUoem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkRvbmUgdXBkYXRlTW9kZWwgdXBkYXRlZCB6TW9kZWw6XCIsIGZnLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHptb2RlbCAmJiB6bW9kZWxbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbCk7XHJcbiAgICAgICAgICAgIGZnLnBhdGNoVmFsdWUoem1vZGVsKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIF9ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZnRlclVwZGF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAvLyBPYmplY3QuYXNzaWduKGdyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgLy8gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAvLyAgIC5odHRwUHV0JChncm91cC5yZXNvdXJjZVVSTCArIFwiL1wiICsgZ3JvdXAuek1vZGVsLklkLCBncm91cC56TW9kZWwpXHJcbiAgICAvLyAgIC5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihncm91cC56TW9kZWwsIHJlc3ApO1xyXG4gICAgLy8gICAgIGZnLnBhdGNoVmFsdWUocmVzcCk7XHJcbiAgICAvLyAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIkRvbmUgdXBkYXRlTW9kZWwgdXBkYXRlZCB6TW9kZWw6XCIsIGZnLnZhbHVlKTtcclxuICAgIC8vICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb25lTmV3TW9kZWwoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIF9ncm91cCA9IGdyb3VwWydfJyArIGV2ZW50LmRhdGEuU3ViVHlwZV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIF9ncm91cC5mb3JtLnZhbHVlKTtcclxuICAgIF9ncm91cC56TW9kZWwuSWQgPSAwO1xyXG5cclxuICAgIGNvbnN0IGNsZWFyRmllbGRzID0gW1wiV0ZTX0RvY3VtZW50SWRcIiwgXCJXRlNfU3RhdHVzQ29kZVwiLCBcIldGU19TdGF0dXNOYW1lXCJdO1xyXG4gICAgY2xlYXJGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgaWYgKF9ncm91cC56TW9kZWwuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XHJcbiAgICAgICAgX2dyb3VwLnpNb2RlbFtmaWVsZF0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhY2hlU2VydmljZS5zZXRDYWNoZShcImNsb25lTmV3TW9kZWxcIiwgZ3JvdXAuek1vZGVsKTtcclxuICAgIHRoaXMubmV3TW9kZWwobnVsbCwgZ3JvdXApO1xyXG4gICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgIF9ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWxldGVNb2RlbChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb2YoX2dyb3VwLnpNb2RlbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIGRlbGV0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmVmb3JlRGVsZXRlTW9kZWwoX2dyb3VwKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIF9ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3coXCJEZWxldGUgUmVjb3JkXCIsIFwiQXJlIHlvdSBzdXJlP1wiLFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIk5vXCIsIGNzc0NsYXNzOiBcInNlY29uZGFyeVwiIH0gYXMgQWxlcnRCdXR0b24sXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIlllc1wiLCBjc3NDbGFzczogXCJwcmltYXJ5XCIgfSBhcyBBbGVydEJ1dHRvblxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHJlcGx5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChyZXBseSA9PT0gXCJZZXNcIikge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgICAgICAgX2dyb3VwLnpNb2RlbC5EaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmh0dHBQdXQkKF9ncm91cC5yZXNvdXJjZVVSTCArIFwiL1wiICsgX2dyb3VwLnpNb2RlbC5JZCwgX2dyb3VwLnpNb2RlbClcclxuICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzKSA9PlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyBkZWxldGVkIHN1Y2Nlc3NmdWxseS5cIilcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIGRlbGV0ZWQsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJEZWxldGVNb2RlbChfZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5QmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVVcGRhdGVNb2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVEZWxldGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZURlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVEZWxldGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJlZm9yZU5ld01vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlTmV3b2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlTmV3TW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVDcmVhdGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZUNyZWF0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVDcmVhdGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBiZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC56TW9kZWwuSWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiek1vZGVsLklkIGlzIG5vdCBkZWZpbmVkXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGFmdGVyTmV3TW9kZWwoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJOZXdNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlck5ld01vZGVsKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJDcmVhdGVNb2RlbChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghZ3JvdXAuYWZ0ZXJDcmVhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5hZnRlckNyZWF0ZU1vZGVsIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyQ3JlYXRlTW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclVwZGF0ZU1vZGVsKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC5hZnRlclVwZGF0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyVXBkYXRlTW9kZWwgaXMgbm90IGRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYWZ0ZXJVcGRhdGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyRGVsZXRlTW9kZWwoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyRGVsZXRlTW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJEZWxldGVNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlckRlbGV0ZU1vZGVsKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5hZnRlclBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBvbkFjdGlvbihncm91cDogWkdyb3VwKSB7XHJcbiAgLy8gICB0aGlzLmFjdGlvblNoZWV0Q3RybFxyXG4gIC8vICAgICAuY3JlYXRlKHtcclxuICAvLyAgICAgICBoZWFkZXI6IFwiQ2hvb3NlIGFuIEFjdGlvblwiLFxyXG4gIC8vICAgICAgIGJ1dHRvbnM6IGdyb3VwLnRvcFJpZ2h0QWN0aW9uQnV0dG9uXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICAgIC50aGVuKGFjdGlvblNoZWV0RWwgPT4ge1xyXG4gIC8vICAgICAgIGFjdGlvblNoZWV0RWwucHJlc2VudCgpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldE1vZGVsVmFsdWUocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGdyb3VwOiBaR3JvdXApIHtcclxuICAvLyAgIGdyb3VwLnpNb2RlbFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgLy8gICBpZiAoZ3JvdXAuaXNMb2FkaW5nKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGZnID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgLy8gICBpZiAoIWZnKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICwgbm8tZGVidWdnZXJcclxuICAvLyAgICAgZGVidWdnZXI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBmYyA9IGZnLmNvbnRyb2xzW3Byb3BlcnR5TmFtZV07XHJcbiAgLy8gICBpZiAoIWZjKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgLy8gICAgIGRlYnVnZ2VyO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZmMuc2V0VmFsdWUodmFsdWUpO1xyXG4gIC8vICAgZmMubWFya0FzRGlydHkoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93ek1vZGFsKFxyXG4gICAgY29sRmllbGRzJDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxBcnJheTxaRmllbGQ+PixcclxuICAgIHBhcmVudEdyb3VwOiBaR3JvdXAsXHJcbiAgICBmb3JtSGVhZGVyOiBzdHJpbmcsXHJcbiAgICB6TW9kZWw/OiBhbnksXHJcbiAgICByZWZlcklkPzogc3RyaW5nLFxyXG4gICAgY29tcG9uZW50U2l6ZT86IFpDb21wb25lbnRTaXplLFxyXG4gICAgc2tpcElzRGlydHlDaGVjaz86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IG1vZGFsY29tcG9uZW50ID0gWm1vZGFsQ29tcG9uZW50O1xyXG4gICAgY29uc3QgbW9kYWxtb2JpbGVjb21wb25lbnQgPSBabW9kYWxNb2JpbGVDb21wb25lbnQ7XHJcblxyXG4gICAgaWYgKHBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBwYXJlbnRHcm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coY29sRmllbGRzJCwgcGFyZW50R3JvdXAsIGZvcm1IZWFkZXIsIG1vZGFsY29tcG9uZW50LCBtb2RhbG1vYmlsZWNvbXBvbmVudCwgek1vZGVsLCByZWZlcklkLCBjb21wb25lbnRTaXplLCBza2lwSXNEaXJ0eUNoZWNrKVxyXG4gICAgLy9jb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgY29va2llU3RvcmVQb3N0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXNcIjtcclxuICAgIGNvbnN0IGNvb2tpZVN0b3JlVmFsdWUgPSB7XHJcbiAgICAgICdOYW1lJzogbmFtZSxcclxuICAgICAgJ1ZhbHVlJzogSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKGNvb2tpZVN0b3JlVVJMLCBjb29raWVTdG9yZVZhbHVlKS5waXBlKG1hcChyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJncmlkIGNvbmZpZyBzYXZlZChcIiArIHJlcy5zdGF0dXMgKyBcIik6IFwiLCByZXMpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZUdldChuYW1lOiBzdHJpbmcsIGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXMvP25hbWU9XCIgKyBuYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoY29va2llU3RvcmVVUkwsIHsgaGVhZGVyczogYWNjZXNzVG9rZW4gfSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcIkFkbWluL0RlbGV0ZU11bHRpcGxlQ29va2llc1wiO1xyXG4gICAgY29uc3QgY29va2llU3RvcmVWYWx1ZSA9IHtcclxuICAgICAgJ2NvbnRhaW5OYW1lJzogbmFtZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JChjb29raWVTdG9yZVVSTCwgY29va2llU3RvcmVWYWx1ZSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoR3JpZChncm91cDogWkdyb3VwKSB7XHJcbiAgY29uc3QgemdyaWRDb250cm9sID0gZ3JvdXBbXCJncmlkT3B0aW9uc1wiXSBhcyBaR3JpZDtcclxuICBpZiAoemdyaWRDb250cm9sKSB7XHJcbiAgICB6Z3JpZENvbnRyb2wuZ2V0RGF0YSgpO1xyXG4gIH1cclxuICBncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG59XHJcbiJdfQ==
|
|
783
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvbWFpbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU96RCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFjLGVBQWUsRUFBZ0IsRUFBRSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBUSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNRLFdBQVcsRUFFeEIsZ0JBQWdCLEVBQStELE1BQU0sRUFDdEYsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7QUFFMUUsc0RBQXNEO0FBRXRELHFIQUFxSDtBQUNySCwwREFBMEQ7QUFLMUQsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFDVSxNQUFjLEVBQ2QsU0FBMEIsRUFDMUIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsa0JBQXNDLEVBQ3RDLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFlBQW9DO1FBWHBDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMx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cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgZnJvbSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgdGFrZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBNRVNTQUdFVFlQRSwgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIEFsZXJ0U2VydmljZSwgQ2FjaGVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvbXBvbmVudFNpemUsIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXBcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UsIE1vZGFsUmVzcG9uc2UgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuLy8gaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vem1vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50RGVidWdTZXJ2aWNlIH0gZnJvbSAnLi96Y29tcG9uZW50LmRlYnVnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBabW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi96bW9kYWwvem1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFptb2RhbE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwtbW9iaWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpHcmlkIH0gZnJvbSAnLi4vemdyaWQvemdyaWQuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgWm1vZGFsUGFnZSB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwucGFnZSc7XHJcblxyXG4vLyBpbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIE1vZGFsUGFnZVBhcmFtcywgWkdyaWQgfSBmcm9tICcuLi9keW5hbWljZm9ybS96Y29tcG9uZW50Lm1vZGVsJztcclxuLy8gaW1wb3J0IHsgWkdyb3VwLCBaRmllbGQgfSBmcm9tICcuLi9tb2RlbC96Z3JvdXAubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1haW5TZXJ2aWNlIHtcclxuICBwcml2YXRlIGdyb3VwOiBaR3JvdXA7XHJcbiAgcHJpdmF0ZSBvYXV0aEVudmlyb25tZW50VXJsOiBzdHJpbmc7XHJcbiAgIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZWJ1Z1NlcnZpY2U6IFpDb21wb25lbnREZWJ1Z1NlcnZpY2VcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdNYWluU2VydmljZSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgdGhpcy5vYXV0aEVudmlyb25tZW50VXJsID0gdGhpcy56Y29yZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKS5lMU9hdXRoVXJsICsgJy8nO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRVcCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdBdCBtYWluLnNlcnZpY2UgKFN0YXJ0VXApIC4uLicpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JvdXAoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5ncm91cCA9IGdyb3VwO1xyXG4gICAgdGhpcy5maWVsZFNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNldEdyb3VwKGdyb3VwKTtcclxuICAgIGNvbnN0IGlzRGVidWdnaW5nID0gdGhpcy56Y29yZVNlcnZpY2UuaXNEZWJ1Z1Nlc3Npb24oKSB8fCBmYWxzZTtcclxuICAgIGlmIChpc0RlYnVnZ2luZykge1xyXG4gICAgICB0aGlzLmRlYnVnU2VydmljZS5vbkluaXREZWJ1Z2dlcihncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNlcnZlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIGdldEdyb3VwRmllbGRzKFxyXG4gICAgY3RybE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1UeXBlOiBcIkxpc3RGaWVsZFwiIHwgXCJGb3JtRmllbGRcIixcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIGN0cmxOYW1lLFxyXG4gICAgICBmb3JtVHlwZSxcclxuICAgICAgZ3JvdXAsXHJcbiAgICAgIHByb3BlcnR5TmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVHcm91cChcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBjdHJsTmFtZTogc3RyaW5nLFxyXG4gICAgcGFnZU5hbWU6IHN0cmluZyxcclxuICAgIG1lOiBhbnlcclxuICApOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGdyb3VwLnJlc291cmNlVVJMTmFtZSB8fCBjdHJsTmFtZTtcclxuICAgIGdyb3VwLnJlc291cmNlVVJMTmFtZSA9IHJlc291cmNlTmFtZTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGdyb3VwLCB7XHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwocmVzb3VyY2VOYW1lKSxcclxuICAgICAgZ3JpZENvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICBjdHJsTmFtZSxcclxuICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBjdHJsU2NvcGU6IG1lLFxyXG4gICAgICBwYWdlTmFtZSxcclxuICAgICAgY3RybE5hbWUsXHJcbiAgICAgIC8vIGNyZWF0ZU1vZGVsVVJMOiBcIi9jcmVhdGVcIiArIGN0cmxOYW1lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgIGVkaXRNb2RlbFVSTDogY3RybE5hbWUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgLy8gbGlzdE1vZGVsVVJMOiBcIi9saXN0XCIgKyBjdHJsTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAvLyBmb3JtSGVhZGVyOiBcIi4uLlwiLFxyXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXHJcbiAgICAgIGZpZWxkczogW10sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHpDb21wb25lbnRzOiB7fSxcclxuICAgICAgekRhdGE6IHt9LFxyXG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PFpDb21wb25lbnRPdXRwdXRFdmVudD4obnVsbCksXHJcbiAgICAgIC8vIGZvcm06IG51bGwgYXMgRm9ybUdyb3VwLCAvLyByZW1vdmVkIGZvciBidWcgZml4LlxyXG4gICAgICBjYW5jZWxCdXR0b25OYW1lOiBcIkNsb3NlXCIsXHJcbiAgICAgIHpCdXR0b25zQ291bnQ6IDAsXHJcbiAgICAgIC8vIHRvcFJpZ2h0QWN0aW9uQnV0dG9uOiBbXSxcclxuICAgICAgLy8gb25BY3Rpb246IHRoaXMub25BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgYmFja05hdmlnYXRpb246IHRoaXMuYmFja05hdmlnYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgaGlzdG9yeUJhY2s6IHRoaXMuaGlzdG9yeUJhY2suYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFBhZ2U6IHRoaXMucmVmcmVzaFBhZ2UsXHJcbiAgICAgIHJlZnJlc2hHcmlkOiB0aGlzLnJlZnJlc2hHcmlkLmJpbmQodGhpcyksXHJcbiAgICAgIHVwZGF0ZU1vZGVsOiB0aGlzLnVwZGF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNyZWF0ZU1vZGVsOiB0aGlzLmNyZWF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNsb25lTmV3TW9kZWw6IHRoaXMuY2xvbmVOZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBkZWxldGVNb2RlbDogdGhpcy5kZWxldGVNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBuZXdNb2RlbDogdGhpcy5uZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBfaXNEZWJ1Z2dpbmc6IGVudmlyb25tZW50LmRlYnVnU2Vzc2lvbiB8fCBmYWxzZSxcclxuICAgICAgLy8gX2RlYnVnOiB7XHJcbiAgICAgIC8vICAgekRhdGE6ICB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH1cclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBhZnRlckdldE1vZGVsU3VjY2VzczogbnVsbCxcclxuICAgICAgLy8gYmVmb3JlVXBkYXRlTW9kZWw6IG51bGwsXHJcbiAgICAgIC8vIGlzRWRpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGdyb3VwLnN1YmplY3Quc3Vic2NyaWJlKChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSA9PlxyXG4gICAgICB0aGlzLnN1YmplY3RFdmVudChldmVudCwgZ3JvdXAsIG1lKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbWUuc3Vic2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBaR3JvdXAsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2VcclxuICAgICAgLmh0dHBHZXQkKGdyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyByZWNJZCwgbnVsbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgIGdyb3VwLnpNb2RlbCA9IHptb2RlbDtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGQgJiZcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoem1vZGVsKS5pbmRleE9mKGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkKSAhPT0gLTEgJiZcclxuICAgICAgICAgICAgIWdyb3VwLmJhY2tOYXZpZ2F0aW9uUGFnZS5lbmRzV2l0aChcIi5lZGl0XCIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlID1cclxuICAgICAgICAgICAgICBncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UgK1xyXG4gICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICB6bW9kZWxbZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGRdLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAgIFwiL2VkaXRcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGNhbkV4aXQoZm9ybTogRm9ybUdyb3VwKTogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFmb3JtIHx8ICFmb3JtLmRpcnR5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtWydza2lwRGlydHlDaGVjayddKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZVxyXG4gICAgICAuc2hvdyhcIkRhdGEgbm90IHNhdmUgeWV0XCIsIFwiQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGlzY2FyZCB0aGUgY2hhbmdlcz9cIiwgW1xyXG4gICAgICAgIFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgICAgXSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcGx5ID09PSBcIkRpc2NhcmQgQ2hhbmdlc1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIC8vIGNvbnN0IHJlcGx5U3ViID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAgIC8vIHRoaXMuYWxlcnRDdHJsXHJcbiAgICAvLyAgIC5jcmVhdGUoe1xyXG4gICAgLy8gICAgIGhlYWRlcjogXCJEYXRhIG5vdCBzYXZlIHlldFwiLFxyXG4gICAgLy8gICAgIC8vIHN1YkhlYWRlcjogJ1N1YkhlYWRlciBzdGF0ZW1lbnQgaGVyZScsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogXCJBcmUgeW91IHN1cmUgd2FudCB0byBkaXNjYXJkIHRoZSBjaGFuZ2VzP1wiLFxyXG4gICAgLy8gICAgIGJ1dHRvbnM6IFtcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJDYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgcm9sZTogXCJjYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwic2Vjb25kYXJ5XCIsXHJcbiAgICAvLyAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgIC8vICAgICAgICAgICByZXBseVN1Yi5uZXh0KGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwid2FybmluZ1wiLFxyXG4gICAgLy8gICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgcmVwbHlTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIF1cclxuICAgIC8vICAgfSlcclxuICAgIC8vICAgLnRoZW4oYWxlcnRFbGVtZW50ID0+IHtcclxuICAgIC8vICAgICBhbGVydEVsZW1lbnQucHJlc2VudCgpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIHJldHVybiByZXBseVN1Yi5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgb3Blbk1vZGFsRm9ybShtb2RhbFBhcmFtczogTW9kYWxQYWdlUGFyYW1zKSB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhcIm9wZW5Nb2RhbEZvcm1cIik7XHJcbiAgLy8gICBjb25zb2xlLmVycm9yKFxyXG4gIC8vICAgICBcIlBsZWFzZSB1c2UgTW9kYWxTZXJ2aWNlLnNob3cgaW5zdGVhZCBvZiBNYWluU2VydmljZS5vcGVuTW9kYWxGb3JtIVwiXHJcbiAgLy8gICApO1xyXG4gIC8vICAgLy8gY29uc3QgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFyYW1zLmNvbEZpZWxkcyQgfHwgbW9kYWxQYXJhbXMuY29udHJvbGxlck5hbWUsIG1vZGFsUGFyYW1zLnBhcmVudEdyb3VwLFxyXG4gIC8vICAgLy8gICBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyLCBtb2RhbFBhcmFtcy56TW9kZWwsIG1vZGFsUGFyYW1zLnJlZmVySWQpO1xyXG4gIC8vICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xyXG4gIC8vICAgICBjb21wb25lbnQ6IFptb2RhbFBhZ2UsXHJcbiAgLy8gICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcclxuICAvLyAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAvLyAgICAgICBtb2RhbFBhcmFtcyxcclxuICAvLyAgICAgfSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgbW9kYWwucHJlc2VudCgpO1xyXG4gIC8vICAgcmV0dXJuIG1vZGFsO1xyXG4gIC8vICAgLy8gLm9uV2lsbERpc21pc3MoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgLy8gICAvLyAgIHRoaXMuXHJcbiAgLy8gICAvLyB9KTtcclxuICAvLyB9XHJcblxyXG4gIGNsb3NlTW9kYWxGb3JtKCkge1xyXG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aChcIm1vZGFsR3JvdXAuXCIpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwiPj4gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBncm91cC5jdHJsU2NvcGUsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShldmVudC5UYXJnZXQsIGdyb3VwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkVycm9yIHdoZW4gZ2V0R3JvdXBWYWx1ZTogXCIsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgIGVycm9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlLmVuZHNXaXRoKFwib25OYXZpZ2F0ZVRvXCIpKSB7XHJcbiAgICAgICAgY29uc3QgblVybCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKFwiLzppZFwiLCBcIi9cIiArIGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuVXJsXSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIC8vIChjYWxsRnVuYy5zdGFydHNXaXRoKCdlZGl0JykpIHsgIHpncmlkLWNlbGxDbGlja1xyXG4gICAgICAgIGNvbnN0IGNOYW1lID0gY2FsbEZ1bmMuc2xpY2UoNCk7XHJcbiAgICAgICAgLy8gLy8gZGVidWdnZXI7XHJcbiAgICAgICAgLy8gY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjTmFtZTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG5cclxuICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjTmFtZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgXCJcIixcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjYWxsRnVuYy5jdHJsTmFtZTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5mb3JtSGVhZGVyID0gY2FsbEZ1bmMuZm9ybUhlYWRlcjtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybShtb2RhbEdyb3VwUGFyYW0pO1xyXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhcclxuICAgICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjYWxsRnVuYy5jdHJsTmFtZSxcclxuICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgIGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIkludmFsaWQgY2FsbEZ1bmMgdHlwZTogXCIsXHJcbiAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgIFwiIGV2ZW50LlRhcmdldDogXCIsXHJcbiAgICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybUJ5Q29tcG9uZW50KGNhbGxGdW5jLnR5cGUsIGV2ZW50LkRhdGEuSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIFwiRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAgZm9yOiBcIixcclxuICAgICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICBpZiAocmVzLlByb2Nlc3NpbmdTdGF0dXMpIHtcclxuICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoXHJcbiAgICAgICAgICBNRVNTQUdFVFlQRS5TdWNjZXNzLFxyXG4gICAgICAgICAgc3VjY2Vzc01zZyxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJhY2tOYXZpZ2F0aW9uKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmIChncm91cFsnaXNFbWJlZGRlZFBhZ2UnXSkge1xyXG4gICAgICBncm91cFsnaXNUcmlnZ2VyZWQnXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlQ29udGFpbmVyVmlldyhncm91cCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ3JvdXAuYmVmb3JlQmFja05hdmlnYXRpb25QYWdlKSB7XHJcbiAgICAgIGdyb3VwLmJlZm9yZUJhY2tOYXZpZ2F0aW9uUGFnZShncm91cCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBncm91cFsnaXNUcmlnZ2VyZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtncm91cC5iYWNrTmF2aWdhdGlvblBhZ2VdKTtcclxuXHJcbiAgICAgICAgLy9pZiAoZ3JvdXBbJ3JlbG9hZCddKSB7XHJcbiAgICAgICAgLy8gIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyAgfVxyXG4gICAgICAgIC8vICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlXSwpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcblxyXG4gICAgICAvL3RoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAvL31cclxuICAgICAgLy90aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhpc3RvcnlCYWNrKCkge1xyXG4gICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwWydpc0VtYmVkZGVkUGFnZSddKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VDb250YWluZXJWaWV3KHRoaXMuZ3JvdXApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAgXHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIucG9wKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoXHJcbiAgICBldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gICAgZ3JvdXA6IFpHcm91cCxcclxuICAgIG1lOiBhbnksXHJcbiAgICBncmlkT3B0aW9uTmFtZT86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgZ3JpZE9wdGlvbk5hbWUgPSBncmlkT3B0aW9uTmFtZSB8fCBcImdyaWRPcHRpb25zXCI7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgIGNvbnN0IGdyaWRPcHRpb24gPSBldmVudC50YXJnZXRcclxuICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIoXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCJncm91cC5yZWZyZXNoR3JpZFwiLCBcIlwiKTtcclxuICAgICAgaWYgKGdyaWRPcHRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWRPcHRpb25OYW1lID0gZ3JpZE9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHpncmlkQ29udHJvbCA9IGdyb3VwW2dyaWRPcHRpb25OYW1lXSBhcyBaR3JpZDtcclxuICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgIH1cclxuICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ1BhdGg6ICcsIHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jcm0vY3VzdG9tZXInXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbG9uZU5ld0NhY2hlWk1vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGNhY2hlWk1vZGVsID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgaWYgKGNhY2hlWk1vZGVsKSB7XHJcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyQ2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgICBncm91cC56TW9kZWwgPSBjYWNoZVpNb2RlbDtcclxuICAgICAgZ3JvdXAuek1vZGVsLklkID0gMDtcclxuICAgIH1cclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb2YoW10pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBuZXcsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZU5ld01vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZ3JvdXAucGFyZW50UmVmZXJlbmNlSWQgfHwgXCIwXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImN1cnJlbnQgdXJsOiBcIiwgdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gcGF0aFNlZ21lbnRbcGF0aFNlZ21lbnQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICBpZiAobGFzdFNlZ21lbnQgPT09IFwiZWRpdFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoU2VnbWVudC5zbGljZSgwLCBwYXRoU2VnbWVudC5sZW5ndGggLSAyKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKHJlZmVyZW5jZUlkKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKFwibmV3XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZVpNb2RlbCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldENhY2hlKFwiY2xvbmVOZXdNb2RlbFwiKTtcclxuICAgICAgICAgICAgaWYgKCFjYWNoZVpNb2RlbCkge1xyXG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgaXQgQ2xvbmVOZXdcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cC5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0U2VnbWVudCA9PT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICBncm91cC56TW9kZWwgPSB7fTtcclxuICAgICAgICAgICAgZ3JvdXAuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL2dyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGdyb3VwLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZ3JvdXAuek1vZGVsW1xyXG4gICAgICAgICAgICAgIGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkXHJcbiAgICAgICAgICAgIF0gPSBncm91cC5wYXJlbnRSZWZlcmVuY2VJZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2dyb3VwLmVkaXRNb2RlbFVSTCwgcmVmZXJlbmNlSWQsIFwibmV3XCJdLCB7XHJcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogZ3JvdXAuY3RybFNjb3BlLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuZWRpdE1vZGVsVVJMLCByZWZlcmVuY2VJZCwgXCJuZXdcIl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU1vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBjcmVhdGVNb2RlbHJlcyA9IG51bGw7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBjcmVhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUNyZWF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IE9iamVjdC5hc3NpZ24oe30sIF9ncm91cC56TW9kZWwpO1xyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVOdWxsRmllbGRzKG5ld01vZGVsKTtcclxuICAgICAgICAgIC8vIE9iamVjdC5rZXlzKG5ld01vZGVsKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIC8vICAgaWYgKG5ld01vZGVsW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICBkZWxldGUgbmV3TW9kZWxba2V5XTtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBpZiAoIW5ld01vZGVsLklkKSB7XHJcbiAgICAgICAgICAvLyAgIG5ld01vZGVsLklkID0gMDtcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUG9zdCQoXHJcbiAgICAgICAgICAgICAgX2dyb3VwLnJlc291cmNlVVJMLCAvLyArIFwiL1wiICsgZ3JvdXAuek1vZGVsLklkLFxyXG4gICAgICAgICAgICAgIG5ld01vZGVsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVNb2RlbHJlcyA9IHJlc3A7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcDtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBjcmVhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsKSB7XHJcblxyXG4gICAgICAgICAgICAvL3N1cHBvcnQgb2xkIGFuZCBuZXcgd2ViYXBpIG1ldGhvZFxyXG4gICAgICAgICAgICBpZiAoem1vZGVsLkRhdGEpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh6bW9kZWxbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF9ncm91cC5yZWZlcmVuY2VJZCA9IF9ncm91cC56TW9kZWwuSWQ7XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJDcmVhdGVNb2RlbChfZ3JvdXAsIHptb2RlbCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY3JlYXRlTW9kZWxyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PSBudWxsIHx8IGNyZWF0ZU1vZGVscmVzLlByb2Nlc3NpbmdTdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcCAmJiBfZ3JvdXAuek1vZGVsLklkICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmNhbmNlbEJ1dHRvbk5hbWUgPSBcIkNsb3NlXCI7XHJcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCByZXNwKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmZy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICAvLyB0aGlzLnRvYXN0U2VydmljZS5zaG93KFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVNb2RlbChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSB1cGRhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZVVwZGF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUHV0JChfZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIF9ncm91cC56TW9kZWwuSWQsIF9ncm91cC56TW9kZWwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgdXBkYXRlZCwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRG9uZSB1cGRhdGVNb2RlbCB1cGRhdGVkIHpNb2RlbDpcIiwgZmcudmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoem1vZGVsICYmIHptb2RlbFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkRvbmUgdXBkYXRlTW9kZWwgdXBkYXRlZCB6TW9kZWw6XCIsIGZnLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgX2dyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyVXBkYXRlTW9kZWwoX2dyb3VwLCB6bW9kZWwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgLy8gICAuaHR0cFB1dCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIGdyb3VwLnpNb2RlbC5JZCwgZ3JvdXAuek1vZGVsKVxyXG4gICAgLy8gICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oZ3JvdXAuek1vZGVsLCByZXNwKTtcclxuICAgIC8vICAgICBmZy5wYXRjaFZhbHVlKHJlc3ApO1xyXG4gICAgLy8gICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAvLyAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9uZU5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCBfZ3JvdXAuZm9ybS52YWx1ZSk7XHJcbiAgICBfZ3JvdXAuek1vZGVsLklkID0gMDtcclxuXHJcbiAgICBjb25zdCBjbGVhckZpZWxkcyA9IFtcIldGU19Eb2N1bWVudElkXCIsIFwiV0ZTX1N0YXR1c0NvZGVcIiwgXCJXRlNfU3RhdHVzTmFtZVwiXTtcclxuICAgIGNsZWFyRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChfZ3JvdXAuek1vZGVsLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xyXG4gICAgICAgIF9ncm91cC56TW9kZWxbZmllbGRdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICB0aGlzLm5ld01vZGVsKG51bGwsIGdyb3VwKTtcclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICBfZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVsZXRlTW9kZWwoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgbGV0IGZnOiBGb3JtR3JvdXAgPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBmZyA9IGdyb3VwWydfJyArIGV2ZW50LmRhdGEuU3ViVHlwZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgX2dyb3VwID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBkZWxldGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZURlbGV0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBfZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5zaG93KFwiRGVsZXRlIFJlY29yZFwiLCBcIkFyZSB5b3Ugc3VyZT9cIixcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVwbHkgPT09IFwiWWVzXCIpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICAgIF9ncm91cC56TW9kZWwuRGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgIC5odHRwUHV0JChfZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIF9ncm91cC56TW9kZWwuSWQsIF9ncm91cC56TW9kZWwpXHJcbiAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgZGVsZXRlZCBzdWNjZXNzZnVsbHkuXCIpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBkZWxldGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyRGVsZXRlTW9kZWwoX2dyb3VwLCB6bW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5QmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVVcGRhdGVNb2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVEZWxldGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZURlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVEZWxldGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJlZm9yZU5ld01vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlTmV3b2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlTmV3TW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVDcmVhdGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZUNyZWF0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVDcmVhdGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBiZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC56TW9kZWwuSWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiek1vZGVsLklkIGlzIG5vdCBkZWZpbmVkXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGFmdGVyTmV3TW9kZWwoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJOZXdNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlck5ld01vZGVsKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJDcmVhdGVNb2RlbChncm91cDogWkdyb3VwLCB6bW9kZWw6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyQ3JlYXRlTW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJDcmVhdGVNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlckNyZWF0ZU1vZGVsKGdyb3VwLCB6bW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclVwZGF0ZU1vZGVsKGdyb3VwOiBaR3JvdXAsIHptb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghZ3JvdXAuYWZ0ZXJVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5hZnRlclVwZGF0ZU1vZGVsIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyVXBkYXRlTW9kZWwoZ3JvdXAsIHptb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyRGVsZXRlTW9kZWwoZ3JvdXA6IFpHcm91cCwgem1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC5hZnRlckRlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyRGVsZXRlTW9kZWwgaXMgbm90IGRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYWZ0ZXJEZWxldGVNb2RlbChncm91cCwgem1vZGVsKTtcclxuICB9XHJcblxyXG4gIGFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5hZnRlclBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBvbkFjdGlvbihncm91cDogWkdyb3VwKSB7XHJcbiAgLy8gICB0aGlzLmFjdGlvblNoZWV0Q3RybFxyXG4gIC8vICAgICAuY3JlYXRlKHtcclxuICAvLyAgICAgICBoZWFkZXI6IFwiQ2hvb3NlIGFuIEFjdGlvblwiLFxyXG4gIC8vICAgICAgIGJ1dHRvbnM6IGdyb3VwLnRvcFJpZ2h0QWN0aW9uQnV0dG9uXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICAgIC50aGVuKGFjdGlvblNoZWV0RWwgPT4ge1xyXG4gIC8vICAgICAgIGFjdGlvblNoZWV0RWwucHJlc2VudCgpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldE1vZGVsVmFsdWUocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGdyb3VwOiBaR3JvdXApIHtcclxuICAvLyAgIGdyb3VwLnpNb2RlbFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgLy8gICBpZiAoZ3JvdXAuaXNMb2FkaW5nKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGZnID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgLy8gICBpZiAoIWZnKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICwgbm8tZGVidWdnZXJcclxuICAvLyAgICAgZGVidWdnZXI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBmYyA9IGZnLmNvbnRyb2xzW3Byb3BlcnR5TmFtZV07XHJcbiAgLy8gICBpZiAoIWZjKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgLy8gICAgIGRlYnVnZ2VyO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZmMuc2V0VmFsdWUodmFsdWUpO1xyXG4gIC8vICAgZmMubWFya0FzRGlydHkoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93ek1vZGFsKFxyXG4gICAgY29sRmllbGRzJDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxBcnJheTxaRmllbGQ+PixcclxuICAgIHBhcmVudEdyb3VwOiBaR3JvdXAsXHJcbiAgICBmb3JtSGVhZGVyOiBzdHJpbmcsXHJcbiAgICB6TW9kZWw/OiBhbnksXHJcbiAgICByZWZlcklkPzogc3RyaW5nLFxyXG4gICAgY29tcG9uZW50U2l6ZT86IFpDb21wb25lbnRTaXplLFxyXG4gICAgc2tpcElzRGlydHlDaGVjaz86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IG1vZGFsY29tcG9uZW50ID0gWm1vZGFsQ29tcG9uZW50O1xyXG4gICAgY29uc3QgbW9kYWxtb2JpbGVjb21wb25lbnQgPSBabW9kYWxNb2JpbGVDb21wb25lbnQ7XHJcblxyXG4gICAgaWYgKHBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBwYXJlbnRHcm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coY29sRmllbGRzJCwgcGFyZW50R3JvdXAsIGZvcm1IZWFkZXIsIG1vZGFsY29tcG9uZW50LCBtb2RhbG1vYmlsZWNvbXBvbmVudCwgek1vZGVsLCByZWZlcklkLCBjb21wb25lbnRTaXplLCBza2lwSXNEaXJ0eUNoZWNrKVxyXG4gICAgLy9jb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgY29va2llU3RvcmVQb3N0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXNcIjtcclxuICAgIGNvbnN0IGNvb2tpZVN0b3JlVmFsdWUgPSB7XHJcbiAgICAgICdOYW1lJzogbmFtZSxcclxuICAgICAgJ1ZhbHVlJzogSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKGNvb2tpZVN0b3JlVVJMLCBjb29raWVTdG9yZVZhbHVlKS5waXBlKG1hcChyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJncmlkIGNvbmZpZyBzYXZlZChcIiArIHJlcy5zdGF0dXMgKyBcIik6IFwiLCByZXMpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZUdldChuYW1lOiBzdHJpbmcsIGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXMvP25hbWU9XCIgKyBuYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoY29va2llU3RvcmVVUkwsIHsgaGVhZGVyczogYWNjZXNzVG9rZW4gfSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcIkFkbWluL0RlbGV0ZU11bHRpcGxlQ29va2llc1wiO1xyXG4gICAgY29uc3QgY29va2llU3RvcmVWYWx1ZSA9IHtcclxuICAgICAgJ2NvbnRhaW5OYW1lJzogbmFtZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JChjb29raWVTdG9yZVVSTCwgY29va2llU3RvcmVWYWx1ZSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRDb250YWluZXJWaWV3KGVsZW1lbnRDb250YWluZXI6IGFueSwgY29udGFpbmVyUGFnZTogYW55LCBncm91cD86IFpHcm91cCkge1xyXG4gICAgaWYgKCFlbGVtZW50Q29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRWxlbWVudENvbnRhaW5lciBpcyBudWxsLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29udGFpbmVyUGFnZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkNvbnRhaW5lclBhZ2UgaXMgbnVsbC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gZWxlbWVudENvbnRhaW5lci52aWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG5cclxuICAgIGdyb3VwID0gZ3JvdXAgPyBncm91cCA6IG5ldyBaR3JvdXA7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29udGFpbmVyUGFnZSk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2VbXCJncm91cFwiXSwgZ3JvdXApO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlW1wiZ3JvdXBcIl0sIHsgaXNFbWJlZGRlZFBhZ2U6IHRydWUsIGVsZW1lbnRDb250YWluZXI6IGVsZW1lbnRDb250YWluZXIgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2xvc2VDb250YWluZXJWaWV3KGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSBncm91cC5lbGVtZW50Q29udGFpbmVyLnZpZXdDb250YWluZXJSZWY7XHJcbiAgICBpZiAodmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfSBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hHcmlkKGdyb3VwOiBaR3JvdXApIHtcclxuICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtcImdyaWRPcHRpb25zXCJdIGFzIFpHcmlkO1xyXG4gIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgIHpncmlkQ29udHJvbC5nZXREYXRhKCk7XHJcbiAgfVxyXG4gIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbn1cclxuIl19
|