@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.26 → 0.0.1-cbrelease-4.8.32

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.
Files changed (53) hide show
  1. package/esm2022/lib/components/action-bar/action-bar.component.mjs +3 -2
  2. package/esm2022/lib/components/approval/approval.component.mjs +3 -2
  3. package/esm2022/lib/components/approve-view/approve-view.component.mjs +4 -3
  4. package/esm2022/lib/components/categories-preview/categories-preview.component.mjs +3 -2
  5. package/esm2022/lib/components/category-edit/category-edit-module/category-edit-module.component.mjs +56 -0
  6. package/esm2022/lib/components/conforamtion-popup/conforamtion-popup.component.mjs +3 -2
  7. package/esm2022/lib/components/connector/connector.component.mjs +3 -2
  8. package/esm2022/lib/components/create-categories/create-categories.component.mjs +3 -2
  9. package/esm2022/lib/components/create-term/create-term.component.mjs +3 -2
  10. package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +6 -4
  11. package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +122 -47
  12. package/esm2022/lib/components/pending-approval/pending-approval.component.mjs +3 -2
  13. package/esm2022/lib/components/term-card/term-card.component.mjs +39 -7
  14. package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +41 -6
  15. package/esm2022/lib/components/tree-view/tree-view.component.mjs +396 -31
  16. package/esm2022/lib/containers/config-framework/config-framework.component.mjs +3 -2
  17. package/esm2022/lib/containers/dashboard/dashboard.component.mjs +3 -2
  18. package/esm2022/lib/models/framework.model.mjs +1 -1
  19. package/esm2022/lib/pipes/order-by.pipe.mjs +3 -2
  20. package/esm2022/lib/services/approval.service.mjs +3 -2
  21. package/esm2022/lib/services/connector.service.mjs +53 -6
  22. package/esm2022/lib/services/framework.service.mjs +159 -14
  23. package/esm2022/lib/services/local-connection.service.mjs +3 -2
  24. package/esm2022/lib/services/odcs.service.mjs +3 -2
  25. package/esm2022/lib/tree-hierarchy-routing.module.mjs +3 -2
  26. package/esm2022/lib/tree-hierarchy.component.mjs +3 -2
  27. package/esm2022/lib/tree-hierarchy.module.mjs +13 -5
  28. package/esm2022/lib/tree-hierarchy.service.mjs +24 -3
  29. package/esm2022/material.module.mjs +4 -3
  30. package/fesm2022/sunbird-cb-tree-hierarchy.mjs +888 -131
  31. package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
  32. package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts +18 -0
  33. package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts.map +1 -0
  34. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +18 -3
  35. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +1 -1
  36. package/lib/components/term-card/term-card.component.d.ts +13 -2
  37. package/lib/components/term-card/term-card.component.d.ts.map +1 -1
  38. package/lib/components/tree-column-view/tree-column-view.component.d.ts +6 -1
  39. package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -1
  40. package/lib/components/tree-view/tree-view.component.d.ts +16 -4
  41. package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
  42. package/lib/models/framework.model.d.ts +1 -0
  43. package/lib/models/framework.model.d.ts.map +1 -1
  44. package/lib/services/connector.service.d.ts +1 -0
  45. package/lib/services/connector.service.d.ts.map +1 -1
  46. package/lib/services/framework.service.d.ts +10 -3
  47. package/lib/services/framework.service.d.ts.map +1 -1
  48. package/lib/tree-hierarchy.module.d.ts +6 -4
  49. package/lib/tree-hierarchy.module.d.ts.map +1 -1
  50. package/lib/tree-hierarchy.service.d.ts +5 -0
  51. package/lib/tree-hierarchy.service.d.ts.map +1 -1
  52. package/material.module.d.ts +2 -2
  53. package/package.json +2 -2
@@ -10,15 +10,17 @@ import * as i4 from "@angular/common";
10
10
  import * as i5 from "@angular/material/icon";
11
11
  import * as i6 from "@angular/forms";
12
12
  import * as i7 from "../term-card/term-card.component";
13
- export class TreeColumnViewComponent {
13
+ class TreeColumnViewComponent {
14
14
  constructor(frameworkService, connectorService, approvalService) {
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
- this.setColumnItems();
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,44 @@ 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-2\">\n <div class=rsearch>\n <!-- <ng-container *ngIf=\"column?.config?.showSearch\"> -->\n <div class=\"sinput mat-field-rounded\">\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 class=\"\">clear</mat-icon>\n </button>\n </div>\n \n <!-- </ng-container> -->\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 (isSelected)=\"updateSelection1($event)\" (selectedCard)=\"selectedCard($event)\">\n </lib-term-card>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #noDataTemplate>\n <!-- <div>No {{column.name}} associated</div> -->\n</ng-template>\n\n<div class=\"w-full flex justify-center\" *ngIf=\"showLoadMoreBtn\">\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 .search-icon{position:absolute;top:12px;font-size:20px;left:10px}.search .rsearch{display:flex;position:relative;flex:1 1 auto}.search .sinput{width:100%;border-radius:20px;border:1px solid #d5d0d0;padding:8px 8px 8px 34px;margin-top:0;font: 14px Lato;font-weight:400;box-sizing:border-box;height:42px}.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}\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: ["data"], outputs: ["isSelected", "selectedCard"] }] }); }
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", childOrg: "childOrg" }, 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 && childOrg.channel === child.name) ? true : (isChildOrg) ? false : true\"\n [checkIfChildOrg]=\"isChildOrg\"\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", "checkIfChildOrg", "data"], outputs: ["isSelected", "selectedCard", "cardAction"] }] }); }
307
335
  }
