@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.26 → 0.0.1-cbrelease-4.8.29
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/esm2022/lib/components/approve-view/approve-view.component.mjs +1 -1
- package/esm2022/lib/components/category-edit/category-edit-module/category-edit-module.component.mjs +55 -0
- package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +4 -3
- package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +120 -46
- package/esm2022/lib/components/term-card/term-card.component.mjs +35 -6
- package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +37 -5
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +359 -30
- package/esm2022/lib/models/framework.model.mjs +1 -1
- package/esm2022/lib/services/connector.service.mjs +51 -5
- package/esm2022/lib/services/framework.service.mjs +147 -9
- package/esm2022/lib/tree-hierarchy.component.mjs +1 -1
- package/esm2022/lib/tree-hierarchy.module.mjs +11 -4
- package/esm2022/lib/tree-hierarchy.service.mjs +18 -2
- package/esm2022/material.module.mjs +2 -2
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs +835 -127
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
- package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts +18 -0
- package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts.map +1 -0
- package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +18 -3
- package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +1 -1
- package/lib/components/term-card/term-card.component.d.ts +12 -2
- package/lib/components/term-card/term-card.component.d.ts.map +1 -1
- package/lib/components/tree-column-view/tree-column-view.component.d.ts +5 -1
- package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts +15 -4
- package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
- package/lib/models/framework.model.d.ts +1 -0
- package/lib/models/framework.model.d.ts.map +1 -1
- package/lib/services/connector.service.d.ts +1 -0
- package/lib/services/connector.service.d.ts.map +1 -1
- package/lib/services/framework.service.d.ts +9 -2
- package/lib/services/framework.service.d.ts.map +1 -1
- package/lib/tree-hierarchy.module.d.ts +6 -4
- package/lib/tree-hierarchy.module.d.ts.map +1 -1
- package/lib/tree-hierarchy.service.d.ts +4 -0
- package/lib/tree-hierarchy.service.d.ts.map +1 -1
- package/material.module.d.ts +2 -2
- package/package.json +1 -1
|
@@ -15,10 +15,12 @@ export class TreeColumnViewComponent {
|
|
|
15
15
|
this.frameworkService = frameworkService;
|
|
16
16
|
this.connectorService = connectorService;
|
|
17
17
|
this.approvalService = approvalService;
|
|
18
|
+
this.isChildOrg = false;
|
|
18
19
|
this.connectorMapping = {};
|
|
19
20
|
this.updateTaxonomyTerm = new EventEmitter(true);
|
|
20
21
|
this.updateTermList = new EventEmitter();
|
|
21
22
|
this.cardsCount = new EventEmitter();
|
|
23
|
+
this.cardAction = new EventEmitter();
|
|
22
24
|
this.columnData = [];
|
|
23
25
|
this.termshafall = [];
|
|
24
26
|
this.searchValue = new UntypedFormControl('', [Validators.required]);
|
|
@@ -212,6 +214,7 @@ export class TreeColumnViewComponent {
|
|
|
212
214
|
}
|
|
213
215
|
}
|
|
214
216
|
searchFilterData(_ele) {
|
|
217
|
+
this.setColumnItems();
|
|
215
218
|
const back = this.frameworkService.getPreviousCategory(this.column.code);
|
|
216
219
|
if (back && back.code) {
|
|
217
220
|
let backColumData = this.frameworkService.selectionList.get(back.code);
|
|
@@ -222,7 +225,16 @@ export class TreeColumnViewComponent {
|
|
|
222
225
|
}, 200);
|
|
223
226
|
}
|
|
224
227
|
}
|
|
225
|
-
|
|
228
|
+
else {
|
|
229
|
+
if (this.columnItems?.length === 0) {
|
|
230
|
+
this.frameworkService.removeOldLine();
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
setTimeout(() => {
|
|
234
|
+
this.makeFirstTermSelected();
|
|
235
|
+
}, 500);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
226
238
|
}
|
|
227
239
|
clearSearch() {
|
|
228
240
|
this.searchValue.setValue('');
|
|
@@ -243,7 +255,7 @@ export class TreeColumnViewComponent {
|
|
|
243
255
|
this.connectorMapping['box' + (this.column.index - 1)].lines = connectionLines;
|
|
244
256
|
}
|
|
245
257
|
else {
|
|
246
|
-
if (this.column.index > 1) {
|
|
258
|
+
if (this.column.index > 1 && this.connectorMapping['box' + (this.column.index - 1)]) {
|
|
247
259
|
this.connectorMapping['box' + (this.column.index - 1)].lines = [{ target: elementClicked, line: '', targetType: 'element' }];
|
|
248
260
|
this.connectorService.updateConnectorsMap(this.connectorMapping);
|
|
249
261
|
const connectionLines = this.connectorService._drawLine(this.connectorMapping['box' + (this.column.index - 1)].source, this.connectorMapping['box' + (this.column.index - 1)].lines, null, '#box' + (this.column.index - 1), '#box' + this.column.index);
|
|
@@ -302,21 +314,41 @@ export class TreeColumnViewComponent {
|
|
|
302
314
|
this.newTermSubscription.unsubscribe();
|
|
303
315
|
}
|
|
304
316
|
}
|
|
317
|
+
cardActionEmit(event) {
|
|
318
|
+
this.cardAction.emit(event);
|
|
319
|
+
}
|
|
320
|
+
makeFirstTermSelected() {
|
|
321
|
+
const firstListItem = this.frameworkService.list.entries().next().value;
|
|
322
|
+
if (firstListItem && firstListItem.length >= 2) {
|
|
323
|
+
if (firstListItem[1] && firstListItem[1].children && firstListItem[1].children.length) {
|
|
324
|
+
const firstTerm = firstListItem[1].children[0];
|
|
325
|
+
const cardRef = document.getElementById(firstTerm.name);
|
|
326
|
+
firstTerm.selected = true;
|
|
327
|
+
this.frameworkService.cardClkData = firstTerm;
|
|
328
|
+
this.frameworkService.CurrentCardClk.next(firstTerm.category);
|
|
329
|
+
this.frameworkService.currentSelection.next({ type: firstTerm.category, data: firstTerm, cardRef });
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
305
333
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeColumnViewComponent, deps: [{ token: i1.FrameworkService }, { token: i2.ConnectorService }, { token: i3.ApprovalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
306
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeColumnViewComponent, selector: "lib-tree-column-view", inputs: { column: "column", containerId: "containerId" }, outputs: { updateTaxonomyTerm: "updateTaxonomyTerm", updateTermList: "updateTermList", cardsCount: "cardsCount" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"column?.config?.showSearch\">\n <div class=\"w-full sticky\">\n <div class=\"search mb-
|
|
334
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeColumnViewComponent, selector: "lib-tree-column-view", inputs: { column: "column", containerId: "containerId", isChildOrg: "isChildOrg" }, outputs: { updateTaxonomyTerm: "updateTaxonomyTerm", updateTermList: "updateTermList", cardsCount: "cardsCount", cardAction: "cardAction" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"column?.config?.showSearch\">\n <div class=\"w-full sticky\">\n <div class=\"search mb-5\">\n <div class=\"rsearch\">\n <div class=\"sinput mat-field-rounded flex flex-middle\">\n <mat-icon class=\"search-icon\">search</mat-icon>\n <input type=\"search\" [formControl]=\"searchValue\" placeholder=\"Search\" #search>\n <button *ngIf=\"search.value\" class=\"clear-btn flex\" (click)=\"clearSearch()\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"columnItems && columnItems.length > 0; else noDataTemplate;\">\n <ng-container *ngFor=\"let child of columnItems; let j = index\">\n <div #cardEle id=\"{{column.code}}Card{{j+1}}\" >\n <lib-term-card\n [data]=\"{'children': child, 'selected' : false, 'category':column.code, cardSubType: 'minimal', isViewOnly:false,'index':column.index, columnInfo: column}\"\n [enableThreeDots]=\"isChildOrg ? false : true\"\n (isSelected)=\"updateSelection1($event)\" (selectedCard)=\"selectedCard($event)\" (cardAction)=\"cardActionEmit($event)\">\n </lib-term-card>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #noDataTemplate >\n <ng-container *ngIf=\"searchValue?.value\">\n <div>No Data found</div>\n </ng-container>\n</ng-template>\n\n<div class=\"w-full flex justify-center\" *ngIf=\"!disableLoadButton\">\n <button (click)=\"loadMore()\" class=\"mat-raised-button mat-button-base loadMore\" [ngClass]=\"{'disablBtn': disableLoadButton}\"\n [disabled]=\"disableLoadButton\">Load more...</button>\n</div>\n", styles: [".flex{display:flex}.w-full{width:100%}.mb1{margin-bottom:1em}flex-center{flex-wrap:nowrap;align-items:start;justify-content:center}.flex-1{flex:1}.felx-col{flex-direction:column}.padding-x2{padding:0 2.5em}.heightFix{height:100vh;overflow:hidden}.cat-columns:hover{overflow-y:scroll}.container{overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.container::-webkit-scrollbar{width:0;height:0}#this{display:none}#this:target{display:block}.search{width:100%;box-sizing:border-box}.search .search-icon{font-size:20px;width:20px;height:20px}.search .rsearch{display:flex;position:relative;flex:1 1 auto;border:1px solid #e0e0e0;border-radius:20px}.search .sinput{width:100%;padding:4px 8px;box-sizing:border-box}.search .sinput input{border:0!important;outline:none!important;margin-top:2px}input[type=search]::-webkit-search-decoration:hover,input[type=search]::-webkit-search-cancel-button:hover{cursor:pointer}input[type=search]::-webkit-search-cancel-button{appearance:none}.clear-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;color:#888;font-size:16px;cursor:pointer;display:none}.sinput:valid~.clear-btn{display:block}.clear-btn:hover{color:#333}.sticky{position:sticky;top:0;z-index:46}.loadMore{background:#1b4ca1!important;color:#fff!important;font-family:Lato;font-size:14px;font-weight:700}.disablBtn{opacity:.6;pointer-events:none}.w-full.sticky{position:sticky;top:0;z-index:100;background-color:#fff}.category-heading-sticky{position:sticky;top:0;z-index:10;background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.TermCardComponent, selector: "lib-term-card", inputs: ["enableThreeDots", "data"], outputs: ["isSelected", "selectedCard", "cardAction"] }] }); }
|
|
307
335
|
}
|
|
308
336
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeColumnViewComponent, decorators: [{
|
|
309
337
|
type: Component,
|
|
310
|
-
args: [{ selector: 'lib-tree-column-view', template: "<ng-container *ngIf=\"column?.config?.showSearch\">\n <div class=\"w-full sticky\">\n <div class=\"search mb-
|
|
338
|
+
args: [{ selector: 'lib-tree-column-view', template: "<ng-container *ngIf=\"column?.config?.showSearch\">\n <div class=\"w-full sticky\">\n <div class=\"search mb-5\">\n <div class=\"rsearch\">\n <div class=\"sinput mat-field-rounded flex flex-middle\">\n <mat-icon class=\"search-icon\">search</mat-icon>\n <input type=\"search\" [formControl]=\"searchValue\" placeholder=\"Search\" #search>\n <button *ngIf=\"search.value\" class=\"clear-btn flex\" (click)=\"clearSearch()\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"columnItems && columnItems.length > 0; else noDataTemplate;\">\n <ng-container *ngFor=\"let child of columnItems; let j = index\">\n <div #cardEle id=\"{{column.code}}Card{{j+1}}\" >\n <lib-term-card\n [data]=\"{'children': child, 'selected' : false, 'category':column.code, cardSubType: 'minimal', isViewOnly:false,'index':column.index, columnInfo: column}\"\n [enableThreeDots]=\"isChildOrg ? false : true\"\n (isSelected)=\"updateSelection1($event)\" (selectedCard)=\"selectedCard($event)\" (cardAction)=\"cardActionEmit($event)\">\n </lib-term-card>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #noDataTemplate >\n <ng-container *ngIf=\"searchValue?.value\">\n <div>No Data found</div>\n </ng-container>\n</ng-template>\n\n<div class=\"w-full flex justify-center\" *ngIf=\"!disableLoadButton\">\n <button (click)=\"loadMore()\" class=\"mat-raised-button mat-button-base loadMore\" [ngClass]=\"{'disablBtn': disableLoadButton}\"\n [disabled]=\"disableLoadButton\">Load more...</button>\n</div>\n", styles: [".flex{display:flex}.w-full{width:100%}.mb1{margin-bottom:1em}flex-center{flex-wrap:nowrap;align-items:start;justify-content:center}.flex-1{flex:1}.felx-col{flex-direction:column}.padding-x2{padding:0 2.5em}.heightFix{height:100vh;overflow:hidden}.cat-columns:hover{overflow-y:scroll}.container{overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.container::-webkit-scrollbar{width:0;height:0}#this{display:none}#this:target{display:block}.search{width:100%;box-sizing:border-box}.search .search-icon{font-size:20px;width:20px;height:20px}.search .rsearch{display:flex;position:relative;flex:1 1 auto;border:1px solid #e0e0e0;border-radius:20px}.search .sinput{width:100%;padding:4px 8px;box-sizing:border-box}.search .sinput input{border:0!important;outline:none!important;margin-top:2px}input[type=search]::-webkit-search-decoration:hover,input[type=search]::-webkit-search-cancel-button:hover{cursor:pointer}input[type=search]::-webkit-search-cancel-button{appearance:none}.clear-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;color:#888;font-size:16px;cursor:pointer;display:none}.sinput:valid~.clear-btn{display:block}.clear-btn:hover{color:#333}.sticky{position:sticky;top:0;z-index:46}.loadMore{background:#1b4ca1!important;color:#fff!important;font-family:Lato;font-size:14px;font-weight:700}.disablBtn{opacity:.6;pointer-events:none}.w-full.sticky{position:sticky;top:0;z-index:100;background-color:#fff}.category-heading-sticky{position:sticky;top:0;z-index:10;background-color:#fff}\n"] }]
|
|
311
339
|
}], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.ConnectorService }, { type: i3.ApprovalService }]; }, propDecorators: { column: [{
|
|
312
340
|
type: Input
|
|
313
341
|
}], containerId: [{
|
|
314
342
|
type: Input
|
|
343
|
+
}], isChildOrg: [{
|
|
344
|
+
type: Input
|
|
315
345
|
}], updateTaxonomyTerm: [{
|
|
316
346
|
type: Output
|
|
317
347
|
}], updateTermList: [{
|
|
318
348
|
type: Output
|
|
319
349
|
}], cardsCount: [{
|
|
320
350
|
type: Output
|
|
351
|
+
}], cardAction: [{
|
|
352
|
+
type: Output
|
|
321
353
|
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtY29sdW1uLXZpZXcvdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtY29sdW1uLXZpZXcvdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1yRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQTtBQUMzQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFRcEUsTUFBTSxPQUFPLHVCQUF1QjtJQWtCbEMsWUFDVSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGVBQWlDO1FBRmpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFsQjNDLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUNoQix1QkFBa0IsR0FBRyxJQUFJLFlBQVksQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDM0QsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBQ2pELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQ3RELGVBQVUsR0FB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O1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUNyQztRQUNELElBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUN2QztJQUNILENBQUM7K0dBaFlVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhQQ2hCcEMsbXhEQW9DQTs7NEZEcEJhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7b0tBS3ZCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZENoZWNrZWQsIENhcmRTZWxlY3Rpb24sIENhcmRzQ291bnQsIENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmRlY2xhcmUgdmFyIExlYWRlckxpbmU6IGFueTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10cmVlLWNvbHVtbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtY29sdW1uLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLWNvbHVtbi12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbHVtblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29sdW1uOiBhbnk7XG4gIEBJbnB1dCgpIGNvbnRhaW5lcklkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgY29ubmVjdG9yTWFwcGluZzogYW55ID0ge31cbiAgQE91dHB1dCgpIHVwZGF0ZVRheG9ub215VGVybSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZFNlbGVjdGlvbj4odHJ1ZSk7XG4gIEBPdXRwdXQoKSB1cGRhdGVUZXJtTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZENoZWNrZWQ+KCk7XG4gIEBPdXRwdXQoKSBjYXJkc0NvdW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkc0NvdW50PigpO1xuICBjb2x1bW5EYXRhOiBBcnJheTxDYXJkPiA9IFtdO1xuICBjaGlsZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBuZXdUZXJtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIGFwcHJvdmFsVGVybTogYW55O1xuICB0ZXJtc2hhZmFsbDogQXJyYXk8Q2FyZD4gPSBbXTtcbiAgc2VhcmNoVmFsdWUgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICBzdGFydEluZGV4ID0gMFxuICBsaW1pdFRvQWRkID0gNTBcbiAgY3VycmVudExhc3RJbmRleCA9IDUwXG4gIGNvbHVtbkl0ZW1zOiBhbnkgPSBbXVxuICBmaWx0ZXJlZENvbHVtbkl0ZW1zOiBhbnkgPSBbXVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZyYW1ld29ya1NlcnZpY2U6IEZyYW1ld29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25uZWN0b3JTZXJ2aWNlOiBDb25uZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwcm92YWxTZXJ2aWNlIDogQXBwcm92YWxTZXJ2aWNlXG4gICkge1xuICB9XG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge31cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKClcbiAgICB0aGlzLnNldENvbHVtbkl0ZW1zKClcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDcwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICkuc3Vic2NyaWJlKChlbGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hGaWx0ZXJEYXRhKGVsZSlcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuY29sdW1uLmluZGV4ID09PSAxKSB7XG4gICAgICB0aGlzLmFwcHJvdmFsU2VydmljZS5nZXRVcGRhdGVMaXN0KCkuc3Vic2NyaWJlKChsaXN0OmFueSkgPT4ge1xuICAgICAgICB0aGlzLmFwcHJvdmFsVGVybSA9IGxpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IHRoaXMuY29sdW1uLmNvZGUgPT09IGl0ZW0uY2F0ZWdvcnkpXG4gICAgICAgIGlmKHRoaXMuYXBwcm92YWxUZXJtKXtcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsVGVybS5mb3JFYWNoKCh0ZXJtOiBhbnksIF9pOiBudW1iZXIpPT4ge1xuICAgICAgICAgICAgIHRoaXMuY29sdW1uLmNoaWxkcmVuLmZvckVhY2goKGxlbDogYW55LCBfajogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYobGVsLmlkZW50aWZpZXIgPT09IHRlcm0uaWRlbnRpZmllcil7XG4gICAgICAgICAgICAgICAgICBpZighdGhpcy5pc0V4aXN0cyh0ZXJtKSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVybXNoYWZhbGwucHVzaChsZWwpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyB0aGlzLnRlcm1zaGFmYWxsID0gWy4uLnRoaXMudGVybXNoYWZhbGxdXG4gICAgICAgICAgdGhpcy5jb2x1bW4uY2hpbGRyZW4uZm9yRWFjaCgodHI6IGFueSwgX2k6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYoIXRoaXMuaXNFeGlzdHModHIpKXtcbiAgICAgICAgICAgICAgdGhpcy50ZXJtc2hhZmFsbC5wdXNoKHRyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5jb2x1bW5EYXRhID0gdGhpcy50cmFuc2Zvcm0odGhpcy50ZXJtc2hhZmFsbCk7XG4gICAgICAgICAgdGhpcy5zZXRDb2x1bW5JdGVtcygpXG4gICAgICAgICAgaWYodGhpcy5jb2x1bW5EYXRhICYmIHRoaXMuY29sdW1uRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZHNDb3VudC5lbWl0KHtjYXRlZ29yeTogdGhpcy5jb2x1bW5EYXRhWzBdLmNhdGVnb3J5IHx8IHRoaXMuY29sdW1uLmNvZGUsY291bnQ6dGhpcy5jb2x1bW5EYXRhLmxlbmd0aH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nID0gdGhpcy5jb25uZWN0b3JTZXJ2aWNlLmNvbm5lY3Rvck1hcFxuICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5pc0RhdGFVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgLy8gICB0aGlzLm5nT25Jbml0KClcbiAgICAvLyB9KVxuICAgIFxuICB9XG4gXG4gIGlzRXhpc3RzKGU6YW55KXtcbiAgICBsZXQgdGVtcDtcbiAgICBpZih0aGlzLnRlcm1zaGFmYWxsICYmIHRoaXMudGVybXNoYWZhbGwubGVuZ3RoKSB7XG4gICAgICB0ZW1wID0gdGhpcy50ZXJtc2hhZmFsbC5tYXAodCA9PiB0LmlkZW50aWZpZXIpXG4gICAgICByZXR1cm4gdGVtcC5pbmNsdWRlcyhlLmlkZW50aWZpZXIpXG4gICAgfSByZXR1cm4gZmFsc2VcbiAgfVxuICBcbiAgc3Vic2NyaWJlRXZlbnRzKCkge1xuICAgIGlmICh0aGlzLmNoaWxkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoaWxkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gICAgdGhpcy5jaGlsZFN1YnNjcmlwdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLnN1YnNjcmliZShlID0+IHtcbiAgICAgIGlmICghZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSBpZiAoZS50eXBlID09PSB0aGlzLmNvbHVtbi5jb2RlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVGVybSA9IHsuLi5lLmRhdGEsIGNhcmRSZWY6IGUuY2FyZFJlZiB9XG4gICAgICAgIGlmKGUuaXNVcGRhdGUpe1xuICAgICAgICAgIHRoaXMudXBkYXRlVGF4b25vbXlUZXJtLmVtaXQoeyBpc1NlbGVjdGVkOiB0cnVlLCBzZWxlY3RlZFRlcm0sIGlzVXBkYXRlOiB0cnVlIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVUYXhvbm9teVRlcm0uZW1pdCh7IGlzU2VsZWN0ZWQ6IHRydWUsIHNlbGVjdGVkVGVybSB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uRGF0YSA9IHRoaXMudHJhbnNmb3JtKCh0aGlzLmNvbHVtbkRhdGEgfHwgW10pLm1hcChpdGVtID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBlLmRhdGEuY29kZSkge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpdGVtXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zZXRDb2x1bW5JdGVtcygpXG4gICAgICAgIHRoaXMuc2V0Q29ubmVjdG9ycyhlLmNhcmRSZWYsIHRoaXMuY29sdW1uSXRlbXMsICdTSU5HTEUnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGUudHlwZSk7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQuY29kZSA9PT0gdGhpcy5jb2x1bW4uY29kZSkge1xuICAgICAgICAgIFxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDb25uZWN0b3JzKGUuY2FyZFJlZiwgbmV4dCAmJiBuZXh0LmluZGV4IDwgdGhpcy5jb2x1bW4uaW5kZXggPyBbXSA6IHRoaXMuY29sdW1uSXRlbXMsICdBTEwnKVxuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dCAmJiBuZXh0LmluZGV4IDwgdGhpcy5jb2x1bW4uaW5kZXgpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbkRhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLnNldENvbHVtbkl0ZW1zKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKHRoaXMubmV3VGVybVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5uZXdUZXJtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gICAgdGhpcy5uZXdUZXJtU3Vic2NyaXB0aW9uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyLnN1YnNjcmliZShlID0+IHtcbiAgICAgIGlmIChlICYmIGUuYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGUuYWN0aW9uKTtcbiAgICAgICAgaWYobmV4dCkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5jb2RlID09PSBuZXh0LmNvZGUgJiYgZS50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRVcGRhdGVIYW5kbGVyKGUsIG5leHQpXG4gICAgICAgICAgfSBcbiAgICAgICAgICBpZihlLnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICBpZih0aGlzLmNvbHVtbi5jb2RlID09PSBuZXh0LmNvZGUgJiYgZS50eXBlID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgICAvLyB0aGlzLmNvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChlLmFjdGlvbilcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmVudDogYW55ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkoZS5hY3Rpb24pO1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmVudERhdGEgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQoc2VsZWN0ZWRQYXJlbnQuY29kZSlcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJlbnRDYXJkUmVmID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHNlbGVjdGVkUGFyZW50LmNvZGUpICYmIFxuICAgICAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQoc2VsZWN0ZWRQYXJlbnQuY29kZSkuY2FyZFJlZlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRQYXJlbnQgJiYgc2VsZWN0ZWRQYXJlbnREYXRhICYmIHNlbGVjdGVkUGFyZW50RGF0YS5jaGlsZHJlbiAmJiBzZWxlY3RlZFBhcmVudERhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5zZXJ0VXBkYXRlSGFuZGxlcihlLCBuZXh0LCAndXBkYXRlJylcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmNvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChlLmFjdGlvbilcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmNvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldCgpXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHNlbGVjdGVkUGFyZW50LmNvZGUsIGRhdGE6c2VsZWN0ZWRQYXJlbnREYXRhLmNoaWxkcmVuWzBdLCBjYXJkUmVmOnNlbGVjdGVkUGFyZW50Q2FyZFJlZiwgaXNVcGRhdGU6IHRydWV9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBpbnNlcnRVcGRhdGVIYW5kbGVyKGU6IGFueSwgX25leHQ6IGFueSwgaXNVcGRhdGU/OiBhbnkpIHtcbiAgICBjb25zdCBiYWNrID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkodGhpcy5jb2x1bW4uY29kZSlcbiAgICBcbiAgICBjb25zdCBsb2NhbFRlcm1zOmFueSA9IFtdXG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldExvY2FsVGVybXNCeUNhdGVnb3J5KHRoaXMuY29sdW1uLmNvZGUpLmZvckVhY2goZiA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFBhcmVudCA9IGJhY2sgPyB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQoYmFjay5jb2RlKSA6IG51bGw7IC8vY2FuIHVzZSBjdXJyZW50XG4gICAgICBcbiAgICAgIGlmIChzZWxlY3RlZFBhcmVudCAmJiAoKGYucGFyZW50LmNvZGUgPT09IHNlbGVjdGVkUGFyZW50LmNvZGUpIHx8IChmLnBhcmVudC5pZGVudGlmaWVyICYmIChmLnBhcmVudC5pZGVudGlmaWVyID09PSBzZWxlY3RlZFBhcmVudC5pZGVudGlmaWVyKSkpKSB7XG4gICAgICAgIGxvY2FsVGVybXMucHVzaChmLnRlcm0pXG4gICAgICB9XG4gICAgfSlcbiAgICBpZighaXNVcGRhdGUpIHtcbiAgICAvLyBnZXQgbGFzdCBwYXJlbnQgYW5kIGZpbHRlciBBYm92ZVxuICAgIGlmKGUgJiYgZS5kYXRhKSB7XG4gICAgdGhpcy5jb2x1bW5EYXRhID0gdGhpcy50cmFuc2Zvcm0oWy4uLmxvY2FsVGVybXMsIC4uLihlLmRhdGEuY2hpbGRyZW4gfHwgW10pXSlcbiAgICAgIC5maWx0ZXIoKHg6YW55KSA9PiB7XG4gICAgICAgIHJldHVybiB4LmNhdGVnb3J5ID09IHRoaXMuY29sdW1uLmNvZGVcbiAgICAgIH0pLm1hcCgobWVyOmFueSkgPT4ge1xuICAgICAgICAvLyoqcmVhZCBsb2NhbCBjaGlsZHJlbiBmb3IgbmV4dCAqL1xuICAgICAgICAvLyBjb25zdCBuZXh0Q2hpbGRyZW4gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TG9jYWxUZXJtc0J5UGFyZW50KHRoaXMuY29sdW1uLmNvZGUpXG4gICAgICAgIFxuICAgICAgICAvKipyZXNldCBOZXh0IGxldmVsIGNoaWxkcmVuICovXG4gICAgICAgIHRoaXMuY29sdW1uLmNoaWxkcmVuID0gdGhpcy5jb2x1bW4uY2hpbGRyZW4ubWFwKChjb2w6YW55KSA9PiB7IGNvbC5zZWxlY3RlZCA9IGZhbHNlOyByZXR1cm4gY29sIH0pXG4gICAgICAgIG1lci5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgIG1lci5jaGlsZHJlbiA9IChbLi4udGhpcy5jb2x1bW4uY2hpbGRyZW4uZmlsdGVyKCh4OmFueSkgPT4geyByZXR1cm4geC5jb2RlID09PSBtZXIuY29kZSB9KS5tYXAoKGE6IGFueSkgPT4gYS5jaGlsZHJlbildLnNoaWZ0KCkgfHwgW10pXG4gICAgICAgIHJldHVybiBtZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgICAgIHRoaXMuc2V0Q29sdW1uSXRlbXMoKVxuXG4gICAgaWYodGhpcy5jb2x1bW5EYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY2FyZHNDb3VudC5lbWl0KHtjYXRlZ29yeTogdGhpcy5jb2x1bW5EYXRhWzBdLmNhdGVnb3J5IHx8ICcnLGNvdW50OnRoaXMuY29sdW1uRGF0YS5sZW5ndGh9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXJkc0NvdW50LmVtaXQoe2NhdGVnb3J5OiB0aGlzLmNvbHVtbi5jb2RlLGNvdW50OiAwfSk7XG4gICAgfVxuICAgIC8vIHRoaXMudXBkYXRlVGVybXMoKVxuXG4gICAgfVxuICB9XG4gIHVwZGF0ZVNlbGVjdGlvbjEoX2RhdGE6IGFueSkgeyBcbiAgfVxuICB1cGRhdGVTZWxlY3Rpb24oX3NlbGVjdGlvbjogYW55KSB7XG4gICAgLy8gaWYodGhpcy5jb2x1bW4uY29kZT09PSdtZWRpdW0nKXtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHNlbGVjdGlvbi5lbGVtZW50LmNhdGVnb3J5ID09PSB0aGlzLmNvbHVtbi5jb2RlKSB7XG4gICAgLy8gICB0aGlzLnVwZGF0ZVRheG9ub215VGVybS5lbWl0KHsgaXNTZWxlY3RlZDogc2VsZWN0aW9uLmlzU2VsZWN0ZWQsIHNlbGVjdGVkVGVybTogc2VsZWN0aW9uLmVsZW1lbnQgfSlcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5jb2x1bW4uY2hpbGRyZW4gPSB0aGlzLmNvbHVtbi5jaGlsZHJlbi5tYXAoY29sID0+IHtcbiAgICAvLyAgIGlmIChjb2wuY29kZSA9PT0gc2VsZWN0aW9uLmVsZW1lbnQuY29kZSkge1xuICAgIC8vICAgICBjb2wuc2VsZWN0ZWQgPSB0cnVlXG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICBjb2wuc2VsZWN0ZWQgPSBmYWxzZVxuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIGNvbFxuICAgIC8vIH0pXG4gIH1cblxuICBzZXRDb2x1bW5JdGVtcygpIHtcbiAgICAvLyBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY29sdW1uLmNoaWxkcmVuLmZpbHRlcihmID0+IHsgcmV0dXJuIGYuc2VsZWN0ZWQgfSlcbiAgICAvLyBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgIC8vICAgY29uc3QgZGF0YSA9IHRoaXMuY29sdW1uRGF0YS5tYXAoY2QgPT4ge1xuICAgIC8vICAgICBjZC5zZWxlY3RlZCA9IHRoaXMuY29sdW1uLmNoaWxkcmVuLmZpbHRlcihmID0+IHsgcmV0dXJuIGNkLmlkZW50aWZpZXIgPT09IGYuaWRlbnRpZmllciB9KS5tYXAocyA9PiBzLnNlbGVjdGVkKVswXVxuICAgIC8vICAgICByZXR1cm4gY2RcbiAgICAvLyAgIH0pXG4gICAgLy8gICByZXR1cm4gZGF0YVxuICAgIC8vIH0gZWxzZSB7XG4gICAgbGV0IGxvY2FsU2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlLnZhbHVlICYmIHRoaXMuc2VhcmNoVmFsdWUudmFsdWUudG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgIGxldCBmaWx0ZXJlZENvbHVtbkRhdGEgPSBbXVxuICAgIHRoaXMuY29sdW1uSXRlbXMgPSBbXVxuICAgIGlmKGxvY2FsU2VhcmNoVmFsdWUpIHtcbiAgICAgIGZpbHRlcmVkQ29sdW1uRGF0YSA9IHRoaXMuY29sdW1uRGF0YS5maWx0ZXIoKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYoY2hpbGQubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvY2FsU2VhcmNoVmFsdWUpIHx8IFxuICAgICAgICAoXy5nZXQoY2hpbGQsICdyZWZJZCcpICYmIF8uZ2V0KGNoaWxkLCAncmVmSWQnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvY2FsU2VhcmNoVmFsdWUpKSB8fCBcbiAgICAgICAgKF8uZ2V0KGNoaWxkLCAnZGVzY3JpcHRpb24nKSAmJiBfLmdldChjaGlsZCwgJ2Rlc2NyaXB0aW9uJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb2NhbFNlYXJjaFZhbHVlKSl8fFxuICAgICAgICAoXy5nZXQoY2hpbGQsICdhZGRpdGlvbmFsUHJvcGVydGllcy5kaXNwbGF5TmFtZScpICYmIF8uZ2V0KGNoaWxkLCAnYWRkaXRpb25hbFByb3BlcnRpZXMuZGlzcGxheU5hbWUnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvY2FsU2VhcmNoVmFsdWUpKSkge1xuICAgICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXJlZENvbHVtbkRhdGEgPSB0aGlzLmNvbHVtbkRhdGFcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbkl0ZW1zID0gZmlsdGVyZWRDb2x1bW5EYXRhXG4gICAgXG4gICAgdGhpcy5jb2x1bW5JdGVtcyA9IGZpbHRlcmVkQ29sdW1uRGF0YSA/IGZpbHRlcmVkQ29sdW1uRGF0YS5zbGljZSh0aGlzLnN0YXJ0SW5kZXgsIHRoaXMuY3VycmVudExhc3RJbmRleCkgOiBbXVxuICAgIC8vIH1cbiAgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBzb3J0QnkgPSAndGltZVN0YW1wJyk6IGFueXtcbiAgICBpZighc29ydEJ5KSB7XG4gICAgICBpZih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wQSA9IGEuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgYS5hZGRpdGlvbmFsUHJvcGVydGllcy50aW1lU3RhbXAgPyBuZXcgRGF0ZShOdW1iZXIoYS5hZGRpdGlvbmFsUHJvcGVydGllcy50aW1lU3RhbXApKS5nZXRUaW1lKCkgOiAwO1xuICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wQiA9IGIuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgYi5hZGRpdGlvbmFsUHJvcGVydGllcy50aW1lU3RhbXAgPyBuZXcgRGF0ZShOdW1iZXIoYi5hZGRpdGlvbmFsUHJvcGVydGllcy50aW1lU3RhbXApKS5nZXRUaW1lKCkgOiAwO1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICB0aW1lc3RhbXBCIC0gdGltZXN0YW1wQTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgfSk7XG4gICAgIFxuICAgICAgfVxuICAgIH1cbiAgICAgXG4gIH1cblxuICBzZWFyY2hGaWx0ZXJEYXRhKF9lbGU6IGFueSl7XG4gICAgY29uc3QgYmFjayA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHRoaXMuY29sdW1uLmNvZGUpXG4gICAgaWYoYmFjayAmJiBiYWNrLmNvZGUpIHtcbiAgICAgIGxldCBiYWNrQ29sdW1EYXRhID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KGJhY2suY29kZSlcbiAgICAgIGlmKGJhY2tDb2x1bURhdGEuY2F0ZWdvcnkpIHtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnJlbW92ZU9sZExpbmUoKVxuICAgICAgXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBiYWNrQ29sdW1EYXRhLmNhdGVnb3J5LCBkYXRhOiBiYWNrQ29sdW1EYXRhLCBjYXJkUmVmOiBiYWNrQ29sdW1EYXRhLmNhcmRSZWYgfSlcbiAgICAgICAgfSwgMjAwKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldENvbHVtbkl0ZW1zKClcbiAgIH1cblxuICBjbGVhclNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldFZhbHVlKCcnKVxuICB9XG5cbiAgbG9hZE1vcmUoKSB7XG4gICAgdGhpcy5jdXJyZW50TGFzdEluZGV4ID0gdGhpcy5jdXJyZW50TGFzdEluZGV4ICsgdGhpcy5saW1pdFRvQWRkXG4gICAgdGhpcy5zZWFyY2hGaWx0ZXJEYXRhKHRoaXMuc2VhcmNoVmFsdWUudmFsdWUpXG4gIH1cblxuICBzZXRDb25uZWN0b3JzKGVsZW1lbnRDbGlja2VkOiBhbnksIGNvbHVtbkl0ZW06IGFueSwgbW9kZTogYW55KSB7XG4gICAgdGhpcy5yZW1vdmVDb25uZWN0b3JzKGVsZW1lbnRDbGlja2VkLCAnYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpLCB0aGlzLmNvbHVtbi5pbmRleCAtIDEpXG4gICAgXG4gICAgaWYgKG1vZGUgPT09ICdBTEwnKSB7XG4gICAgICAvLyBsZXQgdGVtcGNvbm5lY3Rvck1hcHBpbmcgPSB7fVxuICAgICAgLy8gdGhpcy5jb25uZWN0b3JTZXJ2aWNlLnVwZGF0ZUNvbm5lY3RvcnNNYXAodGVtcGNvbm5lY3Rvck1hcHBpbmcpXG4gICAgICAvLyB7XG4gICAgICAvLyAgIFsnY29sdW1uJyArICh0aGlzLmNvbHVtbi5pbmRleC0gMSldOiAnJ1xuXG4gICAgICAvLyB9XG4gICAgICBjb25zdCBpZHMgPSBjb2x1bW5JdGVtLm1hcCgoX2M6IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2RlICsgJ0NhcmQnICsgKGkgKyAxKVxuICAgICAgfSlcbiAgICAgIHRoaXMuY29ubmVjdG9yTWFwcGluZ1snYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpXSA9IHsgc291cmNlOiBlbGVtZW50Q2xpY2tlZCwgbGluZXM6IChpZHMgfHwgW10pLm1hcCgoaWQ6IGFueSkgPT4geyByZXR1cm4geyB0YXJnZXQ6IGlkLCBsaW5lOiAnJywgdGFyZ2V0VHlwZTogJ2lkJyB9IH0pIH1cbiAgICAgIHRoaXMuY29ubmVjdG9yU2VydmljZS51cGRhdGVDb25uZWN0b3JzTWFwKHRoaXMuY29ubmVjdG9yTWFwcGluZylcbiAgICAgIFxuICAgICAgY29uc3QgY29ubmVjdGlvbkxpbmVzID0gdGhpcy5jb25uZWN0b3JTZXJ2aWNlLl9kcmF3TGluZShcbiAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldLnNvdXJjZSxcbiAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldLmxpbmVzLFxuICAgICAgICBudWxsLFxuICAgICAgICAnI2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKSxcbiAgICAgICAgJyNib3gnICsgdGhpcy5jb2x1bW4uaW5kZXhcbiAgICAgIClcbiAgICAgIHRoaXMuY29ubmVjdG9yTWFwcGluZ1snYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpXS5saW5lcyA9IGNvbm5lY3Rpb25MaW5lc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW4uaW5kZXggPiAxKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdG9yTWFwcGluZ1snYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpXS5saW5lcyA9IFt7IHRhcmdldDogZWxlbWVudENsaWNrZWQsIGxpbmU6ICcnLCB0YXJnZXRUeXBlOiAnZWxlbWVudCcgfV1cblxuICAgICAgICB0aGlzLmNvbm5lY3RvclNlcnZpY2UudXBkYXRlQ29ubmVjdG9yc01hcCh0aGlzLmNvbm5lY3Rvck1hcHBpbmcpXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25MaW5lcyA9IHRoaXMuY29ubmVjdG9yU2VydmljZS5fZHJhd0xpbmUoXG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldLnNvdXJjZSxcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbJ2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKV0ubGluZXMsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAnI2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKSxcbiAgICAgICAgICAnI2JveCcgKyB0aGlzLmNvbHVtbi5pbmRleFxuICAgICAgICApXG4gICAgICAgIHRoaXMuY29ubmVjdG9yTWFwcGluZ1snYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpXS5saW5lcyA9IGNvbm5lY3Rpb25MaW5lc1xuICAgICAgfVxuXG4gICAgfVxuICAgIHRoaXMuY29ubmVjdG9yU2VydmljZS51cGRhdGVDb25uZWN0b3JzTWFwKHRoaXMuY29ubmVjdG9yTWFwcGluZylcblxuICB9XG4gIHJlbW92ZUNvbm5lY3RvcnMoY3VycmVudEVsZW1lbnQ6IGFueSwgcHJldkNvbDogYW55LCBjdXJyZW50SW5kZXg6IGFueSkge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rvck1hcHBpbmcpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29ubmVjdG9yTWFwcGluZykge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIG4tMSBsaW5lcyBhbmQga2VlcCBvbmx5IGN1cnJlbnQgc2VsZWN0aW9uLCBhbHNvIGNsZWFyIG4rMSBsaW5lc1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0gJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXMgJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXNcbiAgICAgICAgICBsaW5lcy5mb3JFYWNoKGFzeW5jIChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IGN1cnJlbnRFbGVtZW50ICYmIHByZXZDb2wgPT0ga2V5KSB7XG4gICAgICAgICAgICAgIGF3YWl0IGVsZW1lbnQubGluZSAmJiBlbGVtZW50LmxpbmUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIGxpbmVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXMgPSBsaW5lc1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIGFsbCBuKzIgbGluZXMsIGlmIGNsaWNrcyBwcmV2aW91cyBjb2x1bW5zIGFuZCB0cmVlIHdhcyBhbHJlYWR5IGRyaWxsZWQgZG93blxuICAgICAgICBsZXQgY291bnQgPSBjdXJyZW50SW5kZXggKyAyO1xuICAgICAgICBsZXQgbmV4dENvbCA9IGBib3gke2NvdW50fWBcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdG9yTWFwcGluZ1tuZXh0Q29sXSAmJiB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbbmV4dENvbF0ubGluZXMgJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nW25leHRDb2xdLmxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IHRoaXMuY29ubmVjdG9yTWFwcGluZ1tuZXh0Q29sXS5saW5lc1xuICAgICAgICAgIGxpbmVzLmZvckVhY2goYXN5bmMgKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgZWxlbWVudC5saW5lICYmIGVsZW1lbnQubGluZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxpbmVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbbmV4dENvbF0ubGluZXMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxuICBzZWxlY3RlZENhcmQoZXZlbnQ6IGFueSl7XG4gICAgdGhpcy51cGRhdGVUZXJtTGlzdC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzaG93TG9hZE1vcmVCdG4oKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy5jb2x1bW4gJiYgdGhpcy5jb2x1bW4uY29uZmlnICYmIHRoaXMuY29sdW1uLmNvbmZpZy5jYXRlZ29yeURpc3BsYXlOYW1lICE9PSAnT3JnYW5pc2F0aW9uJyBcbiAgICAgICYmIHRoaXMuY29sdW1uLm5hbWUgIT09ICdPcmdhbmlzYXRpb24nICYmIHRoaXMuY29sdW1uSXRlbXMgJiYgdGhpcy5jb2x1bW5JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXQgZGlzYWJsZUxvYWRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy5maWx0ZXJlZENvbHVtbkl0ZW1zICYmIHRoaXMuZmlsdGVyZWRDb2x1bW5JdGVtcy5sZW5ndGggPCB0aGlzLmN1cnJlbnRMYXN0SW5kZXgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hpbGRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hpbGRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZih0aGlzLm5ld1Rlcm1TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubmV3VGVybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICB9XG4gIFxufSIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmNvbmZpZz8uc2hvd1NlYXJjaFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgc3RpY2t5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2ggbWItMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1yc2VhcmNoPlxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5zaG93U2VhcmNoXCI+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lucHV0IG1hdC1maWVsZC1yb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiBzZWFyY2gtaWNvblwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic2VhcmNoXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaFZhbHVlXCIgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgI3NlYXJjaD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlYXJjaC52YWx1ZVwiIGNsYXNzPVwiY2xlYXItYnRuIGZsZXhcIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJcIj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5JdGVtcyAmJiBjb2x1bW5JdGVtcy5sZW5ndGggPiAwOyBlbHNlIG5vRGF0YVRlbXBsYXRlO1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbHVtbkl0ZW1zOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgI2NhcmRFbGUgaWQ9XCJ7e2NvbHVtbi5jb2RlfX1DYXJke3tqKzF9fVwiID5cbiAgICAgICAgICAgIDxsaWItdGVybS1jYXJkXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwieydjaGlsZHJlbic6IGNoaWxkLCAnc2VsZWN0ZWQnIDogZmFsc2UsICdjYXRlZ29yeSc6Y29sdW1uLmNvZGUsIGNhcmRTdWJUeXBlOiAnbWluaW1hbCcsIGlzVmlld09ubHk6ZmFsc2UsJ2luZGV4Jzpjb2x1bW4uaW5kZXgsIGNvbHVtbkluZm86IGNvbHVtbn1cIlxuICAgICAgICAgICAgICAgIChpc1NlbGVjdGVkKT1cInVwZGF0ZVNlbGVjdGlvbjEoJGV2ZW50KVwiIChzZWxlY3RlZENhcmQpPVwic2VsZWN0ZWRDYXJkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvbGliLXRlcm0tY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XG4gICAgPCEtLSA8ZGl2Pk5vIHt7Y29sdW1uLm5hbWV9fSBhc3NvY2lhdGVkPC9kaXY+IC0tPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJzaG93TG9hZE1vcmVCdG5cIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJtYXQtcmFpc2VkLWJ1dHRvbiBtYXQtYnV0dG9uLWJhc2UgbG9hZE1vcmVcIiBbbmdDbGFzc109XCJ7J2Rpc2FibEJ0bic6IGRpc2FibGVMb2FkQnV0dG9ufVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVMb2FkQnV0dG9uXCI+TG9hZCBtb3JlLi4uPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtY29sdW1uLXZpZXcvdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtY29sdW1uLXZpZXcvdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1yRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQTtBQUMzQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFRcEUsTUFBTSxPQUFPLHVCQUF1QjtJQW9CbEMsWUFDVSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGVBQWlDO1FBRmpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFwQmxDLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFDM0IscUJBQWdCLEdBQVEsRUFBRSxDQUFBO1FBQ2hCLHVCQUFrQixHQUFHLElBQUksWUFBWSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDakQsZUFBVSxHQUFHLElBQUksWUFB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QUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDcEYsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQVEsQ0FBQTtnQkFDckQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBRXZELFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO2FBQ3BHO1NBQ0Y7SUFDSCxDQUFDOytHQTVaVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixrVENoQnBDLG15REFvQ0E7OzRGRHBCYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCO29LQUt2QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZnJhbWV3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25uZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwcm92YWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwcm92YWwuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJkQ2hlY2tlZCwgQ2FyZFNlbGVjdGlvbiwgQ2FyZHNDb3VudCwgQ2FyZCB9IGZyb20gJy4uLy4uL21vZGVscy92YXJpYWJsZS10eXBlLm1vZGVsJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSB2YXIgTGVhZGVyTGluZTogYW55O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRyZWUtY29sdW1uLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUtY29sdW1uLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29sdW1uVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb2x1bW46IGFueTtcbiAgQElucHV0KCkgY29udGFpbmVySWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBpc0NoaWxkT3JnID0gZmFsc2VcbiAgY29ubmVjdG9yTWFwcGluZzogYW55ID0ge31cbiAgQE91dHB1dCgpIHVwZGF0ZVRheG9ub215VGVybSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZFNlbGVjdGlvbj4odHJ1ZSk7XG4gIEBPdXRwdXQoKSB1cGRhdGVUZXJtTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZENoZWNrZWQ+KCk7XG4gIEBPdXRwdXQoKSBjYXJkc0NvdW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkc0NvdW50PigpO1xuICBAT3V0cHV0KCkgY2FyZEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZFNlbGVjdGlvbj4oKTtcbiAgY29sdW1uRGF0YTogQXJyYXk8Q2FyZD4gPSBbXTtcbiAgY2hpbGRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgbmV3VGVybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBhcHByb3ZhbFRlcm06IGFueTtcbiAgdGVybXNoYWZhbGw6IEFycmF5PENhcmQ+ID0gW107XG4gIHNlYXJjaFZhbHVlID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgc3RhcnRJbmRleCA9IDBcbiAgbGltaXRUb0FkZCA9IDUwXG4gIGN1cnJlbnRMYXN0SW5kZXggPSA1MFxuICBjb2x1bW5JdGVtczogYW55ID0gW11cbiAgZmlsdGVyZWRDb2x1bW5JdGVtczogYW55ID0gW11cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29ubmVjdG9yU2VydmljZTogQ29ubmVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFwcHJvdmFsU2VydmljZSA6IEFwcHJvdmFsU2VydmljZVxuICApIHtcbiAgfVxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHt9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpXG4gICAgdGhpcy5zZXRDb2x1bW5JdGVtcygpXG4gICAgdGhpcy5zZWFyY2hWYWx1ZS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg3MDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApLnN1YnNjcmliZSgoZWxlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoRmlsdGVyRGF0YShlbGUpXG4gICAgfSlcbiAgICBpZiAodGhpcy5jb2x1bW4uaW5kZXggPT09IDEpIHtcbiAgICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmdldFVwZGF0ZUxpc3QoKS5zdWJzY3JpYmUoKGxpc3Q6YW55KSA9PiB7XG4gICAgICAgIHRoaXMuYXBwcm92YWxUZXJtID0gbGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdGhpcy5jb2x1bW4uY29kZSA9PT0gaXRlbS5jYXRlZ29yeSlcbiAgICAgICAgaWYodGhpcy5hcHByb3ZhbFRlcm0pe1xuICAgICAgICAgIHRoaXMuYXBwcm92YWxUZXJtLmZvckVhY2goKHRlcm06IGFueSwgX2k6IG51bWJlcik9PiB7XG4gICAgICAgICAgICAgdGhpcy5jb2x1bW4uY2hpbGRyZW4uZm9yRWFjaCgobGVsOiBhbnksIF9qOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZihsZWwuaWRlbnRpZmllciA9PT0gdGVybS5pZGVudGlmaWVyKXtcbiAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLmlzRXhpc3RzKHRlcm0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtc2hhZmFsbC5wdXNoKGxlbClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIHRoaXMudGVybXNoYWZhbGwgPSBbLi4udGhpcy50ZXJtc2hhZmFsbF1cbiAgICAgICAgICB0aGlzLmNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKCh0cjogYW55LCBfaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZighdGhpcy5pc0V4aXN0cyh0cikpe1xuICAgICAgICAgICAgICB0aGlzLnRlcm1zaGFmYWxsLnB1c2godHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmNvbHVtbkRhdGEgPSB0aGlzLnRyYW5zZm9ybSh0aGlzLnRlcm1zaGFmYWxsKTtcbiAgICAgICAgICB0aGlzLnNldENvbHVtbkl0ZW1zKClcbiAgICAgICAgICBpZih0aGlzLmNvbHVtbkRhdGEgJiYgdGhpcy5jb2x1bW5EYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jYXJkc0NvdW50LmVtaXQoe2NhdGVnb3J5OiB0aGlzLmNvbHVtbkRhdGFbMF0uY2F0ZWdvcnkgfHwgdGhpcy5jb2x1bW4uY29kZSxjb3VudDp0aGlzLmNvbHVtbkRhdGEubGVuZ3RofSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmcgPSB0aGlzLmNvbm5lY3RvclNlcnZpY2UuY29ubmVjdG9yTWFwXG4gICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmlzRGF0YVVwZGF0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAvLyAgIHRoaXMubmdPbkluaXQoKVxuICAgIC8vIH0pXG4gICAgXG4gIH1cbiBcbiAgaXNFeGlzdHMoZTphbnkpe1xuICAgIGxldCB0ZW1wO1xuICAgIGlmKHRoaXMudGVybXNoYWZhbGwgJiYgdGhpcy50ZXJtc2hhZmFsbC5sZW5ndGgpIHtcbiAgICAgIHRlbXAgPSB0aGlzLnRlcm1zaGFmYWxsLm1hcCh0ID0+IHQuaWRlbnRpZmllcilcbiAgICAgIHJldHVybiB0ZW1wLmluY2x1ZGVzKGUuaWRlbnRpZmllcilcbiAgICB9IHJldHVybiBmYWxzZVxuICB9XG4gIFxuICBzdWJzY3JpYmVFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hpbGRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICB0aGlzLmNoaWxkU3Vic2NyaXB0aW9uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24uc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmIChlLnR5cGUgPT09IHRoaXMuY29sdW1uLmNvZGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtID0gey4uLmUuZGF0YSwgY2FyZFJlZjogZS5jYXJkUmVmIH1cbiAgICAgICAgaWYoZS5pc1VwZGF0ZSl7XG4gICAgICAgICAgdGhpcy51cGRhdGVUYXhvbm9teVRlcm0uZW1pdCh7IGlzU2VsZWN0ZWQ6IHRydWUsIHNlbGVjdGVkVGVybSwgaXNVcGRhdGU6IHRydWUgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRheG9ub215VGVybS5lbWl0KHsgaXNTZWxlY3RlZDogdHJ1ZSwgc2VsZWN0ZWRUZXJtIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2x1bW5EYXRhID0gdGhpcy50cmFuc2Zvcm0oKHRoaXMuY29sdW1uRGF0YSB8fCBbXSkubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IGUuZGF0YS5jb2RlKSB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnNldENvbHVtbkl0ZW1zKClcbiAgICAgICAgdGhpcy5zZXRDb25uZWN0b3JzKGUuY2FyZFJlZiwgdGhpcy5jb2x1bW5JdGVtcywgJ1NJTkdMRScpXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZS50eXBlKTtcbiAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5jb2RlID09PSB0aGlzLmNvbHVtbi5jb2RlKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENvbm5lY3RvcnMoZS5jYXJkUmVmLCBuZXh0ICYmIG5leHQuaW5kZXggPCB0aGlzLmNvbHVtbi5pbmRleCA/IFtdIDogdGhpcy5jb2x1bW5JdGVtcywgJ0FMTCcpXG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQuaW5kZXggPCB0aGlzLmNvbHVtbi5pbmRleCkge1xuICAgICAgICAgIHRoaXMuY29sdW1uRGF0YSA9IFtdO1xuICAgICAgICAgIHRoaXMuc2V0Q29sdW1uSXRlbXMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAodGhpcy5uZXdUZXJtU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm5ld1Rlcm1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICB0aGlzLm5ld1Rlcm1TdWJzY3JpcHRpb24gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuaW5zZXJ0VXBkYXRlRGVsZXRlTm90aWZpZXIuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgaWYgKGUgJiYgZS5hY3Rpb24pIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZS5hY3Rpb24pO1xuICAgICAgICBpZihuZXh0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmNvZGUgPT09IG5leHQuY29kZSAmJiBlLnR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFVwZGF0ZUhhbmRsZXIoZSwgbmV4dClcbiAgICAgICAgICB9IFxuICAgICAgICAgIGlmKGUudHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuY29sdW1uLmNvZGUgPT09IG5leHQuY29kZSAmJiBlLnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICAgIC8vIHRoaXMuY29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KGUuYWN0aW9uKVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50OiBhbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShlLmFjdGlvbik7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChzZWxlY3RlZFBhcmVudC5jb2RlKVxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmVudENhcmRSZWYgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQoc2VsZWN0ZWRQYXJlbnQuY29kZSkgJiYgXG4gICAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChzZWxlY3RlZFBhcmVudC5jb2RlKS5jYXJkUmVmXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZihzZWxlY3RlZFBhcmVudCAmJiBzZWxlY3RlZFBhcmVudERhdGEgJiYgc2VsZWN0ZWRQYXJlbnREYXRhLmNoaWxkcmVuICYmIHNlbGVjdGVkUGFyZW50RGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnNlcnRVcGRhdGVIYW5kbGVyKGUsIG5leHQsICd1cGRhdGUnKVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuY29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KGUuYWN0aW9uKVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuY29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KClcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogc2VsZWN0ZWRQYXJlbnQuY29kZSwgZGF0YTpzZWxlY3RlZFBhcmVudERhdGEuY2hpbGRyZW5bMF0sIGNhcmRSZWY6c2VsZWN0ZWRQYXJlbnRDYXJkUmVmLCBpc1VwZGF0ZTogdHJ1ZX0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGluc2VydFVwZGF0ZUhhbmRsZXIoZTogYW55LCBfbmV4dDogYW55LCBpc1VwZGF0ZT86IGFueSkge1xuICAgIGNvbnN0IGJhY2sgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeSh0aGlzLmNvbHVtbi5jb2RlKVxuICAgIFxuICAgIGNvbnN0IGxvY2FsVGVybXM6YW55ID0gW11cbiAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TG9jYWxUZXJtc0J5Q2F0ZWdvcnkodGhpcy5jb2x1bW4uY29kZSkuZm9yRWFjaChmID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50ID0gYmFjayA/IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChiYWNrLmNvZGUpIDogbnVsbDsgLy9jYW4gdXNlIGN1cnJlbnRcbiAgICAgIFxuICAgICAgaWYgKHNlbGVjdGVkUGFyZW50ICYmICgoZi5wYXJlbnQuY29kZSA9PT0gc2VsZWN0ZWRQYXJlbnQuY29kZSkgfHwgKGYucGFyZW50LmlkZW50aWZpZXIgJiYgKGYucGFyZW50LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkUGFyZW50LmlkZW50aWZpZXIpKSkpIHtcbiAgICAgICAgbG9jYWxUZXJtcy5wdXNoKGYudGVybSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmKCFpc1VwZGF0ZSkge1xuICAgIC8vIGdldCBsYXN0IHBhcmVudCBhbmQgZmlsdGVyIEFib3ZlXG4gICAgaWYoZSAmJiBlLmRhdGEpIHtcbiAgICB0aGlzLmNvbHVtbkRhdGEgPSB0aGlzLnRyYW5zZm9ybShbLi4ubG9jYWxUZXJtcywgLi4uKGUuZGF0YS5jaGlsZHJlbiB8fCBbXSldKVxuICAgICAgLmZpbHRlcigoeDphbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHguY2F0ZWdvcnkgPT0gdGhpcy5jb2x1bW4uY29kZVxuICAgICAgfSkubWFwKChtZXI6YW55KSA9PiB7XG4gICAgICAgIC8vKipyZWFkIGxvY2FsIGNoaWxkcmVuIGZvciBuZXh0ICovXG4gICAgICAgIC8vIGNvbnN0IG5leHRDaGlsZHJlbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRMb2NhbFRlcm1zQnlQYXJlbnQodGhpcy5jb2x1bW4uY29kZSlcbiAgICAgICAgXG4gICAgICAgIC8qKnJlc2V0IE5leHQgbGV2ZWwgY2hpbGRyZW4gKi9cbiAgICAgICAgdGhpcy5jb2x1bW4uY2hpbGRyZW4gPSB0aGlzLmNvbHVtbi5jaGlsZHJlbi5tYXAoKGNvbDphbnkpID0+IHsgY29sLnNlbGVjdGVkID0gZmFsc2U7IHJldHVybiBjb2wgfSlcbiAgICAgICAgbWVyLnNlbGVjdGVkID0gZmFsc2VcbiAgICAgICAgbWVyLmNoaWxkcmVuID0gKFsuLi50aGlzLmNvbHVtbi5jaGlsZHJlbi5maWx0ZXIoKHg6YW55KSA9PiB7IHJldHVybiB4LmNvZGUgPT09IG1lci5jb2RlIH0pLm1hcCgoYTogYW55KSA9PiBhLmNoaWxkcmVuKV0uc2hpZnQoKSB8fCBbXSlcbiAgICAgICAgcmV0dXJuIG1lclxuICAgICAgfSk7XG4gICAgfVxuICAgICAgdGhpcy5zZXRDb2x1bW5JdGVtcygpXG5cbiAgICBpZih0aGlzLmNvbHVtbkRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jYXJkc0NvdW50LmVtaXQoe2NhdGVnb3J5OiB0aGlzLmNvbHVtbkRhdGFbMF0uY2F0ZWdvcnkgfHwgJycsY291bnQ6dGhpcy5jb2x1bW5EYXRhLmxlbmd0aH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcmRzQ291bnQuZW1pdCh7Y2F0ZWdvcnk6IHRoaXMuY29sdW1uLmNvZGUsY291bnQ6IDB9KTtcbiAgICB9XG4gICAgLy8gdGhpcy51cGRhdGVUZXJtcygpXG5cbiAgICB9XG4gIH1cbiAgdXBkYXRlU2VsZWN0aW9uMShfZGF0YTogYW55KSB7IFxuICB9XG4gIHVwZGF0ZVNlbGVjdGlvbihfc2VsZWN0aW9uOiBhbnkpIHtcbiAgICAvLyBpZih0aGlzLmNvbHVtbi5jb2RlPT09J21lZGl1bScpe1xuICAgIC8vIH1cbiAgICAvLyBpZiAoc2VsZWN0aW9uLmVsZW1lbnQuY2F0ZWdvcnkgPT09IHRoaXMuY29sdW1uLmNvZGUpIHtcbiAgICAvLyAgIHRoaXMudXBkYXRlVGF4b25vbXlUZXJtLmVtaXQoeyBpc1NlbGVjdGVkOiBzZWxlY3Rpb24uaXNTZWxlY3RlZCwgc2VsZWN0ZWRUZXJtOiBzZWxlY3Rpb24uZWxlbWVudCB9KVxuICAgIC8vIH1cbiAgICAvLyB0aGlzLmNvbHVtbi5jaGlsZHJlbiA9IHRoaXMuY29sdW1uLmNoaWxkcmVuLm1hcChjb2wgPT4ge1xuICAgIC8vICAgaWYgKGNvbC5jb2RlID09PSBzZWxlY3Rpb24uZWxlbWVudC5jb2RlKSB7XG4gICAgLy8gICAgIGNvbC5zZWxlY3RlZCA9IHRydWVcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGNvbC5zZWxlY3RlZCA9IGZhbHNlXG4gICAgLy8gICB9XG4gICAgLy8gICByZXR1cm4gY29sXG4gICAgLy8gfSlcbiAgfVxuXG4gIHNldENvbHVtbkl0ZW1zKCkge1xuICAgIC8vIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jb2x1bW4uY2hpbGRyZW4uZmlsdGVyKGYgPT4geyByZXR1cm4gZi5zZWxlY3RlZCB9KVxuICAgIC8vIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgLy8gICBjb25zdCBkYXRhID0gdGhpcy5jb2x1bW5EYXRhLm1hcChjZCA9PiB7XG4gICAgLy8gICAgIGNkLnNlbGVjdGVkID0gdGhpcy5jb2x1bW4uY2hpbGRyZW4uZmlsdGVyKGYgPT4geyByZXR1cm4gY2QuaWRlbnRpZmllciA9PT0gZi5pZGVudGlmaWVyIH0pLm1hcChzID0+IHMuc2VsZWN0ZWQpWzBdXG4gICAgLy8gICAgIHJldHVybiBjZFxuICAgIC8vICAgfSlcbiAgICAvLyAgIHJldHVybiBkYXRhXG4gICAgLy8gfSBlbHNlIHtcbiAgICBsZXQgbG9jYWxTZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUudmFsdWUgJiYgdGhpcy5zZWFyY2hWYWx1ZS52YWx1ZS50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgbGV0IGZpbHRlcmVkQ29sdW1uRGF0YSA9IFtdXG4gICAgdGhpcy5jb2x1bW5JdGVtcyA9IFtdXG4gICAgaWYobG9jYWxTZWFyY2hWYWx1ZSkge1xuICAgICAgZmlsdGVyZWRDb2x1bW5EYXRhID0gdGhpcy5jb2x1bW5EYXRhLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihjaGlsZC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG9jYWxTZWFyY2hWYWx1ZSkgfHwgXG4gICAgICAgIChfLmdldChjaGlsZCwgJ3JlZklkJykgJiYgXy5nZXQoY2hpbGQsICdyZWZJZCcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG9jYWxTZWFyY2hWYWx1ZSkpIHx8IFxuICAgICAgICAoXy5nZXQoY2hpbGQsICdkZXNjcmlwdGlvbicpICYmIF8uZ2V0KGNoaWxkLCAnZGVzY3JpcHRpb24nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvY2FsU2VhcmNoVmFsdWUpKXx8XG4gICAgICAgIChfLmdldChjaGlsZCwgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzLmRpc3BsYXlOYW1lJykgJiYgXy5nZXQoY2hpbGQsICdhZGRpdGlvbmFsUHJvcGVydGllcy5kaXNwbGF5TmFtZScpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG9jYWxTZWFyY2hWYWx1ZSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlcmVkQ29sdW1uRGF0YSA9IHRoaXMuY29sdW1uRGF0YVxuICAgIH1cbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1uSXRlbXMgPSBmaWx0ZXJlZENvbHVtbkRhdGFcbiAgICB0aGlzLmNvbHVtbkl0ZW1zID0gZmlsdGVyZWRDb2x1bW5EYXRhID8gZmlsdGVyZWRDb2x1bW5EYXRhLnNsaWNlKHRoaXMuc3RhcnRJbmRleCwgdGhpcy5jdXJyZW50TGFzdEluZGV4KSA6IFtdXG4gICAgLy8gfVxuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHNvcnRCeSA9ICd0aW1lU3RhbXAnKTogYW55e1xuICAgIGlmKCFzb3J0QnkpIHtcbiAgICAgIGlmKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXBBID0gYS5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiBhLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLnRpbWVTdGFtcCA/IG5ldyBEYXRlKE51bWJlcihhLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLnRpbWVTdGFtcCkpLmdldFRpbWUoKSA6IDA7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXBCID0gYi5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiBiLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLnRpbWVTdGFtcCA/IG5ldyBEYXRlKE51bWJlcihiLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLnRpbWVTdGFtcCkpLmdldFRpbWUoKSA6IDA7XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gIHRpbWVzdGFtcEIgLSB0aW1lc3RhbXBBO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTtcbiAgICAgXG4gICAgICB9XG4gICAgfVxuICAgICBcbiAgfVxuXG4gIHNlYXJjaEZpbHRlckRhdGEoX2VsZTogYW55KXtcblxuICAgIHRoaXMuc2V0Q29sdW1uSXRlbXMoKVxuICAgIGNvbnN0IGJhY2sgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeSh0aGlzLmNvbHVtbi5jb2RlKVxuICAgIGlmKGJhY2sgJiYgYmFjay5jb2RlKSB7XG4gICAgICBsZXQgYmFja0NvbHVtRGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChiYWNrLmNvZGUpXG4gICAgICBpZihiYWNrQ29sdW1EYXRhLmNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZW1vdmVPbGRMaW5lKClcbiAgICAgIFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogYmFja0NvbHVtRGF0YS5jYXRlZ29yeSwgZGF0YTogYmFja0NvbHVtRGF0YSwgY2FyZFJlZjogYmFja0NvbHVtRGF0YS5jYXJkUmVmIH0pXG4gICAgICAgIH0sIDIwMClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5jb2x1bW5JdGVtcz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZW1vdmVPbGRMaW5lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFrZUZpcnN0VGVybVNlbGVjdGVkKClcbiAgICAgICAgfSw1MDApXG4gICAgICB9XG4gICAgfVxuICAgfVxuXG4gIGNsZWFyU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0VmFsdWUoJycpXG4gIH1cblxuICBsb2FkTW9yZSgpIHtcbiAgICB0aGlzLmN1cnJlbnRMYXN0SW5kZXggPSB0aGlzLmN1cnJlbnRMYXN0SW5kZXggKyB0aGlzLmxpbWl0VG9BZGRcbiAgICB0aGlzLnNlYXJjaEZpbHRlckRhdGEodGhpcy5zZWFyY2hWYWx1ZS52YWx1ZSlcbiAgfVxuXG4gIHNldENvbm5lY3RvcnMoZWxlbWVudENsaWNrZWQ6IGFueSwgY29sdW1uSXRlbTogYW55LCBtb2RlOiBhbnkpIHtcbiAgICB0aGlzLnJlbW92ZUNvbm5lY3RvcnMoZWxlbWVudENsaWNrZWQsICdib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSksIHRoaXMuY29sdW1uLmluZGV4IC0gMSlcbiAgICBcbiAgICBpZiAobW9kZSA9PT0gJ0FMTCcpIHtcbiAgICAgIC8vIGxldCB0ZW1wY29ubmVjdG9yTWFwcGluZyA9IHt9XG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclNlcnZpY2UudXBkYXRlQ29ubmVjdG9yc01hcCh0ZW1wY29ubmVjdG9yTWFwcGluZylcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgWydjb2x1bW4nICsgKHRoaXMuY29sdW1uLmluZGV4LSAxKV06ICcnXG5cbiAgICAgIC8vIH1cbiAgICAgIGNvbnN0IGlkcyA9IGNvbHVtbkl0ZW0ubWFwKChfYzogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmNvZGUgKyAnQ2FyZCcgKyAoaSArIDEpXG4gICAgICB9KVxuICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldID0geyBzb3VyY2U6IGVsZW1lbnRDbGlja2VkLCBsaW5lczogKGlkcyB8fCBbXSkubWFwKChpZDogYW55KSA9PiB7IHJldHVybiB7IHRhcmdldDogaWQsIGxpbmU6ICcnLCB0YXJnZXRUeXBlOiAnaWQnIH0gfSkgfVxuICAgICAgdGhpcy5jb25uZWN0b3JTZXJ2aWNlLnVwZGF0ZUNvbm5lY3RvcnNNYXAodGhpcy5jb25uZWN0b3JNYXBwaW5nKVxuICAgICAgXG4gICAgICBjb25zdCBjb25uZWN0aW9uTGluZXMgPSB0aGlzLmNvbm5lY3RvclNlcnZpY2UuX2RyYXdMaW5lKFxuICAgICAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbJ2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKV0uc291cmNlLFxuICAgICAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbJ2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKV0ubGluZXMsXG4gICAgICAgIG51bGwsXG4gICAgICAgICcjYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpLFxuICAgICAgICAnI2JveCcgKyB0aGlzLmNvbHVtbi5pbmRleFxuICAgICAgKVxuICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldLmxpbmVzID0gY29ubmVjdGlvbkxpbmVzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbi5pbmRleCA+IDEgJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdG9yTWFwcGluZ1snYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpXS5saW5lcyA9IFt7IHRhcmdldDogZWxlbWVudENsaWNrZWQsIGxpbmU6ICcnLCB0YXJnZXRUeXBlOiAnZWxlbWVudCcgfV1cblxuICAgICAgICB0aGlzLmNvbm5lY3RvclNlcnZpY2UudXBkYXRlQ29ubmVjdG9yc01hcCh0aGlzLmNvbm5lY3Rvck1hcHBpbmcpXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25MaW5lcyA9IHRoaXMuY29ubmVjdG9yU2VydmljZS5fZHJhd0xpbmUoXG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nWydib3gnICsgKHRoaXMuY29sdW1uLmluZGV4IC0gMSldLnNvdXJjZSxcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbJ2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKV0ubGluZXMsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAnI2JveCcgKyAodGhpcy5jb2x1bW4uaW5kZXggLSAxKSxcbiAgICAgICAgICAnI2JveCcgKyB0aGlzLmNvbHVtbi5pbmRleFxuICAgICAgICApXG4gICAgICAgIHRoaXMuY29ubmVjdG9yTWFwcGluZ1snYm94JyArICh0aGlzLmNvbHVtbi5pbmRleCAtIDEpXS5saW5lcyA9IGNvbm5lY3Rpb25MaW5lc1xuICAgICAgfVxuXG4gICAgfVxuICAgIHRoaXMuY29ubmVjdG9yU2VydmljZS51cGRhdGVDb25uZWN0b3JzTWFwKHRoaXMuY29ubmVjdG9yTWFwcGluZylcblxuICB9XG4gIHJlbW92ZUNvbm5lY3RvcnMoY3VycmVudEVsZW1lbnQ6IGFueSwgcHJldkNvbDogYW55LCBjdXJyZW50SW5kZXg6IGFueSkge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rvck1hcHBpbmcpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29ubmVjdG9yTWFwcGluZykge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIG4tMSBsaW5lcyBhbmQga2VlcCBvbmx5IGN1cnJlbnQgc2VsZWN0aW9uLCBhbHNvIGNsZWFyIG4rMSBsaW5lc1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0gJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXMgJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXNcbiAgICAgICAgICBsaW5lcy5mb3JFYWNoKGFzeW5jIChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IGN1cnJlbnRFbGVtZW50ICYmIHByZXZDb2wgPT0ga2V5KSB7XG4gICAgICAgICAgICAgIGF3YWl0IGVsZW1lbnQubGluZSAmJiBlbGVtZW50LmxpbmUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIGxpbmVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBwaW5nW2tleV0ubGluZXMgPSBsaW5lc1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIGFsbCBuKzIgbGluZXMsIGlmIGNsaWNrcyBwcmV2aW91cyBjb2x1bW5zIGFuZCB0cmVlIHdhcyBhbHJlYWR5IGRyaWxsZWQgZG93blxuICAgICAgICBsZXQgY291bnQgPSBjdXJyZW50SW5kZXggKyAyO1xuICAgICAgICBsZXQgbmV4dENvbCA9IGBib3gke2NvdW50fWBcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdG9yTWFwcGluZ1tuZXh0Q29sXSAmJiB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbbmV4dENvbF0ubGluZXMgJiYgdGhpcy5jb25uZWN0b3JNYXBwaW5nW25leHRDb2xdLmxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IHRoaXMuY29ubmVjdG9yTWFwcGluZ1tuZXh0Q29sXS5saW5lc1xuICAgICAgICAgIGxpbmVzLmZvckVhY2goYXN5bmMgKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgZWxlbWVudC5saW5lICYmIGVsZW1lbnQubGluZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxpbmVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rvck1hcHBpbmdbbmV4dENvbF0ubGluZXMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxuICBzZWxlY3RlZENhcmQoZXZlbnQ6IGFueSl7XG4gICAgdGhpcy51cGRhdGVUZXJtTGlzdC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzaG93TG9hZE1vcmVCdG4oKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy5jb2x1bW4gJiYgdGhpcy5jb2x1bW4uY29uZmlnICYmIHRoaXMuY29sdW1uLmNvbmZpZy5jYXRlZ29yeURpc3BsYXlOYW1lICE9PSAnT3JnYW5pc2F0aW9uJyBcbiAgICAgICYmIHRoaXMuY29sdW1uLm5hbWUgIT09ICdPcmdhbmlzYXRpb24nICYmIHRoaXMuY29sdW1uSXRlbXMgJiYgdGhpcy5jb2x1bW5JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXQgZGlzYWJsZUxvYWRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy5maWx0ZXJlZENvbHVtbkl0ZW1zICYmIHRoaXMuZmlsdGVyZWRDb2x1bW5JdGVtcy5sZW5ndGggPCB0aGlzLmN1cnJlbnRMYXN0SW5kZXgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hpbGRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hpbGRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZih0aGlzLm5ld1Rlcm1TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubmV3VGVybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICB9XG5cbiAgY2FyZEFjdGlvbkVtaXQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY2FyZEFjdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG1ha2VGaXJzdFRlcm1TZWxlY3RlZCgpIHtcbiAgICBjb25zdCBmaXJzdExpc3RJdGVtID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZW50cmllcygpLm5leHQoKS52YWx1ZSBhcyBhbnlcbiAgICBpZihmaXJzdExpc3RJdGVtICYmIGZpcnN0TGlzdEl0ZW0ubGVuZ3RoID49IDIpe1xuICAgICAgaWYoZmlyc3RMaXN0SXRlbVsxXSAmJiBmaXJzdExpc3RJdGVtWzFdLmNoaWxkcmVuICYmIGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGVybSA9IGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW5bMF0gYXMgYW55XG4gICAgICAgIGNvbnN0IGNhcmRSZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaXJzdFRlcm0ubmFtZSlcbiAgICAgICAgLy8gdGhpcy5jYXRlZ29yeUxpc3QgPSBbXVxuICAgICAgICBmaXJzdFRlcm0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jYXJkQ2xrRGF0YSA9IGZpcnN0VGVybTtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrLm5leHQoZmlyc3RUZXJtLmNhdGVnb3J5KVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogZmlyc3RUZXJtLmNhdGVnb3J5LCBkYXRhOiBmaXJzdFRlcm0sIGNhcmRSZWYgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG59IiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5zaG93U2VhcmNoXCI+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBzdGlja3lcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaCBtYi01XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnNlYXJjaFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5wdXQgbWF0LWZpZWxkLXJvdW5kZWQgZmxleCBmbGV4LW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic2VhcmNoXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiAjc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoLnZhbHVlXCIgY2xhc3M9XCJjbGVhci1idG4gZmxleFwiIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkl0ZW1zICYmIGNvbHVtbkl0ZW1zLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhVGVtcGxhdGU7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sdW1uSXRlbXM7IGxldCBqID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiAjY2FyZEVsZSBpZD1cInt7Y29sdW1uLmNvZGV9fUNhcmR7e2orMX19XCIgPlxuICAgICAgICAgICAgPGxpYi10ZXJtLWNhcmRcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJ7J2NoaWxkcmVuJzogY2hpbGQsICdzZWxlY3RlZCcgOiBmYWxzZSwgJ2NhdGVnb3J5Jzpjb2x1bW4uY29kZSwgY2FyZFN1YlR5cGU6ICdtaW5pbWFsJywgaXNWaWV3T25seTpmYWxzZSwnaW5kZXgnOmNvbHVtbi5pbmRleCwgY29sdW1uSW5mbzogY29sdW1ufVwiXG4gICAgICAgICAgICAgICAgW2VuYWJsZVRocmVlRG90c109XCJpc0NoaWxkT3JnID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAoaXNTZWxlY3RlZCk9XCJ1cGRhdGVTZWxlY3Rpb24xKCRldmVudClcIiAoc2VsZWN0ZWRDYXJkKT1cInNlbGVjdGVkQ2FyZCgkZXZlbnQpXCIgKGNhcmRBY3Rpb24pPVwiY2FyZEFjdGlvbkVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9saWItdGVybS1jYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNub0RhdGFUZW1wbGF0ZSA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaFZhbHVlPy52YWx1ZVwiPlxuICAgIDxkaXY+Tm8gRGF0YSBmb3VuZDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCIhZGlzYWJsZUxvYWRCdXR0b25cIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJtYXQtcmFpc2VkLWJ1dHRvbiBtYXQtYnV0dG9uLWJhc2UgbG9hZE1vcmVcIiBbbmdDbGFzc109XCJ7J2Rpc2FibEJ0bic6IGRpc2FibGVMb2FkQnV0dG9ufVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVMb2FkQnV0dG9uXCI+TG9hZCBtb3JlLi4uPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|