brainloper-ui 1.0.33 → 1.1.1

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.
@@ -12,10 +12,13 @@ import * as i6 from "./../../../services/export-data.service";
12
12
  import * as i7 from "../filters/filters.component";
13
13
  import * as i8 from "@angular/material/form-field";
14
14
  import * as i9 from "@angular/material/checkbox";
15
- import * as i10 from "@angular/common";
16
- import * as i11 from "@angular/material/input";
17
- import * as i12 from "@angular/forms";
18
- import * as i13 from "@angular/material/tooltip";
15
+ import * as i10 from "@angular/material/icon";
16
+ import * as i11 from "@angular/material/menu";
17
+ import * as i12 from "@angular/common";
18
+ import * as i13 from "@angular/material/input";
19
+ import * as i14 from "@angular/forms";
20
+ import * as i15 from "@angular/material/core";
21
+ import * as i16 from "@angular/material/tooltip";
19
22
  const spanishRangeLabel = (page, pageSize, length) => {
20
23
  if (length == 0 || pageSize == 0) {
21
24
  return `0 de ${length}`;
@@ -50,8 +53,10 @@ export class DataTableComponent {
50
53
  hideTitle: true,
51
54
  hideFilter: true,
52
55
  notInitialize: false,
53
- blockEventclickRow: false,
54
- exportXslxByRow: false
56
+ exportXslxByRow: false,
57
+ view: false,
58
+ closeOrder: false,
59
+ packOff: false
55
60
  };
56
61
  this.titleLoading = "";
57
62
  this.messageLoading = "";
@@ -64,6 +69,9 @@ export class DataTableComponent {
64
69
  this.exportXslxByRow = new EventEmitter();
65
70
  this.active = new EventEmitter();
66
71
  this.selected = new EventEmitter();
72
+ this.view = new EventEmitter();
73
+ this.closeOrder = new EventEmitter();
74
+ this.packOff = new EventEmitter();
67
75
  this.internalData = new EventEmitter();
68
76
  this.headerFilters = [];
69
77
  this.movil = ScreenSizeUtil.isMobile();
@@ -80,6 +88,18 @@ export class DataTableComponent {
80
88
  this.length = 0;
81
89
  this.page = 0;
82
90
  this.above = ['above'];
91
+ this.buttonsConfig = [
92
+ { action: 'edit', conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.edit, condition: () => this.configuration.edit, icon: 'fa-edit', tooltip: 'Editar' },
93
+ { action: 'print', conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.print && this.screen, condition: () => this.configuration.print && this.screen, icon: 'fa-print', tooltip: 'Imprimir' },
94
+ { action: 'delete', conditionShowHeader: () => this.selectedRows.length > 0 && this.configuration.delete, condition: () => this.configuration.delete, icon: 'fa-trash', tooltip: 'Eliminar' },
95
+ { action: 'active', conditionShowHeader: () => this.selectedRows.length > 0 && this.configuration.active, condition: () => this.configuration.active, icon: 'fa-adjust', tooltip: 'Activar/Desactivar' },
96
+ { action: 'add', conditionShowHeader: () => this.selectedRows.length === 0 && this.configuration.add, condition: () => false, icon: 'fa-plus-circle', tooltip: 'Nuevo' },
97
+ { action: 'exportToExcel', conditionShowHeader: () => this.selectedRows.length === 0 && this.data.length > 0 && this.configuration.exportXslx, condition: () => false, icon: 'fa-download', tooltip: 'Exportar Tabla' },
98
+ { action: 'exportToExcelByRow', conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.exportXslxByRow, condition: () => this.configuration.exportXslxByRow, icon: 'fa-download', tooltip: 'Exportar Registro' },
99
+ { action: 'view', conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.view, condition: () => this.configuration.view, icon: 'fa-eye', tooltip: 'Ver detalle' },
100
+ { action: 'closeOrder', conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.closeOrder, condition: () => this.configuration.closeOrder, icon: 'fa-check-circle', tooltip: 'Cerrar order' },
101
+ { action: 'packOff', conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.packOff, condition: () => this.configuration.packOff, icon: 'fa-cart-arrow-down', tooltip: 'Despachar recursos' }
102
+ ];
83
103
  this.paginatorTranslate.itemsPerPageLabel = 'Elementos por página';
84
104
  this.paginatorTranslate.nextPageLabel = 'Siguiente página';
85
105
  this.paginatorTranslate.lastPageLabel = 'Última página';
@@ -193,9 +213,18 @@ export class DataTableComponent {
193
213
  }
194
214
  }
195
215
  clickOnRoW(rowData) {
216
+ if (!this.configuration.selectable) {
217
+ this.clearCheckboxes();
218
+ }
219
+ let state = this.checkboxs[rowData[this.configuration.primaryKey]];
220
+ this.selection(rowData, { checked: !state }, this.configuration.selectable);
196
221
  this.clickRow.emit(rowData);
197
222
  }
198
- action(action) {
223
+ showMenu($event) {
224
+ $event.stopPropagation();
225
+ }
226
+ action(action, row = null) {
227
+ var currentRow = row ? [row] : this.selectedRows;
199
228
  switch (action) {
200
229
  case 'add':
201
230
  if (this.configuration.addPer) {
@@ -220,15 +249,15 @@ export class DataTableComponent {
220
249
  break;
221
250
  case 'edit':
222
251
  if (this.configuration.editPer) {
223
- this.edit.emit(this.selectedRows);
252
+ this.edit.emit(currentRow);
224
253
  }
225
254
  else {
226
255
  let columns;
227
256
  columns = this.columns;
228
257
  columns.forEach((column, index) => {
229
- Object.keys(this.selectedRows[0]).forEach((key) => {
258
+ Object.keys(currentRow[0]).forEach((key) => {
230
259
  if (column.ID == key) {
231
- columns[index].value = this.selectedRows[0][key];
260
+ columns[index].value = currentRow[0][key];
232
261
  }
233
262
  });
234
263
  });
@@ -237,35 +266,47 @@ export class DataTableComponent {
237
266
  data: {
238
267
  action,
239
268
  columns: JSON.parse(JSON.stringify(this.columns)),
240
- values: this.selectedRows[0],
269
+ values: currentRow[0],
241
270
  },
242
271
  width: '60vh',
243
272
  })
244
273
  .afterClosed()
245
274
  .subscribe((result) => {
246
275
  if (result) {
247
- this.edit.emit({ new: result, old: this.selectedRows[0] });
276
+ this.edit.emit({ new: result, old: currentRow[0] });
248
277
  }
249
278
  });
250
279
  }
251
280
  break;
252
281
  case 'delete':
253
- this.delete.emit(this.selectedRows);
282
+ this.delete.emit(currentRow);
254
283
  break;
255
284
  case 'print':
256
- this.print.emit(this.selectedRows);
285
+ this.print.emit(currentRow);
257
286
  break;
258
287
  case 'active':
259
- this.active.emit(this.selectedRows);
288
+ this.active.emit(currentRow);
260
289
  break;
261
290
  case 'exportToExcel':
262
291
  this.exportToExcel();
263
292
  break;
264
293
  case 'exportToExcelByRow':
265
- this.exportXslxByRow.emit(this.selectedRows);
294
+ this.exportXslxByRow.emit(currentRow);
295
+ break;
296
+ case 'view':
297
+ this.view.emit(currentRow);
298
+ break;
299
+ case 'closeOrder':
300
+ this.closeOrder.emit(currentRow);
301
+ break;
302
+ case 'packOff':
303
+ this.packOff.emit(currentRow);
266
304
  break;
267
305
  }
268
306
  }
307
+ shouldShowMenu() {
308
+ return this.buttonsConfig.some(btn => btn.condition());
309
+ }
269
310
  exportToExcel() {
270
311
  let params = [];
271
312
  if (this.url && this.params) {
@@ -275,7 +316,7 @@ export class DataTableComponent {
275
316
  }
276
317
  this.exportService.generateToXlsx(this.title, this.headerFileXlsm, this.title, this.url ? null : this.data, this.url, params, this.filtersPost);
277
318
  }
278
- selection(row, $event) {
319
+ selection(row, $event, emitEvent = true) {
279
320
  this.checkboxs[row[this.configuration.primaryKey]] = $event.checked;
280
321
  if ($event.checked) {
281
322
  this.selectedRows.push(row);
@@ -284,7 +325,7 @@ export class DataTableComponent {
284
325
  let index = this.selectedRows.indexOf(row);
285
326
  this.selectedRows.splice(index, 1);
286
327
  }
287
- if (this.configuration.selectable) {
328
+ if (this.configuration.selectable && emitEvent) {
288
329
  this.selected.emit(this.selectedRows);
289
330
  }
290
331
  if (this.selectedRows.length == this.data.length) {
@@ -318,10 +359,7 @@ export class DataTableComponent {
318
359
  this.selected.emit(this.selectedRows);
319
360
  }
320
361
  else {
321
- Object.keys(this.checkboxs).forEach((key) => {
322
- this.checkboxs[key] = false;
323
- });
324
- this.selectedRows = [];
362
+ this.clearCheckboxes();
325
363
  this.selected.emit(this.selectedRows);
326
364
  }
327
365
  let service = await this.getDateTableByUrl();
@@ -330,6 +368,12 @@ export class DataTableComponent {
330
368
  this.length = service['count'];
331
369
  this.validateRules();
332
370
  }
371
+ clearCheckboxes() {
372
+ Object.keys(this.checkboxs).forEach((key) => {
373
+ this.checkboxs[key] = false;
374
+ });
375
+ this.selectedRows = [];
376
+ }
333
377
  changeFilters() {
334
378
  if (this.params)
335
379
  this.params.forEach((element) => {
@@ -376,10 +420,10 @@ export class DataTableComponent {
376
420
  }
377
421
  }
378
422
  DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpService }, { token: i3.MessageService }, { token: i4.FunctionsService }, { token: i5.MatPaginatorIntl }, { token: i6.ExportDataService }], target: i0.ɵɵFactoryTarget.Component });
379
- DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTableComponent, selector: "data-table", inputs: { title: "title", columns: "columns", data: "data", combo: "combo", configuration: "configuration", reloadTable: "reloadTable", url: "url", params: "params", titleLoading: "titleLoading", messageLoading: "messageLoading", headerFileXlsm: "headerFileXlsm", headerFilters: "headerFilters" }, outputs: { clickRow: "clickRow", add: "add", edit: "edit", delete: "delete", print: "print", exportXslxByRow: "exportXslxByRow", active: "active", selected: "selected", internalData: "internalData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div style=\"width:100%;\">\r\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\r\n </app-filters>\r\n\r\n <div style='display: flex; flex-direction: row; justify-content: space-between; align-items: center;'>\r\n <div style='flex:1; font-size: 1rem;'>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>0 && selectedRows.length<2'> {{selectedRows.length}} Seleccionado </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>1'> {{selectedRows.length}} Seleccionados </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length<1 && !configuration.hideTitle'> {{title}} </p></strong>\r\n </div>\r\n\r\n <div *ngIf=\"!configuration.hideFilter\" style='flex:3; padding-right: 10px; margin-bottom: 5px;'>\r\n <mat-form-field class='filter'>\r\n <input type=\"text\" [(ngModel)]='filters' (keyup)='changeFilters()' matInput placeholder=\"Filtrar\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div style='flex:0.5; display:flex; flex-direction: row; justify-content: flex-end;'>\r\n\r\n <div (click)='action(\"edit\")' *ngIf='selectedRows.length==1' matTooltip=\"Editar\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-edit btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.edit'></i>\r\n </div>\r\n\r\n <div (click)='action(\"print\")' *ngIf='selectedRows.length==1 && screen' matTooltip=\"Imprimir\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-print btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.print'></i>\r\n </div>\r\n\r\n <div (click)='action(\"delete\")' *ngIf='selectedRows.length>0' matTooltip=\"Eliminar\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-trash btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.delete'></i>\r\n </div>\r\n\r\n <div (click)='action(\"active\")' *ngIf='selectedRows.length>0' matTooltip=\"Activar/Desactivar\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-adjust btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.active'></i>\r\n </div>\r\n\r\n <div (click)='action(\"add\")' *ngIf='selectedRows.length==0' matTooltip=\"Nuevo\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-plus-circle btn-accion\" style=\"font-size: 170%;margin-right: 15px;\" *ngIf='configuration.add'></i>\r\n </div>\r\n\r\n <div (click)='action(\"exportToExcel\")' *ngIf='selectedRows.length == 0 && data.length > 0' matTooltip=\"Exportar excel\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-download btn-accion\" style=\"font-size: 170%;margin-right: 15px;\" *ngIf='configuration.exportXslx'></i>\r\n </div>\r\n\r\n <div (click)='action(\"exportToExcelByRow\")' *ngIf='selectedRows.length == 1' matTooltip=\"Exportar excel\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-download btn-accion\" style=\"font-size: 170%;margin-right: 15px;\" *ngIf='configuration.exportXslxByRow'></i>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <table class=\"table_Eter table-hover\">\r\n <thead class=\"dark\">\r\n <tr >\r\n <th *ngIf='configuration.selectable || configuration.delete || configuration.edit' style='justify-content: center;'>\r\n <mat-checkbox color='primary' (change)='seletecAllEvent($event)' [(ngModel)]='selectAll' [indeterminate]='indeterminateState'> </mat-checkbox> </th>\r\n <th\r\n [class]=\"column.style?.movil\"\r\n *ngFor='let column of columns' scope=\"col\"\r\n [ngStyle]=\"column.style\"\r\n >{{column.label}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class='mat-elevation-z3'>\r\n\r\n <tr style=\"cursor: pointer;\" *ngFor='let row of data' (click)='clickOnRoW(row)' >\r\n <th *ngIf='configuration.selectable || configuration.delete || configuration.edit' style='justify-content: center;'> <mat-checkbox color='primary' [(ngModel)]='checkboxs[row[configuration.primaryKey]]' (click)='clicked($event)' (change)='selection(row, $event)'> </mat-checkbox> </th>\r\n <th [class]='column.style?.movil' [ngStyle]='column.style' scope=\"row\" *ngFor='let column of columns'>{{ row[column.ID] }}</th>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n\r\n </table>\r\n\r\n <div *ngIf='length == 0 && data.length == 0' style=\"margin-left: 10px;\"> <strong>No se encontr\u00F3 informaci\u00F3n</strong></div>\r\n\r\n <mat-paginator *ngIf=\"paginatorActive\"\r\n [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons\r\n (page)=\"changePage($event)\"></mat-paginator>\r\n\r\n</div>\r\n", styles: [".table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:100%}.filter{padding:0;margin-bottom:10px;width:100%}.filter ::ng-deep .mat-form-field-underline{bottom:3px!important}.filter ::ng-deep .mat-form-field-infix{border:0!important}.filter ::ng-deep .mat-form-field-wrapper{padding:0}.filter ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-wrapper{padding:0}@media only screen and (max-width: 600px){.no-movil{display:none}}::ng-deep .mat-paginator{background:transparent!important}@media screen and (max-width: 400px){.filter{padding:0;margin-bottom:40px;width:70%}}\n"], components: [{ type: i7.FiltersComponent, selector: "app-filters", inputs: ["headerFilters"], outputs: ["applyFilters"] }, { type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
423
+ DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTableComponent, selector: "data-table", inputs: { title: "title", columns: "columns", data: "data", combo: "combo", configuration: "configuration", reloadTable: "reloadTable", url: "url", params: "params", titleLoading: "titleLoading", messageLoading: "messageLoading", headerFileXlsm: "headerFileXlsm", headerFilters: "headerFilters" }, outputs: { clickRow: "clickRow", add: "add", edit: "edit", delete: "delete", print: "print", exportXslxByRow: "exportXslxByRow", active: "active", selected: "selected", view: "view", closeOrder: "closeOrder", packOff: "packOff", internalData: "internalData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div style=\"width:100%;\">\r\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\r\n </app-filters>\r\n\r\n <div style='display: flex; flex-direction: row; justify-content: space-between; align-items: center;'>\r\n <div style='flex:1; font-size: 1rem;'>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>0 && selectedRows.length<2'> {{selectedRows.length}} Seleccionado </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>1'> {{selectedRows.length}} Seleccionados </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length<1 && !configuration.hideTitle'> {{title}} </p></strong>\r\n </div>\r\n\r\n <div *ngIf=\"!configuration.hideFilter\" style='flex:3; padding-right: 10px; margin-bottom: 5px;'>\r\n <mat-form-field class='filter'>\r\n <input type=\"text\" [(ngModel)]='filters' (keyup)='changeFilters()' matInput placeholder=\"Filtrar\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\r\n\r\n </div>\r\n\r\n <table class=\"table_Eter table-hover\">\r\n <thead class=\"dark\">\r\n <tr >\r\n <th *ngIf='configuration.selectable || configuration.edit || configuration.delete || configuration.active' style='justify-content: center;'>\r\n <mat-checkbox color='primary' (change)='seletecAllEvent($event)' [(ngModel)]='selectAll' [indeterminate]='indeterminateState'> </mat-checkbox> </th>\r\n <th\r\n [class]=\"column.style?.movil\"\r\n *ngFor='let column of columns' scope=\"col\"\r\n [ngStyle]=\"column.style\"\r\n >{{column.label}}</th>\r\n <th *ngIf=\"shouldShowMenu()\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class='mat-elevation-z3'>\r\n\r\n <tr style=\"cursor: pointer;\" *ngFor='let row of data' (click)='clickOnRoW(row)' [class]=\"checkboxs[row[configuration.primaryKey]]?'selected-row':''\">\r\n <th *ngIf='configuration.selectable || configuration.edit || configuration.delete || configuration.active' style='justify-content: center;'> <mat-checkbox color='primary' [(ngModel)]='checkboxs[row[configuration.primaryKey]]' (click)='clicked($event)' (change)='selection(row, $event)'> </mat-checkbox> </th>\r\n <th [class]='column.style?.movil' [ngStyle]='column.style' scope=\"row\" *ngFor='let column of columns'>{{ row[column.ID] }}</th>\r\n\r\n <th *ngIf=\"shouldShowMenu()\" style=\"display: flex; justify-content: center; align-items: center; overflow: visible;\">\r\n <mat-icon\r\n (click)=\"showMenu($event)\"\r\n [matMenuTriggerFor]=\"menu\"\r\n matRipple\r\n class=\"menu_more_vert\"\r\n aria-hidden=\"false\"\r\n aria-label=\"Example delete icon\"\r\n >more_vert</mat-icon>\r\n\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngFor=\"let btn of buttonsConfig\" >\r\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item class=\"d-flex align-items-center w-100\" >\r\n <i class=\"fa {{btn.icon}} btn-accion\" style=\"font-size:120%; margin-right: 10px\"></i>\r\n {{btn.tooltip}}\r\n </button>\r\n </div>\r\n\r\n </mat-menu>\r\n </th>\r\n\r\n </tr>\r\n\r\n\r\n </tbody>\r\n\r\n </table>\r\n\r\n <div *ngIf='length == 0 && data.length == 0' style=\"margin-left: 10px;\"> <strong>No se encontr\u00F3 informaci\u00F3n</strong></div>\r\n\r\n <mat-paginator *ngIf=\"paginatorActive\"\r\n [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons\r\n (page)=\"changePage($event)\"></mat-paginator>\r\n\r\n</div>\r\n\r\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" style='flex:0.5; display:flex; flex-direction: row; justify-content: flex-end;'>\r\n <ng-container *ngFor=\"let btn of buttonsConfig\">\r\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{btn.tooltip}}\" matTooltipPosition=\"above\">\r\n <i class=\"fa {{btn.icon}} btn-accion\" [ngStyle]=\"{'font-size': fontSize ? fontSize : '170%', 'margin-right': marginRight ? marginRight : '15px'}\"></i>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:100%}.filter{padding:0;margin-bottom:10px;width:100%}.filter ::ng-deep .mat-form-field-underline{bottom:3px!important}.filter ::ng-deep .mat-form-field-infix{border:0!important}.filter ::ng-deep .mat-form-field-wrapper{padding:0}.filter ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-wrapper{padding:0}.selected-row{color:#212529;background-color:#00000013}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}}::ng-deep .mat-paginator{background:transparent!important}@media screen and (max-width: 400px){.filter{padding:0;margin-bottom:40px;width:70%}}\n"], components: [{ type: i7.FiltersComponent, selector: "app-filters", inputs: ["headerFilters"], outputs: ["applyFilters"] }, { type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i15.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i16.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
380
424
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableComponent, decorators: [{
381
425
  type: Component,
382
- args: [{ selector: 'data-table', template: "<div style=\"width:100%;\">\r\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\r\n </app-filters>\r\n\r\n <div style='display: flex; flex-direction: row; justify-content: space-between; align-items: center;'>\r\n <div style='flex:1; font-size: 1rem;'>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>0 && selectedRows.length<2'> {{selectedRows.length}} Seleccionado </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>1'> {{selectedRows.length}} Seleccionados </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length<1 && !configuration.hideTitle'> {{title}} </p></strong>\r\n </div>\r\n\r\n <div *ngIf=\"!configuration.hideFilter\" style='flex:3; padding-right: 10px; margin-bottom: 5px;'>\r\n <mat-form-field class='filter'>\r\n <input type=\"text\" [(ngModel)]='filters' (keyup)='changeFilters()' matInput placeholder=\"Filtrar\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div style='flex:0.5; display:flex; flex-direction: row; justify-content: flex-end;'>\r\n\r\n <div (click)='action(\"edit\")' *ngIf='selectedRows.length==1' matTooltip=\"Editar\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-edit btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.edit'></i>\r\n </div>\r\n\r\n <div (click)='action(\"print\")' *ngIf='selectedRows.length==1 && screen' matTooltip=\"Imprimir\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-print btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.print'></i>\r\n </div>\r\n\r\n <div (click)='action(\"delete\")' *ngIf='selectedRows.length>0' matTooltip=\"Eliminar\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-trash btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.delete'></i>\r\n </div>\r\n\r\n <div (click)='action(\"active\")' *ngIf='selectedRows.length>0' matTooltip=\"Activar/Desactivar\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-adjust btn-accion\" style=\"font-size: 170%; margin-right: 15px;\" *ngIf='configuration.active'></i>\r\n </div>\r\n\r\n <div (click)='action(\"add\")' *ngIf='selectedRows.length==0' matTooltip=\"Nuevo\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-plus-circle btn-accion\" style=\"font-size: 170%;margin-right: 15px;\" *ngIf='configuration.add'></i>\r\n </div>\r\n\r\n <div (click)='action(\"exportToExcel\")' *ngIf='selectedRows.length == 0 && data.length > 0' matTooltip=\"Exportar excel\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-download btn-accion\" style=\"font-size: 170%;margin-right: 15px;\" *ngIf='configuration.exportXslx'></i>\r\n </div>\r\n\r\n <div (click)='action(\"exportToExcelByRow\")' *ngIf='selectedRows.length == 1' matTooltip=\"Exportar excel\" matTooltipPosition=\"above\">\r\n <i class=\"fa fa-download btn-accion\" style=\"font-size: 170%;margin-right: 15px;\" *ngIf='configuration.exportXslxByRow'></i>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <table class=\"table_Eter table-hover\">\r\n <thead class=\"dark\">\r\n <tr >\r\n <th *ngIf='configuration.selectable || configuration.delete || configuration.edit' style='justify-content: center;'>\r\n <mat-checkbox color='primary' (change)='seletecAllEvent($event)' [(ngModel)]='selectAll' [indeterminate]='indeterminateState'> </mat-checkbox> </th>\r\n <th\r\n [class]=\"column.style?.movil\"\r\n *ngFor='let column of columns' scope=\"col\"\r\n [ngStyle]=\"column.style\"\r\n >{{column.label}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class='mat-elevation-z3'>\r\n\r\n <tr style=\"cursor: pointer;\" *ngFor='let row of data' (click)='clickOnRoW(row)' >\r\n <th *ngIf='configuration.selectable || configuration.delete || configuration.edit' style='justify-content: center;'> <mat-checkbox color='primary' [(ngModel)]='checkboxs[row[configuration.primaryKey]]' (click)='clicked($event)' (change)='selection(row, $event)'> </mat-checkbox> </th>\r\n <th [class]='column.style?.movil' [ngStyle]='column.style' scope=\"row\" *ngFor='let column of columns'>{{ row[column.ID] }}</th>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n\r\n </table>\r\n\r\n <div *ngIf='length == 0 && data.length == 0' style=\"margin-left: 10px;\"> <strong>No se encontr\u00F3 informaci\u00F3n</strong></div>\r\n\r\n <mat-paginator *ngIf=\"paginatorActive\"\r\n [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons\r\n (page)=\"changePage($event)\"></mat-paginator>\r\n\r\n</div>\r\n", styles: [".table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:100%}.filter{padding:0;margin-bottom:10px;width:100%}.filter ::ng-deep .mat-form-field-underline{bottom:3px!important}.filter ::ng-deep .mat-form-field-infix{border:0!important}.filter ::ng-deep .mat-form-field-wrapper{padding:0}.filter ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-wrapper{padding:0}@media only screen and (max-width: 600px){.no-movil{display:none}}::ng-deep .mat-paginator{background:transparent!important}@media screen and (max-width: 400px){.filter{padding:0;margin-bottom:40px;width:70%}}\n"] }]
426
+ args: [{ selector: 'data-table', template: "<div style=\"width:100%;\">\r\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\r\n </app-filters>\r\n\r\n <div style='display: flex; flex-direction: row; justify-content: space-between; align-items: center;'>\r\n <div style='flex:1; font-size: 1rem;'>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>0 && selectedRows.length<2'> {{selectedRows.length}} Seleccionado </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length>1'> {{selectedRows.length}} Seleccionados </p></strong>\r\n <strong><p style='margin:0' *ngIf='selectedRows.length<1 && !configuration.hideTitle'> {{title}} </p></strong>\r\n </div>\r\n\r\n <div *ngIf=\"!configuration.hideFilter\" style='flex:3; padding-right: 10px; margin-bottom: 5px;'>\r\n <mat-form-field class='filter'>\r\n <input type=\"text\" [(ngModel)]='filters' (keyup)='changeFilters()' matInput placeholder=\"Filtrar\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\r\n\r\n </div>\r\n\r\n <table class=\"table_Eter table-hover\">\r\n <thead class=\"dark\">\r\n <tr >\r\n <th *ngIf='configuration.selectable || configuration.edit || configuration.delete || configuration.active' style='justify-content: center;'>\r\n <mat-checkbox color='primary' (change)='seletecAllEvent($event)' [(ngModel)]='selectAll' [indeterminate]='indeterminateState'> </mat-checkbox> </th>\r\n <th\r\n [class]=\"column.style?.movil\"\r\n *ngFor='let column of columns' scope=\"col\"\r\n [ngStyle]=\"column.style\"\r\n >{{column.label}}</th>\r\n <th *ngIf=\"shouldShowMenu()\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class='mat-elevation-z3'>\r\n\r\n <tr style=\"cursor: pointer;\" *ngFor='let row of data' (click)='clickOnRoW(row)' [class]=\"checkboxs[row[configuration.primaryKey]]?'selected-row':''\">\r\n <th *ngIf='configuration.selectable || configuration.edit || configuration.delete || configuration.active' style='justify-content: center;'> <mat-checkbox color='primary' [(ngModel)]='checkboxs[row[configuration.primaryKey]]' (click)='clicked($event)' (change)='selection(row, $event)'> </mat-checkbox> </th>\r\n <th [class]='column.style?.movil' [ngStyle]='column.style' scope=\"row\" *ngFor='let column of columns'>{{ row[column.ID] }}</th>\r\n\r\n <th *ngIf=\"shouldShowMenu()\" style=\"display: flex; justify-content: center; align-items: center; overflow: visible;\">\r\n <mat-icon\r\n (click)=\"showMenu($event)\"\r\n [matMenuTriggerFor]=\"menu\"\r\n matRipple\r\n class=\"menu_more_vert\"\r\n aria-hidden=\"false\"\r\n aria-label=\"Example delete icon\"\r\n >more_vert</mat-icon>\r\n\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngFor=\"let btn of buttonsConfig\" >\r\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item class=\"d-flex align-items-center w-100\" >\r\n <i class=\"fa {{btn.icon}} btn-accion\" style=\"font-size:120%; margin-right: 10px\"></i>\r\n {{btn.tooltip}}\r\n </button>\r\n </div>\r\n\r\n </mat-menu>\r\n </th>\r\n\r\n </tr>\r\n\r\n\r\n </tbody>\r\n\r\n </table>\r\n\r\n <div *ngIf='length == 0 && data.length == 0' style=\"margin-left: 10px;\"> <strong>No se encontr\u00F3 informaci\u00F3n</strong></div>\r\n\r\n <mat-paginator *ngIf=\"paginatorActive\"\r\n [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons\r\n (page)=\"changePage($event)\"></mat-paginator>\r\n\r\n</div>\r\n\r\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" style='flex:0.5; display:flex; flex-direction: row; justify-content: flex-end;'>\r\n <ng-container *ngFor=\"let btn of buttonsConfig\">\r\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{btn.tooltip}}\" matTooltipPosition=\"above\">\r\n <i class=\"fa {{btn.icon}} btn-accion\" [ngStyle]=\"{'font-size': fontSize ? fontSize : '170%', 'margin-right': marginRight ? marginRight : '15px'}\"></i>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:100%}.filter{padding:0;margin-bottom:10px;width:100%}.filter ::ng-deep .mat-form-field-underline{bottom:3px!important}.filter ::ng-deep .mat-form-field-infix{border:0!important}.filter ::ng-deep .mat-form-field-wrapper{padding:0}.filter ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-wrapper{padding:0}.selected-row{color:#212529;background-color:#00000013}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}}::ng-deep .mat-paginator{background:transparent!important}@media screen and (max-width: 400px){.filter{padding:0;margin-bottom:40px;width:70%}}\n"] }]
383
427
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.HttpService }, { type: i3.MessageService }, { type: i4.FunctionsService }, { type: i5.MatPaginatorIntl }, { type: i6.ExportDataService }]; }, propDecorators: { title: [{
384
428
  type: Input
385
429
  }], columns: [{
@@ -418,6 +462,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
418
462
  type: Output
419
463
  }], selected: [{
420
464
  type: Output
465
+ }], view: [{
466
+ type: Output
467
+ }], closeOrder: [{
468
+ type: Output
469
+ }], packOff: [{
470
+ type: Output
421
471
  }], internalData: [{
422
472
  type: Output
423
473
  }], headerFilters: [{
@@ -433,4 +483,4 @@ var enumRules;
433
483
  enumRules[enumRules["=="] = 2] = "==";
434
484
  enumRules[enumRules["!="] = 3] = "!=";
435
485
  })(enumRules || (enumRules = {}));
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFNM0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxV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QUFrQjttR0FBbEIsa0JBQWtCLGdsQkEyQ2xCLFlBQVksbUZDdEZ6Qix5cEpBa0ZBOzJGRHZDYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWTtxUEFLYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFrQkcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRSxhQUFhO3NCQUFyQixLQUFLO2dCQUlxQyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBa1czQyxJQUFLLFNBS0o7QUFMRCxXQUFLLFNBQVM7SUFDWixtQ0FBRyxDQUFBO0lBQ0gsbUNBQUcsQ0FBQTtJQUNILHFDQUFJLENBQUE7SUFDSixxQ0FBSSxDQUFBO0FBQ04sQ0FBQyxFQUxJLFNBQVMsS0FBVCxTQUFTLFFBS2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY3JlZW5TaXplVXRpbCB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvc2NyZWVuLXNpemUtdXRpbCc7XHJcbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBUYWJsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvdGFibGUtbW9kYWwvdGFibGUtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZ1bmN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mdW5jdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvckludGwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmNvbnN0IHNwYW5pc2hSYW5nZUxhYmVsID0gKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IHtcclxuICBpZiAobGVuZ3RoID09IDAgfHwgcGFnZVNpemUgPT0gMCkge1xyXG4gICAgcmV0dXJuIGAwIGRlICR7bGVuZ3RofWA7XHJcbiAgfVxyXG5cclxuICBsZW5ndGggPSBNYXRoLm1heChsZW5ndGgsIDApO1xyXG5cclxuICBjb25zdCBzdGFydEluZGV4ID0gcGFnZSAqIHBhZ2VTaXplO1xyXG5cclxuICBjb25zdCBlbmRJbmRleCA9XHJcbiAgICBzdGFydEluZGV4IDwgbGVuZ3RoXHJcbiAgICAgID8gTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBsZW5ndGgpXHJcbiAgICAgIDogc3RhcnRJbmRleCArIHBhZ2VTaXplO1xyXG5cclxuICByZXR1cm4gYCR7c3RhcnRJbmRleCArIDF9IC0gJHtlbmRJbmRleH0gZGUgJHtsZW5ndGh9YDtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0YS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB0aXRsZTtcclxuICBASW5wdXQoKSBjb2x1bW5zO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNvbWJvO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBhZGQ6IGZhbHNlLFxyXG4gICAgZWRpdDogZmFsc2UsXHJcbiAgICBkZWxldGU6IGZhbHNlLFxyXG4gICAgYWN0aXZlOiBmYWxzZSxcclxuICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgcHJpbnQ6IGZhbHNlLFxyXG4gICAgYWRkUGVyOiBmYWxzZSxcclxuICAgIGVkaXRQZXI6IGZhbHNlLFxyXG4gICAgcHJpbWFyeUtleTogJ2lkJyxcclxuICAgIGV4cG9ydFhzbHg6IGZhbHNlLFxyXG4gICAgaGlkZVRpdGxlOiB0cnVlLFxyXG4gICAgaGlkZUZpbHRlcjogdHJ1ZSxcclxuICAgIG5vdEluaXRpYWxpemU6IGZhbHNlLFxyXG4gICAgYmxvY2tFdmVudGNsaWNrUm93OiBmYWxzZSxcclxuICAgIGV4cG9ydFhzbHhCeVJvdzogZmFsc2VcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSByZWxvYWRUYWJsZTogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFyYW1zOiBBcnJheTxhbnk+O1xyXG4gIEBJbnB1dCgpIHRpdGxlTG9hZGluZzogc3RyaW5nID0gXCJcIlxyXG4gIEBJbnB1dCgpIG1lc3NhZ2VMb2FkaW5nOiBzdHJpbmcgPSBcIlwiXHJcbiAgQElucHV0KCkgaGVhZGVyRmlsZVhsc206IEFycmF5PGFueT4gPSBbXVxyXG5cclxuICBAT3V0cHV0KCkgY2xpY2tSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYWRkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHByaW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGV4cG9ydFhzbHhCeVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBhY3RpdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW50ZXJuYWxEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgaGVhZGVyRmlsdGVyczogQXJyYXk8YW55PiA9IFtdXHJcblxyXG4gIG1vdmlsID0gU2NyZWVuU2l6ZVV0aWwuaXNNb2JpbGUoKTtcclxuICBmaWx0ZXJzUG9zdDogQXJyYXk8YW55PiA9IFtdXHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICBzZWxlY3RlZFJvd3MgPSBbXTsgLyoqIGFsbWFjZW5hIGxhcyBmaWxhcyBzZWxlY2Npb25hZGFzICovXHJcbiAgY2hlY2tib3hzID0ge307XHJcbiAgc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgaW5kZXRlcm1pbmF0ZVN0YXRlID0gZmFsc2U7XHJcbiAgZmlsdGVycztcclxuICBvcmlnaW5hbERhdGEgPSBbXTtcclxuICBwYWdpbmF0b3JBY3RpdmUgPSB0cnVlO1xyXG4gIHNjcmVlbjogYm9vbGVhbiA9IHRydWVcclxuXHJcbiAgaWRfY29tcGFuaWE7XHJcblxyXG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcclxuXHJcbiAgcGFnZVNpemUgPSBzY3JlZW4ud2lkdGggPiA1MDAgPyAxMCA6IDU7XHJcbiAgbGVuZ3RoID0gMDtcclxuXHJcbiAgcGFnZSA9IDA7XHJcblxyXG4gIGFib3ZlOiBUb29sdGlwUG9zaXRpb25bXSA9IFsnYWJvdmUnXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0b3JUcmFuc2xhdGU6IE1hdFBhZ2luYXRvckludGwsXHJcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydERhdGFTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5pdGVtc1BlclBhZ2VMYWJlbCA9ICdFbGVtZW50b3MgcG9yIHDDoWdpbmEnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUubmV4dFBhZ2VMYWJlbCA9ICdTaWd1aWVudGUgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5sYXN0UGFnZUxhYmVsID0gJ8OabHRpbWEgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5wcmV2aW91c1BhZ2VMYWJlbCA9ICdQw6FnaW5hIGFudGVyaW9yJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmZpcnN0UGFnZUxhYmVsID0gJ1ByaW1lcmEgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5nZXRSYW5nZUxhYmVsID0gc3BhbmlzaFJhbmdlTGFiZWw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCkge1xyXG4gICAgICB0aGlzLnNjcmVlbiA9IHRydWVcclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4geyB3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCA/IHRoaXMuc2NyZWVuID0gdHJ1ZSA6IHRoaXMuc2NyZWVuID0gZmFsc2U7IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zY3JlZW4gPSBmYWxzZTtcclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4geyB3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCA/IHRoaXMuc2NyZWVuID0gdHJ1ZSA6IHRoaXMuc2NyZWVuID0gZmFsc2U7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlbG9hZFRhYmxlKSB7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGUuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxldGVjQWxsRXZlbnQoJycpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRpdGxlTG9hZGluZyA9PSBcIlwiID8gdGhpcy50aXRsZUxvYWRpbmcgPSBcIkNhcmdhbmRvXCIgOiAnJztcclxuICAgIHRoaXMubWVzc2FnZUxvYWRpbmcgPT0gXCJcIiA/IHRoaXMubWVzc2FnZUxvYWRpbmcgPSBcIk9idGVuaWVuZG8gZGF0b3MuLi5cIiA6ICcnO1xyXG4gICAgdGhpcy51cmwgJiYgIXRoaXMuY29uZmlndXJhdGlvbi5ub3RJbml0aWFsaXplID8gdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKHRoaXMudGl0bGVMb2FkaW5nLCB0aGlzLm1lc3NhZ2VMb2FkaW5nKSA6ICcnO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnVybCAmJiAhdGhpcy5jb25maWd1cmF0aW9uLm5vdEluaXRpYWxpemUpIHtcclxuICAgICAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKVxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHNlcnZpY2VbJ2NvdW50J107XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSlcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXJsKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXREYXRlVGFibGVCeVVybCgpIHtcclxuICAgIHRoaXMudmFsaWRhclBhcmFtcygpO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyc1Bvc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLnBvc3REYXRhQm9keSh0aGlzLnVybCwgdGhpcy5maWx0ZXJzUG9zdCwgdGhpcy5wYXJhbXMpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLmdldERhdGFCb2R5KHRoaXMudXJsLCB0aGlzLnBhcmFtcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXJQYXJhbXMoKSB7XHJcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZnVuY3Rpb25FdGVyLnJlbW92ZUR1cGxpY2F0ZU9iamVjdHModGhpcy5wYXJhbXMpXHJcbiAgICBpZiAodGhpcy5wYXJhbXMpIHtcclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKHggPT4geC5pZCA9PSAncGFnZScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7IGlkOiAncGFnZScsIHZhbHVlOiAnMCcgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKHggPT4geC5pZCA9PSAncGVyX3BhZ2UnKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goeyBpZDogJ3Blcl9wYWdlJywgdmFsdWU6IHRoaXMucGFnZVNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKHggPT4geC5pZCA9PSAnZmlsdGVyJykpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdmaWx0ZXInLCB2YWx1ZTogJycgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHZhbGlkYXRlUnVsZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY29sdW1uc10gb2YgdGhpcy5jb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleERhdGEsIGVsZW1lbnRdIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICBpZiAoY29sdW1ucy5ydWxlcykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbHVtbnMucnVsZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJ1bGUucnVsZSA9PSBlbnVtUnVsZXNbJz09J10pIHtcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudFtjb2x1bW5zLklEXSAmJiBlbGVtZW50W2NvbHVtbnMuSURdLnRvU3RyaW5nKCkgPT0gcnVsZS52YWx1ZVJ1bGUudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBydWxlLnZhbHVlQWN0aW9uXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gZWxlbWVudFtjb2x1bW5zLklEXTtcclxuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdmZWNoYScgfHwgY29sdW1ucy50eXBlID09ICdkYXRlJykgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlSXNvKGNvbHVtblZhbHVlKTtcclxuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdkYXRlV2l0aFRpbWUnKSB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVXaXRoVGltZShjb2x1bW5WYWx1ZT8udG9TdHJpbmcoKSA/PyBjb2x1bW5WYWx1ZSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnY3VycmVuY3knKSB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IEludGwuTnVtYmVyRm9ybWF0KCdlcy1DTycpLmZvcm1hdChjb2x1bW5WYWx1ZSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnYm9vbGVhbicpIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID0gY29sdW1uVmFsdWUgPT0gMSA/IFwiU2lcIiA6IFwiTm9cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuZGF0YSkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGlja09uUm9XKHJvd0RhdGEpIHtcclxuICAgIHRoaXMuY2xpY2tSb3cuZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIGFjdGlvbihhY3Rpb24pIHtcclxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2FkZCc6XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hZGRQZXIpIHtcclxuICAgICAgICAgIHRoaXMuYWRkLmVtaXQodGhpcy5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpKSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkLmVtaXQocmVzdWx0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmVkaXRQZXIpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGNvbHVtbnM6IGFueTtcclxuICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRSb3dzWzBdKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLklEID09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc1tpbmRleF0udmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1swXVtrZXldO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpKSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcy5zZWxlY3RlZFJvd3NbMF0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzYwdmgnLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh7IG5ldzogcmVzdWx0LCBvbGQ6IHRoaXMuc2VsZWN0ZWRSb3dzWzBdIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XHJcbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ByaW50JzpcclxuICAgICAgICB0aGlzLnByaW50LmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhY3RpdmUnOlxyXG4gICAgICAgIHRoaXMuYWN0aXZlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsQnlSb3cnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0WHNseEJ5Um93LmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBleHBvcnRUb0V4Y2VsKCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IFtdXHJcbiAgICBpZiAodGhpcy51cmwgJiYgdGhpcy5wYXJhbXMpIHtcclxuICAgICAgcGFyYW1zID0gWy4uLnRoaXMucGFyYW1zXVxyXG4gICAgICBsZXQgaSA9IHBhcmFtcy5maW5kSW5kZXgoeCA9PiB4LmlkID09ICdwZXJfcGFnZScpXHJcbiAgICAgIHBhcmFtc1tpXS52YWx1ZSA9IDEwMDAwMDBcclxuICAgIH1cclxuICAgIHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVRvWGxzeDxhbnk+KHRoaXMudGl0bGUsIHRoaXMuaGVhZGVyRmlsZVhsc20sIHRoaXMudGl0bGUsIHRoaXMudXJsID8gbnVsbCA6IHRoaXMuZGF0YSwgdGhpcy51cmwsIHBhcmFtcywgdGhpcy5maWx0ZXJzUG9zdClcclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbihyb3csICRldmVudCkge1xyXG4gICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSAkZXZlbnQuY2hlY2tlZDtcclxuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkUm93cy5pbmRleE9mKHJvdyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tlZCgkZXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZXRlY0FsbEV2ZW50KCRldmVudCkge1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RBbGwpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGVja2JveHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hzW2tleV0gPSB0cnVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlcnZpY2UgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKClcclxuICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcclxuICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSlcclxuICAgIHRoaXMubGVuZ3RoID0gc2VydmljZVsnY291bnQnXTtcclxuICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnBhcmFtcylcclxuICAgICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkID09ICdmaWx0ZXInKSB7XHJcbiAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy5maWx0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFwcGx5RmlsdGVycygkZXZlbnQ/OiBhbnkpIHtcclxuICAgIGlmICgkZXZlbnQpIHRoaXMuZmlsdGVyc1Bvc3QgPSAkZXZlbnRcclxuICAgIGlmICh0aGlzLnVybCkge1xyXG4gICAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKClcclxuICAgICAgdGhpcy5kYXRhID0gcmVzWydkYXRhJ107XHJcbiAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG4gICAgICB0aGlzLmxlbmd0aCA9IHJlc1snY291bnQnXTtcclxuICAgICAgdGhpcy5pbnRlcm5hbERhdGEuZW1pdChyZXMpXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKChkYXRhKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGRhdGEpKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YVtrZXldXHJcbiAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlcnMudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZSgkZXZlbnQpIHtcclxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmlkID09ICdwZXJfcGFnZScpIHtcclxuICAgICAgICBlbGVtZW50LnZhbHVlID0gJGV2ZW50LnBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50LmlkID09ICdwYWdlJykge1xyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZUluZGV4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcclxuICB9XHJcblxyXG59XHJcblxyXG5lbnVtIGVudW1SdWxlcyB7XHJcbiAgXCI+XCIsXHJcbiAgXCI8XCIsXHJcbiAgXCI9PVwiLFxyXG4gIFwiIT1cIlxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPlxyXG4gIDxhcHAtZmlsdGVycyBbaGVhZGVyRmlsdGVyc109XCJoZWFkZXJGaWx0ZXJzXCIgKGFwcGx5RmlsdGVycyk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiPlxyXG4gIDwvYXBwLWZpbHRlcnM+XHJcblxyXG4gIDxkaXYgc3R5bGU9J2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Jz5cclxuICAgIDxkaXYgc3R5bGU9J2ZsZXg6MTsgZm9udC1zaXplOiAxcmVtOyc+XHJcbiAgICAgIDxzdHJvbmc+PHAgc3R5bGU9J21hcmdpbjowJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD4wICYmIHNlbGVjdGVkUm93cy5sZW5ndGg8Mic+IHt7c2VsZWN0ZWRSb3dzLmxlbmd0aH19IFNlbGVjY2lvbmFkbyA8L3A+PC9zdHJvbmc+XHJcbiAgICAgIDxzdHJvbmc+PHAgc3R5bGU9J21hcmdpbjowJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD4xJz4ge3tzZWxlY3RlZFJvd3MubGVuZ3RofX0gU2VsZWNjaW9uYWRvcyA8L3A+PC9zdHJvbmc+XHJcbiAgICAgIDxzdHJvbmc+PHAgc3R5bGU9J21hcmdpbjowJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aDwxICYmICFjb25maWd1cmF0aW9uLmhpZGVUaXRsZSc+IHt7dGl0bGV9fSA8L3A+PC9zdHJvbmc+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZ3VyYXRpb24uaGlkZUZpbHRlclwiIHN0eWxlPSdmbGV4OjM7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDVweDsnPlxyXG4gICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSdmaWx0ZXInPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPSdmaWx0ZXJzJyAoa2V5dXApPSdjaGFuZ2VGaWx0ZXJzKCknICBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkZpbHRyYXJcIj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgc3R5bGU9J2ZsZXg6MC41OyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Jz5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiZWRpdFwiKScgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGg9PTEnIG1hdFRvb2x0aXA9XCJFZGl0YXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBidG4tYWNjaW9uXCIgc3R5bGU9XCJmb250LXNpemU6IDE3MCU7IG1hcmdpbi1yaWdodDogMTVweDtcIiAqbmdJZj0nY29uZmlndXJhdGlvbi5lZGl0Jz48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJwcmludFwiKScgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGg9PTEgJiYgc2NyZWVuJyBtYXRUb29sdGlwPVwiSW1wcmltaXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcHJpbnQgYnRuLWFjY2lvblwiIHN0eWxlPVwiZm9udC1zaXplOiAxNzAlOyBtYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24ucHJpbnQnPjwvaT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IChjbGljayk9J2FjdGlvbihcImRlbGV0ZVwiKScgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGg+MCcgbWF0VG9vbHRpcD1cIkVsaW1pbmFyXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTsgbWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmRlbGV0ZSc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiYWN0aXZlXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD4wJyBtYXRUb29sdGlwPVwiQWN0aXZhci9EZXNhY3RpdmFyXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFkanVzdCBidG4tYWNjaW9uXCIgc3R5bGU9XCJmb250LXNpemU6IDE3MCU7IG1hcmdpbi1yaWdodDogMTVweDtcIiAqbmdJZj0nY29uZmlndXJhdGlvbi5hY3RpdmUnPjwvaT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IChjbGljayk9J2FjdGlvbihcImFkZFwiKScgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGg9PTAnIG1hdFRvb2x0aXA9XCJOdWV2b1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZSBidG4tYWNjaW9uXCIgc3R5bGU9XCJmb250LXNpemU6IDE3MCU7bWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmFkZCc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiZXhwb3J0VG9FeGNlbFwiKScgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGggPT0gMCAmJiBkYXRhLmxlbmd0aCA+IDAnIG1hdFRvb2x0aXA9XCJFeHBvcnRhciBleGNlbFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBidG4tYWNjaW9uXCIgc3R5bGU9XCJmb250LXNpemU6IDE3MCU7bWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmV4cG9ydFhzbHgnPjwvaT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IChjbGljayk9J2FjdGlvbihcImV4cG9ydFRvRXhjZWxCeVJvd1wiKScgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGggPT0gMScgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIGV4Y2VsXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkIGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uZXhwb3J0WHNseEJ5Um93Jz48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiA8dGFibGUgY2xhc3M9XCJ0YWJsZV9FdGVyIHRhYmxlLWhvdmVyXCI+XHJcbiAgICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxyXG4gICAgICAgPHRyID5cclxuICAgICAgICA8dGggKm5nSWY9J2NvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSB8fCBjb25maWd1cmF0aW9uLmRlbGV0ZSB8fCBjb25maWd1cmF0aW9uLmVkaXQnIHN0eWxlPSdqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj0ncHJpbWFyeScgKGNoYW5nZSk9J3NlbGV0ZWNBbGxFdmVudCgkZXZlbnQpJyBbKG5nTW9kZWwpXT0nc2VsZWN0QWxsJyBbaW5kZXRlcm1pbmF0ZV09J2luZGV0ZXJtaW5hdGVTdGF0ZSc+IDwvbWF0LWNoZWNrYm94PiAgPC90aD5cclxuICAgICAgIDx0aFxyXG4gICAgICAgW2NsYXNzXT1cImNvbHVtbi5zdHlsZT8ubW92aWxcIlxyXG4gICAgICAgKm5nRm9yPSdsZXQgY29sdW1uIG9mIGNvbHVtbnMnIHNjb3BlPVwiY29sXCJcclxuICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXHJcbiAgICAgICA+e3tjb2x1bW4ubGFiZWx9fTwvdGg+XHJcbiAgICAgICA8L3RyPlxyXG4gICAgIDwvdGhlYWQ+XHJcbiAgICAgPHRib2R5IGNsYXNzPSdtYXQtZWxldmF0aW9uLXozJz5cclxuXHJcbiAgICAgICA8dHIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgKm5nRm9yPSdsZXQgcm93IG9mIGRhdGEnIChjbGljayk9J2NsaWNrT25Sb1cocm93KScgPlxyXG4gICAgICAgIDx0aCAqbmdJZj0nY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlIHx8IGNvbmZpZ3VyYXRpb24uZGVsZXRlIHx8IGNvbmZpZ3VyYXRpb24uZWRpdCcgc3R5bGU9J2p1c3RpZnktY29udGVudDogY2VudGVyOyc+IDxtYXQtY2hlY2tib3ggY29sb3I9J3ByaW1hcnknIFsobmdNb2RlbCldPSdjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dJyAoY2xpY2spPSdjbGlja2VkKCRldmVudCknIChjaGFuZ2UpPSdzZWxlY3Rpb24ocm93LCAkZXZlbnQpJz4gPC9tYXQtY2hlY2tib3g+ICA8L3RoPlxyXG4gICAgICAgIDx0aCBbY2xhc3NdPSdjb2x1bW4uc3R5bGU/Lm1vdmlsJyBbbmdTdHlsZV09J2NvbHVtbi5zdHlsZScgc2NvcGU9XCJyb3dcIiAqbmdGb3I9J2xldCBjb2x1bW4gb2YgY29sdW1ucyc+e3sgcm93W2NvbHVtbi5JRF0gfX08L3RoPlxyXG4gICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgIDwvdGJvZHk+XHJcblxyXG4gICA8L3RhYmxlPlxyXG5cclxuICAgPGRpdiAqbmdJZj0nbGVuZ3RoID09IDAgJiYgZGF0YS5sZW5ndGggPT0gMCcgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj4gPHN0cm9uZz5ObyBzZSBlbmNvbnRyw7MgaW5mb3JtYWNpw7NuPC9zdHJvbmc+PC9kaXY+XHJcblxyXG4gICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvckFjdGl2ZVwiXHJcbiAgIFtsZW5ndGhdPVwibGVuZ3RoXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBzaG93Rmlyc3RMYXN0QnV0dG9uc1xyXG4gICAocGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XHJcblxyXG48L2Rpdj5cclxuIl19
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNM0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLENBQUMsQ0FB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QixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRSxhQUFhO3NCQUFyQixLQUFLO2dCQUlxQyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBMlkzQyxJQUFLLFNBS0o7QUFMRCxXQUFLLFNBQVM7SUFDWixtQ0FBRyxDQUFBO0lBQ0gsbUNBQUcsQ0FBQTtJQUNILHFDQUFJLENBQUE7SUFDSixxQ0FBSSxDQUFBO0FBQ04sQ0FBQyxFQUxJLFNBQVMsS0FBVCxTQUFTLFFBS2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY3JlZW5TaXplVXRpbCB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvc2NyZWVuLXNpemUtdXRpbCc7XHJcbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBUYWJsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvdGFibGUtbW9kYWwvdGFibGUtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZ1bmN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mdW5jdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvckludGwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmNvbnN0IHNwYW5pc2hSYW5nZUxhYmVsID0gKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IHtcclxuICBpZiAobGVuZ3RoID09IDAgfHwgcGFnZVNpemUgPT0gMCkge1xyXG4gICAgcmV0dXJuIGAwIGRlICR7bGVuZ3RofWA7XHJcbiAgfVxyXG5cclxuICBsZW5ndGggPSBNYXRoLm1heChsZW5ndGgsIDApO1xyXG5cclxuICBjb25zdCBzdGFydEluZGV4ID0gcGFnZSAqIHBhZ2VTaXplO1xyXG5cclxuICBjb25zdCBlbmRJbmRleCA9XHJcbiAgICBzdGFydEluZGV4IDwgbGVuZ3RoXHJcbiAgICAgID8gTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBsZW5ndGgpXHJcbiAgICAgIDogc3RhcnRJbmRleCArIHBhZ2VTaXplO1xyXG5cclxuICByZXR1cm4gYCR7c3RhcnRJbmRleCArIDF9IC0gJHtlbmRJbmRleH0gZGUgJHtsZW5ndGh9YDtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0YS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB0aXRsZTtcclxuICBASW5wdXQoKSBjb2x1bW5zO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNvbWJvO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBhZGQ6IGZhbHNlLFxyXG4gICAgZWRpdDogZmFsc2UsXHJcbiAgICBkZWxldGU6IGZhbHNlLFxyXG4gICAgYWN0aXZlOiBmYWxzZSxcclxuICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgcHJpbnQ6IGZhbHNlLFxyXG4gICAgYWRkUGVyOiBmYWxzZSxcclxuICAgIGVkaXRQZXI6IGZhbHNlLFxyXG4gICAgcHJpbWFyeUtleTogJ2lkJyxcclxuICAgIGV4cG9ydFhzbHg6IGZhbHNlLFxyXG4gICAgaGlkZVRpdGxlOiB0cnVlLFxyXG4gICAgaGlkZUZpbHRlcjogdHJ1ZSxcclxuICAgIG5vdEluaXRpYWxpemU6IGZhbHNlLFxyXG4gICAgZXhwb3J0WHNseEJ5Um93OiBmYWxzZSxcclxuICAgIHZpZXc6IGZhbHNlLFxyXG4gICAgY2xvc2VPcmRlcjogZmFsc2UsXHJcbiAgICBwYWNrT2ZmOiBmYWxzZVxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHJlbG9hZFRhYmxlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBASW5wdXQoKSB1cmw6IHN0cmluZztcclxuICBASW5wdXQoKSBwYXJhbXM6IEFycmF5PGFueT47XHJcbiAgQElucHV0KCkgdGl0bGVMb2FkaW5nOiBzdHJpbmcgPSBcIlwiXHJcbiAgQElucHV0KCkgbWVzc2FnZUxvYWRpbmc6IHN0cmluZyA9IFwiXCJcclxuICBASW5wdXQoKSBoZWFkZXJGaWxlWGxzbTogQXJyYXk8YW55PiA9IFtdXHJcblxyXG4gIEBPdXRwdXQoKSBjbGlja1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBhZGQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcHJpbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZXhwb3J0WHNseEJ5Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFjdGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB2aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlT3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcGFja09mZiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBpbnRlcm5hbERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBASW5wdXQoKSBoZWFkZXJGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW11cclxuXHJcbiAgbW92aWwgPSBTY3JlZW5TaXplVXRpbC5pc01vYmlsZSgpO1xyXG4gIGZpbHRlcnNQb3N0OiBBcnJheTxhbnk+ID0gW11cclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG4gIHNlbGVjdGVkUm93cyA9IFtdOyAvKiogYWxtYWNlbmEgbGFzIGZpbGFzIHNlbGVjY2lvbmFkYXMgKi9cclxuICBjaGVja2JveHMgPSB7fTtcclxuICBzZWxlY3RBbGwgPSBmYWxzZTtcclxuICBpbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuICBmaWx0ZXJzO1xyXG4gIG9yaWdpbmFsRGF0YSA9IFtdO1xyXG4gIHBhZ2luYXRvckFjdGl2ZSA9IHRydWU7XHJcbiAgc2NyZWVuOiBib29sZWFuID0gdHJ1ZVxyXG5cclxuICBpZF9jb21wYW5pYTtcclxuXHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwLCAxMDBdO1xyXG5cclxuICBwYWdlU2l6ZSA9IHNjcmVlbi53aWR0aCA+IDUwMCA/IDEwIDogNTtcclxuICBsZW5ndGggPSAwO1xyXG5cclxuICBwYWdlID0gMDtcclxuXHJcbiAgYWJvdmU6IFRvb2x0aXBQb3NpdGlvbltdID0gWydhYm92ZSddO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmdW5jdGlvbkV0ZXI6IEZ1bmN0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2luYXRvclRyYW5zbGF0ZTogTWF0UGFnaW5hdG9ySW50bCxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0RGF0YVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLml0ZW1zUGVyUGFnZUxhYmVsID0gJ0VsZW1lbnRvcyBwb3IgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5uZXh0UGFnZUxhYmVsID0gJ1NpZ3VpZW50ZSBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmxhc3RQYWdlTGFiZWwgPSAnw5psdGltYSBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLnByZXZpb3VzUGFnZUxhYmVsID0gJ1DDoWdpbmEgYW50ZXJpb3InO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuZmlyc3RQYWdlTGFiZWwgPSAnUHJpbWVyYSBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmdldFJhbmdlTGFiZWwgPSBzcGFuaXNoUmFuZ2VMYWJlbDtcclxuICB9XHJcblxyXG4gIGJ1dHRvbnNDb25maWcgPSBbXHJcbiAgICB7IGFjdGlvbjogJ2VkaXQnLCBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PiB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLmVkaXQsIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmVkaXQsIGljb246ICdmYS1lZGl0JywgdG9vbHRpcDogJ0VkaXRhcicgfSxcclxuICAgIHsgYWN0aW9uOiAncHJpbnQnLCBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PiB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLnByaW50ICYmIHRoaXMuc2NyZWVuLCBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5wcmludCAmJiB0aGlzLnNjcmVlbiwgaWNvbjogJ2ZhLXByaW50JywgdG9vbHRpcDogJ0ltcHJpbWlyJyB9LFxyXG4gICAgeyBhY3Rpb246ICdkZWxldGUnLCBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PiB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5kZWxldGUsIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmRlbGV0ZSwgaWNvbjogJ2ZhLXRyYXNoJywgdG9vbHRpcDogJ0VsaW1pbmFyJyB9LFxyXG4gICAgeyBhY3Rpb246ICdhY3RpdmUnLCBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PiB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmUsIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZSwgaWNvbjogJ2ZhLWFkanVzdCcsIHRvb2x0aXA6ICdBY3RpdmFyL0Rlc2FjdGl2YXInIH0sXHJcbiAgICB7IGFjdGlvbjogJ2FkZCcsIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkLCBjb25kaXRpb246ICgpID0+IGZhbHNlLCBpY29uOiAnZmEtcGx1cy1jaXJjbGUnLCB0b29sdGlwOiAnTnVldm8nIH0sXHJcbiAgICB7IGFjdGlvbjogJ2V4cG9ydFRvRXhjZWwnLCBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PiB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHgsIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsIGljb246ICdmYS1kb3dubG9hZCcsIHRvb2x0aXA6ICdFeHBvcnRhciBUYWJsYScgfSxcclxuICAgIHsgYWN0aW9uOiAnZXhwb3J0VG9FeGNlbEJ5Um93JywgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT4gdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4QnlSb3csIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhCeVJvdywgaWNvbjogJ2ZhLWRvd25sb2FkJywgdG9vbHRpcDogJ0V4cG9ydGFyIFJlZ2lzdHJvJyB9LFxyXG4gICAgeyBhY3Rpb246ICd2aWV3JywgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT4gdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi52aWV3LCBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi52aWV3LCBpY29uOiAnZmEtZXllJywgdG9vbHRpcDogJ1ZlciBkZXRhbGxlJyB9LFxyXG4gICAgeyBhY3Rpb246ICdjbG9zZU9yZGVyJywgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT4gdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5jbG9zZU9yZGVyLCBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5jbG9zZU9yZGVyLCBpY29uOiAnZmEtY2hlY2stY2lyY2xlJywgdG9vbHRpcDogJ0NlcnJhciBvcmRlcicgfSxcclxuICAgIHsgYWN0aW9uOiAncGFja09mZicsIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24ucGFja09mZiwgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24ucGFja09mZiwgaWNvbjogJ2ZhLWNhcnQtYXJyb3ctZG93bicsIHRvb2x0aXA6ICdEZXNwYWNoYXIgcmVjdXJzb3MnIH1cclxuICBdO1xyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCkge1xyXG4gICAgICB0aGlzLnNjcmVlbiA9IHRydWVcclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4geyB3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCA/IHRoaXMuc2NyZWVuID0gdHJ1ZSA6IHRoaXMuc2NyZWVuID0gZmFsc2U7IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zY3JlZW4gPSBmYWxzZTtcclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4geyB3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCA/IHRoaXMuc2NyZWVuID0gdHJ1ZSA6IHRoaXMuc2NyZWVuID0gZmFsc2U7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlbG9hZFRhYmxlKSB7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGUuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxldGVjQWxsRXZlbnQoJycpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRpdGxlTG9hZGluZyA9PSBcIlwiID8gdGhpcy50aXRsZUxvYWRpbmcgPSBcIkNhcmdhbmRvXCIgOiAnJztcclxuICAgIHRoaXMubWVzc2FnZUxvYWRpbmcgPT0gXCJcIiA/IHRoaXMubWVzc2FnZUxvYWRpbmcgPSBcIk9idGVuaWVuZG8gZGF0b3MuLi5cIiA6ICcnO1xyXG4gICAgdGhpcy51cmwgJiYgIXRoaXMuY29uZmlndXJhdGlvbi5ub3RJbml0aWFsaXplID8gdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKHRoaXMudGl0bGVMb2FkaW5nLCB0aGlzLm1lc3NhZ2VMb2FkaW5nKSA6ICcnO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnVybCAmJiAhdGhpcy5jb25maWd1cmF0aW9uLm5vdEluaXRpYWxpemUpIHtcclxuICAgICAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKVxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHNlcnZpY2VbJ2NvdW50J107XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSlcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXJsKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXREYXRlVGFibGVCeVVybCgpIHtcclxuICAgIHRoaXMudmFsaWRhclBhcmFtcygpO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyc1Bvc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLnBvc3REYXRhQm9keSh0aGlzLnVybCwgdGhpcy5maWx0ZXJzUG9zdCwgdGhpcy5wYXJhbXMpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLmdldERhdGFCb2R5KHRoaXMudXJsLCB0aGlzLnBhcmFtcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXJQYXJhbXMoKSB7XHJcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZnVuY3Rpb25FdGVyLnJlbW92ZUR1cGxpY2F0ZU9iamVjdHModGhpcy5wYXJhbXMpXHJcbiAgICBpZiAodGhpcy5wYXJhbXMpIHtcclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKHggPT4geC5pZCA9PSAncGFnZScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7IGlkOiAncGFnZScsIHZhbHVlOiAnMCcgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKHggPT4geC5pZCA9PSAncGVyX3BhZ2UnKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goeyBpZDogJ3Blcl9wYWdlJywgdmFsdWU6IHRoaXMucGFnZVNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKHggPT4geC5pZCA9PSAnZmlsdGVyJykpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdmaWx0ZXInLCB2YWx1ZTogJycgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHZhbGlkYXRlUnVsZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY29sdW1uc10gb2YgdGhpcy5jb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleERhdGEsIGVsZW1lbnRdIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICBpZiAoY29sdW1ucy5ydWxlcykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbHVtbnMucnVsZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJ1bGUucnVsZSA9PSBlbnVtUnVsZXNbJz09J10pIHtcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudFtjb2x1bW5zLklEXSAmJiBlbGVtZW50W2NvbHVtbnMuSURdLnRvU3RyaW5nKCkgPT0gcnVsZS52YWx1ZVJ1bGUudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBydWxlLnZhbHVlQWN0aW9uXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gZWxlbWVudFtjb2x1bW5zLklEXTtcclxuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdmZWNoYScgfHwgY29sdW1ucy50eXBlID09ICdkYXRlJykgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlSXNvKGNvbHVtblZhbHVlKTtcclxuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdkYXRlV2l0aFRpbWUnKSB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVXaXRoVGltZShjb2x1bW5WYWx1ZT8udG9TdHJpbmcoKSA/PyBjb2x1bW5WYWx1ZSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnY3VycmVuY3knKSB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IEludGwuTnVtYmVyRm9ybWF0KCdlcy1DTycpLmZvcm1hdChjb2x1bW5WYWx1ZSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnYm9vbGVhbicpIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID0gY29sdW1uVmFsdWUgPT0gMSA/IFwiU2lcIiA6IFwiTm9cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuZGF0YSkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGlja09uUm9XKHJvd0RhdGEpIHtcclxuICAgIGlmKCF0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSl7XHJcbiAgICAgIHRoaXMuY2xlYXJDaGVja2JveGVzKClcclxuICAgIH1cclxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2hlY2tib3hzW3Jvd0RhdGFbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXVxyXG4gICAgdGhpcy5zZWxlY3Rpb24ocm93RGF0YSwgeyBjaGVja2VkOiAhc3RhdGUgfSwgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdGFibGUpXHJcbiAgICB0aGlzLmNsaWNrUm93LmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBzaG93TWVudSgkZXZlbnQpe1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uKGFjdGlvbiwgcm93ID0gbnVsbCkge1xyXG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cgPyBbcm93XSA6IHRoaXMuc2VsZWN0ZWRSb3dzXHJcblxyXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcclxuICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFkZFBlcikge1xyXG4gICAgICAgICAgdGhpcy5hZGQuZW1pdCh0aGlzLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgICAgICAgIC5vcGVuKFRhYmxlTW9kYWxDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICc2MHZoJyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGQuZW1pdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2VkaXQnOlxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZWRpdFBlcikge1xyXG4gICAgICAgICAgdGhpcy5lZGl0LmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBjb2x1bW5zOiBhbnk7XHJcbiAgICAgICAgICBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Um93WzBdKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLklEID09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc1tpbmRleF0udmFsdWUgPSBjdXJyZW50Um93WzBdW2tleV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgICAgICAgIC5vcGVuKFRhYmxlTW9kYWxDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykpLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzOiBjdXJyZW50Um93WzBdLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICc2MHZoJyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0LmVtaXQoeyBuZXc6IHJlc3VsdCwgb2xkOiBjdXJyZW50Um93WzBdIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XHJcbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdChjdXJyZW50Um93KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncHJpbnQnOlxyXG4gICAgICAgIHRoaXMucHJpbnQuZW1pdChjdXJyZW50Um93KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYWN0aXZlJzpcclxuICAgICAgICB0aGlzLmFjdGl2ZS5lbWl0KGN1cnJlbnRSb3cpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsQnlSb3cnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0WHNseEJ5Um93LmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHRoaXMudmlldy5lbWl0KGN1cnJlbnRSb3cpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjbG9zZU9yZGVyJzpcclxuICAgICAgICB0aGlzLmNsb3NlT3JkZXIuZW1pdChjdXJyZW50Um93KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncGFja09mZic6XHJcbiAgICAgICAgdGhpcy5wYWNrT2ZmLmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93TWVudSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvbnNDb25maWcuc29tZShidG4gPT4gYnRuLmNvbmRpdGlvbigpKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCgpIHtcclxuICAgIGxldCBwYXJhbXMgPSBbXVxyXG4gICAgaWYgKHRoaXMudXJsICYmIHRoaXMucGFyYW1zKSB7XHJcbiAgICAgIHBhcmFtcyA9IFsuLi50aGlzLnBhcmFtc11cclxuICAgICAgbGV0IGkgPSBwYXJhbXMuZmluZEluZGV4KHggPT4geC5pZCA9PSAncGVyX3BhZ2UnKVxyXG4gICAgICBwYXJhbXNbaV0udmFsdWUgPSAxMDAwMDAwXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUb1hsc3g8YW55Pih0aGlzLnRpdGxlLCB0aGlzLmhlYWRlckZpbGVYbHNtLCB0aGlzLnRpdGxlLCB0aGlzLnVybCA/IG51bGwgOiB0aGlzLmRhdGEsIHRoaXMudXJsLCBwYXJhbXMsIHRoaXMuZmlsdGVyc1Bvc3QpXHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb24ocm93LCAkZXZlbnQsIGVtaXRFdmVudCA9IHRydWUpIHtcclxuICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gJGV2ZW50LmNoZWNrZWQ7XHJcbiAgICBpZiAoJGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MucHVzaChyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd3MuaW5kZXhPZihyb3cpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSAmJiBlbWl0RXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09IHRoaXMuZGF0YS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoIDwgdGhpcy5kYXRhLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVN0YXRlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVN0YXRlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGlja2VkKCRldmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZWxldGVjQWxsRXZlbnQoJGV2ZW50KSB7XHJcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdEFsbCkge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcclxuICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xlYXJDaGVja2JveGVzKClcclxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKVxyXG4gICAgdGhpcy5kYXRhID0gc2VydmljZVsnZGF0YSddO1xyXG4gICAgdGhpcy5pbnRlcm5hbERhdGEuZW1pdChzZXJ2aWNlKVxyXG4gICAgdGhpcy5sZW5ndGggPSBzZXJ2aWNlWydjb3VudCddO1xyXG4gICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckNoZWNrYm94ZXMoKSB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tib3hzW2tleV0gPSBmYWxzZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaWx0ZXJzKCkge1xyXG4gICAgaWYgKHRoaXMucGFyYW1zKVxyXG4gICAgICB0aGlzLnBhcmFtcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ2ZpbHRlcicpIHtcclxuICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSB0aGlzLmZpbHRlcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYXBwbHlGaWx0ZXJzKCRldmVudD86IGFueSkge1xyXG4gICAgaWYgKCRldmVudCkgdGhpcy5maWx0ZXJzUG9zdCA9ICRldmVudFxyXG4gICAgaWYgKHRoaXMudXJsKSB7XHJcbiAgICAgIGxldCByZXM6IGFueSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKVxyXG4gICAgICB0aGlzLmRhdGEgPSByZXNbJ2RhdGEnXTtcclxuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gcmVzWydjb3VudCddO1xyXG4gICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHJlcylcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoKGRhdGEpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSBkYXRhW2tleV1cclxuICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuZmlsdGVycy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQYWdlKCRldmVudCkge1xyXG4gICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3Blcl9wYWdlJykge1xyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3BhZ2UnKSB7XHJcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9ICRldmVudC5wYWdlSW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmVudW0gZW51bVJ1bGVzIHtcclxuICBcIj5cIixcclxuICBcIjxcIixcclxuICBcIj09XCIsXHJcbiAgXCIhPVwiXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XHJcbiAgPGFwcC1maWx0ZXJzIFtoZWFkZXJGaWx0ZXJzXT1cImhlYWRlckZpbHRlcnNcIiAoYXBwbHlGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcbiAgPC9hcHAtZmlsdGVycz5cclxuXHJcbiAgPGRpdiBzdHlsZT0nZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyAgYWxpZ24taXRlbXM6IGNlbnRlcjsnPlxyXG4gICAgPGRpdiBzdHlsZT0nZmxleDoxOyBmb250LXNpemU6IDFyZW07Jz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjAgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aDwyJz4ge3tzZWxlY3RlZFJvd3MubGVuZ3RofX0gU2VsZWNjaW9uYWRvIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjEnPiB7e3NlbGVjdGVkUm93cy5sZW5ndGh9fSBTZWxlY2Npb25hZG9zIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPDEgJiYgIWNvbmZpZ3VyYXRpb24uaGlkZVRpdGxlJz4ge3t0aXRsZX19IDwvcD48L3N0cm9uZz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhY29uZmlndXJhdGlvbi5oaWRlRmlsdGVyXCIgc3R5bGU9J2ZsZXg6MzsgcGFkZGluZy1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogNXB4Oyc+XHJcbiAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J2ZpbHRlcic+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09J2ZpbHRlcnMnIChrZXl1cCk9J2NoYW5nZUZpbHRlcnMoKScgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRmlsdHJhclwiPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNUYWJsZVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiA8dGFibGUgY2xhc3M9XCJ0YWJsZV9FdGVyIHRhYmxlLWhvdmVyXCI+XHJcbiAgICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxyXG4gICAgICAgPHRyID5cclxuICAgICAgICA8dGggKm5nSWY9J2NvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSB8fCBjb25maWd1cmF0aW9uLmVkaXQgfHwgY29uZmlndXJhdGlvbi5kZWxldGUgfHwgY29uZmlndXJhdGlvbi5hY3RpdmUnIHN0eWxlPSdqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj0ncHJpbWFyeScgKGNoYW5nZSk9J3NlbGV0ZWNBbGxFdmVudCgkZXZlbnQpJyBbKG5nTW9kZWwpXT0nc2VsZWN0QWxsJyBbaW5kZXRlcm1pbmF0ZV09J2luZGV0ZXJtaW5hdGVTdGF0ZSc+IDwvbWF0LWNoZWNrYm94PiAgPC90aD5cclxuICAgICAgIDx0aFxyXG4gICAgICAgW2NsYXNzXT1cImNvbHVtbi5zdHlsZT8ubW92aWxcIlxyXG4gICAgICAgKm5nRm9yPSdsZXQgY29sdW1uIG9mIGNvbHVtbnMnIHNjb3BlPVwiY29sXCJcclxuICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXHJcbiAgICAgICA+e3tjb2x1bW4ubGFiZWx9fTwvdGg+XHJcbiAgICAgICA8dGggKm5nSWY9XCJzaG91bGRTaG93TWVudSgpXCI+PC90aD5cclxuICAgICAgIDwvdHI+XHJcbiAgICAgPC90aGVhZD5cclxuICAgICA8dGJvZHkgY2xhc3M9J21hdC1lbGV2YXRpb24tejMnPlxyXG5cclxuICAgICAgIDx0ciBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiAqbmdGb3I9J2xldCByb3cgb2YgZGF0YScgKGNsaWNrKT0nY2xpY2tPblJvVyhyb3cpJyBbY2xhc3NdPVwiY2hlY2tib3hzW3Jvd1tjb25maWd1cmF0aW9uLnByaW1hcnlLZXldXT8nc2VsZWN0ZWQtcm93JzonJ1wiPlxyXG4gICAgICAgIDx0aCAqbmdJZj0nY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlIHx8IGNvbmZpZ3VyYXRpb24uZWRpdCB8fCBjb25maWd1cmF0aW9uLmRlbGV0ZSB8fCBjb25maWd1cmF0aW9uLmFjdGl2ZScgc3R5bGU9J2p1c3RpZnktY29udGVudDogY2VudGVyOyc+IDxtYXQtY2hlY2tib3ggY29sb3I9J3ByaW1hcnknIFsobmdNb2RlbCldPSdjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dJyAoY2xpY2spPSdjbGlja2VkKCRldmVudCknIChjaGFuZ2UpPSdzZWxlY3Rpb24ocm93LCAkZXZlbnQpJz4gPC9tYXQtY2hlY2tib3g+ICA8L3RoPlxyXG4gICAgICAgIDx0aCBbY2xhc3NdPSdjb2x1bW4uc3R5bGU/Lm1vdmlsJyBbbmdTdHlsZV09J2NvbHVtbi5zdHlsZScgc2NvcGU9XCJyb3dcIiAqbmdGb3I9J2xldCBjb2x1bW4gb2YgY29sdW1ucyc+e3sgcm93W2NvbHVtbi5JRF0gfX08L3RoPlxyXG5cclxuICAgICAgICA8dGggKm5nSWY9XCJzaG91bGRTaG93TWVudSgpXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgb3ZlcmZsb3c6IHZpc2libGU7XCI+XHJcbiAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgIChjbGljayk9XCJzaG93TWVudSgkZXZlbnQpXCJcclxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICAgIG1hdFJpcHBsZVxyXG4gICAgICAgICAgY2xhc3M9XCJtZW51X21vcmVfdmVydFwiXHJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJFeGFtcGxlIGRlbGV0ZSBpY29uXCJcclxuICAgICAgICAgID5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG5cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbnNDb25maWdcIiA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ0bi5jb25kaXRpb24oKVwiIChjbGljayk9XCJhY3Rpb24oYnRuLmFjdGlvbiwgcm93KVwiIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCIgPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSB7e2J0bi5pY29ufX0gYnRuLWFjY2lvblwiIHN0eWxlPVwiZm9udC1zaXplOjEyMCU7IG1hcmdpbi1yaWdodDogMTBweFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7YnRuLnRvb2x0aXB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgIDwvdGJvZHk+XHJcblxyXG4gICA8L3RhYmxlPlxyXG5cclxuICAgPGRpdiAqbmdJZj0nbGVuZ3RoID09IDAgJiYgZGF0YS5sZW5ndGggPT0gMCcgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj4gPHN0cm9uZz5ObyBzZSBlbmNvbnRyw7MgaW5mb3JtYWNpw7NuPC9zdHJvbmc+PC9kaXY+XHJcblxyXG4gICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvckFjdGl2ZVwiXHJcbiAgIFtsZW5ndGhdPVwibGVuZ3RoXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBzaG93Rmlyc3RMYXN0QnV0dG9uc1xyXG4gICAocGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RhYmxlIGxldC1mb250U2l6ZT1cImZvbnRTaXplXCIgbGV0LW1hcmdpblJpZ2h0PVwibWFyZ2luUmlnaHRcIiBzdHlsZT0nZmxleDowLjU7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsnPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25zQ29uZmlnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYnRuLmNvbmRpdGlvblNob3dIZWFkZXIoKVwiIChjbGljayk9XCJhY3Rpb24oYnRuLmFjdGlvbilcIiBtYXRUb29sdGlwPVwie3tidG4udG9vbHRpcH19XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSB7e2J0bi5pY29ufX0gYnRuLWFjY2lvblwiIFtuZ1N0eWxlXT1cInsnZm9udC1zaXplJzogZm9udFNpemUgPyBmb250U2l6ZSA6ICcxNzAlJywgJ21hcmdpbi1yaWdodCc6IG1hcmdpblJpZ2h0ID8gbWFyZ2luUmlnaHQgOiAnMTVweCd9XCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9pbnRlcmZhY2VzL2RhdGEtdGFibGUvdGFibGUtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbmZpZ3VyYXRpb24ge1xyXG4gICAgZWRpdD86Ym9vbGVhbixcclxuICAgIGFkZD86Ym9vbGVhbixcclxuICAgIGRlbGV0ZT86Ym9vbGVhbixcclxuICAgIHNlbGVjdGFibGU/OmJvb2xlYW4sXHJcbiAgICBhZGRQZXI/OmJvb2xlYW4sXHJcbiAgICBlZGl0UGVyPzpib29sZWFuLFxyXG4gICAgcHJpbWFyeUtleT86c3RyaW5nLFxyXG4gICAgcHJpbnQ/OmJvb2xlYW4sXHJcbiAgICBhY3RpdmU/OmJvb2xlYW4sXHJcbiAgICBleHBvcnRYc2x4Pzpib29sZWFuLFxyXG4gICAgaGlkZVRpdGxlPzpib29sZWFuLFxyXG4gICAgaGlkZUZpbHRlcj86IGJvb2xlYW4sXHJcbiAgICBub3RJbml0aWFsaXplPzogYm9vbGVhbixcclxuICAgIGJsb2NrRXZlbnRDbG9ja1dvZT86IGJvb2xlYW4sXHJcbiAgICBleHBvcnRYc2x4QnlSb3c/OiBib29sZWFuLFxyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9pbnRlcmZhY2VzL2RhdGEtdGFibGUvdGFibGUtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbmZpZ3VyYXRpb24ge1xyXG4gICAgZWRpdD86Ym9vbGVhbixcclxuICAgIGFkZD86Ym9vbGVhbixcclxuICAgIGRlbGV0ZT86Ym9vbGVhbixcclxuICAgIHNlbGVjdGFibGU/OmJvb2xlYW4sXHJcbiAgICBhZGRQZXI/OmJvb2xlYW4sXHJcbiAgICBlZGl0UGVyPzpib29sZWFuLFxyXG4gICAgcHJpbWFyeUtleT86c3RyaW5nLFxyXG4gICAgcHJpbnQ/OmJvb2xlYW4sXHJcbiAgICBhY3RpdmU/OmJvb2xlYW4sXHJcbiAgICBleHBvcnRYc2x4Pzpib29sZWFuLFxyXG4gICAgaGlkZVRpdGxlPzpib29sZWFuLFxyXG4gICAgaGlkZUZpbHRlcj86IGJvb2xlYW4sXHJcbiAgICBub3RJbml0aWFsaXplPzogYm9vbGVhbixcclxuICAgIGV4cG9ydFhzbHhCeVJvdz86IGJvb2xlYW4sXHJcbiAgICB2aWV3PzogYm9vbGVhbixcclxuICAgIGNsb3NlT3JkZXI/OiBib29sZWFuLFxyXG4gICAgcGFja09mZj86IGJvb2xlYW4sXHJcbn1cclxuIl19