tin-spa 2.1.41 → 2.1.43

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.
@@ -74,7 +74,9 @@ export class DetailsDialog {
74
74
  this.isLoadComplete = true;
75
75
  this.loaderService.isLoading.subscribe(x => this.isProcessing = x);
76
76
  if (this.buttons) {
77
- this.extraButtons = this.buttons.filter(x => x.name != "create" && x.name != "edit" && x.name != "delete" && x.name != "view" && x.inDialog);
77
+ if (this.formConfig.mode != "create") {
78
+ this.extraButtons = this.buttons.filter(x => x.name != "create" && x.name != "edit" && x.name != "delete" && x.name != "view" && x.inDialog);
79
+ }
78
80
  this.createButton = this.buttons.find(x => x.name == "create");
79
81
  this.editButton = this.buttons.find(x => x.name == "edit");
80
82
  this.deleteButton = this.buttons.find(x => x.name == "delete");
@@ -99,6 +101,27 @@ export class DetailsDialog {
99
101
  setMode(newMode) {
100
102
  this.formConfig.mode = newMode;
101
103
  }
104
+ getButton(name) {
105
+ if (!this.buttons) {
106
+ console.log("No buttons found");
107
+ return null;
108
+ }
109
+ return this.buttons.find(x => x.name == name);
110
+ }
111
+ testDisabled(row, buttonName) {
112
+ let button = this.getButton(buttonName);
113
+ if (button.disabled) {
114
+ return button.disabled(row);
115
+ }
116
+ return false;
117
+ }
118
+ testVisible(row, buttonName) {
119
+ let button = this.getButton(buttonName);
120
+ if (button.visible) {
121
+ return button.visible(row);
122
+ }
123
+ return true;
124
+ }
102
125
  create() {
103
126
  // console.log(this.details)
104
127
  //validation
@@ -240,10 +263,10 @@ export class DetailsDialog {
240
263
  }
241
264
  }
242
265
  DetailsDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialog, deps: [{ token: i1.BreakpointObserver }, { token: i2.LoaderService }, { token: i3.DataServiceLib }, { token: i4.MessageService }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
243
- DetailsDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialog, selector: "app-viewModel", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "\r\n<div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{formConfig.mode | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setMode('edit')\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"formConfig.mode=='edit'\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button (click)=\"setMode('view')\"><mat-icon>done</mat-icon></button>\r\n </div> -->\r\n\r\n</div>\r\n<mat-dialog-content class=\"mat-typography\">\r\n\r\n<div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n<p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n<spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n<div *ngIf=\"tableConfig\" class=\"mt-3\" style=\" font-size: 14px;\">\r\n <spa-table-internal [config]=\"tableConfig\" ></spa-table-internal>\r\n</div>\r\n\r\n<mat-tab-group>\r\n\r\n <mat-tab *ngFor=\"let tbl of tableConfigs\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n\r\n</mat-tab-group>\r\n\r\n<!-- <div *ngIf=\"tableConfigs\" class=\"mt-3\" style=\" font-size: 14px;\">\r\n\r\n <spa-table-internal *ngFor=\"let tbl of tableConfigs\" [config]=\"tbl\"></spa-table-internal>\r\n</div> -->\r\n\r\n</div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n<div>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}</button>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}</button>\r\n\r\n<ng-container *ngIf=\"!smallScreen\">\r\n<button *ngFor=\"let btn of extraButtons\" mat-stroked-button [disabled]=\"isProcessing\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': btn.icon.color}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name}}</button>\r\n</ng-container>\r\n\r\n\r\n<button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n</div>\r\n\r\n<div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n<button *ngFor=\"let btn of extraButtons\" mat-icon-button [disabled]=\"isProcessing\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon >{{btn.icon.name}}</mat-icon></button>\r\n<button mat-icon-button [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n</div>\r\n\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i9.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i10.TableInternalComponent, selector: "spa-table-internal", inputs: ["hideTitle", "data", "config", "reload"], outputs: ["dataLoad", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange"] }, { kind: "component", type: i11.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }] });
266
+ DetailsDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialog, selector: "app-viewModel", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "\r\n<div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{formConfig.mode | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setMode('edit')\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"formConfig.mode=='edit'\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button (click)=\"setMode('view')\"><mat-icon>done</mat-icon></button>\r\n </div> -->\r\n\r\n</div>\r\n<mat-dialog-content class=\"mat-typography\">\r\n\r\n<div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n<p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n<spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n<div *ngIf=\"tableConfig\" class=\"mt-3\" style=\" font-size: 14px;\">\r\n <spa-table-internal [config]=\"tableConfig\" ></spa-table-internal>\r\n</div>\r\n\r\n<mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <mat-tab *ngFor=\"let tbl of tableConfigs\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n\r\n</mat-tab-group>\r\n\r\n\r\n\r\n</div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n<div>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}</button>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}</button>\r\n\r\n<ng-container *ngFor=\"let btn of extraButtons\" >\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': btn.icon.color}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name}}</button>\r\n</ng-container>\r\n\r\n\r\n<button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n</div>\r\n\r\n<div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon></button>\r\n </ng-container>\r\n\r\n<button mat-icon-button [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n</div>\r\n\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i9.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i10.TableInternalComponent, selector: "spa-table-internal", inputs: ["hideTitle", "data", "config", "reload"], outputs: ["dataLoad", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange"] }, { kind: "component", type: i11.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }] });
244
267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialog, decorators: [{
245
268
  type: Component,
246
- args: [{ selector: 'app-viewModel', template: "\r\n<div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{formConfig.mode | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setMode('edit')\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"formConfig.mode=='edit'\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button (click)=\"setMode('view')\"><mat-icon>done</mat-icon></button>\r\n </div> -->\r\n\r\n</div>\r\n<mat-dialog-content class=\"mat-typography\">\r\n\r\n<div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n<p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n<spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n<div *ngIf=\"tableConfig\" class=\"mt-3\" style=\" font-size: 14px;\">\r\n <spa-table-internal [config]=\"tableConfig\" ></spa-table-internal>\r\n</div>\r\n\r\n<mat-tab-group>\r\n\r\n <mat-tab *ngFor=\"let tbl of tableConfigs\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n\r\n</mat-tab-group>\r\n\r\n<!-- <div *ngIf=\"tableConfigs\" class=\"mt-3\" style=\" font-size: 14px;\">\r\n\r\n <spa-table-internal *ngFor=\"let tbl of tableConfigs\" [config]=\"tbl\"></spa-table-internal>\r\n</div> -->\r\n\r\n</div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n<div>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}</button>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}</button>\r\n\r\n<ng-container *ngIf=\"!smallScreen\">\r\n<button *ngFor=\"let btn of extraButtons\" mat-stroked-button [disabled]=\"isProcessing\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': btn.icon.color}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name}}</button>\r\n</ng-container>\r\n\r\n\r\n<button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n</div>\r\n\r\n<div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n<button *ngFor=\"let btn of extraButtons\" mat-icon-button [disabled]=\"isProcessing\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon >{{btn.icon.name}}</mat-icon></button>\r\n<button mat-icon-button [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n</div>\r\n\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}\n"] }]
269
+ args: [{ selector: 'app-viewModel', template: "\r\n<div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{formConfig.mode | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setMode('edit')\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"formConfig.mode=='edit'\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button (click)=\"setMode('view')\"><mat-icon>done</mat-icon></button>\r\n </div> -->\r\n\r\n</div>\r\n<mat-dialog-content class=\"mat-typography\">\r\n\r\n<div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n<p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n<spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n<div *ngIf=\"tableConfig\" class=\"mt-3\" style=\" font-size: 14px;\">\r\n <spa-table-internal [config]=\"tableConfig\" ></spa-table-internal>\r\n</div>\r\n\r\n<mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <mat-tab *ngFor=\"let tbl of tableConfigs\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n\r\n</mat-tab-group>\r\n\r\n\r\n\r\n</div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n<div>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}</button>\r\n<button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}</button>\r\n\r\n<ng-container *ngFor=\"let btn of extraButtons\" >\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': btn.icon.color}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name}}</button>\r\n</ng-container>\r\n\r\n\r\n<button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n</div>\r\n\r\n<div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': btn.icon.color}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon></button>\r\n </ng-container>\r\n\r\n<button mat-icon-button [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n</div>\r\n\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}\n"] }]
247
270
  }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }, { type: i2.LoaderService }, { type: i3.DataServiceLib }, { type: i4.MessageService }, { type: i5.MatDialogRef }, { type: i12.DetailsDialogConfig, decorators: [{
248
271
  type: Inject,
249
272
  args: [MAT_DIALOG_DATA]
@@ -251,4 +274,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
251
274
  type: Output
252
275
  }] } });