336
+ export { TreeColumnViewComponent };
308
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeColumnViewComponent, decorators: [{
309
338
  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-2\">\n <div class=rsearch>\n <!-- <ng-container *ngIf=\"column?.config?.showSearch\"> -->\n <div class=\"sinput mat-field-rounded\">\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 class=\"\">clear</mat-icon>\n </button>\n </div>\n \n <!-- </ng-container> -->\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 (isSelected)=\"updateSelection1($event)\" (selectedCard)=\"selectedCard($event)\">\n </lib-term-card>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #noDataTemplate>\n <!-- <div>No {{column.name}} associated</div> -->\n</ng-template>\n\n<div class=\"w-full flex justify-center\" *ngIf=\"showLoadMoreBtn\">\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 .search-icon{position:absolute;top:12px;font-size:20px;left:10px}.search .rsearch{display:flex;position:relative;flex:1 1 auto}.search .sinput{width:100%;border-radius:20px;border:1px solid #d5d0d0;padding:8px 8px 8px 34px;margin-top:0;font: 14px Lato;font-weight:400;box-sizing:border-box;height:42px}.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}\n"] }]
339
+ 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 && childOrg.channel === child.name) ? true : (isChildOrg) ? false : true\"\n [checkIfChildOrg]=\"isChildOrg\"\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
340
  }], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.ConnectorService }, { type: i3.ApprovalService }]; }, propDecorators: { column: [{
312
341
  type: Input
313
342
  }], containerId: [{
314
343
  type: Input
344
+ }], isChildOrg: [{
345
+ type: Input
346
+ }], childOrg: [{
347
+ type: Input
315
348
  }], updateTaxonomyTerm: [{
316
349
  type: Output
317
350
  }], updateTermList: [{
318
351
  type: Output
319
352
  }], cardsCount: [{
320
353
  type: Output
354
+ }], cardAction: [{
355
+ type: Output
321
356
  }] } });
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==
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtY29sdW1uLXZpZXcvdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtY29sdW1uLXZpZXcvdHJlZS1jb2x1bW4tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1yRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQTtBQUMzQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFHcEUsTUFLYSx1QkFBdUI7SUFxQmxDLFlBQ1UsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxlQUFpQztRQUZqQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBckJsQyxlQUFVLEdBQUcsS0FBSyxDQUFBO1FBRTNCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUNoQix1QkFBa0IsR0FBRyxJQUFJLFlBQVksQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDM0QsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBQ2pELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFB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QUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BGLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFRLENBQUE7Z0JBQ3JELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUV2RCxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtnQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTthQUNwRztTQUNGO0lBQ0gsQ0FBQzsrR0E3WlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsd1VDaEJwQyxnNURBcUNBOztTRHJCYSx1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7b0tBS3ZCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZENoZWNrZWQsIENhcmRTZWxlY3Rpb24sIENhcmRzQ291bnQsIENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmRlY2xhcmUgdmFyIExlYWRlckxpbmU6IGFueTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10cmVlLWNvbHVtbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtY29sdW1uLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLWNvbHVtbi12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbHVtblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29sdW1uOiBhbnk7XG4gIEBJbnB1dCgpIGNvbnRhaW5lcklkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgaXNDaGlsZE9yZyA9IGZhbHNlXG4gIEBJbnB1dCgpIGNoaWxkT3JnOiBhbnlcbiAgY29ubmVjdG9yTWFwcGluZzogYW55ID0ge31cbiAgQE91dHB1dCgpIHVwZGF0ZVRheG9ub215VGVybSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZFNlbGVjdGlvbj4odHJ1ZSk7XG4gIEBPdXRwdXQoKSB1cGRhdGVUZXJtTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZENoZWNrZWQ+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+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sdW1uSXRlbXM7IGxldCBqID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiAjY2FyZEVsZSBpZD1cInt7Y29sdW1uLmNvZGV9fUNhcmR7e2orMX19XCIgPlxuICAgICAgICAgICAgPGxpYi10ZXJtLWNhcmRcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJ7J2NoaWxkcmVuJzogY2hpbGQsICdzZWxlY3RlZCcgOiBmYWxzZSwgJ2NhdGVnb3J5Jzpjb2x1bW4uY29kZSwgY2FyZFN1YlR5cGU6ICdtaW5pbWFsJywgaXNWaWV3T25seTpmYWxzZSwnaW5kZXgnOmNvbHVtbi5pbmRleCwgY29sdW1uSW5mbzogY29sdW1ufVwiXG4gICAgICAgICAgICAgICAgW2VuYWJsZVRocmVlRG90c109XCIoaXNDaGlsZE9yZyAmJiBjaGlsZE9yZy5jaGFubmVsID09PSBjaGlsZC5uYW1lKSA/IHRydWUgOiAoaXNDaGlsZE9yZykgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgIFtjaGVja0lmQ2hpbGRPcmddPVwiaXNDaGlsZE9yZ1wiXG4gICAgICAgICAgICAgICAgKGlzU2VsZWN0ZWQpPVwidXBkYXRlU2VsZWN0aW9uMSgkZXZlbnQpXCIgKHNlbGVjdGVkQ2FyZCk9XCJzZWxlY3RlZENhcmQoJGV2ZW50KVwiIChjYXJkQWN0aW9uKT1cImNhcmRBY3Rpb25FbWl0KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvbGliLXRlcm0tY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGUgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hWYWx1ZT8udmFsdWVcIj5cbiAgICA8ZGl2Pk5vIERhdGEgZm91bmQ8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwiIWRpc2FibGVMb2FkQnV0dG9uXCI+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibWF0LXJhaXNlZC1idXR0b24gbWF0LWJ1dHRvbi1iYXNlIGxvYWRNb3JlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxCdG4nOiBkaXNhYmxlTG9hZEJ1dHRvbn1cIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlTG9hZEJ1dHRvblwiPkxvYWQgbW9yZS4uLjwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=