@tsi-developpement/tsi-shared-ui 1.10.21 → 1.10.22

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.
@@ -37,11 +37,13 @@ export class TsiFileManagerComponent extends TsiInputBase {
37
37
  this.showFileUpload = true;
38
38
  this.showPreviewButton = true;
39
39
  this.contentHeight = '20rem';
40
+ this.showRemoveButton = false;
40
41
  this.onSelectFileManager = new EventEmitter();
41
42
  this.onClear = new EventEmitter();
42
43
  this.onRemove = new EventEmitter();
43
44
  this.inputFieldChange = new EventEmitter();
44
45
  this.fileNameChange = new EventEmitter();
46
+ this.onDeleteFile = new EventEmitter();
45
47
  this.imageUrl = null;
46
48
  this.fileSizeError = '';
47
49
  /** Set when the inline preview reports a media load error → fall back to the download card. */
@@ -136,6 +138,16 @@ export class TsiFileManagerComponent extends TsiInputBase {
136
138
  this.inputFieldChange.emit(this.inputField);
137
139
  this.fileNameChange.emit(this.fileName);
138
140
  }
141
+ removeFile() {
142
+ this.isDirty = true;
143
+ this.inputField = null;
144
+ this.fileName = '';
145
+ this.imageUrl = null;
146
+ this.resetPreview();
147
+ this.inputFieldChange.emit(this.inputField);
148
+ this.fileNameChange.emit(this.fileName);
149
+ this.onDeleteFile.emit();
150
+ }
139
151
  resetPreview() {
140
152
  this.mimeType = undefined;
141
153
  this.mediaLoadError = false;
@@ -188,11 +200,11 @@ export class TsiFileManagerComponent extends TsiInputBase {
188
200
  return this.mimeType || getMimeTypeFromExtension(getFileExtension(this.fileName));
189
201
  }
190
202
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFileManagerComponent, deps: [{ token: i1.LocalizePipe }, { token: i2.TsiNotificationService }, { token: i0.ChangeDetectorRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFileManagerComponent, selector: "Tsi-File-Manager", inputs: { fileName: "fileName", name: "name", id: "id", accept: "accept", maxFileSize: "maxFileSize", multiple: "multiple", exploreOnDownload: "exploreOnDownload", showUploadButton: "showUploadButton", showCancelButton: "showCancelButton", showDownloadButton: "showDownloadButton", chooseIcon: "chooseIcon", chooseLabel: "chooseLabel", showSelectButton: "showSelectButton", showFileUpload: "showFileUpload", showPreviewButton: "showPreviewButton", contentHeight: "contentHeight" }, outputs: { onSelectFileManager: "onSelectFileManager", onClear: "onClear", onRemove: "onRemove", inputFieldChange: "inputFieldChange", fileNameChange: "fileNameChange" }, usesInheritance: true, ngImport: i0, template: "<!-- <p-fileUpload class=\"file-manager\" #fileUpload [name]=\"name\" [id]=\"id\" [accept]=\"accept\" [maxFileSize]=\"maxFileSize\"\r\n [multiple]=\"multiple\" [showUploadButton]=\"showUploadButton\" [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\" chooseLabel=\" \" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\" class=\"custom-file-upload\" icon=\"pi pi-upload\">\r\n</p-fileUpload>\r\n\r\n<BR>\r\n<div *ngIf=\"showDownloadButton\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n</div> -->\r\n<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i7.TsiFilePreviewComponent, selector: "Tsi-File-Preview", inputs: ["content", "fileName", "mimeType", "mediaMaxWidth"], outputs: ["previewError"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFileManagerComponent, selector: "Tsi-File-Manager", inputs: { fileName: "fileName", name: "name", id: "id", accept: "accept", maxFileSize: "maxFileSize", multiple: "multiple", exploreOnDownload: "exploreOnDownload", showUploadButton: "showUploadButton", showCancelButton: "showCancelButton", showDownloadButton: "showDownloadButton", chooseIcon: "chooseIcon", chooseLabel: "chooseLabel", showSelectButton: "showSelectButton", showFileUpload: "showFileUpload", showPreviewButton: "showPreviewButton", contentHeight: "contentHeight", showRemoveButton: "showRemoveButton" }, outputs: { onSelectFileManager: "onSelectFileManager", onClear: "onClear", onRemove: "onRemove", inputFieldChange: "inputFieldChange", fileNameChange: "fileNameChange", onDeleteFile: "onDeleteFile" }, usesInheritance: true, ngImport: i0, template: "<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"pt-2\" *ngIf=\"showRemoveButton && inputField && !disabled\">\r\n <button pButton type=\"button\" icon=\"pi pi-trash\"\r\n [label]=\"'tsi_file_manager_remove_file' | localize\"\r\n (click)=\"removeFile()\" class=\"p-button-danger h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i7.TsiFilePreviewComponent, selector: "Tsi-File-Preview", inputs: ["content", "fileName", "mimeType", "mediaMaxWidth"], outputs: ["previewError"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None }); }
192
204
  }
193
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFileManagerComponent, decorators: [{
194
206
  type: Component,
195
- args: [{ selector: 'Tsi-File-Manager', encapsulation: ViewEncapsulation.None, template: "<!-- <p-fileUpload class=\"file-manager\" #fileUpload [name]=\"name\" [id]=\"id\" [accept]=\"accept\" [maxFileSize]=\"maxFileSize\"\r\n [multiple]=\"multiple\" [showUploadButton]=\"showUploadButton\" [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\" chooseLabel=\" \" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\" class=\"custom-file-upload\" icon=\"pi pi-upload\">\r\n</p-fileUpload>\r\n\r\n<BR>\r\n<div *ngIf=\"showDownloadButton\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n</div> -->\r\n<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"] }]
207
+ args: [{ selector: 'Tsi-File-Manager', encapsulation: ViewEncapsulation.None, template: "<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"pt-2\" *ngIf=\"showRemoveButton && inputField && !disabled\">\r\n <button pButton type=\"button\" icon=\"pi pi-trash\"\r\n [label]=\"'tsi_file_manager_remove_file' | localize\"\r\n (click)=\"removeFile()\" class=\"p-button-danger h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"] }]
196
208
  }], ctorParameters: () => [{ type: i1.LocalizePipe }, { type: i2.TsiNotificationService }, { type: i0.ChangeDetectorRef }, { type: i0.EnvironmentInjector }], propDecorators: { fileName: [{
197
209
  type: Input
198
210
  }], name: [{
@@ -225,6 +237,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
225
237
  type: Input
226
238
  }], contentHeight: [{
227
239
  type: Input
240
+ }], showRemoveButton: [{
241
+ type: Input
228
242
  }], onSelectFileManager: [{
229
243
  type: Output
230
244
  }], onClear: [{
@@ -235,5 +249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
235
249
  type: Output
236
250
  }], fileNameChange: [{
237
251
  type: Output
252
+ }], onDeleteFile: [{
253
+ type: Output
238
254
  }] } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktZmlsZS1tYW5hZ2VyL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWZpbGUtbWFuYWdlci90c2ktZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTBDLE1BQU0sZUFBZSxDQUFDO0FBRWxJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUd6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVFwSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsWUFBcUQ7SUF1Q2hHOzs7O1FBSUk7SUFFSixZQUNVLFFBQXNCLEVBQ3RCLG1CQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsU0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFMQSxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFx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O2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBFbnZpcm9ubWVudEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgVHNpSW5wdXRCYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3RzaS1iYXNlL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tIFwiLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZVwiO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSB9IGZyb20gXCIuLi8uLi8uLi9lbnVtcy9tb2RhbC1zaXplLWVudW1cIjtcclxuaW1wb3J0IHsgb3BlblRzaUZpbGVQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IGdldEZpbGVFeHRlbnNpb24sIGdldE1lZGlhQ2F0ZWdvcnksIGdldE1pbWVUeXBlRnJvbUV4dGVuc2lvbiB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvZmlsZS1wcmV2aWV3LnV0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLUZpbGUtTWFuYWdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lGaWxlTWFuYWdlckNvbXBvbmVudCBleHRlbmRzIFRzaUlucHV0QmFzZTxzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB8IG51bGw+IHtcclxuICAvLyBASW5wdXQoKSBpbnB1dEZpZWxkOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8dW5kZWZpbmVkIHwgbnVsbDtcclxuICBASW5wdXQoKSBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgYWNjZXB0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gMTA0ODU3NjA7XHJcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBleHBsb3JlT25Eb3dubG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0Rvd25sb2FkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2hvb3NlSWNvbjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgY2hvb3NlTGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHNob3dTZWxlY3RCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dGaWxlVXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93UHJldmlld0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY29udGVudEhlaWdodDogc3RyaW5nID0gJzIwcmVtJztcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0RmlsZU1hbmFnZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5wdXRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlTmFtZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHJcbiAgaW1hZ2VVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBmaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xyXG5cclxuICBmaWxlU2l6ZUVycm9yOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFJlYWwgTUlNRSB0eXBlIGNhcHR1cmVkIGZyb20gdGhlIHNlbGVjdGVkIEZpbGUgKHdoZW4gYXZhaWxhYmxlKS4gKi9cclxuICBtaW1lVHlwZT86IHN0cmluZztcclxuXHJcbiAgLyoqIFNldCB3aGVuIHRoZSBpbmxpbmUgcHJldmlldyByZXBvcnRzIGEgbWVkaWEgbG9hZCBlcnJvciDihpIgZmFsbCBiYWNrIHRvIHRoZSBkb3dubG9hZCBjYXJkLiAqL1xyXG4gIG1lZGlhTG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZpZXdSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIC8qIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNob3dTZWxlY3RCdXR0b24gJiYgdGhpcy5maWxlVXBsb2FkSW5wdXQpIHtcclxuICAgICAgdGhpcy5maWxlVXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfVxyXG4gIH0gKi9cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsZSBjYW4gYmUgcmVuZGVyZWQgaW4gdGhlIGJyb3dzZXIgKGltYWdlL3ZpZGVvL2F1ZGlvL3BkZikuICovXHJcbiAgZ2V0IGNhblByZXZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmlucHV0RmllbGQgJiYgZ2V0TWVkaWFDYXRlZ29yeSh0aGlzLmZpbGVOYW1lKSAhPT0gJ3Vuc3VwcG9ydGVkJztcclxuICB9XHJcblxyXG4gIC8qKiBUcnVlIHdoZW4gdGhlIHNlbGVjdGVkIGZpbGUgY2Fubm90IGJlIHByZXZpZXdlZCBpbmxpbmUuICovXHJcbiAgZ2V0IGlzVW5zdXBwb3J0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZ2V0TWVkaWFDYXRlZ29yeSh0aGlzLmZpbGVOYW1lKSA9PT0gJ3Vuc3VwcG9ydGVkJztcclxuICB9XHJcblxyXG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5saW5lIHByZXZpZXcgY29tcG9uZW50IHJlcG9ydHMgYSBtZWRpYSBsb2FkIGZhaWx1cmUuICovXHJcbiAgb25QcmV2aWV3RXJyb3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lZGlhTG9hZEVycm9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBPcGVuIHRoZSBzZWxlY3RlZCBmaWxlIGluIGEgbWF4aW1pemFibGUgbW9kYWwgdmlhIHRoZSBzaGFyZWQgRGlhbG9nU2VydmljZS4gKi9cclxuICBhc3luYyBvcGVuUHJldmlldygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5jYW5QcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIGhlYWRlcjogdGhpcy5maWxlTmFtZSxcclxuICAgICAgZGF0YTogeyBjb250ZW50OiB0aGlzLmlucHV0RmllbGQsIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLCBtaW1lVHlwZTogdGhpcy5taW1lVHlwZSB9LFxyXG4gICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgIGNvbnRlbnRTdHlsZTogeyBvdmVyZmxvdzogJ2F1dG8nIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fcHJldmlld1JlZiA9IGF3YWl0IG9wZW5Uc2lGaWxlUHJldmlld0NvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZik7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IGV2ZW50LmZpbGVzO1xyXG4gICAgLy8gdGhpcy5jb252ZXJ0RmlsZVRvQmFzZTY0KGZpbGVzWzBdKS50aGVuKChiYXNlNjRTdHJpbmc6IHN0cmluZykgPT4ge1xyXG4gICAgLy8gdGhpcy5pbnB1dEZpZWxkID0gYmFzZTY0U3RyaW5nO1xyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLm1lZGlhTG9hZEVycm9yID0gZmFsc2U7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5pbnB1dEZpZWxkID0gKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZXNbMF0pO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IGZpbGVzWzBdLm5hbWU7XHJcbiAgICAvLyBQcmVmZXIgdGhlIGJyb3dzZXItZGV0ZWN0ZWQgTUlNRSB0eXBlOyBmYWxsIGJhY2sgdG8gdGhlIGV4dGVuc2lvbiBtYXAuXHJcbiAgICB0aGlzLm1pbWVUeXBlID0gZmlsZXNbMF0udHlwZSB8fCBnZXRNaW1lVHlwZUZyb21FeHRlbnNpb24oZ2V0RmlsZUV4dGVuc2lvbihmaWxlc1swXS5uYW1lKSk7XHJcbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5maWxlTmFtZSE7XHJcblxyXG4gICAgaWYgKGZpbGVzWzBdLnNpemUgPiB0aGlzLm1heEZpbGVTaXplKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKGBcclxuICAgICAgICAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKFwidHNpX2ZpbGVfdXBsb2FkX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2RldGFpbF8xXCIpfSBcclxuICAgICAgICAkeyhmaWxlc1swXS5zaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gXHJcbiAgICAgICAgJHt0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInRzaV9maWxlX3VwbG9hZF9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9kZXRhaWxfMlwiKX1cclxuICAgICAgICAkeyh0aGlzLm1heEZpbGVTaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gTW9gLFxyXG4gICAgICAgIHRoaXMubG9jYWxpemUudHJhbnNmb3JtKFwidHNpX2ZpbGVfdXBsb2FkX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX3RpdGxlXCIpKVxyXG5cclxuICAgICAgdGhpcy5pc0RpcnR5ID0gdGhpcy5pbnB1dEZpZWxkICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlucHV0RmllbGQgIT0gbnVsbFxyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSB1bmRlZmluZWRcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy90aGlzLmZpbGVOYW1lID0gZmlsZXMubWFwKChmaWxlOiBhbnkpID0+IGZpbGUubmFtZSkuam9pbignLCAnKTtcclxuICAgICAgdGhpcy5vblNlbGVjdEZpbGVNYW5hZ2VyLmVtaXQoeyBldmVudCwgZmlsZXMsIGlucHV0RmllbGQ6IHRoaXMuaW5wdXRGaWVsZCwgZmlsZU5hbWU6IGZpbGVOYW1lIH0pO1xyXG4gICAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2UuZW1pdCh0aGlzLmlucHV0RmllbGQpO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lQ2hhbmdlLmVtaXQodGhpcy5maWxlTmFtZSk7XHJcbiAgICB9LCAyMDApO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBvbkZpbGVDbGVhcigpIHtcclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICAgIHRoaXMuaW5wdXRGaWVsZCA9IG51bGw7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gJyc7XHJcbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcclxuICAgIHRoaXMucmVzZXRQcmV2aWV3KCk7XHJcbiAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2UuZW1pdCh0aGlzLmlucHV0RmllbGQpO1xyXG4gICAgdGhpcy5maWxlTmFtZUNoYW5nZS5lbWl0KHRoaXMuZmlsZU5hbWUpO1xyXG4gICAgdGhpcy5vbkNsZWFyLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uRmlsZVJlbW92ZShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQuZmlsZTtcclxuICAgIC8vdGhpcy5pbnB1dEZpZWxkID0gdGhpcy5pbnB1dEZpZWxkLmZpbHRlcigoZjogYW55KSA9PiBmICE9PSBmaWxlKTtcclxuICAgIC8vdGhpcy5maWxlTmFtZSA9IHRoaXMuaW5wdXRGaWVsZC5tYXAoKGY6IGFueSkgPT4gZi5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxyXG4gICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcclxuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldFByZXZpZXcoKTtcclxuICAgIHRoaXMub25SZW1vdmUuZW1pdChmaWxlKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgICB0aGlzLmZpbGVOYW1lQ2hhbmdlLmVtaXQodGhpcy5maWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UHJldmlldygpIHtcclxuICAgIHRoaXMubWltZVR5cGUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm1lZGlhTG9hZEVycm9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0RmlsZVRvQmFzZTY0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0U3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7IC8vIENvbnZlcnNpb24gZXhwbGljaXRlIGVuIHN0cmluZ1xyXG4gICAgICAgIHJlc29sdmUoYmFzZTY0U3RyaW5nKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5wdXRGaWVsZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IHRoaXMuYmFzZTY0VG9CbG9iKHRoaXMuaW5wdXRGaWVsZCBhcyBzdHJpbmcsIHRoaXMucmVzb2x2ZWRNaW1lVHlwZSk7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSB0aGlzLmZpbGVOYW1lITtcclxuICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAvL3dpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICAvKiogRGVjb2RlIGEgYmFzZTY0IHN0cmluZyBpbnRvIGEgQmxvYiB0YWdnZWQgd2l0aCB0aGUgZ2l2ZW4gTUlNRSB0eXBlLiAqL1xyXG4gIHByaXZhdGUgYmFzZTY0VG9CbG9iKGJhc2U2NDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKTogQmxvYiB7XHJcbiAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0KTtcclxuICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBtaW1lVHlwZSB9KTtcclxuICB9XHJcblxyXG4gIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmJ5dGVMZW5ndGg7IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnICsgYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1JTUUgdHlwZSB1c2VkIGZvciBkb3dubG9hZCDigJQgY2FwdHVyZWQgZnJvbSB0aGUgRmlsZSwgZWxzZSBkZXJpdmVkIGZyb20gdGhlIGV4dGVuc2lvbi4gKi9cclxuICBnZXQgcmVzb2x2ZWRNaW1lVHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWltZVR5cGUgfHwgZ2V0TWltZVR5cGVGcm9tRXh0ZW5zaW9uKGdldEZpbGVFeHRlbnNpb24odGhpcy5maWxlTmFtZSkpO1xyXG4gIH1cclxufSIsIjwhLS0gPHAtZmlsZVVwbG9hZCBjbGFzcz1cImZpbGUtbWFuYWdlclwiICNmaWxlVXBsb2FkIFtuYW1lXT1cIm5hbWVcIiBbaWRdPVwiaWRcIiBbYWNjZXB0XT1cImFjY2VwdFwiIFttYXhGaWxlU2l6ZV09XCJtYXhGaWxlU2l6ZVwiXHJcbiAgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW3Nob3dVcGxvYWRCdXR0b25dPVwic2hvd1VwbG9hZEJ1dHRvblwiIFtzaG93Q2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxyXG4gIGNob29zZUljb249XCJwaSBwaS11cGxvYWRcIiBjaG9vc2VMYWJlbD1cIiBcIiAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0KCRldmVudClcIiAob25DbGVhcik9XCJvbkZpbGVDbGVhcigpXCJcclxuICAob25SZW1vdmUpPVwib25GaWxlUmVtb3ZlKCRldmVudClcIiBjbGFzcz1cImN1c3RvbS1maWxlLXVwbG9hZFwiIGljb249XCJwaSBwaS11cGxvYWRcIj5cclxuPC9wLWZpbGVVcGxvYWQ+XHJcblxyXG48QlI+XHJcbjxkaXYgKm5nSWY9XCJzaG93RG93bmxvYWRCdXR0b25cIj5cclxuICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZEZpbGUoKVwiIGNsYXNzPVwiaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj4gLS0+XHJcbjxkaXYgY2xhc3M9XCJ7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCI+XHJcblxyXG4gIDxwLWZpbGVVcGxvYWQgY2xhc3M9XCJmaWxlLW1hbmFnZXIgY3VzdG9tLWZpbGUtdXBsb2FkIFwiIFxyXG4gICAgI2ZpbGVVcGxvYWRcclxuICAgIFtuYW1lXT1cIm5hbWVcIlxyXG4gICAgW2lkXT1cImlkXCIgXHJcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiIFxyXG4gICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJzaG93VXBsb2FkQnV0dG9uXCIgXHJcbiAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJzaG93Q2FuY2VsQnV0dG9uXCJcclxuICAgIGNob29zZUljb249XCJwaSBwaS11cGxvYWRcIlxyXG4gICAgY2hvb3NlTGFiZWw9IFwiVXBsb2FkXCIgXHJcbiAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0KCRldmVudClcIlxyXG4gICAgKG9uQ2xlYXIpPVwib25GaWxlQ2xlYXIoKVwiXHJcbiAgICAob25SZW1vdmUpPVwib25GaWxlUmVtb3ZlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgXHJcbiAgICBcclxuICAgIFxyXG4gICAgPCEtLSA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS11cGxvYWRcIiBjbGFzcz1cIm1sLTQgaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtZmlsZXM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0c2ktZmlsZS1jb250ZW50XCIgW3N0eWxlLmhlaWdodF09XCJjb250ZW50SGVpZ2h0XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkXCIgY2xhc3M9XCJ0c2ktZmlsZS1wcmV2aWV3XCI+XHJcbiAgICAgICAgPFRzaS1GaWxlLVByZXZpZXcgW2NvbnRlbnRdPVwiaW5wdXRGaWVsZFwiIFtmaWxlTmFtZV09XCJmaWxlTmFtZVwiIFttaW1lVHlwZV09XCJtaW1lVHlwZVwiXHJcbiAgICAgICAgICBtZWRpYU1heFdpZHRoPVwiMTVyZW1cIiAocHJldmlld0Vycm9yKT1cIm9uUHJldmlld0Vycm9yKClcIj5cclxuICAgICAgICA8L1RzaS1GaWxlLVByZXZpZXc+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImZpbGVOYW1lICE9IHVuZGVmaW5lZCAmJiBmaWxlTmFtZSAhPSBudWxsXCI+XHJcbiAgICAgICAgPHA+e3sgJ3RzaV9maWxlX21hbmFnZXJfZmlsZV9uYW1lJyB8IGxvY2FsaXplIH19OiB7eyBmaWxlTmFtZSB9fTwvcD5cclxuICAgICAgICA8cD57eyAndHNpX2ZpbGVfbWFuYWdlcl9maWxlX2V4dGVuc2lvbicgfCBsb2NhbGl6ZSB9fToge3sgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSkgfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInBiLTIgcHQtMlwiICpuZ0lmPVwic2hvd1ByZXZpZXdCdXR0b24gJiYgY2FuUHJldmlld1wiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWV5ZVwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiJ3RzaV9maWxlX21hbmFnZXJfcHJldmlldycgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblByZXZpZXcoKVwiIGNsYXNzPVwiaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkICYmIChpc1Vuc3VwcG9ydGVkIHx8IG1lZGlhTG9hZEVycm9yKVwiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWRvd25sb2FkXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIndHNpX2ZpbGVfbWFuYWdlcl9kb3dubG9hZCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRGaWxlKClcIiBjbGFzcz1cImgtMnJlbSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZmlsZU5hbWUgIT0gdW5kZWZpbmVkICYmIHNob3dEb3dubG9hZEJ1dHRvbiAmJiAhaXNVbnN1cHBvcnRlZCAmJiAhbWVkaWFMb2FkRXJyb3JcIj5cclxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZEZpbGUoKVwiIGNsYXNzPVwiIGgtMnJlbSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIFxyXG4gIDwvcC1maWxlVXBsb2FkPlxyXG4gIFxyXG48L2Rpdj4iXX0=
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktZmlsZS1tYW5hZ2VyL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWZpbGUtbWFuYWdlci90c2ktZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTBDLE1BQU0sZUFBZSxDQUFDO0FBRWxJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUd6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVFwSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsWUFBcUQ7SUF5Q2hHOzs7O1FBSUk7SUFFSixZQUNVLFFBQXNCLEVBQ3RCLG1CQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsU0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFMQSxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFx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LENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDOytHQXRPVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixneUJDZnBDLDR3RkFtRU07OzRGRHBETyx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7d0xBSTVCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVudmlyb25tZW50SW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSBcInByaW1lbmcvZHluYW1pY2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBUc2lJbnB1dEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHNpLWJhc2UvdHNpLWlucHV0LWJhc2UvdHNpLWlucHV0LWJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gXCIuLi8uLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlXCI7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNb2RhbFNpemVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL2VudW1zL21vZGFsLXNpemUtZW51bVwiO1xyXG5pbXBvcnQgeyBvcGVuVHNpRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgZ2V0RmlsZUV4dGVuc2lvbiwgZ2V0TWVkaWFDYXRlZ29yeSwgZ2V0TWltZVR5cGVGcm9tRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9maWxlLXByZXZpZXcudXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktRmlsZS1NYW5hZ2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZpbGVNYW5hZ2VyQ29tcG9uZW50IGV4dGVuZHMgVHNpSW5wdXRCYXNlPHN0cmluZyB8IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHwgbnVsbD4ge1xyXG4gIC8vIEBJbnB1dCgpIGlucHV0RmllbGQ6IHN0cmluZyB8IEFycmF5QnVmZmVyIHx1bmRlZmluZWQgfCBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAxMDQ4NTc2MDtcclxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGV4cGxvcmVPbkRvd25sb2FkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1VwbG9hZEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RG93bmxvYWRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjaG9vc2VJY29uOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBjaG9vc2VMYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgc2hvd1NlbGVjdEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0ZpbGVVcGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dQcmV2aWV3QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjb250ZW50SGVpZ2h0OiBzdHJpbmcgPSAnMjByZW0nO1xyXG4gIEBJbnB1dCgpIHNob3dSZW1vdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0RmlsZU1hbmFnZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5wdXRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlTmFtZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZUZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cclxuICBpbWFnZVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGZpbGVFeHRlbnNpb24/OiBzdHJpbmc7XHJcblxyXG4gIGZpbGVTaXplRXJyb3I6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogUmVhbCBNSU1FIHR5cGUgY2FwdHVyZWQgZnJvbSB0aGUgc2VsZWN0ZWQgRmlsZSAod2hlbiBhdmFpbGFibGUpLiAqL1xyXG4gIG1pbWVUeXBlPzogc3RyaW5nO1xyXG5cclxuICAvKiogU2V0IHdoZW4gdGhlIGlubGluZSBwcmV2aWV3IHJlcG9ydHMgYSBtZWRpYSBsb2FkIGVycm9yIOKGkiBmYWxsIGJhY2sgdG8gdGhlIGRvd25sb2FkIGNhcmQuICovXHJcbiAgbWVkaWFMb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfcHJldmlld1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgLyogbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1NlbGVjdEJ1dHRvbiAmJiB0aGlzLmZpbGVVcGxvYWRJbnB1dCkge1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWRJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICB9XHJcbiAgfSAqL1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3JcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKiogVHJ1ZSB3aGVuIHRoZSBzZWxlY3RlZCBmaWxlIGNhbiBiZSByZW5kZXJlZCBpbiB0aGUgYnJvd3NlciAoaW1hZ2UvdmlkZW8vYXVkaW8vcGRmKS4gKi9cclxuICBnZXQgY2FuUHJldmlldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuaW5wdXRGaWVsZCAmJiBnZXRNZWRpYUNhdGVnb3J5KHRoaXMuZmlsZU5hbWUpICE9PSAndW5zdXBwb3J0ZWQnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsZSBjYW5ub3QgYmUgcHJldmlld2VkIGlubGluZS4gKi9cclxuICBnZXQgaXNVbnN1cHBvcnRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZXRNZWRpYUNhdGVnb3J5KHRoaXMuZmlsZU5hbWUpID09PSAndW5zdXBwb3J0ZWQnO1xyXG4gIH1cclxuXHJcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbmxpbmUgcHJldmlldyBjb21wb25lbnQgcmVwb3J0cyBhIG1lZGlhIGxvYWQgZmFpbHVyZS4gKi9cclxuICBvblByZXZpZXdFcnJvcigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVkaWFMb2FkRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9wZW4gdGhlIHNlbGVjdGVkIGZpbGUgaW4gYSBtYXhpbWl6YWJsZSBtb2RhbCB2aWEgdGhlIHNoYXJlZCBEaWFsb2dTZXJ2aWNlLiAqL1xyXG4gIGFzeW5jIG9wZW5QcmV2aWV3KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmNhblByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgaGVhZGVyOiB0aGlzLmZpbGVOYW1lLFxyXG4gICAgICBkYXRhOiB7IGNvbnRlbnQ6IHRoaXMuaW5wdXRGaWVsZCwgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsIG1pbWVUeXBlOiB0aGlzLm1pbWVUeXBlIH0sXHJcbiAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgY29udGVudFN0eWxlOiB7IG92ZXJmbG93OiAnYXV0bycgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9wcmV2aWV3UmVmID0gYXdhaXQgb3BlblRzaUZpbGVQcmV2aWV3Q29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIG9uRmlsZVNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaWxlczogRmlsZVtdID0gZXZlbnQuZmlsZXM7XHJcbiAgICAvLyB0aGlzLmNvbnZlcnRGaWxlVG9CYXNlNjQoZmlsZXNbMF0pLnRoZW4oKGJhc2U2NFN0cmluZzogc3RyaW5nKSA9PiB7XHJcbiAgICAvLyB0aGlzLmlucHV0RmllbGQgPSBiYXNlNjRTdHJpbmc7XHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMubWVkaWFMb2FkRXJyb3IgPSBmYWxzZTtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSAocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KCcsJylbMV07XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlc1swXSk7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gZmlsZXNbMF0ubmFtZTtcclxuICAgIC8vIFByZWZlciB0aGUgYnJvd3Nlci1kZXRlY3RlZCBNSU1FIHR5cGU7IGZhbGwgYmFjayB0byB0aGUgZXh0ZW5zaW9uIG1hcC5cclxuICAgIHRoaXMubWltZVR5cGUgPSBmaWxlc1swXS50eXBlIHx8IGdldE1pbWVUeXBlRnJvbUV4dGVuc2lvbihnZXRGaWxlRXh0ZW5zaW9uKGZpbGVzWzBdLm5hbWUpKTtcclxuICAgIGNvbnN0IGZpbGVOYW1lOiBzdHJpbmcgPSB0aGlzLmZpbGVOYW1lITtcclxuXHJcbiAgICBpZiAoZmlsZXNbMF0uc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oYFxyXG4gICAgICAgICR7dGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oXCJ0c2lfZmlsZV91cGxvYWRfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfZGV0YWlsXzFcIil9IFxyXG4gICAgICAgICR7KGZpbGVzWzBdLnNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBcclxuICAgICAgICAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKFwidHNpX2ZpbGVfdXBsb2FkX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2RldGFpbF8yXCIpfVxyXG4gICAgICAgICR7KHRoaXMubWF4RmlsZVNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNb2AsXHJcbiAgICAgICAgdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oXCJ0c2lfZmlsZV91cGxvYWRfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfdGl0bGVcIikpXHJcblxyXG4gICAgICB0aGlzLmlzRGlydHkgPSB0aGlzLmlucHV0RmllbGQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaW5wdXRGaWVsZCAhPSBudWxsXHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IHVuZGVmaW5lZFxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvL3RoaXMuZmlsZU5hbWUgPSBmaWxlcy5tYXAoKGZpbGU6IGFueSkgPT4gZmlsZS5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgICB0aGlzLm9uU2VsZWN0RmlsZU1hbmFnZXIuZW1pdCh7IGV2ZW50LCBmaWxlcywgaW5wdXRGaWVsZDogdGhpcy5pbnB1dEZpZWxkLCBmaWxlTmFtZTogZmlsZU5hbWUgfSk7XHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWVDaGFuZ2UuZW1pdCh0aGlzLmZpbGVOYW1lKTtcclxuICAgIH0sIDIwMCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIG9uRmlsZUNsZWFyKCkge1xyXG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxyXG4gICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcclxuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldFByZXZpZXcoKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgICB0aGlzLmZpbGVOYW1lQ2hhbmdlLmVtaXQodGhpcy5maWxlTmFtZSk7XHJcbiAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25GaWxlUmVtb3ZlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC5maWxlO1xyXG4gICAgLy90aGlzLmlucHV0RmllbGQgPSB0aGlzLmlucHV0RmllbGQuZmlsdGVyKChmOiBhbnkpID0+IGYgIT09IGZpbGUpO1xyXG4gICAgLy90aGlzLmZpbGVOYW1lID0gdGhpcy5pbnB1dEZpZWxkLm1hcCgoZjogYW55KSA9PiBmLm5hbWUpLmpvaW4oJywgJyk7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICB0aGlzLmlucHV0RmllbGQgPSBudWxsO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XHJcbiAgICB0aGlzLnJlc2V0UHJldmlldygpO1xyXG4gICAgdGhpcy5vblJlbW92ZS5lbWl0KGZpbGUpO1xyXG4gICAgdGhpcy5pbnB1dEZpZWxkQ2hhbmdlLmVtaXQodGhpcy5pbnB1dEZpZWxkKTtcclxuICAgIHRoaXMuZmlsZU5hbWVDaGFuZ2UuZW1pdCh0aGlzLmZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZpbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICB0aGlzLmlucHV0RmllbGQgPSBudWxsO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XHJcbiAgICB0aGlzLnJlc2V0UHJldmlldygpO1xyXG4gICAgdGhpcy5pbnB1dEZpZWxkQ2hhbmdlLmVtaXQodGhpcy5pbnB1dEZpZWxkKTtcclxuICAgIHRoaXMuZmlsZU5hbWVDaGFuZ2UuZW1pdCh0aGlzLmZpbGVOYW1lKTtcclxuICAgIHRoaXMub25EZWxldGVGaWxlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRQcmV2aWV3KCkge1xyXG4gICAgdGhpcy5taW1lVHlwZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubWVkaWFMb2FkRXJyb3IgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRGaWxlVG9CYXNlNjQoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBiYXNlNjRTdHJpbmcgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZzsgLy8gQ29udmVyc2lvbiBleHBsaWNpdGUgZW4gc3RyaW5nXHJcbiAgICAgICAgcmVzb2x2ZShiYXNlNjRTdHJpbmcpO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRmlsZSgpIHtcclxuICAgIGlmICghdGhpcy5pbnB1dEZpZWxkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBibG9iID0gdGhpcy5iYXNlNjRUb0Jsb2IodGhpcy5pbnB1dEZpZWxkIGFzIHN0cmluZywgdGhpcy5yZXNvbHZlZE1pbWVUeXBlKTtcclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IHRoaXMuZmlsZU5hbWUhO1xyXG4gICAgYS5jbGljaygpO1xyXG5cclxuICAgIC8vd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIC8qKiBEZWNvZGUgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBCbG9iIHRhZ2dlZCB3aXRoIHRoZSBnaXZlbiBNSU1FIHR5cGUuICovXHJcbiAgcHJpdmF0ZSBiYXNlNjRUb0Jsb2IoYmFzZTY0OiBzdHJpbmcsIG1pbWVUeXBlOiBzdHJpbmcpOiBCbG9iIHtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjQpO1xyXG4gICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6IG1pbWVUeXBlIH0pO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCcgKyBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICAvKiogTUlNRSB0eXBlIHVzZWQgZm9yIGRvd25sb2FkIOKAlCBjYXB0dXJlZCBmcm9tIHRoZSBGaWxlLCBlbHNlIGRlcml2ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uLiAqL1xyXG4gIGdldCByZXNvbHZlZE1pbWVUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lVHlwZSB8fCBnZXRNaW1lVHlwZUZyb21FeHRlbnNpb24oZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmZpbGVOYW1lKSk7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cInt7dmFsaWRhdGlvblN0YXR1c0Nzc0NsYXNzfX1cIj5cclxuXHJcbiAgPHAtZmlsZVVwbG9hZCBjbGFzcz1cImZpbGUtbWFuYWdlciBjdXN0b20tZmlsZS11cGxvYWQgXCIgXHJcbiAgICAjZmlsZVVwbG9hZFxyXG4gICAgW25hbWVdPVwibmFtZVwiXHJcbiAgICBbaWRdPVwiaWRcIiBcclxuICAgIFthY2NlcHRdPVwiYWNjZXB0XCIgXHJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cInNob3dVcGxvYWRCdXR0b25cIiBcclxuICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxyXG4gICAgY2hvb3NlSWNvbj1cInBpIHBpLXVwbG9hZFwiXHJcbiAgICBjaG9vc2VMYWJlbD0gXCJVcGxvYWRcIiBcclxuICAgIChvblNlbGVjdCk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAob25DbGVhcik9XCJvbkZpbGVDbGVhcigpXCJcclxuICAgIChvblJlbW92ZSk9XCJvbkZpbGVSZW1vdmUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICBcclxuICAgIFxyXG4gICAgXHJcbiAgICA8IS0tIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXVwbG9hZFwiIGNsYXNzPVwibWwtNCBoLTJyZW0gdy1mdWxsIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiIGxldC1maWxlcz5cclxuICAgICAgPGRpdiBjbGFzcz1cInRzaS1maWxlLWNvbnRlbnRcIiBbc3R5bGUuaGVpZ2h0XT1cImNvbnRlbnRIZWlnaHRcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlucHV0RmllbGRcIiBjbGFzcz1cInRzaS1maWxlLXByZXZpZXdcIj5cclxuICAgICAgICA8VHNpLUZpbGUtUHJldmlldyBbY29udGVudF09XCJpbnB1dEZpZWxkXCIgW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCIgW21pbWVUeXBlXT1cIm1pbWVUeXBlXCJcclxuICAgICAgICAgIG1lZGlhTWF4V2lkdGg9XCIxNXJlbVwiIChwcmV2aWV3RXJyb3IpPVwib25QcmV2aWV3RXJyb3IoKVwiPlxyXG4gICAgICAgIDwvVHNpLUZpbGUtUHJldmlldz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZmlsZU5hbWUgIT0gdW5kZWZpbmVkICYmIGZpbGVOYW1lICE9IG51bGxcIj5cclxuICAgICAgICA8cD57eyAndHNpX2ZpbGVfbWFuYWdlcl9maWxlX25hbWUnIHwgbG9jYWxpemUgfX06IHt7IGZpbGVOYW1lIH19PC9wPlxyXG4gICAgICAgIDxwPnt7ICd0c2lfZmlsZV9tYW5hZ2VyX2ZpbGVfZXh0ZW5zaW9uJyB8IGxvY2FsaXplIH19OiB7eyBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGItMiBwdC0yXCIgKm5nSWY9XCJzaG93UHJldmlld0J1dHRvbiAmJiBjYW5QcmV2aWV3XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZXllXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIndHNpX2ZpbGVfbWFuYWdlcl9wcmV2aWV3JyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlldygpXCIgY2xhc3M9XCJoLTJyZW0gdy1mdWxsIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImlucHV0RmllbGQgJiYgKGlzVW5zdXBwb3J0ZWQgfHwgbWVkaWFMb2FkRXJyb3IpXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZG93bmxvYWRcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIid0c2lfZmlsZV9tYW5hZ2VyX2Rvd25sb2FkJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoKVwiIGNsYXNzPVwiaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlTmFtZSAhPSB1bmRlZmluZWQgJiYgc2hvd0Rvd25sb2FkQnV0dG9uICYmICFpc1Vuc3VwcG9ydGVkICYmICFtZWRpYUxvYWRFcnJvclwiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWRvd25sb2FkXCIgKGNsaWNrKT1cImRvd25sb2FkRmlsZSgpXCIgY2xhc3M9XCIgaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwdC0yXCIgKm5nSWY9XCJzaG93UmVtb3ZlQnV0dG9uICYmIGlucHV0RmllbGQgJiYgIWRpc2FibGVkXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIid0c2lfZmlsZV9tYW5hZ2VyX3JlbW92ZV9maWxlJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKClcIiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBoLTJyZW0gdy1mdWxsIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuICA8L3AtZmlsZVVwbG9hZD5cclxuICBcclxuPC9kaXY+Il19
@@ -189,12 +189,12 @@ export class TsiUploadFicheComponent extends TsiFormComponentBaseComponent {
189
189
  reader.readAsArrayBuffer(file);
190
190
  }
191
191
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiUploadFicheComponent, deps: [{ token: i1.FichierService }, { token: i2.ErrorResponseManagerService }, { token: i3.DynamicDialogRef }, { token: i3.DynamicDialogConfig }, { token: i2.TsiNotificationService }, { token: i2.TsiConfirmationService }, { token: i2.DialogDataService }], target: i0.ɵɵFactoryTarget.Component }); }
192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiUploadFicheComponent, selector: "app-tsi-upload-fiche", outputs: { onSave: "onSave" }, providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"'upload_fichier' | localize \" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TypeFichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [listSourceUrl]=\"typeFichierListUrl\" [(bind)]=\"fichier.typeFichier\"\r\n id-field=\"uid\" [isFiltered]=\"true\" label-field=\"libelle\" \r\n [elementSourceUrl]=\"administrationEndpoints.getTypeFichierMinimal\"\r\n [businessClass]=\"businessClassNames.TypeFichier\"\r\n >\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TableLiee'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'tableLiee'\" [(inputField)]=\"fichier.tableLiee\"\r\n [disabled]=\"isDisable\"></Tsi-Text-Box>\r\n <!-- <Tsi-Search-Combo\r\n class=\"col-6\"\r\n [(bind)]=\"fichier.tableLiee\"\r\n id-field=\"id\"\r\n label-field=\"value\"\r\n (datasource-loaded)=\"onDataLoaded()\">\r\n </Tsi-Search-Combo> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Nom'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'nom'\" [(inputField)]=\"fichier.nom\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_DateFichier'\"></Tsi-Label>\r\n <Tsi-Date-Picker class=\"col-8\" [inputName]=\"'dateFichier'\"\r\n [(inputField)]=\"fichier.dateFichier\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Version'\"></Tsi-Label>\r\n <Tsi-Integer class=\"col-8\" [inputName]=\"'version'\" [(inputField)]=\"fichier.version\"\r\n [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Objet'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-10\" [inputName]=\"'Objet'\" [(inputField)]=\"fichier.objet\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Description'\"></Tsi-Label>\r\n <Tsi-Text-Area class=\"col-10\" [inputName]=\"'description'\" [(inputField)]=\"fichier.description\" [rows]=\"5\"\r\n [cols]=\"5\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n\r\n <Tsi-Label for=\"isFileStorage\" class=\"col-1\" [labelValue]=\"'parambase_param_fichier_isFileStorage'\"></Tsi-Label>\r\n <Tsi-CheckBox id=\"isFileStorage\" class=\"col-5\" [isBinary]=\"true\"\r\n [inputName]=\"'isFileStorage'\" [disabled]=\"true\" [inputField]=\"fichier.isFileStorage\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <div class=\"col-11\">\r\n <Tsi-File-Manager \r\n [showFileUpload]=\"true\" \r\n [(inputField)]=\"fichier.contenu\"\r\n [(fileName)]=\"fichier.nomFichierComplet\" \r\n name=\"fileFichier\" \r\n id=\"fileUploading\" \r\n inputName=\"contenu\" \r\n accept=\"\"\r\n [maxFileSize]=\"10485760\" \r\n [multiple]=\"false\" \r\n [disabled]=\"isEditMode()\"\r\n [showDownloadButton]=\"true\"\r\n [showCancelButton]=\"false\"\r\n [showUploadButton]=\"false\" \r\n [exploreOnDownload]=\"true\"\r\n (onSelectFileManager)=\"onFileSelected($event)\"\r\n ></Tsi-File-Manager>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n <!-- <p-fileUpload #fileUploadFichier name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n [maxFileSize]=\"1000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\" [showUploadButton]=\"false\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload> -->\r\n\r\n\r\n </div>\r\n </fieldset>\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "component", type: i4.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i5.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i6.TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: ["required", "showTime", "showButtonBar"], outputs: ["inputFieldChange"] }, { kind: "component", type: i7.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i8.TsiTextAreaComponent, selector: "Tsi-Text-Area", inputs: ["rows", "cols"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i9.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i10.TsiFileManagerComponent, selector: "Tsi-File-Manager", inputs: ["fileName", "name", "id", "accept", "maxFileSize", "multiple", "exploreOnDownload", "showUploadButton", "showCancelButton", "showDownloadButton", "chooseIcon", "chooseLabel", "showSelectButton", "showFileUpload", "showPreviewButton", "contentHeight"], outputs: ["onSelectFileManager", "onClear", "onRemove", "inputFieldChange", "fileNameChange"] }, { kind: "component", type: i11.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i12.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i13.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i14.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "showManageWorkflowButton", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "openWorkflow", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i15.LocalizePipe, name: "localize" }] }); }
192
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiUploadFicheComponent, selector: "app-tsi-upload-fiche", outputs: { onSave: "onSave" }, providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"'upload_fichier' | localize \" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TypeFichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [listSourceUrl]=\"typeFichierListUrl\" [(bind)]=\"fichier.typeFichier\"\r\n id-field=\"uid\" [isFiltered]=\"true\" label-field=\"libelle\" \r\n [elementSourceUrl]=\"administrationEndpoints.getTypeFichierMinimal\"\r\n [businessClass]=\"businessClassNames.TypeFichier\"\r\n >\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TableLiee'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'tableLiee'\" [(inputField)]=\"fichier.tableLiee\"\r\n [disabled]=\"isDisable\"></Tsi-Text-Box>\r\n <!-- <Tsi-Search-Combo\r\n class=\"col-6\"\r\n [(bind)]=\"fichier.tableLiee\"\r\n id-field=\"id\"\r\n label-field=\"value\"\r\n (datasource-loaded)=\"onDataLoaded()\">\r\n </Tsi-Search-Combo> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Nom'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'nom'\" [(inputField)]=\"fichier.nom\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_DateFichier'\"></Tsi-Label>\r\n <Tsi-Date-Picker class=\"col-8\" [inputName]=\"'dateFichier'\"\r\n [(inputField)]=\"fichier.dateFichier\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Version'\"></Tsi-Label>\r\n <Tsi-Integer class=\"col-8\" [inputName]=\"'version'\" [(inputField)]=\"fichier.version\"\r\n [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Objet'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-10\" [inputName]=\"'Objet'\" [(inputField)]=\"fichier.objet\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Description'\"></Tsi-Label>\r\n <Tsi-Text-Area class=\"col-10\" [inputName]=\"'description'\" [(inputField)]=\"fichier.description\" [rows]=\"5\"\r\n [cols]=\"5\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n\r\n <Tsi-Label for=\"isFileStorage\" class=\"col-1\" [labelValue]=\"'parambase_param_fichier_isFileStorage'\"></Tsi-Label>\r\n <Tsi-CheckBox id=\"isFileStorage\" class=\"col-5\" [isBinary]=\"true\"\r\n [inputName]=\"'isFileStorage'\" [disabled]=\"true\" [inputField]=\"fichier.isFileStorage\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <div class=\"col-11\">\r\n <Tsi-File-Manager \r\n [showFileUpload]=\"true\" \r\n [(inputField)]=\"fichier.contenu\"\r\n [(fileName)]=\"fichier.nomFichierComplet\" \r\n name=\"fileFichier\" \r\n id=\"fileUploading\" \r\n inputName=\"contenu\" \r\n accept=\"\"\r\n [maxFileSize]=\"10485760\" \r\n [multiple]=\"false\" \r\n [disabled]=\"isDeleteMode() || isConsultMode()\"\r\n [showDownloadButton]=\"true\"\r\n [showCancelButton]=\"true\"\r\n [showUploadButton]=\"false\" \r\n [exploreOnDownload]=\"true\"\r\n [showRemoveButton]=\"isEditMode()\"\r\n (onSelectFileManager)=\"onFileSelected($event)\"\r\n ></Tsi-File-Manager>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n <!-- <p-fileUpload #fileUploadFichier name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n [maxFileSize]=\"1000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\" [showUploadButton]=\"false\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload> -->\r\n\r\n\r\n </div>\r\n </fieldset>\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "component", type: i4.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i5.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i6.TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: ["required", "showTime", "showButtonBar"], outputs: ["inputFieldChange"] }, { kind: "component", type: i7.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i8.TsiTextAreaComponent, selector: "Tsi-Text-Area", inputs: ["rows", "cols"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i9.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i10.TsiFileManagerComponent, selector: "Tsi-File-Manager", inputs: ["fileName", "name", "id", "accept", "maxFileSize", "multiple", "exploreOnDownload", "showUploadButton", "showCancelButton", "showDownloadButton", "chooseIcon", "chooseLabel", "showSelectButton", "showFileUpload", "showPreviewButton", "contentHeight", "showRemoveButton"], outputs: ["onSelectFileManager", "onClear", "onRemove", "inputFieldChange", "fileNameChange", "onDeleteFile"] }, { kind: "component", type: i11.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i12.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i13.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i14.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "showManageWorkflowButton", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "openWorkflow", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i15.LocalizePipe, name: "localize" }] }); }
193
193
  }