253
276
  ;
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2RldGFpbHNEaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBSXpFLE9BQU8sRUFBZSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRMUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0Isa0JBQXNDLEVBQVMsYUFBNEIsRUFBUyxXQUEyQixFQUFTLGNBQThCLEVBQ2hLLFNBQXNDLEVBQWtDLElBQXlCO1FBRHZGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNoSyxjQUFTLEdBQVQsU0FBUyxDQUE2QjtRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFxQjtRQWtGM0csVUFBSyxHQUFVLEVBQUUsQ0FBQztRQU1sQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUVwQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUEzRnpDLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMs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SUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFFbEU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDO2FBQ3BEO1FBQ0gsQ0FBQyxFQUNDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDVixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzBHQXpUVSxhQUFhLHlLQUdrQyxlQUFlOzhGQUg5RCxhQUFhLDhGQ2QxQix5akdBeUVBOzJGRDNEYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLGVBQWU7OzBCQU8wQixNQUFNOzJCQUFDLGVBQWU7NENBNkYvRCxXQUFXO3NCQUFwQixNQUFNOztBQTROUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUNvbmZpZywgRmllbGQsIFRhYmxlQ29uZmlnLCBCdXR0b24sIERldGFpbHNEaWFsb2dDb25maWcsIEFjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgQ29yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXZpZXdNb2RlbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbHNEaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV0YWlsc0RpYWxvZyBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIscHJpdmF0ZSBsb2FkZXJTZXJ2aWNlOiBMb2FkZXJTZXJ2aWNlLHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxEZXRhaWxzRGlhbG9nPiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBEZXRhaWxzRGlhbG9nQ29uZmlnKVxyXG4gIHtcclxuICAgIC8vIGRldGVjdCBzY3JlZW4gc2l6ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcIihtYXgtd2lkdGg6IDYwMHB4KVwiXSkuc3Vic2NyaWJlKChyZXN1bHQ6IEJyZWFrcG9pbnRTdGF0ZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IHRydWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHRoaXMuZGF0YS50YWJsZUNvbmZpZ1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZ3MgPSB0aGlzLmRhdGEudGFibGVDb25maWdzXHJcbiAgICB0aGlzLmZvcm1Db25maWcgPSB0aGlzLmRhdGEuY29uZmlnO1xyXG4gICAgdGhpcy5idXR0b25zID0gdGhpcy5kYXRhLmJ1dHRvbnM7XHJcblxyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSB0aGlzLmZvcm1Db25maWcubW9kZSA/PyBcInZpZXdcIlxyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Db25maWcubW9kZSA9PSBcImNyZWF0ZVwiKXtcclxuICAgICAgdGhpcy5kZXRhaWxzID0gQ29yZS5nZW5lcmF0ZU9iamVjdCh0aGlzLmZvcm1Db25maWcuZmllbGRzKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGEuaGVyb1ZhbHVlKXtcclxuICAgICAgICB0aGlzLmRldGFpbHNbdGhpcy5kYXRhLmhlcm9GaWVsZF0gPSB0aGlzLmRhdGEuaGVyb1ZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1lbHNle1xyXG5cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSlcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGEuZGV0YWlscyAmJiAhdGhpcy5kYXRhLmhlcm9GaWVsZCAmJiAhdGhpcy5kYXRhLmhlcm9WYWx1ZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRhIGZyb20gZGV0YWlsc1wiKVxyXG4gICAgICAgIHRoaXMuZGV0YWlscyA9IHRoaXMuZGF0YS5kZXRhaWxzXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5mb3JtQ29uZmlnLmxvYWRBY3Rpb24gJiYgdGhpcy5kYXRhLmhlcm9GaWVsZCAmJiB0aGlzLmRhdGEuZGV0YWlscykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YSBmcm9tIHVybCArIElEIEZpZWxkIFwiICsgdGhpcy5kYXRhLmhlcm9GaWVsZCApXHJcbiAgICAgICAgbGV0IGFjdGlvbjogQWN0aW9uID0geyB1cmw6IHRoaXMuZm9ybUNvbmZpZy5sb2FkQWN0aW9uLnVybCArIFwiL1wiICsgdGhpcy5kYXRhLmRldGFpbHNbdGhpcy5kYXRhLmhlcm9GaWVsZF0gfVxyXG4gICAgICAgIHRoaXMubG9hZERhdGEoYWN0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZm9ybUNvbmZpZy5sb2FkQWN0aW9uICYmIHRoaXMuZGF0YS5oZXJvVmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRhdGEgZnJvbSB1cmwgKyBTb2xpZCBJRFwiKVxyXG4gICAgICAgIGxldCBhY3Rpb246IEFjdGlvbiA9IHsgdXJsOiB0aGlzLmZvcm1Db25maWcubG9hZEFjdGlvbi51cmwgKyBcIi9cIiArIHRoaXMuZGF0YS5oZXJvVmFsdWUgfVxyXG4gICAgICAgIHRoaXMubG9hZERhdGEoYWN0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRhIHNvdXJjZSBmYWlsZWQgdG8gcGlja1wiKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsZUZpZWxkID0gdGhpcy5mb3JtQ29uZmlnLmZpZWxkcy5maW5kKHggPT4geC50eXBlID09ICdmaWxlJylcclxuXHJcbiAgICAvLyB0aGlzLm1vZGVCdXR0b24gPSB0aGlzLmRhdGEuYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09IHRoaXMuZm9ybUNvbmZpZy5tb2RlKT8/IFwidmlld1wiXHJcblxyXG4gICAgdGhpcy5pc0xvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGlmICh0aGlzLmJ1dHRvbnMpe1xyXG4gICAgICB0aGlzLmV4dHJhQnV0dG9ucyA9IHRoaXMuYnV0dG9ucy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT0gXCJjcmVhdGVcIiAmJiB4Lm5hbWUgIT0gXCJlZGl0XCIgJiYgeC5uYW1lICE9IFwiZGVsZXRlXCIgJiYgeC5uYW1lICE9IFwidmlld1wiICYmIHguaW5EaWFsb2cpXHJcbiAgICAgIHRoaXMuY3JlYXRlQnV0dG9uID0gdGhpcy5idXR0b25zLmZpbmQoeCA9PiB4Lm5hbWUgPT0gXCJjcmVhdGVcIilcclxuICAgICAgdGhpcy5lZGl0QnV0dG9uID0gdGhpcy5idXR0b25zLmZpbmQoeCA9PiB4Lm5hbWUgPT0gXCJlZGl0XCIpXHJcbiAgICAgIHRoaXMuZGVsZXRlQnV0dG9uID0gdGhpcy5idXR0b25zLmZpbmQoeCA9PiB4Lm5hbWUgPT0gXCJkZWxldGVcIilcclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG5cclxuICBleHRyYUJ1dHRvbnM6IEJ1dHRvbltdO1xyXG4gIGJ1dHRvbnMgOiBCdXR0b25bXTtcclxuICBjcmVhdGVCdXR0b24gOiBCdXR0b247XHJcbiAgZWRpdEJ1dHRvbjogQnV0dG9uO1xyXG4gIGRlbGV0ZUJ1dHRvbjogQnV0dG9uO1xyXG5cclxuICAvLyBtb2RlQnV0dG9uIDogQnV0dG9uXHJcbiAgZmlsZUZpZWxkOiBGaWVsZDtcclxuICBmaWxlczogYW55W10gPSBbXTtcclxuXHJcbiAgdGFibGVDb25maWc6IFRhYmxlQ29uZmlnXHJcbiAgdGFibGVDb25maWdzXHJcbiAgZGV0YWlsczogYW55XHJcbiAgZm9ybUNvbmZpZyA6IEZvcm1Db25maWc7XHJcbiAgc21hbGxTY3JlZW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgbG9hZERhdGEoYWN0aW9uOiBBY3Rpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKFwibG9hZGluZyBkZXRhaWxzXCIpXHJcblxyXG4gICAgaWYgKGFjdGlvbikge1xyXG5cclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGFjdGlvbikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGFwaVJlc3BvbnNlLmRhdGFcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh7IGZpZWxkOiBldmVudC5maWVsZCwgdmFsdWU6IGV2ZW50LnZhbHVlIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0TW9kZShuZXdNb2RlOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgfVxyXG5cclxuICBjcmVhdGUoKSB7XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5kZXRhaWxzKVxyXG5cclxuICAgIC8vdmFsaWRhdGlvblxyXG4gICAgbGV0IHJlc3AgPSBDb3JlLnZhbGlkYXRlT2JqZWN0KHRoaXMuZm9ybUNvbmZpZy5maWVsZHMsIHRoaXMuZGV0YWlscyk7XHJcbiAgICBpZiAocmVzcCAhPSAnJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHJlc3ApXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gRmlsZSBWYWxpZGF0aW9uLS0tXHJcbiAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPCAxICYmIHRoaXMuZmlsZUZpZWxkPy5yZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGF0dGFjaCBmaWxlKHMpXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBGaWxlIFZhbGlkYXRpb24tLS1cclxuXHJcbiAgICBsZXQgdGFibGVDcmVhdGVCdXR0b24gPSB0aGlzLmRhdGEuYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09IFwiY3JlYXRlXCIpXHJcbiAgICBpZiAoIXRhYmxlQ3JlYXRlQnV0dG9uIHx8ICF0YWJsZUNyZWF0ZUJ1dHRvbi5hY3Rpb24pIHtcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ2VtaXQnLCBkYXRhOiB0aGlzLmRldGFpbHN9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL2NvdmVyc2lvbi0tXHJcbiAgICBsZXQgZGF0YU91dDtcclxuXHJcbiAgICBpZiAodGFibGVDcmVhdGVCdXR0b24uYWN0aW9uLmlzRm9ybURhdGEpIHtcclxuXHJcbiAgICAgIGxldCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlJHtpfWAsIHRoaXMuZmlsZXNbaV0sIHRoaXMuZmlsZXNbaV0ubmFtZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImRhdGFcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5kZXRhaWxzKSk7XHJcblxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhmb3JtRGF0YSlcclxuXHJcbiAgICAgIGRhdGFPdXQgPSBmb3JtRGF0YVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGRhdGFPdXQgPSB0aGlzLmRldGFpbHNcclxuICAgIH1cclxuICAgIC8vY292ZXJzaW9uLS1cclxuXHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKHRhYmxlQ3JlYXRlQnV0dG9uLmFjdGlvbiwgZGF0YU91dCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlQ3JlYXRlQnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh0YWJsZUNyZWF0ZUJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiQ3JlYXRlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ3N1Y2Nlc3MnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH0sKGVycm9yKSA9PiB7XHJcbiAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIGVkaXQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVkaXRcIilcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGV0YWlscylcclxuXHJcbiAgICAvL3ZhbGlkYXRpb25cclxuICAgIGxldCByZXNwID0gQ29yZS52YWxpZGF0ZU9iamVjdCh0aGlzLmZvcm1Db25maWcuZmllbGRzLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgaWYgKHJlc3AgIT0gJycpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChyZXNwKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBsZXQgdGFibGVFZGl0QnV0dG9uID0gdGhpcy5kYXRhLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBcImVkaXRcIilcclxuICAgIGlmICghdGFibGVFZGl0QnV0dG9uIHx8ICF0YWJsZUVkaXRCdXR0b24uYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ2VtaXQnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9jb3ZlcnNpb24tLVxyXG4gICAgbGV0IGRhdGFPdXQ7XHJcblxyXG4gICAgaWYgKHRhYmxlRWRpdEJ1dHRvbi5hY3Rpb24uaXNGb3JtRGF0YSkge1xyXG5cclxuICAgICAgbGV0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHVwbG9hZEZpbGUke2l9YCwgdGhpcy5maWxlc1tpXSwgdGhpcy5maWxlc1tpXS5uYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbHMpKTtcclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGZvcm1EYXRhKVxyXG5cclxuICAgICAgZGF0YU91dCA9IGZvcm1EYXRhXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgZGF0YU91dCA9IHRoaXMuZGV0YWlsc1xyXG4gICAgfVxyXG4gICAgLy9jb3ZlcnNpb24tLVxyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaSh0YWJsZUVkaXRCdXR0b24uYWN0aW9uLCBkYXRhT3V0KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGlmICh0YWJsZUVkaXRCdXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHRhYmxlRWRpdEJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiVXBkYXRlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ3N1Y2Nlc3MnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAoZXJyb3IpID0+IHtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKCkge1xyXG5cclxuXHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYERFTEVURSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRGVsZXRlXCIpXHJcblxyXG4gICAgICAgIGxldCBiID0gdGhpcy5kYXRhLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBcImRlbGV0ZVwiKVxyXG4gICAgICAgIGlmICghYikge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShiLmFjdGlvbiwgdGhpcy5kZXRhaWxzKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChiLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkRlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ3N1Y2Nlc3MnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjdXN0b20oYjogQnV0dG9uKSB7XHJcblxyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShiLmFjdGlvbiwgdGhpcy5kZXRhaWxzKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGlmIChiLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChiLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJEZWxldGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG59O1xyXG5cclxuXHJcblxyXG4iLCJcclxuPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTBcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3tmb3JtQ29uZmlnLm1vZGUgfCB0aXRsZWNhc2V9fSB7e2Zvcm1Db25maWc/LnRpdGxlfX08L2gyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlPT0ndmlldycgJiYgZWRpdEJ1dHRvblwiIGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0TW9kZSgnZWRpdCcpXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdlZGl0J1wiIGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAgKGNsaWNrKT1cInNldE1vZGUoJ3ZpZXcnKVwiPjxtYXQtaWNvbj5kb25lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L2Rpdj4gLS0+XHJcblxyXG48L2Rpdj5cclxuPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+XHJcblxyXG48ZGl2IGNsYXNzPVwidGluLWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6MTRweFwiPlxyXG5cclxuPHAgKm5nSWY9XCJmb3JtQ29uZmlnICYmICFkZXRhaWxzXCI+PGVtPkxvYWRpbmcuLi48L2VtPjwvcD5cclxuXHJcbjxzcGEtZm9ybSAqbmdJZj1cImZvcm1Db25maWcgJiYgZGV0YWlsc1wiIFtmaWxlc109XCJmaWxlc1wiIFtkYXRhXT1cImRldGFpbHNcIiBbY29uZmlnXT1cImZvcm1Db25maWdcIiAoaW5wdXRDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKCRldmVudClcIj48L3NwYS1mb3JtPlxyXG5cclxuPGRpdiAqbmdJZj1cInRhYmxlQ29uZmlnXCIgY2xhc3M9XCJtdC0zXCIgc3R5bGU9XCIgZm9udC1zaXplOiAxNHB4O1wiPlxyXG4gIDxzcGEtdGFibGUtaW50ZXJuYWwgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiID48L3NwYS10YWJsZS1pbnRlcm5hbD5cclxuPC9kaXY+XHJcblxyXG48bWF0LXRhYi1ncm91cD5cclxuXHJcbiAgICA8bWF0LXRhYiAqbmdGb3I9XCJsZXQgdGJsIG9mIHRhYmxlQ29uZmlnc1wiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbWF0VGFiTGFiZWw+XHJcbiAgICAgICAgPHNwYW4+e3t0YmwudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxzcGEtdGFibGUtaW50ZXJuYWwgW2NvbmZpZ109XCJ0YmxcIiBbaGlkZVRpdGxlXT1cInRydWVcIj48L3NwYS10YWJsZS1pbnRlcm5hbD5cclxuXHJcbiAgICA8L21hdC10YWI+XHJcblxyXG48L21hdC10YWItZ3JvdXA+XHJcblxyXG48IS0tIDxkaXYgKm5nSWY9XCJ0YWJsZUNvbmZpZ3NcIiBjbGFzcz1cIm10LTNcIiBzdHlsZT1cIiBmb250LXNpemU6IDE0cHg7XCI+XHJcblxyXG4gIDxzcGEtdGFibGUtaW50ZXJuYWwgKm5nRm9yPVwibGV0IHRibCBvZiB0YWJsZUNvbmZpZ3NcIiBbY29uZmlnXT1cInRibFwiPjwvc3BhLXRhYmxlLWludGVybmFsPlxyXG48L2Rpdj4gLS0+XHJcblxyXG48L2Rpdj5cclxuXHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuPGRpdj5cclxuPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdjcmVhdGUnICYmIGNyZWF0ZUJ1dHRvblwiIChjbGljayk9XCJjcmVhdGUoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2NyZWF0ZUJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX08L2J1dHRvbj5cclxuPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdlZGl0JyAmJiBlZGl0QnV0dG9uXCIgKGNsaWNrKT1cImVkaXQoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2VkaXRCdXR0b24uZGlzcGxheSA/PyAnU3VibWl0J319PC9idXR0b24+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXNtYWxsU2NyZWVuXCI+XHJcbjxidXR0b24gKm5nRm9yPVwibGV0IGJ0biBvZiBleHRyYUJ1dHRvbnNcIiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBidG4uaWNvbi5jb2xvcn1cIiAoY2xpY2spPVwiY3VzdG9tKGJ0bilcIiBjZGtGb2N1c0luaXRpYWw+PG1hdC1pY29uIFtuZ1N0eWxlXT1cInsnY29sb3InOiBidG4uaWNvbi5jb2xvcn1cIj57e2J0bi5pY29uLm5hbWV9fTwvbWF0LWljb24+e3tidG4uZGlzcGxheSA/PyBidG4ubmFtZX19PC9idXR0b24+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbjxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1kaWFsb2ctY2xvc2U+Q2FuY2VsPC9idXR0b24+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiICpuZ0lmPVwic21hbGxTY3JlZW5cIj5cclxuPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnRuIG9mIGV4dHJhQnV0dG9uc1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGJ0bi5pY29uLmNvbG9yfVwiIChjbGljayk9XCJjdXN0b20oYnRuKVwiIGNka0ZvY3VzSW5pdGlhbD48bWF0LWljb24gPnt7YnRuLmljb24ubmFtZX19PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIHN0eWxlPVwiY29sb3I6IHJlZDtcIiAoY2xpY2spPVwiZGVsZXRlKClcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZSE9J2NyZWF0ZScgICYmIGRlbGV0ZUJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcblxyXG48L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuXHJcblxyXG5cclxuIl19
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2RldGFpbHNEaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBSXpFLE9BQU8sRUFBZSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRMUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0Isa0JBQXNDLEVBQVMsYUFBNEIsRUFBUyxXQUEyQixFQUFTLGNBQThCLEVBQ2hLLFNBQXNDLEVBQWtDLElBQXlCO1FBRHZGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNoSyxjQUFTLEdBQVQsU0FBUyxDQUE2QjtRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFxQjtRQXFGM0csVUFBSyxHQUFVLEVBQUUsQ0FBQztRQU1sQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUVwQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUE5RnpDLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMs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RkNkMUIsZ2xHQXlFQTsyRkQzRGEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxlQUFlOzswQkFPMEIsTUFBTTsyQkFBQyxlQUFlOzRDQWdHL0QsV0FBVztzQkFBcEIsTUFBTTs7QUE2UFIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1Db25maWcsIEZpZWxkLCBUYWJsZUNvbmZpZywgQnV0dG9uLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBBY3Rpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIENvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xyXG5pbXBvcnQgeyBMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9hZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC12aWV3TW9kZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERldGFpbHNEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLHByaXZhdGUgbG9hZGVyU2VydmljZTogTG9hZGVyU2VydmljZSxwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYixwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGV0YWlsc0RpYWxvZz4sIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogRGV0YWlsc0RpYWxvZ0NvbmZpZylcclxuICB7XHJcbiAgICAvLyBkZXRlY3Qgc2NyZWVuIHNpemUgY2hhbmdlc1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbXCIobWF4LXdpZHRoOiA2MDBweClcIl0pLnN1YnNjcmliZSgocmVzdWx0OiBCcmVha3BvaW50U3RhdGUpID0+IHtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQubWF0Y2hlcykge1xyXG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIHRoaXMudGFibGVDb25maWcgPSB0aGlzLmRhdGEudGFibGVDb25maWdcclxuICAgIHRoaXMudGFibGVDb25maWdzID0gdGhpcy5kYXRhLnRhYmxlQ29uZmlnc1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnID0gdGhpcy5kYXRhLmNvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IHRoaXMuZGF0YS5idXR0b25zO1xyXG5cclxuICAgIHRoaXMuZm9ybUNvbmZpZy5tb2RlID0gdGhpcy5mb3JtQ29uZmlnLm1vZGUgPz8gXCJ2aWV3XCJcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLm1vZGUgPT0gXCJjcmVhdGVcIil7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IENvcmUuZ2VuZXJhdGVPYmplY3QodGhpcy5mb3JtQ29uZmlnLmZpZWxkcyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhLmhlcm9WYWx1ZSl7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzW3RoaXMuZGF0YS5oZXJvRmllbGRdID0gdGhpcy5kYXRhLmhlcm9WYWx1ZVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuXHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhLmRldGFpbHMgJiYgIXRoaXMuZGF0YS5oZXJvRmllbGQgJiYgIXRoaXMuZGF0YS5oZXJvVmFsdWUpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YSBmcm9tIGRldGFpbHNcIilcclxuICAgICAgICB0aGlzLmRldGFpbHMgPSB0aGlzLmRhdGEuZGV0YWlsc1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZm9ybUNvbmZpZy5sb2FkQWN0aW9uICYmIHRoaXMuZGF0YS5oZXJvRmllbGQgJiYgdGhpcy5kYXRhLmRldGFpbHMpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRhdGEgZnJvbSB1cmwgKyBJRCBGaWVsZCBcIiArIHRoaXMuZGF0YS5oZXJvRmllbGQgKVxyXG4gICAgICAgIGxldCBhY3Rpb246IEFjdGlvbiA9IHsgdXJsOiB0aGlzLmZvcm1Db25maWcubG9hZEFjdGlvbi51cmwgKyBcIi9cIiArIHRoaXMuZGF0YS5kZXRhaWxzW3RoaXMuZGF0YS5oZXJvRmllbGRdIH1cclxuICAgICAgICB0aGlzLmxvYWREYXRhKGFjdGlvbilcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmZvcm1Db25maWcubG9hZEFjdGlvbiAmJiB0aGlzLmRhdGEuaGVyb1ZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRhIGZyb20gdXJsICsgU29saWQgSURcIilcclxuICAgICAgICBsZXQgYWN0aW9uOiBBY3Rpb24gPSB7IHVybDogdGhpcy5mb3JtQ29uZmlnLmxvYWRBY3Rpb24udXJsICsgXCIvXCIgKyB0aGlzLmRhdGEuaGVyb1ZhbHVlIH1cclxuICAgICAgICB0aGlzLmxvYWREYXRhKGFjdGlvbilcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YSBzb3VyY2UgZmFpbGVkIHRvIHBpY2tcIilcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IHRoaXMuZm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgudHlwZSA9PSAnZmlsZScpXHJcblxyXG4gICAgLy8gdGhpcy5tb2RlQnV0dG9uID0gdGhpcy5kYXRhLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSB0aGlzLmZvcm1Db25maWcubW9kZSk/PyBcInZpZXdcIlxyXG5cclxuICAgIHRoaXMuaXNMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubG9hZGVyU2VydmljZS5pc0xvYWRpbmcuc3Vic2NyaWJlKHggPT4gdGhpcy5pc1Byb2Nlc3NpbmcgPSB4KTtcclxuXHJcbiAgICBpZiAodGhpcy5idXR0b25zKXtcclxuICAgICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5tb2RlICE9IFwiY3JlYXRlXCIpe1xyXG4gICAgICAgIHRoaXMuZXh0cmFCdXR0b25zID0gdGhpcy5idXR0b25zLmZpbHRlcih4ID0+IHgubmFtZSAhPSBcImNyZWF0ZVwiICYmIHgubmFtZSAhPSBcImVkaXRcIiAmJiB4Lm5hbWUgIT0gXCJkZWxldGVcIiAmJiB4Lm5hbWUgIT0gXCJ2aWV3XCIgJiYgeC5pbkRpYWxvZylcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jcmVhdGVCdXR0b24gPSB0aGlzLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBcImNyZWF0ZVwiKVxyXG4gICAgICB0aGlzLmVkaXRCdXR0b24gPSB0aGlzLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBcImVkaXRcIilcclxuICAgICAgdGhpcy5kZWxldGVCdXR0b24gPSB0aGlzLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBcImRlbGV0ZVwiKVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGV4dHJhQnV0dG9uczogQnV0dG9uW107XHJcbiAgYnV0dG9ucyA6IEJ1dHRvbltdO1xyXG4gIGNyZWF0ZUJ1dHRvbiA6IEJ1dHRvbjtcclxuICBlZGl0QnV0dG9uOiBCdXR0b247XHJcbiAgZGVsZXRlQnV0dG9uOiBCdXR0b247XHJcblxyXG4gIC8vIG1vZGVCdXR0b24gOiBCdXR0b25cclxuICBmaWxlRmllbGQ6IEZpZWxkO1xyXG4gIGZpbGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICB0YWJsZUNvbmZpZzogVGFibGVDb25maWdcclxuICB0YWJsZUNvbmZpZ3NcclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnIDogRm9ybUNvbmZpZztcclxuICBzbWFsbFNjcmVlbiA9IGZhbHNlO1xyXG5cclxuICBpc0xvYWRDb21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUHJvY2Vzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cclxuICBsb2FkRGF0YShhY3Rpb246IEFjdGlvbikge1xyXG4gICAgY29uc29sZS5sb2coXCJsb2FkaW5nIGRldGFpbHNcIilcclxuXHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcblxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYWN0aW9uKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kZXRhaWxzID0gYXBpUmVzcG9uc2UuZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGlucHV0Q2hhbmdlZChldmVudCkge1xyXG4gICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHsgZmllbGQ6IGV2ZW50LmZpZWxkLCB2YWx1ZTogZXZlbnQudmFsdWUgfSlcclxuICB9XHJcblxyXG5cclxuICBzZXRNb2RlKG5ld01vZGU6IHN0cmluZyl7XHJcbiAgICB0aGlzLmZvcm1Db25maWcubW9kZSA9IG5ld01vZGVcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5idXR0b25zKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTm8gYnV0dG9ucyBmb3VuZFwiKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09IG5hbWUpXHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICBsZXQgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSlcclxuXHJcbiAgICBpZiAoYnV0dG9uLmRpc2FibGVkKSB7XHJcblxyXG4gICAgICByZXR1cm4gYnV0dG9uLmRpc2FibGVkKHJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHRlc3RWaXNpYmxlKHJvdywgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpXHJcblxyXG4gICAgaWYgKGJ1dHRvbi52aXNpYmxlKSB7XHJcblxyXG4gICAgICByZXR1cm4gYnV0dG9uLnZpc2libGUocm93KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmRldGFpbHMpXHJcblxyXG4gICAgLy92YWxpZGF0aW9uXHJcbiAgICBsZXQgcmVzcCA9IENvcmUudmFsaWRhdGVPYmplY3QodGhpcy5mb3JtQ29uZmlnLmZpZWxkcywgdGhpcy5kZXRhaWxzKTtcclxuICAgIGlmIChyZXNwICE9ICcnKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QocmVzcClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBGaWxlIFZhbGlkYXRpb24tLS1cclxuICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEgJiYgdGhpcy5maWxlRmllbGQ/LnJlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgYXR0YWNoIGZpbGUocylcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEZpbGUgVmFsaWRhdGlvbi0tLVxyXG5cclxuICAgIGxldCB0YWJsZUNyZWF0ZUJ1dHRvbiA9IHRoaXMuZGF0YS5idXR0b25zLmZpbmQoeCA9PiB4Lm5hbWUgPT0gXCJjcmVhdGVcIilcclxuICAgIGlmICghdGFibGVDcmVhdGVCdXR0b24gfHwgIXRhYmxlQ3JlYXRlQnV0dG9uLmFjdGlvbikge1xyXG5cclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnZW1pdCcsIGRhdGE6IHRoaXMuZGV0YWlsc30pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vY292ZXJzaW9uLS1cclxuICAgIGxldCBkYXRhT3V0O1xyXG5cclxuICAgIGlmICh0YWJsZUNyZWF0ZUJ1dHRvbi5hY3Rpb24uaXNGb3JtRGF0YSkge1xyXG5cclxuICAgICAgbGV0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHVwbG9hZEZpbGUke2l9YCwgdGhpcy5maWxlc1tpXSwgdGhpcy5maWxlc1tpXS5uYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbHMpKTtcclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGZvcm1EYXRhKVxyXG5cclxuICAgICAgZGF0YU91dCA9IGZvcm1EYXRhXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgZGF0YU91dCA9IHRoaXMuZGV0YWlsc1xyXG4gICAgfVxyXG4gICAgLy9jb3ZlcnNpb24tLVxyXG5cclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkodGFibGVDcmVhdGVCdXR0b24uYWN0aW9uLCBkYXRhT3V0KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG5cclxuICAgICAgICBpZiAodGFibGVDcmVhdGVCdXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHRhYmxlQ3JlYXRlQnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJDcmVhdGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgfSwoZXJyb3IpID0+IHtcclxuICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgZWRpdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRWRpdFwiKVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5kZXRhaWxzKVxyXG5cclxuICAgIC8vdmFsaWRhdGlvblxyXG4gICAgbGV0IHJlc3AgPSBDb3JlLnZhbGlkYXRlT2JqZWN0KHRoaXMuZm9ybUNvbmZpZy5maWVsZHMsIHRoaXMuZGV0YWlscyk7XHJcbiAgICBpZiAocmVzcCAhPSAnJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHJlc3ApXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGxldCB0YWJsZUVkaXRCdXR0b24gPSB0aGlzLmRhdGEuYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09IFwiZWRpdFwiKVxyXG4gICAgaWYgKCF0YWJsZUVkaXRCdXR0b24gfHwgIXRhYmxlRWRpdEJ1dHRvbi5hY3Rpb24pIHtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnZW1pdCcsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL2NvdmVyc2lvbi0tXHJcbiAgICBsZXQgZGF0YU91dDtcclxuXHJcbiAgICBpZiAodGFibGVFZGl0QnV0dG9uLmFjdGlvbi5pc0Zvcm1EYXRhKSB7XHJcblxyXG4gICAgICBsZXQgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChgdXBsb2FkRmlsZSR7aX1gLCB0aGlzLmZpbGVzW2ldLCB0aGlzLmZpbGVzW2ldLm5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJkYXRhXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlscykpO1xyXG5cclxuICAgICAgLy8gY29uc29sZS5sb2coZm9ybURhdGEpXHJcblxyXG4gICAgICBkYXRhT3V0ID0gZm9ybURhdGFcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBkYXRhT3V0ID0gdGhpcy5kZXRhaWxzXHJcbiAgICB9XHJcbiAgICAvL2NvdmVyc2lvbi0tXHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKHRhYmxlRWRpdEJ1dHRvbi5hY3Rpb24sIGRhdGFPdXQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlRWRpdEJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodGFibGVFZGl0QnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIChlcnJvcikgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoKSB7XHJcblxyXG5cclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShgREVMRVRFID9gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJEZWxldGVcIilcclxuXHJcbiAgICAgICAgbGV0IGIgPSB0aGlzLmRhdGEuYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09IFwiZGVsZXRlXCIpXHJcbiAgICAgICAgaWYgKCFiKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IG1lc3NhZ2U6ICdzdWNjZXNzJywgZGF0YTogdGhpcy5kZXRhaWxzIH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGIuYWN0aW9uLCB0aGlzLmRldGFpbHMpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRGVsZXRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGN1c3RvbShiOiBCdXR0b24pIHtcclxuXHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGIuYWN0aW9uLCB0aGlzLmRldGFpbHMpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuXHJcbiAgICAgICAgaWYgKGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkRlbGV0ZWRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IG1lc3NhZ2U6ICdzdWNjZXNzJywgZGF0YTogdGhpcy5kZXRhaWxzIH0pO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn07XHJcblxyXG5cclxuXHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMFwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT57e2Zvcm1Db25maWcubW9kZSB8IHRpdGxlY2FzZX19IHt7Zm9ybUNvbmZpZz8udGl0bGV9fTwvaDI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSd2aWV3JyAmJiBlZGl0QnV0dG9uXCIgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZXRNb2RlKCdlZGl0JylcIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J2VkaXQnXCIgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICAoY2xpY2spPVwic2V0TW9kZSgndmlldycpXCI+PG1hdC1pY29uPmRvbmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDwvZGl2PiAtLT5cclxuXHJcbjwvZGl2PlxyXG48bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0aW4taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4XCI+XHJcblxyXG48cCAqbmdJZj1cImZvcm1Db25maWcgJiYgIWRldGFpbHNcIj48ZW0+TG9hZGluZy4uLjwvZW0+PC9wPlxyXG5cclxuPHNwYS1mb3JtICpuZ0lmPVwiZm9ybUNvbmZpZyAmJiBkZXRhaWxzXCIgW2ZpbGVzXT1cImZpbGVzXCIgW2RhdGFdPVwiZGV0YWlsc1wiIFtjb25maWddPVwiZm9ybUNvbmZpZ1wiIChpbnB1dENoYW5nZSk9XCJpbnB1dENoYW5nZWQoJGV2ZW50KVwiPjwvc3BhLWZvcm0+XHJcblxyXG48ZGl2ICpuZ0lmPVwidGFibGVDb25maWdcIiBjbGFzcz1cIm10LTNcIiBzdHlsZT1cIiBmb250LXNpemU6IDE0cHg7XCI+XHJcbiAgPHNwYS10YWJsZS1pbnRlcm5hbCBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgPjwvc3BhLXRhYmxlLWludGVybmFsPlxyXG48L2Rpdj5cclxuXHJcbjxtYXQtdGFiLWdyb3VwICpuZ0lmPVwidGFibGVDb25maWdzXCI+XHJcblxyXG4gICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IHRibCBvZiB0YWJsZUNvbmZpZ3NcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkxhYmVsPlxyXG4gICAgICAgIDxzcGFuPnt7dGJsLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8c3BhLXRhYmxlLWludGVybmFsIFtjb25maWddPVwidGJsXCIgW2hpZGVUaXRsZV09XCJ0cnVlXCI+PC9zcGEtdGFibGUtaW50ZXJuYWw+XHJcblxyXG4gICAgPC9tYXQtdGFiPlxyXG5cclxuPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuPGRpdj5cclxuPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdjcmVhdGUnICYmIGNyZWF0ZUJ1dHRvblwiIChjbGljayk9XCJjcmVhdGUoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2NyZWF0ZUJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX08L2J1dHRvbj5cclxuPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdlZGl0JyAmJiBlZGl0QnV0dG9uXCIgKGNsaWNrKT1cImVkaXQoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2VkaXRCdXR0b24uZGlzcGxheSA/PyAnU3VibWl0J319PC9idXR0b24+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgZXh0cmFCdXR0b25zXCIgPlxyXG4gIDxidXR0b24gKm5nSWY9XCIhc21hbGxTY3JlZW4gJiYgdGVzdFZpc2libGUoZGV0YWlscyxidG4ubmFtZSlcIiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZyB8fCB0ZXN0RGlzYWJsZWQoZGV0YWlscyxidG4ubmFtZSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogYnRuLmljb24uY29sb3J9XCIgKGNsaWNrKT1cImN1c3RvbShidG4pXCIgY2RrRm9jdXNJbml0aWFsPjxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogYnRuLmljb24uY29sb3J9XCI+e3tidG4uaWNvbi5uYW1lfX08L21hdC1pY29uPnt7YnRuLmRpc3BsYXkgPz8gYnRuLm5hbWV9fTwvYnV0dG9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG48YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZGlhbG9nLWNsb3NlPkNhbmNlbDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIiAqbmdJZj1cInNtYWxsU2NyZWVuXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGV4dHJhQnV0dG9uc1wiPlxyXG4gICAgPGJ1dHRvbiAgKm5nSWY9XCJ0ZXN0VmlzaWJsZShkZXRhaWxzLGJ0bi5uYW1lKVwiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nIHx8IHRlc3REaXNhYmxlZChkZXRhaWxzLGJ0bi5uYW1lKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBidG4uaWNvbi5jb2xvcn1cIiAoY2xpY2spPVwiY3VzdG9tKGJ0bilcIiBjZGtGb2N1c0luaXRpYWw+PG1hdC1pY29uPnt7YnRuLmljb24ubmFtZX19PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbjxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCIgKGNsaWNrKT1cImRlbGV0ZSgpXCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGUhPSdjcmVhdGUnICAmJiBkZWxldGVCdXR0b25cIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcblxyXG5cclxuXHJcbiJdfQ==