194
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiUploadFicheComponent, decorators: [{
195
195
  type: Component,
196
- args: [{ selector: 'app-tsi-upload-fiche', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"'upload_fichier' | localize \" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TypeFichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [listSourceUrl]=\"typeFichierListUrl\" [(bind)]=\"fichier.typeFichier\"\r\n id-field=\"uid\" [isFiltered]=\"true\" label-field=\"libelle\" \r\n [elementSourceUrl]=\"administrationEndpoints.getTypeFichierMinimal\"\r\n [businessClass]=\"businessClassNames.TypeFichier\"\r\n >\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TableLiee'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'tableLiee'\" [(inputField)]=\"fichier.tableLiee\"\r\n [disabled]=\"isDisable\"></Tsi-Text-Box>\r\n <!-- <Tsi-Search-Combo\r\n class=\"col-6\"\r\n [(bind)]=\"fichier.tableLiee\"\r\n id-field=\"id\"\r\n label-field=\"value\"\r\n (datasource-loaded)=\"onDataLoaded()\">\r\n </Tsi-Search-Combo> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Nom'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'nom'\" [(inputField)]=\"fichier.nom\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_DateFichier'\"></Tsi-Label>\r\n <Tsi-Date-Picker class=\"col-8\" [inputName]=\"'dateFichier'\"\r\n [(inputField)]=\"fichier.dateFichier\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Version'\"></Tsi-Label>\r\n <Tsi-Integer class=\"col-8\" [inputName]=\"'version'\" [(inputField)]=\"fichier.version\"\r\n [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Objet'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-10\" [inputName]=\"'Objet'\" [(inputField)]=\"fichier.objet\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Description'\"></Tsi-Label>\r\n <Tsi-Text-Area class=\"col-10\" [inputName]=\"'description'\" [(inputField)]=\"fichier.description\" [rows]=\"5\"\r\n [cols]=\"5\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n\r\n <Tsi-Label for=\"isFileStorage\" class=\"col-1\" [labelValue]=\"'parambase_param_fichier_isFileStorage'\"></Tsi-Label>\r\n <Tsi-CheckBox id=\"isFileStorage\" class=\"col-5\" [isBinary]=\"true\"\r\n [inputName]=\"'isFileStorage'\" [disabled]=\"true\" [inputField]=\"fichier.isFileStorage\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <div class=\"col-11\">\r\n <Tsi-File-Manager \r\n [showFileUpload]=\"true\" \r\n [(inputField)]=\"fichier.contenu\"\r\n [(fileName)]=\"fichier.nomFichierComplet\" \r\n name=\"fileFichier\" \r\n id=\"fileUploading\" \r\n inputName=\"contenu\" \r\n accept=\"\"\r\n [maxFileSize]=\"10485760\" \r\n [multiple]=\"false\" \r\n [disabled]=\"isEditMode()\"\r\n [showDownloadButton]=\"true\"\r\n [showCancelButton]=\"false\"\r\n [showUploadButton]=\"false\" \r\n [exploreOnDownload]=\"true\"\r\n (onSelectFileManager)=\"onFileSelected($event)\"\r\n ></Tsi-File-Manager>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n <!-- <p-fileUpload #fileUploadFichier name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n [maxFileSize]=\"1000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\" [showUploadButton]=\"false\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload> -->\r\n\r\n\r\n </div>\r\n </fieldset>\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>" }]
196
+ args: [{ selector: 'app-tsi-upload-fiche', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"'upload_fichier' | localize \" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TypeFichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [listSourceUrl]=\"typeFichierListUrl\" [(bind)]=\"fichier.typeFichier\"\r\n id-field=\"uid\" [isFiltered]=\"true\" label-field=\"libelle\" \r\n [elementSourceUrl]=\"administrationEndpoints.getTypeFichierMinimal\"\r\n [businessClass]=\"businessClassNames.TypeFichier\"\r\n >\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_TableLiee'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'tableLiee'\" [(inputField)]=\"fichier.tableLiee\"\r\n [disabled]=\"isDisable\"></Tsi-Text-Box>\r\n <!-- <Tsi-Search-Combo\r\n class=\"col-6\"\r\n [(bind)]=\"fichier.tableLiee\"\r\n id-field=\"id\"\r\n label-field=\"value\"\r\n (datasource-loaded)=\"onDataLoaded()\">\r\n </Tsi-Search-Combo> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Nom'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'nom'\" [(inputField)]=\"fichier.nom\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_DateFichier'\"></Tsi-Label>\r\n <Tsi-Date-Picker class=\"col-8\" [inputName]=\"'dateFichier'\"\r\n [(inputField)]=\"fichier.dateFichier\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'parambase_param_fichier_Version'\"></Tsi-Label>\r\n <Tsi-Integer class=\"col-8\" [inputName]=\"'version'\" [(inputField)]=\"fichier.version\"\r\n [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Objet'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-10\" [inputName]=\"'Objet'\" [(inputField)]=\"fichier.objet\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <Tsi-Label class=\"col-1\" [labelValue]=\"'parambase_param_fichier_Description'\"></Tsi-Label>\r\n <Tsi-Text-Area class=\"col-10\" [inputName]=\"'description'\" [(inputField)]=\"fichier.description\" [rows]=\"5\"\r\n [cols]=\"5\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n\r\n <Tsi-Label for=\"isFileStorage\" class=\"col-1\" [labelValue]=\"'parambase_param_fichier_isFileStorage'\"></Tsi-Label>\r\n <Tsi-CheckBox id=\"isFileStorage\" class=\"col-5\" [isBinary]=\"true\"\r\n [inputName]=\"'isFileStorage'\" [disabled]=\"true\" [inputField]=\"fichier.isFileStorage\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid flex\">\r\n <div class=\"col-11\">\r\n <Tsi-File-Manager \r\n [showFileUpload]=\"true\" \r\n [(inputField)]=\"fichier.contenu\"\r\n [(fileName)]=\"fichier.nomFichierComplet\" \r\n name=\"fileFichier\" \r\n id=\"fileUploading\" \r\n inputName=\"contenu\" \r\n accept=\"\"\r\n [maxFileSize]=\"10485760\" \r\n [multiple]=\"false\" \r\n [disabled]=\"isDeleteMode() || isConsultMode()\"\r\n [showDownloadButton]=\"true\"\r\n [showCancelButton]=\"true\"\r\n [showUploadButton]=\"false\" \r\n [exploreOnDownload]=\"true\"\r\n [showRemoveButton]=\"isEditMode()\"\r\n (onSelectFileManager)=\"onFileSelected($event)\"\r\n ></Tsi-File-Manager>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n <!-- <p-fileUpload #fileUploadFichier name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n [maxFileSize]=\"1000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\" [showUploadButton]=\"false\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload> -->\r\n\r\n\r\n </div>\r\n </fieldset>\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>" }]
197
197
  }], ctorParameters: () => [{ type: i1.FichierService }, { type: i2.ErrorResponseManagerService }, { type: i3.DynamicDialogRef }, { type: i3.DynamicDialogConfig }, { type: i2.TsiNotificationService }, { type: i2.TsiConfirmationService }, { type: i2.DialogDataService }], propDecorators: { onSave: [{
198
198
  type: Output
199
199
  }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXVwbG9hZC1maWNoZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLXVwbG9hZC1maWNoZS90c2ktdXBsb2FkLWZpY2hlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktdXBsb2FkLWZpY2hlL3RzaS11cGxvYWQtZmljaGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw2QkFBNkI7SUFrQnhFLFlBQ1MsZUFBK0IsRUFDOUIsNEJBQXlELEVBQ2pELEdBQXFCLEVBQ3JCLE1BQTJCLEVBQ25DLG9CQUE0QyxFQUM1QyxvQkFBNEMsRUFDNUMsaUJBQW9DO1FBRTVDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFSWixvQkFBZSxHQUFmLGVB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QyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFVO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQXFCLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFOUMsMEJBQTBCO1lBQzFCLE1BQU0sU0FBUyxHQUFlLFNBQVMsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZCLGtDQUFrQztRQUNwQyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0FyTVUsdUJBQXVCO21HQUF2Qix1QkFBdUIsOEVBRnZCLENBQUMsR0FBRyxZQUFZLENBQUMsaURDakI5QixzMU5BeUlXOzs0RkR0SEUsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLEdBQUcsWUFBWSxDQUFDO3dTQWtCVCxNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEZpY2hpZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsIFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsIERpYWxvZ0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpY2hpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmljaGllci9maWNoaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9lbmRwb2ludHMnO1xyXG5pbXBvcnQgeyBCdXNpbmVzc0NsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvYnVzaW5lc3MtY2xhc3MtbmFtZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLXVwbG9hZC1maWNoZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS11cGxvYWQtZmljaGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS11cGxvYWQtZmljaGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lVcGxvYWRGaWNoZUNvbXBvbmVudCBleHRlbmRzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgZmljaGllciA9IG5ldyBGaWNoaWVyKCk7XHJcbiAgLy8gcGFyYW1CYXNlRW5kcG9pbnRzID0gUGFyYW1CYXNlRW5kcG9pbnRzO1xyXG5cclxuICBvdmVycmlkZSBzYXZpbmcgPSBmYWxzZTtcclxuICB0b1VwbG9hZEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgYmFzZTY0U3RyaW5nOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpc0Rpc2FibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG1vZGVSZWYgPSBNb2RlcztcclxuXHJcbiAgdHlwZUZpY2hpZXJMaXN0VXJsOiBzdHJpbmcgPSAnJztcclxuICBhZG1pbmlzdHJhdGlvbkVuZHBvaW50cyA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzXHJcbiAgYnVzaW5lc3NDbGFzc05hbWVzID0gQnVzaW5lc3NDbGFzc05hbWVzXHJcblxyXG4gIEBPdXRwdXQoKSBvdmVycmlkZSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2ZpY2hpZXJTZXJ2aWNlOiBGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nRGF0YVNlcnZpY2U6IERpYWxvZ0RhdGFTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmljaGllci5ub21GaWNoaWVyQ29tcGxldCA9IFwiXCI7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5idXNpbmVzc0NsYXNzID0gQnVzaW5lc3NDbGFzc05hbWVzLkZpY2hpZXI7XHJcblxyXG4gICAgY29uc3QgY3R4ID0gdGhpcy5kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCk7XHJcbiAgICBjb25zdCBjdXJyZW50Q2xhc3NlID0gY3R4Py5jbGFzcztcclxuICAgIGlmIChjdHg/LmlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5maWNoaWVyLnRhYmxlTGllZSA9IGN0eC5jbGFzcztcclxuICAgICAgdGhpcy5maWNoaWVyLnBrZXkgPSBjdHguaWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoY3VycmVudENsYXNzZSkge1xyXG4gICAgICB0aGlzLnR5cGVGaWNoaWVyTGlzdFVybCA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEFsbFR5cGVGaWNoaWVyTWluaW1hbEJ5Q2xhc3NlKGN1cnJlbnRDbGFzc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgKHRoaXMubW9kZSA9PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PSBNb2Rlcy5kZWxldGUgfHwgdGhpcy5tb2RlID09IE1vZGVzLmNvbnN1bHQpICYmXHJcbiAgICAgIHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuaWQgIT0gbnVsbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmdldEJ5SWQodGhpcy5pZCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWNoaWVyID0gZGF0YTtcclxuICAgICAgICBpZiAodGhpcy5maWNoaWVyLnRhYmxlTGllZSkge1xyXG4gICAgICAgICAgdGhpcy50eXBlRmljaGllckxpc3RVcmwgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxUeXBlRmljaGllck1pbmltYWxCeUNsYXNzZSh0aGlzLmZpY2hpZXIudGFibGVMaWVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzYXZlKCk6IHZvaWQge1xyXG4gICAgc3VwZXIuc2F2ZSgpXHJcbiAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZS5jcmVhdGUodGhpcy5maWNoaWVyKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLnJlc29sdmVGaWNoZSh0cnVlLCBhcGlSZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tb2RlID09IE1vZGVzLmVkaXQgJiZcclxuICAgICAgdGhpcy5pZCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuaWQgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZS51cGRhdGUodGhpcy5maWNoaWVyLCB0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy51cGRhdGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLnJlc29sdmVGaWNoZSh0cnVlKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09IE1vZGVzLmRlbGV0ZSkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuaWQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICB0aGlzLmlkICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlRmljaGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC5jdXJyZW50RmlsZXNbMF07XHJcbiAgICAvL3RoaXMudG9VcGxvYWRGaWxlRGF0YSA9IGZpbGU7XHJcbiAgICAvL3RoaXMucmVhZEZpbGUoZmlsZSk7XHJcbiAgICAvL3RoaXMucmVhZEZpbGVBc0J5dGVBcnJheShmaWxlKTtcclxuICAgIC8vY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiBmaWxlLnR5cGUgfSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy90aGlzLmZpY2hpZXIuY29udGVudSA9IHRoaXMuYmFzZTY0U3RyaW5nO1xyXG4gICAgICAvL3RoaXMuZmljaGllci5ub21GaWNoaWVyQ29tcGxldCA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXS5uYW1lO1xyXG4gICAgICB0aGlzLmZpY2hpZXIucGtleSA9IHRoaXMuZGlhbG9nRGF0YVNlcnZpY2UuZ2V0RGF0YSgpLmlkO1xyXG4gICAgICB0aGlzLmZpY2hpZXIudGFibGVMaWVlID0gdGhpcy5kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCkuY2xhc3M7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIC8qICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UudXBsb2FkUmVwb3J0RmlsZSh0aGlzLnRvVXBsb2FkRmlsZURhdGEpXHJcbiAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICB7XHJcbiAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9KTsgKi9cclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVhZEZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYmFzZTY0U3RyaW5nID0gKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICAvLyBVc2UgdGhpcy5iYXNlNjRTdHJpbmcgYXMgbmVlZGVkXHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmlsZSByZWFkaW5nIGVycm9yOicsIGVycm9yKTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICB9XHJcblxyXG4gIHJlYWRGaWxlQXNCeXRlQXJyYXkoZmlsZTogRmlsZSkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gcmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgLy8gVXNlIGJ5dGVBcnJheSBhcyBuZWVkZWRcclxuICAgICAgY29uc3QgYnl0ZUNvbnN0OiBVaW50OEFycmF5ID0gYnl0ZUFycmF5O1xyXG4gICAgICBjb25zb2xlLmxvZyhieXRlQ29uc3QpO1xyXG4gICAgICAvL3RoaXMuZmljaGllci5jb250ZW51ID0gYnl0ZUNvbnN0XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmlsZSByZWFkaW5nIGVycm9yOicsIGVycm9yKTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChvblN1Ym1pdCk9XCJzYXZlKClcIiBbaXNMb2FkaW5nXT1cImlzbG9hZGluZ1wiPlxyXG4gIDxUc2ktTW9kYWwtSGVhZGVyIFtpbnB1dFRpdGxlXT1cIid1cGxvYWRfZmljaGllcicgfCBsb2NhbGl6ZSBcIiAob25DbG9zZUNsaWNrKT1cImhpZGUoKVwiPlxyXG4gIDwvVHNpLU1vZGFsLUhlYWRlcj5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKSBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4XCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiIFtsYWJlbFZhbHVlXT1cIidwYXJhbWJhc2VfcGFyYW1fZmljaGllcl9UeXBlRmljaGllcidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtOFwiIFtsaXN0U291cmNlVXJsXT1cInR5cGVGaWNoaWVyTGlzdFVybFwiIFsoYmluZCldPVwiZmljaGllci50eXBlRmljaGllclwiXHJcbiAgICAgICAgICAgICAgaWQtZmllbGQ9XCJ1aWRcIiBbaXNGaWx0ZXJlZF09XCJ0cnVlXCIgbGFiZWwtZmllbGQ9XCJsaWJlbGxlXCIgXHJcbiAgICAgICAgICAgICAgW2VsZW1lbnRTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0VHlwZUZpY2hpZXJNaW5pbWFsXCJcclxuICAgICAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzTmFtZXMuVHlwZUZpY2hpZXJcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4XCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiIFtsYWJlbFZhbHVlXT1cIidwYXJhbWJhc2VfcGFyYW1fZmljaGllcl9UYWJsZUxpZWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ3RhYmxlTGllZSdcIiBbKGlucHV0RmllbGQpXT1cImZpY2hpZXIudGFibGVMaWVlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgIDwhLS0gPFRzaS1TZWFyY2gtQ29tYm9cclxuICAgICAgICAgICAgICBjbGFzcz1cImNvbC02XCJcclxuICAgICAgICAgICAgICBbKGJpbmQpXT1cImZpY2hpZXIudGFibGVMaWVlXCJcclxuICAgICAgICAgICAgICBpZC1maWVsZD1cImlkXCJcclxuICAgICAgICAgICAgICBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAoZGF0YXNvdXJjZS1sb2FkZWQpPVwib25EYXRhTG9hZGVkKClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCIgW2xhYmVsVmFsdWVdPVwiJ3BhcmFtYmFzZV9wYXJhbV9maWNoaWVyX05vbSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInbm9tJ1wiIFsoaW5wdXRGaWVsZCldPVwiZmljaGllci5ub21cIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmxleFwiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCIncGFyYW1iYXNlX3BhcmFtX2ZpY2hpZXJfRGF0ZUZpY2hpZXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktRGF0ZS1QaWNrZXIgY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ2RhdGVGaWNoaWVyJ1wiXHJcbiAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJmaWNoaWVyLmRhdGVGaWNoaWVyXCI+PC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmxleFwiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCIncGFyYW1iYXNlX3BhcmFtX2ZpY2hpZXJfVmVyc2lvbidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIid2ZXJzaW9uJ1wiIFsoaW5wdXRGaWVsZCldPVwiZmljaGllci52ZXJzaW9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvVHNpLUludGVnZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0xXCIgW2xhYmVsVmFsdWVdPVwiJ3BhcmFtYmFzZV9wYXJhbV9maWNoaWVyX09iamV0J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLTEwXCIgW2lucHV0TmFtZV09XCInT2JqZXQnXCIgWyhpbnB1dEZpZWxkKV09XCJmaWNoaWVyLm9iamV0XCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0xXCIgW2xhYmVsVmFsdWVdPVwiJ3BhcmFtYmFzZV9wYXJhbV9maWNoaWVyX0Rlc2NyaXB0aW9uJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQXJlYSBjbGFzcz1cImNvbC0xMFwiIFtpbnB1dE5hbWVdPVwiJ2Rlc2NyaXB0aW9uJ1wiIFsoaW5wdXRGaWVsZCldPVwiZmljaGllci5kZXNjcmlwdGlvblwiIFtyb3dzXT1cIjVcIlxyXG4gICAgICAgICAgICAgIFtjb2xzXT1cIjVcIj48L1RzaS1UZXh0LUFyZWE+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuXHJcbiAgICAgICAgPFRzaS1MYWJlbCBmb3I9XCJpc0ZpbGVTdG9yYWdlXCIgY2xhc3M9XCJjb2wtMVwiIFtsYWJlbFZhbHVlXT1cIidwYXJhbWJhc2VfcGFyYW1fZmljaGllcl9pc0ZpbGVTdG9yYWdlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgPFRzaS1DaGVja0JveCBpZD1cImlzRmlsZVN0b3JhZ2VcIiBjbGFzcz1cImNvbC01XCIgW2lzQmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ2lzRmlsZVN0b3JhZ2UnXCIgW2Rpc2FibGVkXT1cInRydWVcIiBbaW5wdXRGaWVsZF09XCJmaWNoaWVyLmlzRmlsZVN0b3JhZ2VcIj5cclxuICAgICAgICAgIDwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUZpbGUtTWFuYWdlciBcclxuICAgICAgICAgICAgICAgICAgW3Nob3dGaWxlVXBsb2FkXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJmaWNoaWVyLmNvbnRlbnVcIlxyXG4gICAgICAgICAgICAgICAgICBbKGZpbGVOYW1lKV09XCJmaWNoaWVyLm5vbUZpY2hpZXJDb21wbGV0XCIgXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWxlRmljaGllclwiIFxyXG4gICAgICAgICAgICAgICAgICBpZD1cImZpbGVVcGxvYWRpbmdcIiBcclxuICAgICAgICAgICAgICAgICAgaW5wdXROYW1lPVwiY29udGVudVwiIFxyXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4RmlsZVNpemVdPVwiMTA0ODU3NjBcIiBcclxuICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0VkaXRNb2RlKClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtleHBsb3JlT25Eb3dubG9hZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0RmlsZU1hbmFnZXIpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgID48L1RzaS1GaWxlLU1hbmFnZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBcclxuICAgICAgPCEtLSAgPHAtZmlsZVVwbG9hZCAjZmlsZVVwbG9hZEZpY2hpZXIgbmFtZT1cImRlbW9bXVwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICBbbWF4RmlsZVNpemVdPVwiMTAwMDAwMFwiXHJcbiAgICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW2Nob29zZUljb25dPVwiJ3BpIHBpLXBhcGVyY2xpcCdcIiBjYW5jZWxTdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCIgdXBsb2FkU3R5bGVDbGFzcz1cInAtYnV0dG9uLWhlbHBcIlxyXG4gICAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW2NhbmNlbExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2NhbmNlbF9jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIiBbc2hvd1VwbG9hZEJ1dHRvbl09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3AtZmlsZVVwbG9hZD4gICAtLT5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9maWVsZHNldD5cclxuICA8VHNpLU1vZGFsLUZvb3RlciBbY2FuY2VsRGlzYWJsZWRdPVwic2F2aW5nXCIgW3NhdmVEaXNhYmxlZF09XCJpc1N1Ym1pdERpc2FibGVkKClcIlxyXG4gICAgKG9uQ2FuY2VsQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPlxyXG48L3RzaS1mb3JtPiJdfQ==
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXVwbG9hZC1maWNoZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLXVwbG9hZC1maWNoZS90c2ktdXBsb2FkLWZpY2hlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktdXBsb2FkLWZpY2hlL3RzaS11cGxvYWQtZmljaGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw2QkFBNkI7SUFrQnhFLFlBQ1MsZUFBK0IsRUFDOUIsNEJBQXlELEVBQ2pELEdBQXFCLEVBQ3JCLE1BQTJCLEVBQ25DLG9CQUE0QyxFQUM1QyxvQkFBNEMsRUFDNUMsaUJBQW9DO1FBRTVDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFSWixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDOUIsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE2QjtRQUNqRCxRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUNuQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXdCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBd0I7UUFDNUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXZCOUMsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDeEIsMkNBQTJDO1FBRWxDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDeEIscUJBQWdCLEdBQVEsU0FBUyxDQUFDO1FBQ2xDLGlCQUFZLEdBQWdDLElBQUksQ0FBQztRQUVqRCxjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsdUJBQWtCLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLDRCQUF1QixHQUFHLHVCQUF1QixDQUFBO1FBQ2pELHVCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBRXBCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBWXBELENBQUM7SUFFUSxRQUFRO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDcEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBRWhELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDO1FBQ2pDLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDLGdDQUFnQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEYsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTO1lBQ3BCLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxFQUNmLENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RyxDQUFDO2dCQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFUSxJQUFJO1FBQ1gsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsUUFBMkIsRUFBRSxFQUFFO29CQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFDRSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJO1lBQ3ZCLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSTtZQUNmLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUyxFQUNwQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUMzRCxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7b0JBQzdFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLFFBQTJCLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQy9CLGdCQUFnQixDQUFDLGFBQWEsRUFDOUIsU0FBUyxFQUNULENBQUMsTUFBZSxFQUFFLEVBQUU7Z0JBQ2xCLElBQ0UsTUFBTTtvQkFDTixJQUFJLENBQUMsRUFBRSxJQUFJLElBQUk7b0JBQ2YsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQ3BCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN6QixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLDRDQUE0QztRQUM1QywrQkFBK0I7UUFDL0Isc0JBQXNCO1FBQ3RCLGlDQUFpQztRQUNqQyxxREFBcUQ7UUFDckQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLDJDQUEyQztZQUMzQyw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2xFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQjs7Ozs7Ozs7Ozs7bUJBV1c7SUFDYixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBVTtRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUksTUFBTSxDQUFDLE1BQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELGtDQUFrQztRQUNwQyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFVO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQXFCLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFOUMsMEJBQTBCO1lBQzFCLE1BQU0sU0FBUyxHQUFlLFNBQVMsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZCLGtDQUFrQztRQUNwQyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0FyTVUsdUJBQXVCO21HQUF2Qix1QkFBdUIsOEVBRnZCLENBQUMsR0FBRyxZQUFZLENBQUMsaURDakI5QixtNk5BMElXOzs0RkR2SEUsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLEdBQUcsWUFBWSxDQUFDO3dTQWtCVCxNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEZpY2hpZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsIFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsIERpYWxvZ0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpY2hpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmljaGllci9maWNoaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9lbmRwb2ludHMnO1xyXG5pbXBvcnQgeyBCdXNpbmVzc0NsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvYnVzaW5lc3MtY2xhc3MtbmFtZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLXVwbG9hZC1maWNoZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS11cGxvYWQtZmljaGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS11cGxvYWQtZmljaGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lVcGxvYWRGaWNoZUNvbXBvbmVudCBleHRlbmRzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgZmljaGllciA9IG5ldyBGaWNoaWVyKCk7XHJcbiAgLy8gcGFyYW1CYXNlRW5kcG9pbnRzID0gUGFyYW1CYXNlRW5kcG9pbnRzO1xyXG5cclxuICBvdmVycmlkZSBzYXZpbmcgPSBmYWxzZTtcclxuICB0b1VwbG9hZEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgYmFzZTY0U3RyaW5nOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpc0Rpc2FibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG1vZGVSZWYgPSBNb2RlcztcclxuXHJcbiAgdHlwZUZpY2hpZXJMaXN0VXJsOiBzdHJpbmcgPSAnJztcclxuICBhZG1pbmlzdHJhdGlvbkVuZHBvaW50cyA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzXHJcbiAgYnVzaW5lc3NDbGFzc05hbWVzID0gQnVzaW5lc3NDbGFzc05hbWVzXHJcblxyXG4gIEBPdXRwdXQoKSBvdmVycmlkZSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2ZpY2hpZXJTZXJ2aWNlOiBGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nRGF0YVNlcnZpY2U6IERpYWxvZ0RhdGFTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmljaGllci5ub21GaWNoaWVyQ29tcGxldCA9IFwiXCI7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5idXNpbmVzc0NsYXNzID0gQnVzaW5lc3NDbGFzc05hbWVzLkZpY2hpZXI7XHJcblxyXG4gICAgY29uc3QgY3R4ID0gdGhpcy5kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCk7XHJcbiAgICBjb25zdCBjdXJyZW50Q2xhc3NlID0gY3R4Py5jbGFzcztcclxuICAgIGlmIChjdHg/LmlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5maWNoaWVyLnRhYmxlTGllZSA9IGN0eC5jbGFzcztcclxuICAgICAgdGhpcy5maWNoaWVyLnBrZXkgPSBjdHguaWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoY3VycmVudENsYXNzZSkge1xyXG4gICAgICB0aGlzLnR5cGVGaWNoaWVyTGlzdFVybCA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEFsbFR5cGVGaWNoaWVyTWluaW1hbEJ5Q2xhc3NlKGN1cnJlbnRDbGFzc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgKHRoaXMubW9kZSA9PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PSBNb2Rlcy5kZWxldGUgfHwgdGhpcy5tb2RlID09IE1vZGVzLmNvbnN1bHQpICYmXHJcbiAgICAgIHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuaWQgIT0gbnVsbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmdldEJ5SWQodGhpcy5pZCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWNoaWVyID0gZGF0YTtcclxuICAgICAgICBpZiAodGhpcy5maWNoaWVyLnRhYmxlTGllZSkge1xyXG4gICAgICAgICAgdGhpcy50eXBlRmljaGllckxpc3RVcmwgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxUeXBlRmljaGllck1pbmltYWxCeUNsYXNzZSh0aGlzLmZpY2hpZXIudGFibGVMaWVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzYXZlKCk6IHZvaWQge1xyXG4gICAgc3VwZXIuc2F2ZSgpXHJcbiAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZS5jcmVhdGUodGhpcy5maWNoaWVyKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLnJlc29sdmVGaWNoZSh0cnVlLCBhcGlSZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tb2RlID09IE1vZGVzLmVkaXQgJiZcclxuICAgICAgdGhpcy5pZCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuaWQgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZS51cGRhdGUodGhpcy5maWNoaWVyLCB0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy51cGRhdGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLnJlc29sdmVGaWNoZSh0cnVlKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09IE1vZGVzLmRlbGV0ZSkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuaWQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICB0aGlzLmlkICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlRmljaGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC5jdXJyZW50RmlsZXNbMF07XHJcbiAgICAvL3RoaXMudG9VcGxvYWRGaWxlRGF0YSA9IGZpbGU7XHJcbiAgICAvL3RoaXMucmVhZEZpbGUoZmlsZSk7XHJcbiAgICAvL3RoaXMucmVhZEZpbGVBc0J5dGVBcnJheShmaWxlKTtcclxuICAgIC8vY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiBmaWxlLnR5cGUgfSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy90aGlzLmZpY2hpZXIuY29udGVudSA9IHRoaXMuYmFzZTY0U3RyaW5nO1xyXG4gICAgICAvL3RoaXMuZmljaGllci5ub21GaWNoaWVyQ29tcGxldCA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXS5uYW1lO1xyXG4gICAgICB0aGlzLmZpY2hpZXIucGtleSA9IHRoaXMuZGlhbG9nRGF0YVNlcnZpY2UuZ2V0RGF0YSgpLmlkO1xyXG4gICAgICB0aGlzLmZpY2hpZXIudGFibGVMaWVlID0gdGhpcy5kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCkuY2xhc3M7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIC8qICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UudXBsb2FkUmVwb3J0RmlsZSh0aGlzLnRvVXBsb2FkRmlsZURhdGEpXHJcbiAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICB7XHJcbiAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9KTsgKi9cclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVhZEZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYmFzZTY0U3RyaW5nID0gKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICAvLyBVc2UgdGhpcy5iYXNlNjRTdHJpbmcgYXMgbmVlZGVkXHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmlsZSByZWFkaW5nIGVycm9yOicsIGVycm9yKTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICB9XHJcblxyXG4gIHJlYWRGaWxlQXNCeXRlQXJyYXkoZmlsZTogRmlsZSkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gcmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgLy8gVXNlIGJ5dGVBcnJheSBhcyBuZWVkZWRcclxuICAgICAgY29uc3QgYnl0ZUNvbnN0OiBVaW50OEFycmF5ID0gYnl0ZUFycmF5O1xyXG4gICAgICBjb25zb2xlLmxvZyhieXRlQ29uc3QpO1xyXG4gICAgICAvL3RoaXMuZmljaGllci5jb250ZW51ID0gYnl0ZUNvbnN0XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmlsZSByZWFkaW5nIGVycm9yOicsIGVycm9yKTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChvblN1Ym1pdCk9XCJzYXZlKClcIiBbaXNMb2FkaW5nXT1cImlzbG9hZGluZ1wiPlxyXG4gIDxUc2ktTW9kYWwtSGVhZGVyIFtpbnB1dFRpdGxlXT1cIid1cGxvYWRfZmljaGllcicgfCBsb2NhbGl6ZSBcIiAob25DbG9zZUNsaWNrKT1cImhpZGUoKVwiPlxyXG4gIDwvVHNpLU1vZGFsLUhlYWRlcj5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKSBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4XCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiIFtsYWJlbFZhbHVlXT1cIidwYXJhbWJhc2VfcGFyYW1fZmljaGllcl9UeXBlRmljaGllcidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtOFwiIFtsaXN0U291cmNlVXJsXT1cInR5cGVGaWNoaWVyTGlzdFVybFwiIFsoYmluZCldPVwiZmljaGllci50eXBlRmljaGllclwiXHJcbiAgICAgICAgICAgICAgaWQtZmllbGQ9XCJ1aWRcIiBbaXNGaWx0ZXJlZF09XCJ0cnVlXCIgbGFiZWwtZmllbGQ9XCJsaWJlbGxlXCIgXHJcbiAgICAgICAgICAgICAgW2VsZW1lbnRTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0VHlwZUZpY2hpZXJNaW5pbWFsXCJcclxuICAgICAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzTmFtZXMuVHlwZUZpY2hpZXJcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4XCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiIFtsYWJlbFZhbHVlXT1cIidwYXJhbWJhc2VfcGFyYW1fZmljaGllcl9UYWJsZUxpZWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ3RhYmxlTGllZSdcIiBbKGlucHV0RmllbGQpXT1cImZpY2hpZXIudGFibGVMaWVlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgIDwhLS0gPFRzaS1TZWFyY2gtQ29tYm9cclxuICAgICAgICAgICAgICBjbGFzcz1cImNvbC02XCJcclxuICAgICAgICAgICAgICBbKGJpbmQpXT1cImZpY2hpZXIudGFibGVMaWVlXCJcclxuICAgICAgICAgICAgICBpZC1maWVsZD1cImlkXCJcclxuICAgICAgICAgICAgICBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAoZGF0YXNvdXJjZS1sb2FkZWQpPVwib25EYXRhTG9hZGVkKClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCIgW2xhYmVsVmFsdWVdPVwiJ3BhcmFtYmFzZV9wYXJhbV9maWNoaWVyX05vbSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInbm9tJ1wiIFsoaW5wdXRGaWVsZCldPVwiZmljaGllci5ub21cIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmxleFwiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCIncGFyYW1iYXNlX3BhcmFtX2ZpY2hpZXJfRGF0ZUZpY2hpZXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktRGF0ZS1QaWNrZXIgY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ2RhdGVGaWNoaWVyJ1wiXHJcbiAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJmaWNoaWVyLmRhdGVGaWNoaWVyXCI+PC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmxleFwiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCIncGFyYW1iYXNlX3BhcmFtX2ZpY2hpZXJfVmVyc2lvbidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIid2ZXJzaW9uJ1wiIFsoaW5wdXRGaWVsZCldPVwiZmljaGllci52ZXJzaW9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvVHNpLUludGVnZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0xXCIgW2xhYmVsVmFsdWVdPVwiJ3BhcmFtYmFzZV9wYXJhbV9maWNoaWVyX09iamV0J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLTEwXCIgW2lucHV0TmFtZV09XCInT2JqZXQnXCIgWyhpbnB1dEZpZWxkKV09XCJmaWNoaWVyLm9iamV0XCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0xXCIgW2xhYmVsVmFsdWVdPVwiJ3BhcmFtYmFzZV9wYXJhbV9maWNoaWVyX0Rlc2NyaXB0aW9uJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQXJlYSBjbGFzcz1cImNvbC0xMFwiIFtpbnB1dE5hbWVdPVwiJ2Rlc2NyaXB0aW9uJ1wiIFsoaW5wdXRGaWVsZCldPVwiZmljaGllci5kZXNjcmlwdGlvblwiIFtyb3dzXT1cIjVcIlxyXG4gICAgICAgICAgICAgIFtjb2xzXT1cIjVcIj48L1RzaS1UZXh0LUFyZWE+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuXHJcbiAgICAgICAgPFRzaS1MYWJlbCBmb3I9XCJpc0ZpbGVTdG9yYWdlXCIgY2xhc3M9XCJjb2wtMVwiIFtsYWJlbFZhbHVlXT1cIidwYXJhbWJhc2VfcGFyYW1fZmljaGllcl9pc0ZpbGVTdG9yYWdlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgPFRzaS1DaGVja0JveCBpZD1cImlzRmlsZVN0b3JhZ2VcIiBjbGFzcz1cImNvbC01XCIgW2lzQmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ2lzRmlsZVN0b3JhZ2UnXCIgW2Rpc2FibGVkXT1cInRydWVcIiBbaW5wdXRGaWVsZF09XCJmaWNoaWVyLmlzRmlsZVN0b3JhZ2VcIj5cclxuICAgICAgICAgIDwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUZpbGUtTWFuYWdlciBcclxuICAgICAgICAgICAgICAgICAgW3Nob3dGaWxlVXBsb2FkXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJmaWNoaWVyLmNvbnRlbnVcIlxyXG4gICAgICAgICAgICAgICAgICBbKGZpbGVOYW1lKV09XCJmaWNoaWVyLm5vbUZpY2hpZXJDb21wbGV0XCIgXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWxlRmljaGllclwiIFxyXG4gICAgICAgICAgICAgICAgICBpZD1cImZpbGVVcGxvYWRpbmdcIiBcclxuICAgICAgICAgICAgICAgICAgaW5wdXROYW1lPVwiY29udGVudVwiIFxyXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4RmlsZVNpemVdPVwiMTA0ODU3NjBcIiBcclxuICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dVcGxvYWRCdXR0b25dPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgICAgW2V4cGxvcmVPbkRvd25sb2FkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd1JlbW92ZUJ1dHRvbl09XCJpc0VkaXRNb2RlKClcIlxyXG4gICAgICAgICAgICAgICAgICAob25TZWxlY3RGaWxlTWFuYWdlcik9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvVHNpLUZpbGUtTWFuYWdlcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIFxyXG4gICAgICA8IS0tICA8cC1maWxlVXBsb2FkICNmaWxlVXBsb2FkRmljaGllciBuYW1lPVwiZGVtb1tdXCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgIChvblNlbGVjdCk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwib25DbGVhcigkZXZlbnQpXCIgKG9uUmVtb3ZlKT1cIm9uUmVtb3ZlKCRldmVudClcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgIFttYXhGaWxlU2l6ZV09XCIxMDAwMDAwXCJcclxuICAgICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICBbdXBsb2FkTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0X3JlcG9ydCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0b1VwbG9hZEZpbGVEYXRhXCIgcFRlbXBsYXRlPVwiZmlsZXVwbG9hZC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC1maWxlVXBsb2FkPiAgIC0tPlxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2ZpZWxkc2V0PlxyXG4gIDxUc2ktTW9kYWwtRm9vdGVyIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIiBbc2F2ZURpc2FibGVkXT1cImlzU3VibWl0RGlzYWJsZWQoKVwiXHJcbiAgICAob25DYW5jZWxDbGljayk9XCJoaWRlKClcIj48L1RzaS1Nb2RhbC1Gb290ZXI+XHJcbjwvdHNpLWZvcm0+Il19