general-library-union 3.0.13 → 3.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/app/webcommon/pages/fuente-reporte/fuente-reporte.component.mjs +47 -29
- package/esm2022/src/app/webcommon/popups/popup-editor-formula/popup-editor-formula.component.mjs +73 -0
- package/esm2022/src/app/webcommon/popups/popup-tablas-fuente/popup-tablas-fuente.component.mjs +4 -1
- package/esm2022/src/app/webcommon/services/reportes.service.mjs +2 -2
- package/esm2022/src/environments/environment.mjs +3 -2
- package/fesm2022/general-library-union.mjs +107 -30
- package/fesm2022/general-library-union.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/layout/app.menuitem.component.d.ts +1 -1
- package/src/app/webcommon/pages/fuente-reporte/fuente-reporte.component.d.ts +4 -1
- package/src/app/webcommon/popups/popup-editor-formula/popup-editor-formula.component.d.ts +21 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PopupEditorFormulaComponent } from './../../popups/popup-editor-formula/popup-editor-formula.component';
|
|
1
2
|
import { GeneralPipe } from './../../pipes/general.pipe';
|
|
2
3
|
import { Component, ViewChild } from '@angular/core';
|
|
3
4
|
import { ColumnaFuenteModel } from '../../../seguridad/modelos/ColumnaFuenteModel';
|
|
@@ -30,6 +31,7 @@ import { CheckboxModule } from 'primeng/checkbox';
|
|
|
30
31
|
import { TooltipModule } from 'primeng/tooltip';
|
|
31
32
|
import { ReporteEntradaConstantes } from '../../../seguridad/constantes/ReporteEntradaConstantes';
|
|
32
33
|
import { ProgressBarModule } from 'primeng/progressbar';
|
|
34
|
+
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
33
35
|
import * as i0 from "@angular/core";
|
|
34
36
|
import * as i1 from "../../../core/servicios/menu.service";
|
|
35
37
|
import * as i2 from "./../../../core/servicios/toast.service";
|
|
@@ -52,6 +54,7 @@ import * as i18 from "primeng/dropdown";
|
|
|
52
54
|
import * as i19 from "@angular/forms";
|
|
53
55
|
import * as i20 from "primeng/table";
|
|
54
56
|
import * as i21 from "primeng/inputtextarea";
|
|
57
|
+
import * as i22 from "primeng/confirmdialog";
|
|
55
58
|
export class FuenteReporteComponent {
|
|
56
59
|
menuService;
|
|
57
60
|
notificationBusService;
|
|
@@ -95,12 +98,14 @@ export class FuenteReporteComponent {
|
|
|
95
98
|
items = [];
|
|
96
99
|
mapaMensajes = new Map();
|
|
97
100
|
popupTablasFuenteUI;
|
|
101
|
+
popupEditorFormula;
|
|
98
102
|
tiposDato = ReporteEntradaConstantes.tipoDato;
|
|
99
103
|
clickGuardar;
|
|
100
104
|
verNuevoJoin;
|
|
101
105
|
activeIndex = 0;
|
|
102
106
|
cargarPaso;
|
|
103
107
|
loadingGenerar;
|
|
108
|
+
errorQuery;
|
|
104
109
|
constructor(menuService, notificationBusService, reportesSvc, generalSvc, utilsService, confirmationService, translateService, messageService, generalPipe) {
|
|
105
110
|
this.menuService = menuService;
|
|
106
111
|
this.notificationBusService = notificationBusService;
|
|
@@ -113,6 +118,7 @@ export class FuenteReporteComponent {
|
|
|
113
118
|
this.generalPipe = generalPipe;
|
|
114
119
|
}
|
|
115
120
|
ngOnInit() {
|
|
121
|
+
console.log('hola');
|
|
116
122
|
this.listaColumnas = [];
|
|
117
123
|
this.campos = [];
|
|
118
124
|
this.listaJoin = [];
|
|
@@ -141,10 +147,11 @@ export class FuenteReporteComponent {
|
|
|
141
147
|
async load(event) {
|
|
142
148
|
try {
|
|
143
149
|
this.loading = true;
|
|
144
|
-
this.
|
|
145
|
-
this.filtro.
|
|
146
|
-
|
|
147
|
-
|
|
150
|
+
this.filtro.paginacionRegistroInicial = event?.first != null ? event?.first : 0;
|
|
151
|
+
this.filtro.paginacionRegistroFinal = event?.rows != null ? event?.rows : 10;
|
|
152
|
+
this.filtro.origen = ("F");
|
|
153
|
+
this.filtro.descripcion = event?.filters.descripcion?.value ? ConstantesGenerales.PORCENTAJE + event?.filters.descripcion?.value + ConstantesGenerales.PORCENTAJE : null;
|
|
154
|
+
this.paginador = await this.reportesSvc.consultarFuenteDato(this.filtro).toPromise();
|
|
148
155
|
this.paginator.totalRecords = await this.reportesSvc.cantidadFuenteDato(this.filtro).toPromise();
|
|
149
156
|
}
|
|
150
157
|
catch (e) {
|
|
@@ -152,13 +159,6 @@ export class FuenteReporteComponent {
|
|
|
152
159
|
}
|
|
153
160
|
this.loading = false;
|
|
154
161
|
}
|
|
155
|
-
colocarFiltro() {
|
|
156
|
-
this.filtro.origen = ("F");
|
|
157
|
-
this.filtro.descripcion = (null);
|
|
158
|
-
if (this.utilsService.isNotBlank(this.descripcion)) {
|
|
159
|
-
this.filtro.descripcion = (ConstantesGenerales.PORCENTAJE + this.descripcion + ConstantesGenerales.PORCENTAJE);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
162
|
limpiarCampos() {
|
|
163
163
|
this.descripcion = null;
|
|
164
164
|
}
|
|
@@ -237,7 +237,6 @@ export class FuenteReporteComponent {
|
|
|
237
237
|
campo.alias = col.nombre;
|
|
238
238
|
this.camposSeleccionar.push(campo);
|
|
239
239
|
}
|
|
240
|
-
console.log('camposSeleccionar', this.camposSeleccionar);
|
|
241
240
|
}
|
|
242
241
|
async terminarPasos() {
|
|
243
242
|
this.loadingGenerar = true;
|
|
@@ -307,8 +306,10 @@ export class FuenteReporteComponent {
|
|
|
307
306
|
async eliminar() {
|
|
308
307
|
this.confirmationService.confirm({
|
|
309
308
|
target: event.target,
|
|
310
|
-
|
|
311
|
-
|
|
309
|
+
key: 'eliminar',
|
|
310
|
+
message: this.generalPipe.MENSAJE_ELIMINAR_CONFIRMAR,
|
|
311
|
+
acceptLabel: this.generalPipe.SI_DESC,
|
|
312
|
+
header: this.translateService.instant('confirmar'),
|
|
312
313
|
accept: () => {
|
|
313
314
|
this.setRespuesta(true);
|
|
314
315
|
},
|
|
@@ -320,7 +321,7 @@ export class FuenteReporteComponent {
|
|
|
320
321
|
try {
|
|
321
322
|
if (respuesta) {
|
|
322
323
|
this.reportesSvc.eliminarFuenteDatosConHijos(this.fuente).toPromise();
|
|
323
|
-
this.
|
|
324
|
+
this.regresar();
|
|
324
325
|
this.notificationBusService.showInfo("La fuente ha sido eliminada.");
|
|
325
326
|
}
|
|
326
327
|
}
|
|
@@ -340,13 +341,19 @@ export class FuenteReporteComponent {
|
|
|
340
341
|
}
|
|
341
342
|
async validarQuery() {
|
|
342
343
|
try {
|
|
343
|
-
if (this.utilsService.validarTextoSQL(this.query, true, true, 8000, true)) {
|
|
344
|
+
if (this.utilsService.validarTextoSQL(this.query, true, true, 8000, true) == null) {
|
|
344
345
|
this.reportesSvc.validarQuery(this.query);
|
|
346
|
+
this.errorQuery = false;
|
|
345
347
|
this.notificationBusService.showInfo("El query esta correcto.");
|
|
346
348
|
}
|
|
349
|
+
else {
|
|
350
|
+
this.errorQuery = true;
|
|
351
|
+
this.notificationBusService.showError(this.utilsService.validarTextoSQL(this.query, true, true, 8000, true));
|
|
352
|
+
}
|
|
347
353
|
}
|
|
348
354
|
catch (e) {
|
|
349
|
-
|
|
355
|
+
this.errorQuery = true;
|
|
356
|
+
this.notificationBusService.showError(e);
|
|
350
357
|
}
|
|
351
358
|
}
|
|
352
359
|
adicionarJoin() {
|
|
@@ -390,7 +397,7 @@ export class FuenteReporteComponent {
|
|
|
390
397
|
try {
|
|
391
398
|
//TablaFrom tabla = (TablaFrom) ((UIParameter) ae.getComponent().findComponent("tabla")).getValue();
|
|
392
399
|
this.tablasFrom = this.tablasFrom.filter((data) => data != ae);
|
|
393
|
-
this.notificationBusService.showWarning(
|
|
400
|
+
this.notificationBusService.showWarning(this.generalPipe.MENSAJE_ELIMINAR);
|
|
394
401
|
}
|
|
395
402
|
catch (e) {
|
|
396
403
|
console.error(e);
|
|
@@ -476,12 +483,9 @@ export class FuenteReporteComponent {
|
|
|
476
483
|
try {
|
|
477
484
|
let vars = [];
|
|
478
485
|
for (let col of this.columnas) {
|
|
479
|
-
|
|
480
|
-
let var1;
|
|
481
|
-
var1.nombre = (col.reporteFuente + "." + col.nombre);
|
|
482
|
-
var1.tipo(col.tipoDato);
|
|
483
|
-
vars.push(var1);
|
|
486
|
+
vars.push({ nombre: col.reporteFuente + "." + col.nombre, tipo: col.tipoDato });
|
|
484
487
|
}
|
|
488
|
+
this.popupEditorFormula.editar(this.fuente.whereAdicional, 'fuenteUI.fuente.whereAdicional', vars);
|
|
485
489
|
//getBean(EditorFormulaUI.class).editar(fuente.getWhereAdicional(), "fuenteUI.fuente.whereAdicional", vars);
|
|
486
490
|
}
|
|
487
491
|
catch (e) {
|
|
@@ -539,7 +543,7 @@ export class FuenteReporteComponent {
|
|
|
539
543
|
col.fuenteDato = (this.fuente.llave);
|
|
540
544
|
this.campos = await this.reportesSvc.consultarColumnasFuente(col).toPromise();
|
|
541
545
|
this.actual = 0;
|
|
542
|
-
this.menuService.setBreadcrumb([{ label: 'Fuente Reporte', }, { label: 'Mantenimiento Fuente' }]);
|
|
546
|
+
this.menuService.setBreadcrumb([{ label: 'Fuente Reporte', command: (event) => this.regresar() }, { label: 'Mantenimiento Fuente', }]);
|
|
543
547
|
this.cargasOpciones();
|
|
544
548
|
}
|
|
545
549
|
catch (e) {
|
|
@@ -551,11 +555,11 @@ export class FuenteReporteComponent {
|
|
|
551
555
|
this.vistaVisualizar = 'mantenimiento';
|
|
552
556
|
this.fuente = new FuenteDatoModel();
|
|
553
557
|
this.fuente.origen = ("F");
|
|
554
|
-
this.campos =
|
|
558
|
+
this.campos = [];
|
|
555
559
|
this.query = null;
|
|
556
560
|
this.tabPrincipal = 0;
|
|
557
561
|
this.actual = 0;
|
|
558
|
-
this.menuService.setBreadcrumb([{ label: 'Fuente Reporte', }, { label: 'Mantenimiento Fuente' }]);
|
|
562
|
+
this.menuService.setBreadcrumb([{ label: 'Fuente Reporte', command: (event) => this.regresar() }, { label: 'Mantenimiento Fuente', }]);
|
|
559
563
|
this.cargasOpciones();
|
|
560
564
|
}
|
|
561
565
|
catch (e) {
|
|
@@ -569,6 +573,7 @@ export class FuenteReporteComponent {
|
|
|
569
573
|
];
|
|
570
574
|
}
|
|
571
575
|
regresar() {
|
|
576
|
+
console.log('hola');
|
|
572
577
|
this.vistaVisualizar = null;
|
|
573
578
|
this.ngOnInit();
|
|
574
579
|
}
|
|
@@ -597,12 +602,16 @@ export class FuenteReporteComponent {
|
|
|
597
602
|
if (this.fuente.llave == null) {
|
|
598
603
|
this.fuente.llave = (this.utilsService.generarLlave());
|
|
599
604
|
await this.reportesSvc.insertarFuenteDato(this.fuente).toPromise();
|
|
605
|
+
this.cargasOpciones();
|
|
600
606
|
}
|
|
601
607
|
else {
|
|
602
608
|
await this.reportesSvc.actualizarFuenteDato(this.fuente).toPromise();
|
|
603
609
|
}
|
|
604
610
|
this.notificationBusService.showInfo("Los cambios han sido guardados");
|
|
605
611
|
}
|
|
612
|
+
else {
|
|
613
|
+
this.notificationBusService.showError(this.generalPipe.MENSAJE_CAMPOS_OBLIGATORIOS);
|
|
614
|
+
}
|
|
606
615
|
}
|
|
607
616
|
catch (e) {
|
|
608
617
|
console.error(e);
|
|
@@ -648,6 +657,7 @@ export class FuenteReporteComponent {
|
|
|
648
657
|
async construirColumnas() {
|
|
649
658
|
try {
|
|
650
659
|
this.campos = await this.reportesSvc.getColumnasSql(this.query).toPromise();
|
|
660
|
+
this.notificationBusService.showSuccess('Tabla generada satisfactoriamente.');
|
|
651
661
|
}
|
|
652
662
|
catch (e) {
|
|
653
663
|
console.error(e);
|
|
@@ -736,14 +746,22 @@ export class FuenteReporteComponent {
|
|
|
736
746
|
todosSeleccionados() {
|
|
737
747
|
return this.camposSeleccionar.every(elemento => elemento.seleccionado);
|
|
738
748
|
}
|
|
749
|
+
isQueryValido() {
|
|
750
|
+
return this.utilsService.validarTextoSQL(this.query, true, true, 8000, true) == null;
|
|
751
|
+
}
|
|
739
752
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, deps: [{ token: i1.MenuService }, { token: i2.ToastService }, { token: i3.ReportesService }, { token: i4.GeneralService }, { token: i5.UtilsService }, { token: i6.ConfirmationService }, { token: i7.TranslateService }, { token: i6.MessageService }, { token: i8.GeneralPipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
740
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FuenteReporteComponent, isStandalone: true, selector: "app-fuente-reporte", providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "popupTablasFuenteUI", first: true, predicate: ["popupTablasFuenteUI"], descendants: true }], ngImport: i0, template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView [(activeIndex)]=\"tabPrincipal\">\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Fuente\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-secondary\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n [totalRecords]=\"campos.length\" [paginator]=\"camposSeleccionar.length > 10\" [rows]=\"10\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n\r\n <div class=\"cardInstrucciones mt-4 mb-3\" style=\"margin-bottom: 0px !important;\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\" style=\"margin-top: 2%;\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-outlined\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\"\r\n [outlined]=\"true\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-outlined\"\r\n [outlined]=\"true\" *ngIf=\"actual != 3\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n\r\n <button pButton label=\"{{'terminar' | translate}}\" icon=\"pi pi-angle-right\" (click)=\"siguiente()\"\r\n *ngIf=\"actual === 3\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary p-2 ml-2\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" *ngIf=\"cargarPaso\" />\r\n\r\n <div class=\"mt-2\" *ngIf=\"!cargarPaso\">\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2 mt-3\"></button>\r\n </div>\r\n <div>\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n [totalRecords]=\"tablasFrom.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"tablasFrom.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n <div class=\"mt-3\">\r\n <h4>{{'foranea'| translate}}</h4>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n selectionMode=\"single\" scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" (onRowSelect)=\"adicionarForanea($event)\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'campo' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pSelectableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n \r\n <div class=\"card mt-3\">\r\n <div class=\"tabla-planta-personal\"\r\n style=\"padding: 0% !important;background: transparent !important;height: auto !important;\">\r\n <div class=\"flex justify-content-between align-items-center mb-2 mt-2\">\r\n <h4>{{'join'| translate}}</h4>\r\n <button pButton label=\"{{'agregar' | translate}} {{'join' | translate}}\" (click)=\"nuevoJoin()\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"joinsFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\"\r\n [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:45%\">{{'campo' | translate}} 1</th>\r\n <th style=\"width:5%\">{{'=' | translate}}</th>\r\n <th style=\"width:45%\">{{'campo' | translate}} 2</th>\r\n <th>{{'' | translate}}</th>\r\n </tr>\r\n <tr class=\" TablaNuevoRegistro\" *ngIf=\"verNuevoJoin\">\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaColumnas\" optionValue=\"value\" [(ngModel)]=\"col1\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\" (onChange)=\"cambioJoin($event)\"></p-dropdown>\r\n </td>\r\n <td style=\"width:5%\">=</td>\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaJoin\" optionValue=\"value\" [(ngModel)]=\"col2\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\"></p-dropdown>\r\n </td>\r\n\r\n <td class=\"flex justify-content-end\">\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-check\" (click)=\"adicionarJoin()\"\r\n class=\"p-element p-ripple p-button-rounded p-button-success mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"cancelarNuevoJoin()\"\r\n icon=\"pi pi-times\"\r\n class=\"p-element p-ripple p-button-rounded p-button-danger mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:45%\">\r\n {{tabla.columna1}}\r\n </td>\r\n <td style=\"width:5%\">\r\n {{'='}}\r\n </td>\r\n <td style=\"width:45%\">\r\n {{tabla.columna2}}\r\n </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarJoin(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n <div class=\"mt-3\">\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\"\r\n [(ngModel)]=\"seleccionGeneral\" [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\"\r\n inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"], dependencies: [{ kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i9.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i11.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: PopupTablasFuenteComponent, selector: "app-popup-tablas-fuente", outputs: ["aplicarDestinoOcultar"] }, { kind: "ngmodule", type: StepsModule }, { kind: "component", type: i12.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass", "exact"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i14.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i14.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i15.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: i16.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i17.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i18.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i19.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i20.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i20.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i20.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i20.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "component", type: TablaGeneralComponent, selector: "app-tabla-general", inputs: ["dataKey", "value", "columns", "rows", "totalRecords", "loading", "ocultarFraccionador"], outputs: ["onLoad", "onRowSelect"] }, { kind: "component", type: FiltroGeneralComponent, selector: "app-filtro-general", inputs: ["filtros", "datatable"], outputs: ["metodoRegresar", "metodoRegresarAdicional"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i19.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i19.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i21.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ConfirmPopupModule }] });
|
|
753
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FuenteReporteComponent, isStandalone: true, selector: "app-fuente-reporte", providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "popupTablasFuenteUI", first: true, predicate: ["popupTablasFuenteUI"], descendants: true }, { propertyName: "popupEditorFormula", first: true, predicate: ["popupEditorFormula"], descendants: true }], ngImport: i0, template: "<p-confirmDialog #cd key=\"eliminar\">\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"mt-3\">\r\n <button type=\"button\"\r\n class=\"p-button-outlined-button-secondary p-button-outlined p-button p-component\" pButton\r\n icon=\"pi pi-times\" label=\"No\" (click)=\"cd.reject()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-check\" label=\"Si\" class=\"p-button-raised\"\r\n (click)=\"cd.accept()\"></button>\r\n </div>\r\n </ng-template>\r\n</p-confirmDialog>\r\n@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView [(activeIndex)]=\"tabPrincipal\">\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n [class.ng-dirty]=\"(!utilsService.validarCampoObligatorio(fuente.descripcion) && clickGuardar)\"\r\n [class.ng-invalid]=\"(!utilsService.validarCampoObligatorio(fuente.descripcion) && clickGuardar)\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n [class.ng-dirty]=\"((!isQueryValido() && clickGuardar) || errorQuery)\"\r\n [class.ng-invalid]=\"((!isQueryValido() && clickGuardar) || errorQuery)\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button> \r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\" *ngIf=\"\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Fuente\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-secondary\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n [totalRecords]=\"campos.length\" [paginator]=\"campos.length > 10\" [rows]=\"10\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n\r\n <div class=\"cardInstrucciones mt-4 mb-3\" style=\"margin-bottom: 0px !important;\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\" style=\"margin-top: 2%;\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-outlined\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\"\r\n [outlined]=\"true\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-outlined\"\r\n [outlined]=\"true\" *ngIf=\"actual != 3\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n\r\n <button pButton label=\"{{'terminar' | translate}}\" icon=\"pi pi-angle-right\" (click)=\"siguiente()\"\r\n *ngIf=\"actual === 3\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary p-2 ml-2\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" *ngIf=\"cargarPaso\" />\r\n\r\n <div class=\"mt-2\" *ngIf=\"!cargarPaso\">\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2 mt-3\"></button>\r\n </div>\r\n <div>\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n [totalRecords]=\"tablasFrom.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"tablasFrom.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n <div class=\"mt-3\">\r\n <h4>{{'foranea'| translate}}</h4>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n selectionMode=\"single\" scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" (onRowSelect)=\"adicionarForanea($event)\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'campo' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pSelectableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n \r\n <div class=\"card mt-3\">\r\n <div class=\"tabla-planta-personal\"\r\n style=\"padding: 0% !important;background: transparent !important;height: auto !important;\">\r\n <div class=\"flex justify-content-between align-items-center mb-2 mt-2\">\r\n <h4>{{'join'| translate}}</h4>\r\n <button pButton label=\"{{'agregar' | translate}} {{'join' | translate}}\" (click)=\"nuevoJoin()\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"joinsFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\"\r\n [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:45%\">{{'campo' | translate}} 1</th>\r\n <th style=\"width:5%\">{{'=' | translate}}</th>\r\n <th style=\"width:45%\">{{'campo' | translate}} 2</th>\r\n <th>{{'' | translate}}</th>\r\n </tr>\r\n <tr class=\" TablaNuevoRegistro\" *ngIf=\"verNuevoJoin\">\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaColumnas\" optionValue=\"value\" [(ngModel)]=\"col1\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\" (onChange)=\"cambioJoin($event)\"></p-dropdown>\r\n </td>\r\n <td style=\"width:5%\">=</td>\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaJoin\" optionValue=\"value\" [(ngModel)]=\"col2\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\"></p-dropdown>\r\n </td>\r\n\r\n <td class=\"flex justify-content-end\">\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-check\" (click)=\"adicionarJoin()\"\r\n class=\"p-element p-ripple p-button-rounded p-button-success mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"cancelarNuevoJoin()\"\r\n icon=\"pi pi-times\"\r\n class=\"p-element p-ripple p-button-rounded p-button-danger mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:45%\">\r\n {{tabla.columna1}}\r\n </td>\r\n <td style=\"width:5%\">\r\n {{'='}}\r\n </td>\r\n <td style=\"width:45%\">\r\n {{tabla.columna2}}\r\n </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarJoin(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n \r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <div class=\"col-12 flex p-0\">\r\n <span class=\"p-float-label w-full\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n <!-- VER ATRIBUTOS -->\r\n <button pButton pRipple class=\"m-2 mb-1 p-button p-button-rounded p-button-secondary\"\r\n icon=\"glyphicons glyphicons-justify\" (click)=\"editarWhere()\" pTooltip=\"{{'atributo' | translate}}s\"\r\n tooltipPosition=\"bottom\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n <div class=\"mt-3\">\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\"\r\n [(ngModel)]=\"seleccionGeneral\" [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\"\r\n inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n<app-popup-editor-formula #popupEditorFormula></app-popup-editor-formula>\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"], dependencies: [{ kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i9.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i11.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: PopupTablasFuenteComponent, selector: "app-popup-tablas-fuente", outputs: ["aplicarDestinoOcultar"] }, { kind: "ngmodule", type: StepsModule }, { kind: "component", type: i12.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass", "exact"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i14.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i14.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i15.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: i16.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i17.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i18.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i19.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i20.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i20.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i20.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i20.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "component", type: TablaGeneralComponent, selector: "app-tabla-general", inputs: ["dataKey", "value", "columns", "rows", "totalRecords", "loading", "ocultarFraccionador"], outputs: ["onLoad", "onRowSelect"] }, { kind: "component", type: FiltroGeneralComponent, selector: "app-filtro-general", inputs: ["filtros", "datatable"], outputs: ["metodoRegresar", "metodoRegresarAdicional"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i19.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i19.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i21.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i22.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "component", type: PopupEditorFormulaComponent, selector: "app-popup-editor-formula" }] });
|
|
741
754
|
}
|
|
742
755
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, decorators: [{
|
|
743
756
|
type: Component,
|
|
744
|
-
args: [{ selector: 'app-fuente-reporte', standalone: true, imports: [ProgressBarModule, TooltipModule, CheckboxModule, PopupTablasFuenteComponent, StepsModule, CommonModule, TabViewModule, SplitButtonModule, NgIf, TranslateModule, InputTextModule, CommonModule, AccordionModule, DropdownModule, FormsModule, TableModule, TablaGeneralComponent, FiltroGeneralComponent, ButtonModule, ReactiveFormsModule, GeneralPipe, InputTextareaModule, ConfirmPopupModule, ButtonModule], providers: [MessageService, ConfirmationService], template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView [(activeIndex)]=\"tabPrincipal\">\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Fuente\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-secondary\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n [totalRecords]=\"campos.length\" [paginator]=\"camposSeleccionar.length > 10\" [rows]=\"10\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n\r\n <div class=\"cardInstrucciones mt-4 mb-3\" style=\"margin-bottom: 0px !important;\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\" style=\"margin-top: 2%;\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-outlined\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\"\r\n [outlined]=\"true\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-outlined\"\r\n [outlined]=\"true\" *ngIf=\"actual != 3\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n\r\n <button pButton label=\"{{'terminar' | translate}}\" icon=\"pi pi-angle-right\" (click)=\"siguiente()\"\r\n *ngIf=\"actual === 3\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary p-2 ml-2\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" *ngIf=\"cargarPaso\" />\r\n\r\n <div class=\"mt-2\" *ngIf=\"!cargarPaso\">\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2 mt-3\"></button>\r\n </div>\r\n <div>\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n [totalRecords]=\"tablasFrom.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"tablasFrom.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n <div class=\"mt-3\">\r\n <h4>{{'foranea'| translate}}</h4>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n selectionMode=\"single\" scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" (onRowSelect)=\"adicionarForanea($event)\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'campo' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pSelectableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n \r\n <div class=\"card mt-3\">\r\n <div class=\"tabla-planta-personal\"\r\n style=\"padding: 0% !important;background: transparent !important;height: auto !important;\">\r\n <div class=\"flex justify-content-between align-items-center mb-2 mt-2\">\r\n <h4>{{'join'| translate}}</h4>\r\n <button pButton label=\"{{'agregar' | translate}} {{'join' | translate}}\" (click)=\"nuevoJoin()\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"joinsFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\"\r\n [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:45%\">{{'campo' | translate}} 1</th>\r\n <th style=\"width:5%\">{{'=' | translate}}</th>\r\n <th style=\"width:45%\">{{'campo' | translate}} 2</th>\r\n <th>{{'' | translate}}</th>\r\n </tr>\r\n <tr class=\" TablaNuevoRegistro\" *ngIf=\"verNuevoJoin\">\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaColumnas\" optionValue=\"value\" [(ngModel)]=\"col1\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\" (onChange)=\"cambioJoin($event)\"></p-dropdown>\r\n </td>\r\n <td style=\"width:5%\">=</td>\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaJoin\" optionValue=\"value\" [(ngModel)]=\"col2\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\"></p-dropdown>\r\n </td>\r\n\r\n <td class=\"flex justify-content-end\">\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-check\" (click)=\"adicionarJoin()\"\r\n class=\"p-element p-ripple p-button-rounded p-button-success mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"cancelarNuevoJoin()\"\r\n icon=\"pi pi-times\"\r\n class=\"p-element p-ripple p-button-rounded p-button-danger mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:45%\">\r\n {{tabla.columna1}}\r\n </td>\r\n <td style=\"width:5%\">\r\n {{'='}}\r\n </td>\r\n <td style=\"width:45%\">\r\n {{tabla.columna2}}\r\n </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarJoin(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n <div class=\"mt-3\">\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\"\r\n [(ngModel)]=\"seleccionGeneral\" [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\"\r\n inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"] }]
|
|
757
|
+
args: [{ selector: 'app-fuente-reporte', standalone: true, imports: [ProgressBarModule, TooltipModule, CheckboxModule, PopupTablasFuenteComponent, StepsModule, CommonModule, TabViewModule, SplitButtonModule, NgIf,
|
|
758
|
+
TranslateModule, InputTextModule, CommonModule, AccordionModule, DropdownModule, FormsModule, TableModule, TablaGeneralComponent, FiltroGeneralComponent,
|
|
759
|
+
ButtonModule, ReactiveFormsModule, GeneralPipe, InputTextareaModule, ConfirmPopupModule, ButtonModule, ConfirmDialogModule, PopupEditorFormulaComponent], providers: [MessageService, ConfirmationService], template: "<p-confirmDialog #cd key=\"eliminar\">\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"mt-3\">\r\n <button type=\"button\"\r\n class=\"p-button-outlined-button-secondary p-button-outlined p-button p-component\" pButton\r\n icon=\"pi pi-times\" label=\"No\" (click)=\"cd.reject()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-check\" label=\"Si\" class=\"p-button-raised\"\r\n (click)=\"cd.accept()\"></button>\r\n </div>\r\n </ng-template>\r\n</p-confirmDialog>\r\n@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView [(activeIndex)]=\"tabPrincipal\">\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n [class.ng-dirty]=\"(!utilsService.validarCampoObligatorio(fuente.descripcion) && clickGuardar)\"\r\n [class.ng-invalid]=\"(!utilsService.validarCampoObligatorio(fuente.descripcion) && clickGuardar)\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n [class.ng-dirty]=\"((!isQueryValido() && clickGuardar) || errorQuery)\"\r\n [class.ng-invalid]=\"((!isQueryValido() && clickGuardar) || errorQuery)\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button> \r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\" *ngIf=\"\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Fuente\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-secondary\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n [totalRecords]=\"campos.length\" [paginator]=\"campos.length > 10\" [rows]=\"10\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n\r\n <div class=\"cardInstrucciones mt-4 mb-3\" style=\"margin-bottom: 0px !important;\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\" style=\"margin-top: 2%;\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-outlined\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\"\r\n [outlined]=\"true\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-outlined\"\r\n [outlined]=\"true\" *ngIf=\"actual != 3\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n\r\n <button pButton label=\"{{'terminar' | translate}}\" icon=\"pi pi-angle-right\" (click)=\"siguiente()\"\r\n *ngIf=\"actual === 3\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary p-2 ml-2\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" *ngIf=\"cargarPaso\" />\r\n\r\n <div class=\"mt-2\" *ngIf=\"!cargarPaso\">\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2 mt-3\"></button>\r\n </div>\r\n <div>\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n [totalRecords]=\"tablasFrom.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"tablasFrom.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n <div class=\"mt-3\">\r\n <h4>{{'foranea'| translate}}</h4>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n selectionMode=\"single\" scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" (onRowSelect)=\"adicionarForanea($event)\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'campo' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pSelectableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n \r\n <div class=\"card mt-3\">\r\n <div class=\"tabla-planta-personal\"\r\n style=\"padding: 0% !important;background: transparent !important;height: auto !important;\">\r\n <div class=\"flex justify-content-between align-items-center mb-2 mt-2\">\r\n <h4>{{'join'| translate}}</h4>\r\n <button pButton label=\"{{'agregar' | translate}} {{'join' | translate}}\" (click)=\"nuevoJoin()\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"joinsFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\"\r\n [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:45%\">{{'campo' | translate}} 1</th>\r\n <th style=\"width:5%\">{{'=' | translate}}</th>\r\n <th style=\"width:45%\">{{'campo' | translate}} 2</th>\r\n <th>{{'' | translate}}</th>\r\n </tr>\r\n <tr class=\" TablaNuevoRegistro\" *ngIf=\"verNuevoJoin\">\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaColumnas\" optionValue=\"value\" [(ngModel)]=\"col1\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\" (onChange)=\"cambioJoin($event)\"></p-dropdown>\r\n </td>\r\n <td style=\"width:5%\">=</td>\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaJoin\" optionValue=\"value\" [(ngModel)]=\"col2\"\r\n appendTo=\"body\" [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\"\r\n optionLabel=\"label\"></p-dropdown>\r\n </td>\r\n\r\n <td class=\"flex justify-content-end\">\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-check\" (click)=\"adicionarJoin()\"\r\n class=\"p-element p-ripple p-button-rounded p-button-success mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"cancelarNuevoJoin()\"\r\n icon=\"pi pi-times\"\r\n class=\"p-element p-ripple p-button-rounded p-button-danger mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:45%\">\r\n {{tabla.columna1}}\r\n </td>\r\n <td style=\"width:5%\">\r\n {{'='}}\r\n </td>\r\n <td style=\"width:45%\">\r\n {{tabla.columna2}}\r\n </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarJoin(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n \r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <div class=\"col-12 flex p-0\">\r\n <span class=\"p-float-label w-full\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n <!-- VER ATRIBUTOS -->\r\n <button pButton pRipple class=\"m-2 mb-1 p-button p-button-rounded p-button-secondary\"\r\n icon=\"glyphicons glyphicons-justify\" (click)=\"editarWhere()\" pTooltip=\"{{'atributo' | translate}}s\"\r\n tooltipPosition=\"bottom\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n <div class=\"mt-3\">\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\"\r\n [(ngModel)]=\"seleccionGeneral\" [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\"\r\n inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n<app-popup-editor-formula #popupEditorFormula></app-popup-editor-formula>\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"] }]
|
|
745
760
|
}], ctorParameters: () => [{ type: i1.MenuService }, { type: i2.ToastService }, { type: i3.ReportesService }, { type: i4.GeneralService }, { type: i5.UtilsService }, { type: i6.ConfirmationService }, { type: i7.TranslateService }, { type: i6.MessageService }, { type: i8.GeneralPipe }], propDecorators: { popupTablasFuenteUI: [{
|
|
746
761
|
type: ViewChild,
|
|
747
762
|
args: ['popupTablasFuenteUI']
|
|
763
|
+
}], popupEditorFormula: [{
|
|
764
|
+
type: ViewChild,
|
|
765
|
+
args: ['popupEditorFormula']
|
|
748
766
|
}] } });
|
|
749
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQVksY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDeEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFFM0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDNUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZeEQsTUFBTSxPQUFPLHNCQUFzQjtJQTBDZDtJQUFpQztJQUE4QztJQUFzQztJQUFtQztJQUFvQztJQUFrRDtJQUMxUDtJQUF3QztJQXpDekMsTUFBTSxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ2hELGVBQWUsQ0FBUTtJQUN2QixVQUFVLEdBQXFCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtJQUNwRCxTQUFTLEdBQW9CLEVBQUUsQ0FBQyxDQUFHLGdCQUFnQjtJQUNuRCxRQUFRLEdBQTBCLEVBQUUsQ0FBQztJQUNyQyxhQUFhLEdBQVUsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBVSxFQUFFLENBQUM7SUFDdEIsSUFBSSxDQUFTO0lBQ2IsSUFBSSxDQUFTO0lBQ2IsTUFBTSxHQUF5QixFQUFFLENBQUM7SUFDbEMsaUJBQWlCLEdBQXlCLEVBQUUsQ0FBQztJQUM3QyxrQkFBa0IsQ0FBVTtJQUM1QixZQUFZLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUM1RCxNQUFNLENBQVM7SUFDZixZQUFZLENBQVM7SUFDckIsTUFBTSxDQUFVO0lBQ2hCLGdCQUFnQixDQUFVO0lBQzFCLFFBQVEsR0FBVSxFQUFFLENBQUM7SUFDckIsV0FBVyxDQUFTO0lBQ3BCLEtBQUssQ0FBUztJQUNkLFNBQVMsR0FBc0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNoRCxTQUFTLEdBQUc7UUFDbEIsSUFBSSxFQUFFLEVBQUU7UUFDUixZQUFZLEVBQUUsQ0FBQztLQUNmLENBQUM7SUFDSyxPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ25CLE9BQU8sR0FBVyxFQUFFLENBQUM7SUFDdkIsT0FBTyxDQUFXO0lBQ2xCLElBQUksR0FBZSxFQUFFLENBQUM7SUFDdEIsS0FBSyxHQUFlLEVBQUUsQ0FBQztJQUN2QixZQUFZLEdBQXVCLElBQUksR0FBRyxFQUFpQixDQUFDO0lBQ2pDLG1CQUFtQixDQUE2QjtJQUMzRSxTQUFTLEdBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFBO0lBQzlDLFlBQVksQ0FBVTtJQUN0QixZQUFZLENBQVU7SUFDdEIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUN4QixVQUFVLENBQVU7SUFDM0IsY0FBYyxDQUFVO0lBRXhCLFlBQW9CLFdBQXdCLEVBQVMsc0JBQW9DLEVBQVUsV0FBNEIsRUFBVSxVQUEwQixFQUFTLFlBQTBCLEVBQVUsbUJBQXdDLEVBQVUsZ0JBQWtDLEVBQzVSLGNBQThCLEVBQVUsV0FBd0I7UUFEcEQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWM7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDNVIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBRTdFLFFBQVE7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiO2dCQUNELEtBQUssRUFBRyxhQUFhO2dCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxHQUFHO2FBQ1I7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiO2dCQUNELEtBQUssRUFBRSxhQUFhO2dCQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQ3BELFNBQVMsRUFBRSxVQUFVO2FBQ25CO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLO1FBQ3RCLElBQUksQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUUsSUFBSSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1RSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsRyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUUsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxhQUFhO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEgsQ0FBQztJQUNGLENBQUM7SUFHTSxhQUFhO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNyQixJQUFJLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO3dCQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsOEJBQThCOzRCQUNoRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7NEJBQzdFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDOzRCQUN4QixPQUFPO3dCQUNSLENBQUM7NkJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHlEQUF5RDs0QkFDbEcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNmLENBQUM7NkJBQU0sQ0FBQzs0QkFDUCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7NEJBQ3ZCLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQ0FDMUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ2pDLENBQUM7NEJBQ0YsQ0FBQzs0QkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs0QkFDbkIscUJBQXFCOzRCQUNyQixJQUFJLE1BQU0sR0FBd0IsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDOUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0NBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29DQUNqRCxLQUFLLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO3dDQUM1QixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7NENBQ2xHLElBQUksS0FBSyxHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7NENBQ3pELEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRDQUMxQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0Q0FDMUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRDQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3Q0FDM0IsQ0FBQztvQ0FDRixDQUFDO2dDQUNGLENBQUM7NEJBQ0YsQ0FBQzt3QkFFRixDQUFDO3dCQUVELG1EQUFtRDt3QkFFbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO3dCQUU1QixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFDbEMsb0JBQW9COzRCQUNwQixJQUFJLEVBQUUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7NEJBQ25DLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2hDLDBCQUEwQjs0QkFDMUIsSUFBSSxNQUFNLEdBQTBCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQ25LLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMvQyxDQUFDO29CQUVGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNmLENBQUM7cUJBQU0sQ0FBQztvQkFDUCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztRQUNGLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO0lBQ0YsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUE2QixFQUFFLEtBQWE7UUFDOUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdEgsSUFBSSxLQUFLLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXpELENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDM0UsQ0FBQyxFQUFFLENBQUM7WUFDTCxDQUFDO1FBQ0YsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLG1CQUFtQixHQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xHLElBQUksd0JBQXdCLEdBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUN2RCxLQUFLLEdBQUcsV0FBVyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ3ZELEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQ2hGLENBQUM7aUJBQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ2pDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQ3JDLENBQUM7UUFDRixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0osSUFBSSxHQUFHLEdBQUcsV0FBVyxHQUFHLFNBQVMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQy9FLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUM7SUFDRixDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU07UUFDbkMsSUFBSSxDQUFDO1lBQ0osZ0JBQWdCO1lBQ2hCLElBQUksT0FBTyxHQUF1QixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzlDLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxJQUFJLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELElBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQztvQkFDbkcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFBO2dCQUM5RSxDQUFDO3FCQUFJLENBQUM7b0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFFRixDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDRixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztZQUNoQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDeEQsSUFBSSxFQUFFLFdBQVc7WUFDakIsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3hCLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBRWIsQ0FBQztTQUNELENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQWtCO1FBQzNDLElBQUksQ0FBQztZQUNKLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNGLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0YsQ0FBQztJQUVNLFFBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDLENBQUM7WUFDckIsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztpQkFBSSxDQUFDO2dCQUNMLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDRCxDQUFDO0lBRUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUksQ0FBQztZQUVKLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixxRUFBcUU7UUFDdEUsQ0FBQztJQUNGLENBQUM7SUFFTSxhQUFhO1FBQ25CLElBQUksQ0FBQztZQUNKLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDNUMsOEJBQThCO2dCQUM5QixJQUFJLEtBQUssR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNoQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDRixDQUFDO0lBRUQsU0FBUztRQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUksRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUI7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBSSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLFlBQVksQ0FBQyxFQUFFO1FBQ3JCLElBQUksQ0FBQztZQUNKLDRGQUE0RjtZQUM1RixJQUFJLENBQUMsU0FBUyxHQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNGLENBQUM7SUFFTSxhQUFhLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUM7WUFDSixvR0FBb0c7WUFDcEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNGLENBQUM7SUFFTSxXQUFXO1FBQ2pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU0sb0JBQW9CLENBQUMsaUJBQXdCO1FBQ25ELElBQUksQ0FBQztZQUNKLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0YsQ0FBQztZQUNELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0YsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWE7UUFDdkMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsSUFBSSxTQUFTLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQTtRQUNwQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDL0IsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBSU0sVUFBVSxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNyQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsb0JBQW9CO2dCQUNwQixJQUFJLEdBQUcsR0FBd0IsSUFBSSxDQUFDO2dCQUNwQyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxLQUFLLElBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEQsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDVixNQUFNO29CQUNQLENBQUM7Z0JBQ0YsQ0FBQztnQkFDRCxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEgsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO2dCQUNGLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDRixDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQU07UUFDeEIsSUFBSSxDQUFDO1lBQ0osSUFBSSxHQUFHLEdBQXVCLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7WUFDeEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQy9CLElBQUksSUFBUyxDQUFDO2dCQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUNELHFGQUFxRjtRQUN0RixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNGLENBQUM7SUFFTSxXQUFXO1FBQ2pCLElBQUksQ0FBQztZQUNKLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNkLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixrQkFBa0I7Z0JBQ2xCLElBQUksSUFBSSxDQUFDO2dCQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCw0R0FBNEc7UUFDN0csQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDRixDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQU87UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFTSxpQkFBaUI7UUFDdkIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN4QyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVNLG9CQUFvQjtRQUMxQixJQUFJLENBQUM7WUFDSixLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDdEIsbUJBQW1CO29CQUNuQixJQUFJLEtBQUssR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN2QyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0YsQ0FBQztJQUVNLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU07UUFDN0IsSUFBSSxDQUFDO1lBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDdkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNoQyxDQUFDO1lBQ0QsbUJBQW1CO1lBQ25CLElBQUksR0FBRyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNuQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0YsQ0FBQztJQUVNLEtBQUs7UUFDWCxJQUFJLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0YsQ0FBQztJQUVELGNBQWM7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFFLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQSxDQUFBLENBQUMsRUFBQztZQUNqTCxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQSxDQUFBLENBQUMsRUFBQztZQUN0SSxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUEsQ0FBQSxDQUFDLEVBQUM7U0FDL0ssQ0FBQTtJQUNGLENBQUM7SUFFRCxRQUFRO1FBQ1AsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxPQUFPO1FBQ2QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEYsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDN0YsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNuQixJQUFJLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO3FCQUFNLENBQUM7b0JBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7b0JBQ3ZELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BFLENBQUM7cUJBQU0sQ0FBQztvQkFDUCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN0RSxDQUFDO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDRixDQUFDLENBQUEsU0FBUztJQUVWOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFDekIsSUFBSSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO2dCQUM1RixPQUFPO1lBQ1IsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDRixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNGLENBQUMsQ0FBQSxlQUFlO0lBRWhCOzs7OztPQUtHO0lBQ0ssYUFBYTtRQUNwQixLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDOUUsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0YsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxpQkFBaUI7UUFDN0IsSUFBSSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3RSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNGLENBQUMsQ0FBQSxtQkFBbUI7SUFJWixhQUFhO1FBQ3BCLElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUN6QixLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsNkNBQTZDLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNGLENBQUM7UUFDRCxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLCtDQUErQyxDQUFDLENBQUM7b0JBQ3RGLE9BQU8sS0FBSyxDQUFDO2dCQUNkLENBQUM7cUJBQU0sQ0FBQztvQkFDUCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRU8sY0FBYztRQUNyQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDN0QsQ0FBQyxFQUFFLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0lBRU8sY0FBYztRQUNyQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdkUsQ0FBQyxFQUFFLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLFFBQVE7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsb0VBQW9FLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLGVBQWUsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBQywyQ0FBMkMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsSixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsdUVBQXVFLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLHFEQUFxRCxDQUFDLENBQUE7UUFDOUUsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNIO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQztnQkFDckQsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFDLHVFQUF1RTthQUNwRTtZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQztnQkFDekMsUUFBUSxFQUFFLElBQUk7Z0JBQ0YsS0FBSyxFQUFFLDREQUE0RDthQUN0RTtZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDekQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQztnQkFDekMsUUFBUSxFQUFFLElBQUk7Z0JBQ0YsS0FBSyxFQUFFLDBFQUEwRTthQUNwRjtZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQztnQkFDckQsUUFBUSxFQUFFLElBQUk7YUFDTDtTQUNKLENBQUM7SUFDVCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsZUFBd0I7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzNDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEUsQ0FBQzt1R0F4ckJXLHNCQUFzQjsyRkFBdEIsc0JBQXNCLGlFQUp2QixDQUFDLGNBQWMsRUFBQyxtQkFBbUIsQ0FBQyxzSkM3Q2hELDRzckJBdVhxRiw2S0QzVTFFLGlCQUFpQixzTEFBQyxhQUFhLHNYQUFDLGNBQWMseWZBQUMsMEJBQTBCLHVHQUFDLFdBQVcseU1BQUMsWUFBWSxtSUFBQyxhQUFhLDZrQkFBQyxpQkFBaUIsMG1DQUFNLGVBQWUsMkZBQUUsZUFBZSx5SEFBZSxlQUFlLDhCQUFFLGNBQWMsNHFDQUFFLFdBQVcsOHdCQUFFLFdBQVcsMjBFQUFFLHFCQUFxQixxTUFBRSxzQkFBc0Isd0pBQUUsWUFBWSw4QkFBRSxtQkFBbUIsaVZBQWUsbUJBQW1CLHNLQUFFLGtCQUFrQjs7MkZBS3RYLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDQyxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsaUJBQWlCLEVBQUMsYUFBYSxFQUFDLGNBQWMsRUFBQywwQkFBMEIsRUFBQyxXQUFXLEVBQUMsWUFBWSxFQUFDLGFBQWEsRUFBQyxpQkFBaUIsRUFBQyxJQUFJLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLGFBQ3RZLENBQUMsY0FBYyxFQUFDLG1CQUFtQixDQUFDO3lUQXNDYixtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhbFBpcGUgfSBmcm9tICcuLy4uLy4uL3BpcGVzL2dlbmVyYWwucGlwZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29sdW1uYUZ1ZW50ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvQ29sdW1uYUZ1ZW50ZU1vZGVsJztcclxuaW1wb3J0IHsgRnVlbnRlRGF0b01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRnVlbnRlRGF0byc7XHJcbmltcG9ydCB7IFJlcG9ydGVDb2x1bW5hTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9SZXBvcnRlQ29sdW1uYSc7XHJcbmltcG9ydCB7IFRhYmxhRnJvbU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvVGFibGFGcm9tTW9kZWwnO1xyXG5pbXBvcnQgeyBKb2luRnJvbU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvSm9pbkZyb21Nb2RlbCc7XHJcbmltcG9ydCB7IFJlcG9ydGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMbGF2ZUZvcmFuZWFNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0xsYXZlRm9yYW5lYU1vZGVsJztcclxuaW1wb3J0IHsgRm9yZWluZ1dyYXBlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRm9yZWluZ1dyYXBlck1vZGVsJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljaW9zL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyYWxNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0dlbmVyYWxNb2RlbCc7XHJcbmltcG9ydCB7IENvbHVtbmFXcmFwZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0NvbHVtbmFXcmFwZXJNb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25zdGFudGVzR2VuZXJhbGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL2NvbnN0YW50ZXMvQ29uc3RhbnRlc0dlbmVyYWxlcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ29uZmlybVBvcHVwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtcG9wdXAnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2FjY29yZGlvbic7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBUYWJsYUdlbmVyYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudGVzL3RhYmxhLWdlbmVyYWwvdGFibGEtZ2VuZXJhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWx0cm9HZW5lcmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnRlcy9maWx0cm8tZ2VuZXJhbC9maWx0cm8tZ2VuZXJhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNwbGl0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zcGxpdGJ1dHRvbic7XHJcbmltcG9ydCB7IFRhYlZpZXdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnZpZXcnO1xyXG5pbXBvcnQgeyBTdGVwc01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc3RlcHMnO1xyXG5pbXBvcnQgeyBQb3B1cFRhYmxhc0Z1ZW50ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9wb3B1cC10YWJsYXMtZnVlbnRlL3BvcHVwLXRhYmxhcy1mdWVudGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFJlcG9ydGVFbnRyYWRhQ29uc3RhbnRlcyB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9jb25zdGFudGVzL1JlcG9ydGVFbnRyYWRhQ29uc3RhbnRlcyc7XHJcbmltcG9ydCB7IFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wcm9ncmVzc2Jhcic7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWZ1ZW50ZS1yZXBvcnRlJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtQcm9ncmVzc0Jhck1vZHVsZSxUb29sdGlwTW9kdWxlLENoZWNrYm94TW9kdWxlLFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50LFN0ZXBzTW9kdWxlLENvbW1vbk1vZHVsZSxUYWJWaWV3TW9kdWxlLFNwbGl0QnV0dG9uTW9kdWxlLE5nSWYsVHJhbnNsYXRlTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsQ29tbW9uTW9kdWxlLCBBY2NvcmRpb25Nb2R1bGUsIERyb3Bkb3duTW9kdWxlLCBGb3Jtc01vZHVsZSwgVGFibGVNb2R1bGUsIFRhYmxhR2VuZXJhbENvbXBvbmVudCwgRmlsdHJvR2VuZXJhbENvbXBvbmVudCwgQnV0dG9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBHZW5lcmFsUGlwZSwgSW5wdXRUZXh0YXJlYU1vZHVsZSwgQ29uZmlybVBvcHVwTW9kdWxlLCBCdXR0b25Nb2R1bGVdLFxyXG5cdHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlLENvbmZpcm1hdGlvblNlcnZpY2VdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9mdWVudGUtcmVwb3J0ZS5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2Z1ZW50ZS1yZXBvcnRlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRnVlbnRlUmVwb3J0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cdHB1YmxpYyBmdWVudGU6IEZ1ZW50ZURhdG9Nb2RlbCA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRwdWJsaWMgdmlzdGFWaXN1YWxpemFyOiBzdHJpbmdcclxuXHRwdWJsaWMgdGFibGFzRnJvbTogVGFibGFGcm9tTW9kZWxbXSA9IFtdOyAvLyBmcm9tIFRhYmxhRnJvbVxyXG5cdHB1YmxpYyBqb2luc0Zyb206IEpvaW5Gcm9tTW9kZWxbXSA9IFtdOyAgIC8vZnJvbSBKb2luRnJvbSBcclxuXHRwdWJsaWMgY29sdW1uYXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBsaXN0YUNvbHVtbmFzOiBhbnlbXSA9IFtdO1xyXG5cdHB1YmxpYyBsaXN0YUpvaW46IGFueVtdID0gW107XHJcblx0cHVibGljIGNvbDE6IHN0cmluZztcclxuXHRwdWJsaWMgY29sMjogc3RyaW5nO1xyXG5cdHB1YmxpYyBjYW1wb3M6IENvbHVtbmFGdWVudGVNb2RlbFtdID0gW107XHJcblx0cHVibGljIGNhbXBvc1NlbGVjY2lvbmFyOiBDb2x1bW5hV3JhcGVyTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBtb3N0cmFyU2VsZWNjaW9uYXI6IGJvb2xlYW47XHJcblx0cHVibGljIGNhbXBvRm9ybXVsYTogQ29sdW1uYUZ1ZW50ZU1vZGVsID0gbmV3IENvbHVtbmFGdWVudGVNb2RlbCgpO1xyXG5cdHB1YmxpYyBhY3R1YWw6IG51bWJlcjtcclxuXHRwdWJsaWMgdGFiUHJpbmNpcGFsOiBudW1iZXI7XHJcblx0cHVibGljIGJhc2ljbzogYm9vbGVhbjtcclxuXHRwdWJsaWMgc2VsZWNjaW9uR2VuZXJhbDogYm9vbGVhbjtcclxuXHRwdWJsaWMgZm9yYW5lYXM6IGFueVtdID0gW107XHJcblx0cHVibGljIGRlc2NyaXBjaW9uOiBzdHJpbmc7XHJcblx0cHVibGljIHF1ZXJ5OiBzdHJpbmc7XHJcblx0cHVibGljIHBhZ2luYWRvcjogRnVlbnRlRGF0b01vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgZmlsdHJvOiBGdWVudGVEYXRvTW9kZWwgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0cHVibGljIHBhZ2luYXRvciA9IHtcclxuXHRcdHJvd3M6IDEwLFxyXG5cdFx0dG90YWxSZWNvcmRzOiAwLFxyXG5cdH07XHJcblx0cHVibGljIGNvbHVtbnMgOiBhbnlbXSA9IFtdO1xyXG4gIFx0cHVibGljIGZpbHRlcnMgOiBhbnlbXSA9IFtdO1xyXG5cdHB1YmxpYyBsb2FkaW5nIDogYm9vbGVhbjtcclxuXHRwdWJsaWMgbWVudTogTWVudUl0ZW1bXSA9IFtdO1xyXG5cdHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cdHB1YmxpYyBtYXBhTWVuc2FqZXM6IE1hcDxudW1iZXIsc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLHN0cmluZz4oKTtcclxuXHRAVmlld0NoaWxkKCdwb3B1cFRhYmxhc0Z1ZW50ZVVJJykgcG9wdXBUYWJsYXNGdWVudGVVSTogUG9wdXBUYWJsYXNGdWVudGVDb21wb25lbnQ7XHJcblx0cHVibGljIHRpcG9zRGF0byA9ICBSZXBvcnRlRW50cmFkYUNvbnN0YW50ZXMudGlwb0RhdG9cclxuXHRwdWJsaWMgY2xpY2tHdWFyZGFyOiBib29sZWFuO1xyXG5cdHB1YmxpYyB2ZXJOdWV2b0pvaW46IGJvb2xlYW47XHJcblx0cHVibGljIGFjdGl2ZUluZGV4OiBudW1iZXIgPSAwO1xyXG5cdHB1YmxpYyBjYXJnYXJQYXNvOiBib29sZWFuO1xyXG5cdGxvYWRpbmdHZW5lcmFyOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxwcml2YXRlIG5vdGlmaWNhdGlvbkJ1c1NlcnZpY2U6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSByZXBvcnRlc1N2YzogUmVwb3J0ZXNTZXJ2aWNlLCBwcml2YXRlIGdlbmVyYWxTdmM6IEdlbmVyYWxTZXJ2aWNlLCBwdWJsaWMgdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG5cdFx0cHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBnZW5lcmFsUGlwZTogR2VuZXJhbFBpcGUpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMubGlzdGFDb2x1bW5hcyA9IFtdO1xyXG5cdFx0dGhpcy5jYW1wb3MgPSBbXTtcclxuXHRcdHRoaXMubGlzdGFKb2luID0gW107XHJcblx0XHR0aGlzLmNvbHVtbmFzID0gW107XHJcblx0XHR0aGlzLnRhYmxhc0Zyb20gPSBbXTtcclxuXHRcdHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIgPSBbXTtcclxuXHRcdHRoaXMuam9pbnNGcm9tID0gW107XHJcblx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHR0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdGdWVudGUgUmVwb3J0ZScgfV0pO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gW1xyXG5cdFx0ICB7XHJcblx0XHRcdGZpZWxkOiAgJ2Rlc2NyaXBjaW9uJyxcclxuXHRcdFx0aGVhZGVyOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZGVzY3JpcGNpb24nKSxcclxuXHRcdFx0d2lkdGg6IDEwMCxcclxuXHRcdCAgfSxcclxuXHRcdF07XHJcblx0XHR0aGlzLmZpbHRlcnMgPSBbXHJcblx0XHQgIHtcclxuXHRcdFx0ZmllbGQ6ICdkZXNjcmlwY2lvbicsXHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Rlc2NyaXBjaW9uJyksXHJcblx0XHRcdG1hdGNoTW9kZTogJ2NvbnRhaW5zJyxcclxuXHRcdCAgfVxyXG5cdFx0XTtcclxuXHRcdHRoaXMuaW5pdFN0ZXAoKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBsb2FkKGV2ZW50KSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLmxvYWRpbmcgPXRydWU7XHJcblx0XHRcdHRoaXMuY29sb2NhckZpbHRybygpO1xyXG5cdFx0XHR0aGlzLmZpbHRyby5wYWdpbmFjaW9uUmVnaXN0cm9JbmljaWFsID0gZXZlbnQ/LmZpcnN0ICE9IG51bGwgPyBldmVudD8uZmlyc3QgOiAwLFxyXG5cdFx0XHRcdHRoaXMuZmlsdHJvLnBhZ2luYWNpb25SZWdpc3Ryb0ZpbmFsID0gZXZlbnQ/LnJvd3MgIT0gbnVsbCA/IGV2ZW50Py5yb3dzIDogMTAsXHJcblx0XHRcdFx0dGhpcy5wYWdpbmFkb3IgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhckZ1ZW50ZURhdG8odGhpcy5maWx0cm8pLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLnBhZ2luYXRvci50b3RhbFJlY29yZHMgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNhbnRpZGFkRnVlbnRlRGF0byh0aGlzLmZpbHRybykudG9Qcm9taXNlKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNvbG9jYXJGaWx0cm8oKSB7XHJcblx0XHR0aGlzLmZpbHRyby5vcmlnZW4gPSAoXCJGXCIpO1xyXG5cdFx0dGhpcy5maWx0cm8uZGVzY3JpcGNpb24gPSAobnVsbCk7XHJcblx0XHRpZiAodGhpcy51dGlsc1NlcnZpY2UuaXNOb3RCbGFuayh0aGlzLmRlc2NyaXBjaW9uKSkge1xyXG5cdFx0XHR0aGlzLmZpbHRyby5kZXNjcmlwY2lvbiA9IChDb25zdGFudGVzR2VuZXJhbGVzLlBPUkNFTlRBSkUgKyB0aGlzLmRlc2NyaXBjaW9uICsgQ29uc3RhbnRlc0dlbmVyYWxlcy5QT1JDRU5UQUpFKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwdWJsaWMgbGltcGlhckNhbXBvcygpIHtcclxuXHRcdHRoaXMuZGVzY3JpcGNpb24gPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHNpZ3VpZW50ZSgpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXJXaXphcmQoKSkge1xyXG5cdFx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IHRydWU7XHJcblx0XHRcdFx0aWYgKHRoaXMuYWN0dWFsIDwgMykge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWN0dWFsID09IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy50YWJsYXNGcm9tLmxlbmd0aCA9PSAwKSB7IC8vIE5vIHNlbGVjY2lvbm8gbmluZ3VuYSB0YWJsYVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkRlYmUgc2VsZWNjaW9uYXIgYWwgbWVub3MgdW4gb2JqZXRvLlwiKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNhcmdhclBhc28gPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy50YWJsYXNGcm9tLmxlbmd0aCA9PSAxKSB7IC8vIFNvbG8gc2VsZWNjaW9ubyB1bmEsIHBvciBlc28gbm8gaGF5IHF1ZSBnZW5lcmFyIGpvaW5zLlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuYWN0dWFsKys7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG5vbWJyZXNUYWJsYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICghbm9tYnJlc1RhYmxhcy5pbmNsdWRlcyh0YWJsYS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bm9tYnJlc1RhYmxhcy5wdXNoKHRhYmxhLnRhYmxhKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdC8vTGlzdDxMbGF2ZUZvcmFuZWE+IFxyXG5cdFx0XHRcdFx0XHRcdGxldCBsbGF2ZXM6IExsYXZlRm9yYW5lYU1vZGVsW10gPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmdldExsYXZlcyhub21icmVzVGFibGFzKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGFzRnJvbS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9yYW5lYSBvZiBsbGF2ZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9yYW5lYS50YWJsYTEgPT0gKHRoaXMudGFibGFzRnJvbVtpXS50YWJsYSkgJiYgZm9yYW5lYS50YWJsYTIgPT0gKHRoaXMudGFibGFzRnJvbVtqXS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBudWV2bzogRm9yZWluZ1dyYXBlck1vZGVsID0gbmV3IEZvcmVpbmdXcmFwZXJNb2RlbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVldm8uYWxpYXMxID0gKHRoaXMudGFibGFzRnJvbVtpXS5hbGlhcyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWV2by5hbGlhczIgPSAodGhpcy50YWJsYXNGcm9tW2pdLmFsaWFzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51ZXZvLmxsYXZlID0gKGZvcmFuZWEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcy5wdXNoKG51ZXZvKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBDYXJnbyBsYXMgY29sdW1uYXMgcGFyYSBsb3Mgc2lndWllbnRlcyBwcm9jZXNvcy5cclxuXHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5saXN0YUNvbHVtbmFzID0gW107XHJcblx0XHRcdFx0XHRcdHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIgPSBbXTtcclxuXHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGZyb20gb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly9SZXBvcnRlQ29sdW1uYURUTyBcclxuXHRcdFx0XHRcdFx0XHRsZXQgdGEgPSBuZXcgUmVwb3J0ZUNvbHVtbmFNb2RlbCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRhLnJlcG9ydGVGdWVudGUgPSAoZnJvbS50YWJsYSk7XHJcblx0XHRcdFx0XHRcdFx0Ly9MaXN0PFJlcG9ydGVDb2x1bW5hRFRPPiBcclxuXHRcdFx0XHRcdFx0XHRsZXQgbnVldmFzOiBSZXBvcnRlQ29sdW1uYU1vZGVsW10gPSBhd2FpdCB0aGlzLmdlbmVyYWxTdmMucXVlcnlGb3JMaXN0KG5ldyBHZW5lcmFsTW9kZWwoJ1JlcG9ydGVDb2x1bW5hRFRPJywgJ1JlcG9ydGVzLmNvbnN1bHRhckNvbHVtbmFzJywgZmFsc2UsIHRhKSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jYXJnYXJMaXN0YXNDb2x1bW5hcyhudWV2YXMsIGZyb20uYWxpYXMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5hY3R1YWwrKztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy50ZXJtaW5hclBhc29zKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjYXJnYXJMaXN0YXNDb2x1bW5hcyhudWV2YXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSwgYWxpYXM6IHN0cmluZykge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIG51ZXZhcykge1xyXG5cdFx0XHRjb2wucmVwb3J0ZUZ1ZW50ZSA9IChhbGlhcyk7XHJcblx0XHRcdHRoaXMuY29sdW1uYXMucHVzaChjb2wpO1xyXG5cdFx0XHR0aGlzLmxpc3RhQ29sdW1uYXMucHVzaCh7IHZhbHVlOiBjb2wucmVwb3J0ZUZ1ZW50ZSArICcuJyArIGNvbC5ub21icmUsIGxhYmVsOiBjb2wucmVwb3J0ZUZ1ZW50ZSArICcuJyArIGNvbC5ub21icmUgfSk7XHJcblx0XHRcdGxldCBjYW1wbyA9IG5ldyBDb2x1bW5hV3JhcGVyTW9kZWwoKTtcclxuXHRcdFx0Y2FtcG8uY29sdW1uYSA9IGNvbDtcclxuXHRcdFx0Y2FtcG8uYWxpYXMgPSBjb2wubm9tYnJlO1xyXG5cdFx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLnB1c2goY2FtcG8pO1xyXG5cdFx0fVxyXG5cdFx0Y29uc29sZS5sb2coJ2NhbXBvc1NlbGVjY2lvbmFyJyx0aGlzLmNhbXBvc1NlbGVjY2lvbmFyKTtcclxuXHRcdFxyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHRlcm1pbmFyUGFzb3MoKSB7XHJcblx0XHR0aGlzLmxvYWRpbmdHZW5lcmFyID0gdHJ1ZTtcclxuXHRcdGxldCBjYW1wb3NTcWwgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0aWYgKGNvbC5zZWxlY2Npb25hZG8pIHtcclxuXHRcdFx0XHRjYW1wb3NTcWwgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyBjb2wuY29sdW1uYS5ub21icmUgKyBcIiBhcyBcIiArIGNvbC5hbGlhcztcclxuXHRcdFx0XHRpKys7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZ1ZW50ZS53aGVyZUpvaW4gPSAodGhpcy5nZW5lcmFyU3FsSm9pbigpKTtcclxuXHRcdHRoaXMuZnVlbnRlLmZyb21TcWwgPSAodGhpcy5nZW5lcmFyU3FsRnJvbSgpKTtcclxuXHRcdGxldCB3aGVyZSA9IFwiXCI7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlSm9pbjogYm9vbGVhbiA9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiA9PSBudWxsIHx8IFwiXCIgPT0gKHRoaXMuZnVlbnRlLndoZXJlSm9pbik7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsOiBib29sZWFuID0gdGhpcy5mdWVudGUud2hlcmVBZGljaW9uYWwgPT0gbnVsbCB8fCBcIlwiID09ICh0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCk7XHJcblx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gfHwgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHR3aGVyZSA9IFwiIFxcbldIRVJFIFwiO1xyXG5cdFx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gJiYgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiArIFwiIEFORCBcXG4oXCIgKyB0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCArIFwiKVwiO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCFlc3RhQmxhbmNvV2hlcmVKb2luKSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVKb2luO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgc3FsID0gXCJTRUxFQ1QgXFxuXCIgKyBjYW1wb3NTcWwgKyBcIiBcXG5GUk9NIFxcblwiICsgdGhpcy5mdWVudGUuZnJvbVNxbCArIHdoZXJlO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeShzcWwpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9IChzcWwpO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gc3FsO1xyXG5cdFx0XHR0aGlzLnRhYlByaW5jaXBhbCA9IDA7XHJcblx0XHRcdHRoaXMudGFibGFzRnJvbSA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKCdRdWVyeSBjcmVhZGEgc2F0aXNmYWN0b3JpYW1lbnRlLicpO1xyXG5cdFx0XHR0aGlzLmxvYWRpbmdHZW5lcmFyID0gZmFsc2U7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHRcdHRoaXMubG9hZGluZ0dlbmVyYXIgPSBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBhZGljaW9uYXJGb3JhbmVhKGV2ZW50bykge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9Gb3JlaW5nV3JhcGVyIFxyXG5cdFx0XHRsZXQgZm9yYW5lYTogRm9yZWluZ1dyYXBlck1vZGVsID0gZXZlbnRvLmRhdGE7XHJcblx0XHRcdGZvciAobGV0IHJlbCBvZiBmb3JhbmVhLmxsYXZlLnJlbGFjaW9uZXMpIHtcclxuXHRcdFx0XHRsZXQgcGFyID0gcmVsLnNwbGl0KFwiOlwiKTtcclxuXHRcdFx0XHRsZXQgam9pbiA9IG5ldyBKb2luRnJvbU1vZGVsKCk7XHJcblx0XHRcdFx0am9pbi5jb2x1bW5hMSA9IChmb3JhbmVhLmFsaWFzMSArIFwiLlwiICsgcGFyWzBdKTtcclxuXHRcdFx0XHRqb2luLmNvbHVtbmEyID0gKGZvcmFuZWEuYWxpYXMyICsgXCIuXCIgKyBwYXJbMV0pO1xyXG5cdFx0XHRcdGlmKHRoaXMuam9pbnNGcm9tLnNvbWUoZGF0YSA9PiBkYXRhLmNvbHVtbmExID09PSBqb2luLmNvbHVtbmExICYmIGRhdGEuY29sdW1uYTIgPT09IGpvaW4uY29sdW1uYTIpKXtcclxuXHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93V2FybmluZygnUmVnaXN0cm8geWEgc2UgZW5jdWVudHJhIGFzb2NpYWRvLicpXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR0aGlzLmpvaW5zRnJvbS5wdXNoKGpvaW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIGVsaW1pbmFyKCkge1xyXG5cdFx0dGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG5cdFx0XHR0YXJnZXQ6IGV2ZW50LnRhcmdldCxcclxuXHRcdFx0bWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ21lbnNhamVfYWxlcnRhJyksXHJcblx0XHRcdGljb246ICdjb25maXJtYXInLFxyXG5cdFx0XHRhY2NlcHQ6ICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnNldFJlc3B1ZXN0YSh0cnVlKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZWplY3Q6ICgpID0+IHtcclxuXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHNldFJlc3B1ZXN0YShyZXNwdWVzdGE6IGJvb2xlYW4pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmIChyZXNwdWVzdGEpIHtcclxuXHRcdFx0XHR0aGlzLnJlcG9ydGVzU3ZjLmVsaW1pbmFyRnVlbnRlRGF0b3NDb25IaWpvcyh0aGlzLmZ1ZW50ZSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0dGhpcy5mdWVudGUgPSBudWxsO1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkxhIGZ1ZW50ZSBoYSBzaWRvIGVsaW1pbmFkYS5cIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhbnRlcmlvcigpIHtcclxuXHRcdGlmICh0aGlzLmFjdHVhbCA+IDApe1xyXG5cdFx0aWYodGhpcy5hY3R1YWwgPT0gMiAmJiB0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDEpe1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0dGhpcy5hY3R1YWwtLTtcclxuXHRcdH1cclxuXHRcdH1cclxuXHRcdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdmFsaWRhclF1ZXJ5KCkge1xyXG5cdFx0dHJ5IHtcclxuXHJcblx0XHRcdGlmICh0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyVGV4dG9TUUwodGhpcy5xdWVyeSwgdHJ1ZSwgdHJ1ZSwgODAwMCwgdHJ1ZSkpIHtcclxuXHRcdFx0XHR0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeSh0aGlzLnF1ZXJ5KTtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJFbCBxdWVyeSBlc3RhIGNvcnJlY3RvLlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHQvL1ZhbGlkYWRvci5hZGljaW9uYXJNZW5zYWplKFwiZnVlbnRlRm9ybTp0YWI6cXVlcnlcIiwgZS5nZXRNZXNzYWdlKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckpvaW4oKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy5jb2wxICE9IG51bGwgJiYgdGhpcy5jb2wyICE9IG51bGwpIHtcclxuXHRcdFx0XHQvLyBUT0RPOiBGYWx0YSB2YWxpZGFyIGVsIHRpcG9cclxuXHRcdFx0XHRsZXQgbnVldm8gPSBuZXcgSm9pbkZyb21Nb2RlbCgpO1xyXG5cdFx0XHRcdG51ZXZvLmNvbHVtbmExID0gKHRoaXMuY29sMSk7XHJcblx0XHRcdFx0bnVldm8uY29sdW1uYTIgPSAodGhpcy5jb2wyKTtcclxuXHRcdFx0XHR0aGlzLmpvaW5zRnJvbS5wdXNoKG51ZXZvKTtcclxuXHRcdFx0XHR0aGlzLmNhbmNlbGFyTnVldm9Kb2luKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRGViZSBzZWxlY2Npb25hciBkb3MgY2FtcG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRudWV2b0pvaW4oKXtcclxuXHRcdHRoaXMudmVyTnVldm9Kb2luID0gdHJ1ZTtcclxuXHRcdHRoaXMuY29sMSA9ICAnJztcclxuXHRcdHRoaXMuY29sMiA9ICcnO1xyXG5cdH1cclxuXHJcblx0Y2FuY2VsYXJOdWV2b0pvaW4oKXtcclxuXHRcdHRoaXMudmVyTnVldm9Kb2luID0gZmFsc2U7XHJcblx0XHR0aGlzLmNvbDEgPSAgJyc7XHJcblx0XHR0aGlzLmNvbDIgPSAnJztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlbGltaW5hckpvaW4oYWUpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vbGV0ICBqb2luID0gKEpvaW5Gcm9tKSAoKFVJUGFyYW1ldGVyKSBhZS5nZXRDb21wb25lbnQoKS5maW5kQ29tcG9uZW50KFwiam9pblwiKSkuZ2V0VmFsdWUoKTtcclxuXHRcdFx0dGhpcy5qb2luc0Zyb20gPSAgdGhpcy5qb2luc0Zyb20uZmlsdGVyKChkYXRhKSA9PiBkYXRhLmNvbHVtbmExICE9PSBhZT8uY29sdW1uYTEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGVsaW1pbmFyVGFibGEoYWUpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vVGFibGFGcm9tIHRhYmxhID0gKFRhYmxhRnJvbSkgKChVSVBhcmFtZXRlcikgYWUuZ2V0Q29tcG9uZW50KCkuZmluZENvbXBvbmVudChcInRhYmxhXCIpKS5nZXRWYWx1ZSgpO1xyXG5cdFx0XHR0aGlzLnRhYmxhc0Zyb20gPSB0aGlzLnRhYmxhc0Zyb20uZmlsdGVyKChkYXRhKSA9PiBkYXRhICE9IGFlKTtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRmFsdGEgZWxpbWluYXIgbGFzIGNvbHVtbmFzIGRlIGxhIHRhYmxhID8/P1wiKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBidXNjYXJUYWJsYSgpIHtcclxuXHRcdHRoaXMucG9wdXBUYWJsYXNGdWVudGVVSS5idXNjYXJUYWJsYShcImZ1ZW50ZVVJLnRhYmxhU2VsZWNjaW9uYWRhXCIpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFRhYmxhU2VsZWNjaW9uYWRhKHRhYmxhU2VsZWNjaW9uYWRhOiBhbnlbXSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHRhYmxhcyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRpZiAoIXRhYmxhcy5pbmNsdWRlcyh0YWJsYS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdHRhYmxhcy5wdXNoKHRhYmxhLnRhYmxhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGFibGFTZWxlY2Npb25hZGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHRcdFx0XHR0aGlzLmNhcmdhclRhYmxhRW5MaXN0YShlbGVtZW50Lm9iamV0byk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYXJnYXJUYWJsYUVuTGlzdGEodGFibGE6IHN0cmluZykge1xyXG5cdFx0bGV0IHBhciA9IHRhYmxhLnNwbGl0KFwiX1wiKTtcclxuXHRcdGxldCBhbGlhcyA9IHBhclswXTtcclxuXHRcdGxldCBpID0gMTtcclxuXHRcdGxldCB0YWJsYVRlbXAgPSBuZXcgVGFibGFGcm9tTW9kZWwoKVxyXG5cdFx0dGFibGFUZW1wLmFsaWFzID0gYWxpYXM7XHJcblx0XHR3aGlsZSAodGhpcy50YWJsYXNGcm9tLmluY2x1ZGVzKHRhYmxhVGVtcCkpIHtcclxuXHRcdFx0YWxpYXMgPSB0YWJsYSArIChpKyspO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHRlbSA9IG5ldyBUYWJsYUZyb21Nb2RlbCgpO1xyXG5cdFx0dGVtLnRhYmxhID0gdGFibGE7XHJcblx0XHR0ZW0uYWxpYXMgPSBhbGlhcztcclxuXHRcdHRoaXMudGFibGFzRnJvbS5wdXNoKHRlbSk7XHJcblx0XHRyZXR1cm4gYWxpYXM7XHJcblx0fVxyXG5cclxuXHJcblxyXG5cdHB1YmxpYyBjYW1iaW9Kb2luKGNlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLmxpc3RhSm9pbiA9IFtdO1xyXG5cdFx0XHRsZXQgbnVldm8gPSBjZS52YWx1ZTtcclxuXHRcdFx0aWYgKG51ZXZvICE9IG51bGwpIHtcclxuXHRcdFx0XHQvL1JlcG9ydGVDb2x1bW5hRFRPIFxyXG5cdFx0XHRcdGxldCBhY3Q6IFJlcG9ydGVDb2x1bW5hTW9kZWwgPSBudWxsO1xyXG5cdFx0XHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNvbHVtbmFzKSB7XHJcblx0XHRcdFx0XHRpZiAobnVldm8gPT0oY29sLnJlcG9ydGVGdWVudGUgKyBcIi5cIiArIGNvbC5ub21icmUpKSB7XHJcblx0XHRcdFx0XHRcdGFjdCA9IGNvbDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNvbHVtbmFzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWNvbC5yZXBvcnRlRnVlbnRlLnN0YXJ0c1dpdGgoYWN0LnJlcG9ydGVGdWVudGUpICYmIGNvbC50aXBvRGF0byA9PSAoYWN0LnRpcG9EYXRvKSAmJiBjb2wub3JkZW4gPT0gKGFjdC5vcmRlbikpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbCA9IGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RhSm9pbi5wdXNoKHsgdmFsdWU6IHZhbCwgbGFiZWw6IHZhbCB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlZGl0YXJDYW1wbyhldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCBjb2w6IENvbHVtbmFGdWVudGVNb2RlbCA9IGV2ZW50by5kYXRhO1xyXG5cdFx0XHR0aGlzLmNhbXBvRm9ybXVsYSA9IGNvbDtcclxuXHRcdFx0bGV0IHZhcnMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgY2FtcG8gb2YgdGhpcy5jYW1wb3MpIHtcclxuXHRcdFx0XHRsZXQgdmFyMTogYW55O1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNhbXBvLm5vbWJyZSk7XHJcblx0XHRcdFx0dmFyMS50aXBvID0gKGNhbXBvLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGNvbC5nZXRTaW50YXhpcygpLCBcImZ1ZW50ZVVJLmZvcm11bGFcIiwgdmFycyk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWRpdGFyV2hlcmUoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgdmFycyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdC8vVmFyaWFibGVGb3JtdWxhIFxyXG5cdFx0XHRcdGxldCB2YXIxO1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlKTtcclxuXHRcdFx0XHR2YXIxLnRpcG8oY29sLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGZ1ZW50ZS5nZXRXaGVyZUFkaWNpb25hbCgpLCBcImZ1ZW50ZVVJLmZ1ZW50ZS53aGVyZUFkaWNpb25hbFwiLCB2YXJzKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRGb3JtdWxhKGZvcm11bGEpIHtcclxuXHRcdGlmICh0aGlzLmNhbXBvRm9ybXVsYSAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuY2FtcG9Gb3JtdWxhLnNpbnRheGlzID0gKGZvcm11bGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckNvbHVtbmFzKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0Y29sLnNlbGVjY2lvbmFkbyA9IChmYWxzZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm1vc3RyYXJTZWxlY2Npb25hciA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWdyZWdhclNlbGVjY2lvbmFkb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRcdGlmIChjb2wuc2VsZWNjaW9uYWRvKSB7XHJcblx0XHRcdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdFx0XHRjYW1wby5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0XHRcdGNhbXBvLm5vbWJyZSA9IChjb2wuY29sdW1uYS5ub21icmUpO1xyXG5cdFx0XHRcdFx0Y2FtcG8uc2ludGF4aXMgPSAoY29sLmNvbHVtbmEubm9tYnJlKTtcclxuXHRcdFx0XHRcdHRoaXMuY2FtcG9zLnB1c2goY2FtcG8pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLm9jdWx0YXJTZWxlY2Npb25hcigpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIG9jdWx0YXJTZWxlY2Npb25hcigpIHtcclxuXHRcdHRoaXMubW9zdHJhclNlbGVjY2lvbmFyID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdmVyRGV0YWxsZShldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHRsZXQgZnVlbnRlRGF0b0RUTyA9IGV2ZW50bztcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKGZ1ZW50ZURhdG9EVE8ubGxhdmUpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyVW5pY2FGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLnF1ZXJ5MiAhPSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeSA9IHRoaXMuZnVlbnRlLnF1ZXJ5ICsgdGhpcy5mdWVudGUucXVlcnkyO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucXVlcnkgPSB0aGlzLmZ1ZW50ZS5xdWVyeTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdGxldCBjb2wgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdGNvbC5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhckNvbHVtbmFzRnVlbnRlKGNvbCkudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnLCB9LCB7bGFiZWw6ICdNYW50ZW5pbWllbnRvIEZ1ZW50ZSd9XSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FzT3BjaW9uZXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBudWV2bygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRcdFx0dGhpcy5mdWVudGUub3JpZ2VuID0gKFwiRlwiKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBudWxsO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gbnVsbDtcclxuXHRcdFx0dGhpcy50YWJQcmluY2lwYWwgPSAwO1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJywgfSwge2xhYmVsOiAnTWFudGVuaW1pZW50byBGdWVudGUnfV0pO1xyXG5cdFx0XHR0aGlzLmNhcmdhc09wY2lvbmVzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYXJnYXNPcGNpb25lcygpe1xyXG5cdFx0dGhpcy5tZW51PSBbe2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua19lbGltaW5hcicpLCBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWJpbicsIHZpc2libGU6IHRoaXMuZnVlbnRlLmxsYXZlICE9IG51bGwsIGNvbW1hbmQ6IChldmVudCkgPT4ge3RoaXMuZWxpbWluYXIoKX19LFxyXG5cdFx0e2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua192YWxpZGFyJyksIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtY2hlY2snLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLnZhbGlkYXJRdWVyeSgpfX0sXHJcblx0XHR7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2dlbmVyYXInKSwgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1yZWZyZXNoJyx2aXNpYmxlOiB0aGlzLmZ1ZW50ZS5sbGF2ZSAhPSBudWxsLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCl9fSxcclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHJlZ3Jlc2FyKCl7XHJcblx0XHR0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcblx0XHR0aGlzLm5nT25Jbml0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXIoKTogYm9vbGVhbiB7XHJcblx0XHRsZXQgcmVzID0gdHJ1ZTtcclxuXHRcdHRoaXMuY2xpY2tHdWFyZGFyID0gdHJ1ZTtcclxuXHRcdHJlcyA9IHJlcyAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLmZ1ZW50ZS5kZXNjcmlwY2lvbik7XHJcblx0XHRyZXMgPSByZXMgJiYgKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSA9PSBudWxsKTtcclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RyYS9hY3R1YWxpemEgbGEgaW5mb3JtYWNpb24gZ2VuZXJhbCBkZSBsYSBmdWVudGUgZGUgZGF0b3NcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgZ3VhcmRhcigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXIoKSkge1xyXG5cdFx0XHRcdHRoaXMuY2xpY2tHdWFyZGFyID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKHRoaXMucXVlcnkubGVuZ3RoID4gNDAwMCkge1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkgPSAodGhpcy5xdWVyeS5zdWJzdHJpbmcoMCwgMzk5OSkpO1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkyID0gKHRoaXMucXVlcnkuc3Vic3RyaW5nKDM5OTksIHRoaXMucXVlcnkubGVuZ3RoKSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5ID0gKHRoaXMucXVlcnkpO1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkyID0gKG51bGwpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHRoaXMuZnVlbnRlLmxsYXZlID09IG51bGwpIHtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKHRoaXMudXRpbHNTZXJ2aWNlLmdlbmVyYXJMbGF2ZSgpKTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuaW5zZXJ0YXJGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5hY3R1YWxpemFyRnVlbnRlRGF0byh0aGlzLmZ1ZW50ZSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkxvcyBjYW1iaW9zIGhhbiBzaWRvIGd1YXJkYWRvc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH0vL2d1YXJkYXJcclxuXHJcblx0LyoqXHJcblx0ICogUmVnaXN0cmEvYWN0dWFsaXphIGxhcyBjb2x1bW5hcyBnZW5lcmFkb3MgcGFyYSBsYSBmdWVudGUgZGUgZGF0b3MgY29tbyByZWdpc3Ryb3MgZGUgdGlwbyAnQ29sdW1uYUZ1ZW50ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgZ3VhcmRhckNhbXBvcygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLmZ1ZW50ZS5sbGF2ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiUG9yIGZhdm9yIGRpbGlnZW5jaWUgcHJpbWVybyBsb3MgZGF0b3MgZGUgbGEgZnVlbnRlXCIpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy52YWxpZGFyQ2FtcG9zKCkpIHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmFjdHVhbGl6YXJDb2x1bW5hc0Z1ZW50ZSh0aGlzLmZ1ZW50ZSwgdGhpcy5jYW1wb3MpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIlNlIGhhbiBndWFyZGFkbyBsb3MgY2FtcG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fS8vZ3VhcmRhckNhbXBvc1xyXG5cclxuXHQvKipcclxuXHQgKiBWZXJpZmljYSBxdWUgbG9zIHZhbG9yZXMgYXNvY2lhZG9zIGEgbG9zIGNhbXBvcyBwYXJhIGxhIGNyZWFjaW9uIGRlIGxhcyBjb2x1bW5hcyBkZSBsYSBmdWVudGUgc2VhbiB2w6FsaWRvc1xyXG5cdCAqIEByZXR1cm4gZmFsc2UgZW4gY2FzbyBkZSBxdWUgbG9zIHZhbG9yZXMgYXNpZ25hZG9zIGEgbG9zIGNhbXBvcyBzZWFuIG51bG9zIG8gbm8gc2VhbiBwYWxhYnJhcyB2w6FsaWRhcyBkZSBhY3VlcmRvIFxyXG5cdCAqIGNvbiBsYXMgY29uZGljaW9uZXMgZGFkYXMgcG9yIFZhbGlkYWRvclV0aWwudmFsaWRhclBhbGFicmEoKSksXHJcblx0ICogZW4gY2FzbyBjb250cmFyaW8gcmV0b3JuYSB0cnVlXHJcblx0ICovXHJcblx0cHJpdmF0ZSB2YWxpZGFyQ2FtcG9zKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zKSB7XHJcblx0XHRcdGlmIChjb2wubm9tYnJlID09IG51bGwgfHwgIXRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJQYWxhYnJhKGNvbC5ub21icmUpKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm9tYnJlIG5vIHZhbGlkbyAoXCIgKyBjb2wubm9tYnJlICsgXCIpXCIpO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydXllIGxhcyBjb2x1bW5hcyBkZSBsYSBmdWVudGUgZGUgZGF0b3MsIGNvbiBiYXNlIGVuIGxvcyBjYW1wb3Mgb2J0ZW5pZG9zIFxyXG5cdCAqIGRlIGxhIGNvbnN1bHRhIFNRTCBhc29jaWFkYVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhc3luYyBjb25zdHJ1aXJDb2x1bW5hcygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMuY2FtcG9zID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5nZXRDb2x1bW5hc1NxbCh0aGlzLnF1ZXJ5KS50b1Byb21pc2UoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9jb25zdHJ1aXJDb2x1bW5hc1xyXG5cclxuXHJcblxyXG5cdHByaXZhdGUgdmFsaWRhcldpemFyZCgpIHtcclxuXHRcdGxldCBhbGlhczogc3RyaW5nW10gPSBbXTtcclxuXHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRpZiAoYWxpYXMuaW5jbHVkZXModGFibGEuYWxpYXMpKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm8gc2UgcHVlZGUgcmVwZXRpciBlbCBhbGlhcyBkZSBsYXMgdGFibGFzLlwiKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YWxpYXMucHVzaCh0YWJsYS5hbGlhcyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGFsaWFzID0gW107XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRpZiAoY29sLnNlbGVjY2lvbmFkbykge1xyXG5cdFx0XHRcdGlmIChhbGlhcy5pbmNsdWRlcyhjb2wuYWxpYXMpKSB7XHJcblx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJObyBzZSBwdWVkZSByZXBldGlyIGVsIGFsaWFzIGRlIGxhcyBjb2x1bW5hcy5cIik7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFsaWFzLnB1c2goY29sLmFsaWFzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2VuZXJhclNxbEZyb20oKSB7XHJcblx0XHRsZXQgcmVzID0gXCJcIjtcclxuXHRcdGxldCBpID0gMDtcclxuXHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRyZXMgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyB0YWJsYS50YWJsYSArIFwiIFwiICsgdGFibGEuYWxpYXM7XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdlbmVyYXJTcWxKb2luKCkge1xyXG5cdFx0bGV0IHJlcyA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCBqb2luIG9mIHRoaXMuam9pbnNGcm9tKSB7XHJcblx0XHRcdHJlcyArPSAoaSA9PSAwID8gXCJcIiA6IFwiIEFORCBcIikgKyBqb2luLmNvbHVtbmExICsgXCIgPSBcIiArIGpvaW4uY29sdW1uYTI7XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvL0lNUExFTUVOVEFDSU9OIFNURVBFUlxyXG5cdGluaXRTdGVwKCl7XHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMCwnU2VsZWNjaW9uZSBsYXMgdGFibGFzIG8gdmlzdGFzIGRlIGRvbmRlIGRlc2VhIG9idGVuZXIgbGEgaW5mb3JtYWNpJyt0aGlzLmdlbmVyYWxQaXBlLk9fVElETEVfTUlOKyduLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMSwnSW5kaXF1ZSBkZSBxdScrdGhpcy5nZW5lcmFsUGlwZS5FX1RJTERFX01JTisnIG1hbmVyYSBzZSByZWxhY2lvbmFuIGxvcyBvYmpldG9zIGVudHJlIHMnK3RoaXMuZ2VuZXJhbFBpcGUuSV9USUxERV9NSU4rJy4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDIsJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaScrdGhpcy5nZW5lcmFsUGlwZS5PX1RJRExFX01JTisnbi4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDMsJ1NlbGVjY2lvbmUgbG9zIGNhbXBvcyBxdWUgZGVzZWUgdmVyIGVuIGxhIGNvbnN1bHRhLicpXHJcblx0XHR0aGlzLml0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Zyb20nKSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG5cdFx0XHRcdHRpdGxlOidTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnam9pbicpLFxyXG5cdFx0XHRcdGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbmRpcXVlIGRlIHF1ZSBtYW5lcmEgc2UgcmVsYWNjaW9uYW4gbG9zIG9iamV0b3MgZW50cmUgc2kuJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3doZXJlJyksXHJcblx0XHRcdFx0Y29tbWFuZDogKGV2ZW50KSA9PiB7Y29uc29sZS5sb2coZXZlbnQpO30sXHJcblx0XHRcdFx0ZGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaW9uLidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjYW1wb3MnKSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuXHR9XHJcblxyXG5cdGFjdHVhbGl6YXJTZWxlY2Npb24oYm9vbGVhbm9nZW5lcmFsOiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLmZvckVhY2goKGVsZW1lbnRvKSA9PiB7XHJcblx0XHRcdGVsZW1lbnRvLnNlbGVjY2lvbmFkbyA9IGJvb2xlYW5vZ2VuZXJhbDtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0dG9kb3NTZWxlY2Npb25hZG9zKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIuZXZlcnkoZWxlbWVudG8gPT4gZWxlbWVudG8uc2VsZWNjaW9uYWRvKTtcclxuXHR9XHJcblxyXG5cclxufVxyXG4iLCJAaWYodmlzdGFWaXN1YWxpemFyID09IG51bGwpe1xyXG48aDE+e3snZnVlbnRlJyB8IHRyYW5zbGF0ZX19IHt7J3JlcG9ydGUnfCB0cmFuc2xhdGV9fTwvaDE+XHJcbjxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICA8YXBwLWZpbHRyby1nZW5lcmFsIFtmaWx0cm9zXT1cImZpbHRlcnNcIiBbZGF0YXRhYmxlXT1cInRhYmxhR2VuZXJhbFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZm9ybT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGF1dG9mb2N1cyB0eXBlPVwidGV4dFwiIGlkPVwiZGVzY3JpcGNpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwY2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snZmlsdHJvJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvYXBwLWZpbHRyby1nZW5lcmFsPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snbGlua19udWV2bycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJudWV2bygpXCIgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yXCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG48YXBwLXRhYmxhLWdlbmVyYWwgI3RhYmxhR2VuZXJhbCBbY29sdW1uc109XCJjb2x1bW5zXCIgW3ZhbHVlXT1cInBhZ2luYWRvclwiIFtyb3dzXT1cInBhZ2luYXRvci5yb3dzXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwicGFnaW5hdG9yLnRvdGFsUmVjb3Jkc1wiIChvbkxvYWQpPVwibG9hZCgkZXZlbnQpXCIgKG9uUm93U2VsZWN0KT1cInZlckRldGFsbGUoJGV2ZW50KVwiXHJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+PC9hcHAtdGFibGEtZ2VuZXJhbD5cclxufVxyXG5AaWYodmlzdGFWaXN1YWxpemFyICE9IG51bGwpe1xyXG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgPGgxPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fSB7eydyZXBvcnRlJ3wgdHJhbnNsYXRlfX08L2gxPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cInJlZ3Jlc2FyKClcIiBsYWJlbD1cIlJlZ3Jlc2FyXCIgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IGZvbnQtc2VtaWJvbGRcIj48L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxwLXRhYlZpZXcgWyhhY3RpdmVJbmRleCldPVwidGFiUHJpbmNpcGFsXCI+XHJcbiAgICA8cC10YWJQYW5lbCBoZWFkZXI9XCJ7eyAnZnVlbnRlJ3wgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGg1PjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWJvb2tcIj48L2k+e3snZGF0b3MnfCB0cmFuc2xhdGV9fSB7eydiYXNpY29zJ3wgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBhdXRvZm9jdXMgdHlwZT1cInRleHRcIiBpZD1cInBlc29cIiBbKG5nTW9kZWwpXT1cImZ1ZW50ZS5kZXNjcmlwY2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGVzb1wiPnt7J25vbWJyZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTIgbGc6Y29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsb2F0LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbFwiIGlkPVwiZmxvYXQtaW5wdXRcIiByb3dzPVwiNVwiIGNvbHM9XCIzMFwiIHBJbnB1dFRleHRhcmVhIFsobmdNb2RlbCldPVwicXVlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzIFthdXRvUmVzaXplXT1cInRydWVcIj4gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snY29uc3VsdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJtbC0yIHAtYnV0dG9uIHAtYnV0dG9uLXJhaXNlZFwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3snbGlua19ndWFyZGFyJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImd1YXJkYXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8cC1zcGxpdEJ1dHRvbiBjbGFzcz1cIm1sLTJcIiBsYWJlbD1cIkFjY2lvbmVzIEZ1ZW50ZVwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tc2Vjb25kYXJ5XCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyQ2FtcG9zKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cImNhbXBvc1wiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImNhbXBvcy5sZW5ndGhcIiBbcGFnaW5hdG9yXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aCA+IDEwXCIgW3Jvd3NdPVwiMTBcIlxyXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVRhYmxhXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3NpbnRheGlzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0aXBvJyB8IHRyYW5zbGF0ZX19IGRlIHt7J2RhdG8nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtY2FtcG8gbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cImNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYW1wby5ub21icmUgXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuXHJcblxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ3dpemFyZCd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPHAtc3RlcHMgW21vZGVsXT1cIml0ZW1zXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgW2FjdGl2ZUluZGV4XT1cImFjdHVhbFwiPjwvcC1zdGVwcz5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRJbnN0cnVjY2lvbmVzIG10LTQgbWItM1wiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1iZWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW5lZG9yXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAyJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7bWFwYU1lbnNhamVzPy5nZXQoYWN0dWFsKX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b24gKG9uQ2xpY2spPVwiYW50ZXJpb3IoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtbGVmdFwiIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJBbnRlcmlvclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW291dGxpbmVkXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiYWN0dWFsIDw9IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJzaWd1aWVudGUoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW291dGxpbmVkXT1cInRydWVcIiAqbmdJZj1cImFjdHVhbCAhPSAzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImFjdHVhbCAgPT09IDMgPyAnVGVybWluYXInOiAnU2lndWllbnRlJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3sndGVybWluYXInIHwgdHJhbnNsYXRlfX1cIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiAoY2xpY2spPVwic2lndWllbnRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdHVhbCA9PT0gM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBwLTIgbWwtMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwLXByb2dyZXNzQmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnM3B4JyB9XCIgKm5nSWY9XCJjYXJnYXJQYXNvXCIgLz5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cIiFjYXJnYXJQYXNvXCI+XHJcbiAgICAgICAgICAgIEBpZihhY3R1YWwgPT09IDApe1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fVwiIGljb249XCJwaSBwaS1wbHVzXCIgKGNsaWNrKT1cImJ1c2NhclRhYmxhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yIG10LTNcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGUgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwidGFibGFzRnJvbVwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwidGFibGFzRnJvbS5sZW5ndGhcIiBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBbcGFnaW5hdG9yXT1cInRhYmxhc0Zyb20ubGVuZ3RoID4gMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCIgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMTAsIDIwLCAzMF1cIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgZWRpdE1vZGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YUtleT1cImxsYXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydhbGlhcycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj4gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cInRhYmxhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLnRhYmxhfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVMSU1JTkFSIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcERlbGV0ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWxpbWluYXJUYWJsYSh0YWJsYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcC1yaXBwbGUgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1vdXRsaW5lZCBtci0yIG1iLTIgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGlmKGFjdHVhbCA9PSAxKXtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxoND57eydmb3JhbmVhJ3wgdHJhbnNsYXRlfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiZm9yYW5lYXNcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIiBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGVkaXRNb2RlPVwicm93XCIgKG9uUm93U2VsZWN0KT1cImFkaWNpb25hckZvcmFuZWEoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwidHJ1ZVwiIGRhdGFLZXk9XCJsbGF2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3sndGFibGEnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J2NhbXBvJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIFtwU2VsZWN0YWJsZVJvd109XCJ0YWJsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuYWxpYXMxfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzMn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5sbGF2ZS5ub21icmV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxhLXBsYW50YS1wZXJzb25hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwJSAhaW1wb3J0YW50O2JhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQ+e3snam9pbid8IHRyYW5zbGF0ZX19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snYWdyZWdhcicgfCB0cmFuc2xhdGV9fSB7eydqb2luJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cIm51ZXZvSm9pbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiam9pbnNGcm9tXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRNb2RlPVwicm93XCIgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gYWwge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYXp5XT1cInRydWVcIiBkYXRhS2V5PVwibGxhdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjQ1JVwiPnt7J2NhbXBvJyB8IHRyYW5zbGF0ZX19IDE8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjUlXCI+e3snPScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NDUlXCI+e3snY2FtcG8nIHwgdHJhbnNsYXRlfX0gMjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7JycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiIFRhYmxhTnVldm9SZWdpc3Ryb1wiICpuZ0lmPVwidmVyTnVldm9Kb2luXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImxpc3RhQ29sdW1uYXNcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgWyhuZ01vZGVsKV09XCJjb2wxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIFthdXRvWkluZGV4XT1cImZhbHNlXCIgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiIChvbkNoYW5nZSk9XCJjYW1iaW9Kb2luKCRldmVudClcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDo1JVwiPj08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjQ1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJsaXN0YUpvaW5cIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgWyhuZ01vZGVsKV09XCJjb2wyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIFthdXRvWkluZGV4XT1cImZhbHNlXCIgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jaGVja1wiIChjbGljayk9XCJhZGljaW9uYXJKb2luKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcC1yaXBwbGUgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxhck51ZXZvSm9pbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWRhbmdlciBtci0yIG1iLTIgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJ0YWJsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjQ1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmExfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Jz0nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjQ1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIHBEZWxldGVFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVsaW1pbmFySm9pbih0YWJsYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcC1yaXBwbGUgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1vdXRsaW5lZCBtci0yIG1iLTIgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGlmKGFjdHVhbCA9PSAyKXtcclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNT48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J3doZXJlJ3wgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtZmx1aWQgcC1mb3JtZ3JpZCBncmlkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbFwiIGlkPVwiZmxvYXQtaW5wdXRcIiByb3dzPVwiNVwiIGNvbHM9XCIzMFwiIHBJbnB1dFRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmdWVudGUud2hlcmVBZGljaW9uYWxcIiBhdXRvZm9jdXMgW2F1dG9SZXNpemVdPVwidHJ1ZVwiPiA8L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snY29uc3VsdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCIgbGFiZWw9XCJ7eydsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdGFyV2hlcmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGlmKGFjdHVhbCA9PSAzKXtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cImNhbXBvc1NlbGVjY2lvbmFyXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJjYW1wb3NTZWxlY2Npb25hci5sZW5ndGhcIiBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBbcGFnaW5hdG9yXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aCA+IDEwXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93c109XCIxMFwiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyMCwgMzBdXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiIGVkaXRNb2RlPVwicm93XCJcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFLZXk9XCJhbGlhc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCIgYWxpZ25Gcm96ZW49XCJsZWZ0XCIgcEZyb3plbkNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbc3R5bGVdPVwieydtYXJnaW4tbGVmdCc6ICcxJScsJ21hcmdpbi1yaWdodCc6JzElJ31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjY2lvbkdlbmVyYWxcIiBbYmluYXJ5XT1cInRydWVcIiBbbmdNb2RlbF09XCJ0b2Rvc1NlbGVjY2lvbmFkb3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImFjdHVhbGl6YXJTZWxlY2Npb24oJGV2ZW50KVwiPjwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjElXCI+e3sndGFibGEnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snY29sdW1uYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC10YWJsYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggY2xhc3M9XCJtci0yIFwiIFsobmdNb2RlbCldPVwidGFibGEuc2VsZWNjaW9uYWRvXCIgW2JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRJZD1cImJpbmFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEucmVwb3J0ZUZ1ZW50ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5jb2x1bW5hLm5vbWJyZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG48L3AtdGFiVmlldz5cclxuXHJcbn1cclxuXHJcbjxhcHAtcG9wdXAtdGFibGFzLWZ1ZW50ZSAjcG9wdXBUYWJsYXNGdWVudGVVSVxyXG4gICAgKGFwbGljYXJEZXN0aW5vT2N1bHRhcik9XCJzZXRUYWJsYVNlbGVjY2lvbmFkYSgkZXZlbnQpXCI+PC9hcHAtcG9wdXAtdGFibGFzLWZ1ZW50ZT4iXX0=
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDakgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQVksY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1B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LDRxQ0FBRSxXQUFXLDh3QkFBRSxXQUFXLDIwRUFBRSxxQkFBcUIscU1BQUUsc0JBQXNCLHdKQUN2SixZQUFZLDhCQUFFLG1CQUFtQixpVkFBZSxtQkFBbUIsc0tBQUUsa0JBQWtCLDhCQUFlLG1CQUFtQixzbUJBQUMsMkJBQTJCOzsyRkFLMUksc0JBQXNCO2tCQVZsQyxTQUFTOytCQUNDLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxpQkFBaUIsRUFBQyxhQUFhLEVBQUMsY0FBYyxFQUFDLDBCQUEwQixFQUFDLFdBQVcsRUFBQyxZQUFZLEVBQUMsYUFBYSxFQUFDLGlCQUFpQixFQUFDLElBQUk7d0JBQ2hKLGVBQWUsRUFBRSxlQUFlLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0I7d0JBQ3ZKLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFDLG1CQUFtQixFQUFDLDJCQUEyQixDQUFDLGFBQzVJLENBQUMsY0FBYyxFQUFDLG1CQUFtQixDQUFDO3lUQXNDYixtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNDLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3B1cEVkaXRvckZvcm11bGFDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uL3BvcHVwcy9wb3B1cC1lZGl0b3ItZm9ybXVsYS9wb3B1cC1lZGl0b3ItZm9ybXVsYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHZW5lcmFsUGlwZSB9IGZyb20gJy4vLi4vLi4vcGlwZXMvZ2VuZXJhbC5waXBlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5hRnVlbnRlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Db2x1bW5hRnVlbnRlTW9kZWwnO1xyXG5pbXBvcnQgeyBGdWVudGVEYXRvTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9GdWVudGVEYXRvJztcclxuaW1wb3J0IHsgUmVwb3J0ZUNvbHVtbmFNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL1JlcG9ydGVDb2x1bW5hJztcclxuaW1wb3J0IHsgVGFibGFGcm9tTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9UYWJsYUZyb21Nb2RlbCc7XHJcbmltcG9ydCB7IEpvaW5Gcm9tTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Kb2luRnJvbU1vZGVsJztcclxuaW1wb3J0IHsgUmVwb3J0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0ZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IExsYXZlRm9yYW5lYU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvTGxhdmVGb3JhbmVhTW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JlaW5nV3JhcGVyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Gb3JlaW5nV3JhcGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNpb3MvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhbE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvR2VuZXJhbE1vZGVsJztcclxuaW1wb3J0IHsgQ29sdW1uYVdyYXBlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvQ29sdW1uYVdyYXBlck1vZGVsJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbnN0YW50ZXNHZW5lcmFsZXMgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvY29uc3RhbnRlcy9Db25zdGFudGVzR2VuZXJhbGVzJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDb25maXJtUG9wdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1wb3B1cCc7XHJcbmltcG9ydCB7IElucHV0VGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dGFyZWEnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFjY29yZGlvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYWNjb3JkaW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRhYmxhR2VuZXJhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50ZXMvdGFibGEtZ2VuZXJhbC90YWJsYS1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRyb0dlbmVyYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudGVzL2ZpbHRyby1nZW5lcmFsL2ZpbHRyby1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcbmltcG9ydCB7IFN0ZXBzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zdGVwcyc7XHJcbmltcG9ydCB7IFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG9wdXBzL3BvcHVwLXRhYmxhcy1mdWVudGUvcG9wdXAtdGFibGFzLWZ1ZW50ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgUmVwb3J0ZUVudHJhZGFDb25zdGFudGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL2NvbnN0YW50ZXMvUmVwb3J0ZUVudHJhZGFDb25zdGFudGVzJztcclxuaW1wb3J0IHsgUHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzYmFyJztcclxuaW1wb3J0IHsgQ29uZmlybURpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWZ1ZW50ZS1yZXBvcnRlJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtQcm9ncmVzc0Jhck1vZHVsZSxUb29sdGlwTW9kdWxlLENoZWNrYm94TW9kdWxlLFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50LFN0ZXBzTW9kdWxlLENvbW1vbk1vZHVsZSxUYWJWaWV3TW9kdWxlLFNwbGl0QnV0dG9uTW9kdWxlLE5nSWYsXHJcblx0XHRUcmFuc2xhdGVNb2R1bGUsIElucHV0VGV4dE1vZHVsZSxDb21tb25Nb2R1bGUsIEFjY29yZGlvbk1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBUYWJsZU1vZHVsZSwgVGFibGFHZW5lcmFsQ29tcG9uZW50LCBGaWx0cm9HZW5lcmFsQ29tcG9uZW50LCBcclxuXHRcdEJ1dHRvbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgR2VuZXJhbFBpcGUsIElucHV0VGV4dGFyZWFNb2R1bGUsIENvbmZpcm1Qb3B1cE1vZHVsZSwgQnV0dG9uTW9kdWxlLENvbmZpcm1EaWFsb2dNb2R1bGUsUG9wdXBFZGl0b3JGb3JtdWxhQ29tcG9uZW50XSxcclxuXHRwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSxDb25maXJtYXRpb25TZXJ2aWNlXSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9mdWVudGUtcmVwb3J0ZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZ1ZW50ZVJlcG9ydGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHRwdWJsaWMgZnVlbnRlOiBGdWVudGVEYXRvTW9kZWwgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0cHVibGljIHZpc3RhVmlzdWFsaXphcjogc3RyaW5nXHJcblx0cHVibGljIHRhYmxhc0Zyb206IFRhYmxhRnJvbU1vZGVsW10gPSBbXTsgLy8gZnJvbSBUYWJsYUZyb21cclxuXHRwdWJsaWMgam9pbnNGcm9tOiBKb2luRnJvbU1vZGVsW10gPSBbXTsgICAvL2Zyb20gSm9pbkZyb20gXHJcblx0cHVibGljIGNvbHVtbmFzOiBSZXBvcnRlQ29sdW1uYU1vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgbGlzdGFDb2x1bW5hczogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgbGlzdGFKb2luOiBhbnlbXSA9IFtdO1xyXG5cdHB1YmxpYyBjb2wxOiBzdHJpbmc7XHJcblx0cHVibGljIGNvbDI6IHN0cmluZztcclxuXHRwdWJsaWMgY2FtcG9zOiBDb2x1bW5hRnVlbnRlTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBjYW1wb3NTZWxlY2Npb25hcjogQ29sdW1uYVdyYXBlck1vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgbW9zdHJhclNlbGVjY2lvbmFyOiBib29sZWFuO1xyXG5cdHB1YmxpYyBjYW1wb0Zvcm11bGE6IENvbHVtbmFGdWVudGVNb2RlbCA9IG5ldyBDb2x1bW5hRnVlbnRlTW9kZWwoKTtcclxuXHRwdWJsaWMgYWN0dWFsOiBudW1iZXI7XHJcblx0cHVibGljIHRhYlByaW5jaXBhbDogbnVtYmVyO1xyXG5cdHB1YmxpYyBiYXNpY286IGJvb2xlYW47XHJcblx0cHVibGljIHNlbGVjY2lvbkdlbmVyYWw6IGJvb2xlYW47XHJcblx0cHVibGljIGZvcmFuZWFzOiBhbnlbXSA9IFtdO1xyXG5cdHB1YmxpYyBkZXNjcmlwY2lvbjogc3RyaW5nO1xyXG5cdHB1YmxpYyBxdWVyeTogc3RyaW5nO1xyXG5cdHB1YmxpYyBwYWdpbmFkb3I6IEZ1ZW50ZURhdG9Nb2RlbFtdID0gW107XHJcblx0cHVibGljIGZpbHRybzogRnVlbnRlRGF0b01vZGVsID0gbmV3IEZ1ZW50ZURhdG9Nb2RlbCgpO1xyXG5cdHB1YmxpYyBwYWdpbmF0b3IgPSB7XHJcblx0XHRyb3dzOiAxMCxcclxuXHRcdHRvdGFsUmVjb3JkczogMCxcclxuXHR9O1xyXG5cdHB1YmxpYyBjb2x1bW5zIDogYW55W10gPSBbXTtcclxuICBcdHB1YmxpYyBmaWx0ZXJzIDogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgbG9hZGluZyA6IGJvb2xlYW47XHJcblx0cHVibGljIG1lbnU6IE1lbnVJdGVtW10gPSBbXTtcclxuXHRwdWJsaWMgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHRwdWJsaWMgbWFwYU1lbnNhamVzOiBNYXA8bnVtYmVyLHN0cmluZz4gPSBuZXcgTWFwPG51bWJlcixzdHJpbmc+KCk7XHJcblx0QFZpZXdDaGlsZCgncG9wdXBUYWJsYXNGdWVudGVVSScpIHBvcHVwVGFibGFzRnVlbnRlVUk6IFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoJ3BvcHVwRWRpdG9yRm9ybXVsYScpIHBvcHVwRWRpdG9yRm9ybXVsYTogUG9wdXBFZGl0b3JGb3JtdWxhQ29tcG9uZW50O1xyXG5cdHB1YmxpYyB0aXBvc0RhdG8gPSAgUmVwb3J0ZUVudHJhZGFDb25zdGFudGVzLnRpcG9EYXRvXHJcblx0cHVibGljIGNsaWNrR3VhcmRhcjogYm9vbGVhbjtcclxuXHRwdWJsaWMgdmVyTnVldm9Kb2luOiBib29sZWFuO1xyXG5cdHB1YmxpYyBhY3RpdmVJbmRleDogbnVtYmVyID0gMDtcclxuXHRwdWJsaWMgY2FyZ2FyUGFzbzogYm9vbGVhbjtcclxuXHRsb2FkaW5nR2VuZXJhcjogYm9vbGVhbjtcclxuXHRlcnJvclF1ZXJ5OiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxwcml2YXRlIG5vdGlmaWNhdGlvbkJ1c1NlcnZpY2U6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSByZXBvcnRlc1N2YzogUmVwb3J0ZXNTZXJ2aWNlLCBwcml2YXRlIGdlbmVyYWxTdmM6IEdlbmVyYWxTZXJ2aWNlLCBwdWJsaWMgdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG5cdFx0cHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBnZW5lcmFsUGlwZTogR2VuZXJhbFBpcGUpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdGNvbnNvbGUubG9nKCdob2xhJyk7XHJcblx0XHR0aGlzLmxpc3RhQ29sdW1uYXMgPSBbXTtcclxuXHRcdHRoaXMuY2FtcG9zID0gW107XHJcblx0XHR0aGlzLmxpc3RhSm9pbiA9IFtdO1xyXG5cdFx0dGhpcy5jb2x1bW5hcyA9IFtdO1xyXG5cdFx0dGhpcy50YWJsYXNGcm9tID0gW107XHJcblx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyID0gW107XHJcblx0XHR0aGlzLmpvaW5zRnJvbSA9IFtdO1xyXG5cdFx0dGhpcy5hY3R1YWwgPSAwO1xyXG5cdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnIH1dKTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IFtcclxuXHRcdCAge1xyXG5cdFx0XHRmaWVsZDogICdkZXNjcmlwY2lvbicsXHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Rlc2NyaXBjaW9uJyksXHJcblx0XHRcdHdpZHRoOiAxMDAsXHJcblx0XHQgIH0sXHJcblx0XHRdO1xyXG5cdFx0dGhpcy5maWx0ZXJzID0gW1xyXG5cdFx0ICB7XHJcblx0XHRcdGZpZWxkOiAnZGVzY3JpcGNpb24nLFxyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkZXNjcmlwY2lvbicpLFxyXG5cdFx0XHRtYXRjaE1vZGU6ICdjb250YWlucycsXHJcblx0XHQgIH1cclxuXHRcdF07XHJcblx0XHR0aGlzLmluaXRTdGVwKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgbG9hZChldmVudCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5sb2FkaW5nID10cnVlO1xyXG5cdFx0XHR0aGlzLmZpbHRyby5wYWdpbmFjaW9uUmVnaXN0cm9JbmljaWFsID0gZXZlbnQ/LmZpcnN0ICE9IG51bGwgPyBldmVudD8uZmlyc3QgOiAwO1xyXG5cdFx0XHR0aGlzLmZpbHRyby5wYWdpbmFjaW9uUmVnaXN0cm9GaW5hbCA9IGV2ZW50Py5yb3dzICE9IG51bGwgPyBldmVudD8ucm93cyA6IDEwO1xyXG5cdFx0XHR0aGlzLmZpbHRyby5vcmlnZW4gPSAoXCJGXCIpO1xyXG5cdFx0XHR0aGlzLmZpbHRyby5kZXNjcmlwY2lvbiA9IGV2ZW50Py5maWx0ZXJzLmRlc2NyaXBjaW9uPy52YWx1ZSA/ICBDb25zdGFudGVzR2VuZXJhbGVzLlBPUkNFTlRBSkUgKyBldmVudD8uZmlsdGVycy5kZXNjcmlwY2lvbj8udmFsdWUgKyBDb25zdGFudGVzR2VuZXJhbGVzLlBPUkNFTlRBSkUgOiBudWxsXHJcblx0XHRcdHRoaXMucGFnaW5hZG9yID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jb25zdWx0YXJGdWVudGVEYXRvKHRoaXMuZmlsdHJvKS50b1Byb21pc2UoKTtcclxuXHRcdFx0dGhpcy5wYWdpbmF0b3IudG90YWxSZWNvcmRzID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jYW50aWRhZEZ1ZW50ZURhdG8odGhpcy5maWx0cm8pLnRvUHJvbWlzZSgpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sb2FkaW5nID1mYWxzZTtcclxuXHR9XHJcblxyXG5cclxuXHRwdWJsaWMgbGltcGlhckNhbXBvcygpIHtcclxuXHRcdHRoaXMuZGVzY3JpcGNpb24gPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHNpZ3VpZW50ZSgpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXJXaXphcmQoKSkge1xyXG5cdFx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IHRydWU7XHJcblx0XHRcdFx0aWYgKHRoaXMuYWN0dWFsIDwgMykge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWN0dWFsID09IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy50YWJsYXNGcm9tLmxlbmd0aCA9PSAwKSB7IC8vIE5vIHNlbGVjY2lvbm8gbmluZ3VuYSB0YWJsYVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkRlYmUgc2VsZWNjaW9uYXIgYWwgbWVub3MgdW4gb2JqZXRvLlwiKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNhcmdhclBhc28gPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy50YWJsYXNGcm9tLmxlbmd0aCA9PSAxKSB7IC8vIFNvbG8gc2VsZWNjaW9ubyB1bmEsIHBvciBlc28gbm8gaGF5IHF1ZSBnZW5lcmFyIGpvaW5zLlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuYWN0dWFsKys7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG5vbWJyZXNUYWJsYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICghbm9tYnJlc1RhYmxhcy5pbmNsdWRlcyh0YWJsYS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bm9tYnJlc1RhYmxhcy5wdXNoKHRhYmxhLnRhYmxhKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdC8vTGlzdDxMbGF2ZUZvcmFuZWE+IFxyXG5cdFx0XHRcdFx0XHRcdGxldCBsbGF2ZXM6IExsYXZlRm9yYW5lYU1vZGVsW10gPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmdldExsYXZlcyhub21icmVzVGFibGFzKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGFzRnJvbS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9yYW5lYSBvZiBsbGF2ZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9yYW5lYS50YWJsYTEgPT0gKHRoaXMudGFibGFzRnJvbVtpXS50YWJsYSkgJiYgZm9yYW5lYS50YWJsYTIgPT0gKHRoaXMudGFibGFzRnJvbVtqXS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBudWV2bzogRm9yZWluZ1dyYXBlck1vZGVsID0gbmV3IEZvcmVpbmdXcmFwZXJNb2RlbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVldm8uYWxpYXMxID0gKHRoaXMudGFibGFzRnJvbVtpXS5hbGlhcyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWV2by5hbGlhczIgPSAodGhpcy50YWJsYXNGcm9tW2pdLmFsaWFzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51ZXZvLmxsYXZlID0gKGZvcmFuZWEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcy5wdXNoKG51ZXZvKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBDYXJnbyBsYXMgY29sdW1uYXMgcGFyYSBsb3Mgc2lndWllbnRlcyBwcm9jZXNvcy5cclxuXHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5saXN0YUNvbHVtbmFzID0gW107XHJcblx0XHRcdFx0XHRcdHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIgPSBbXTtcclxuXHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGZyb20gb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly9SZXBvcnRlQ29sdW1uYURUTyBcclxuXHRcdFx0XHRcdFx0XHRsZXQgdGEgPSBuZXcgUmVwb3J0ZUNvbHVtbmFNb2RlbCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRhLnJlcG9ydGVGdWVudGUgPSAoZnJvbS50YWJsYSk7XHJcblx0XHRcdFx0XHRcdFx0Ly9MaXN0PFJlcG9ydGVDb2x1bW5hRFRPPiBcclxuXHRcdFx0XHRcdFx0XHRsZXQgbnVldmFzOiBSZXBvcnRlQ29sdW1uYU1vZGVsW10gPSBhd2FpdCB0aGlzLmdlbmVyYWxTdmMucXVlcnlGb3JMaXN0KG5ldyBHZW5lcmFsTW9kZWwoJ1JlcG9ydGVDb2x1bW5hRFRPJywgJ1JlcG9ydGVzLmNvbnN1bHRhckNvbHVtbmFzJywgZmFsc2UsIHRhKSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jYXJnYXJMaXN0YXNDb2x1bW5hcyhudWV2YXMsIGZyb20uYWxpYXMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5hY3R1YWwrKztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy50ZXJtaW5hclBhc29zKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjYXJnYXJMaXN0YXNDb2x1bW5hcyhudWV2YXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSwgYWxpYXM6IHN0cmluZykge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIG51ZXZhcykge1xyXG5cdFx0XHRjb2wucmVwb3J0ZUZ1ZW50ZSA9IChhbGlhcyk7XHJcblx0XHRcdHRoaXMuY29sdW1uYXMucHVzaChjb2wpO1xyXG5cdFx0XHR0aGlzLmxpc3RhQ29sdW1uYXMucHVzaCh7IHZhbHVlOiBjb2wucmVwb3J0ZUZ1ZW50ZSArICcuJyArIGNvbC5ub21icmUsIGxhYmVsOiBjb2wucmVwb3J0ZUZ1ZW50ZSArICcuJyArIGNvbC5ub21icmUgfSk7XHJcblx0XHRcdGxldCBjYW1wbyA9IG5ldyBDb2x1bW5hV3JhcGVyTW9kZWwoKTtcclxuXHRcdFx0Y2FtcG8uY29sdW1uYSA9IGNvbDtcclxuXHRcdFx0Y2FtcG8uYWxpYXMgPSBjb2wubm9tYnJlO1xyXG5cdFx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLnB1c2goY2FtcG8pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHRlcm1pbmFyUGFzb3MoKSB7XHJcblx0XHR0aGlzLmxvYWRpbmdHZW5lcmFyID0gdHJ1ZTtcclxuXHRcdGxldCBjYW1wb3NTcWwgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0aWYgKGNvbC5zZWxlY2Npb25hZG8pIHtcclxuXHRcdFx0XHRjYW1wb3NTcWwgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyBjb2wuY29sdW1uYS5ub21icmUgKyBcIiBhcyBcIiArIGNvbC5hbGlhcztcclxuXHRcdFx0XHRpKys7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZ1ZW50ZS53aGVyZUpvaW4gPSAodGhpcy5nZW5lcmFyU3FsSm9pbigpKTtcclxuXHRcdHRoaXMuZnVlbnRlLmZyb21TcWwgPSAodGhpcy5nZW5lcmFyU3FsRnJvbSgpKTtcclxuXHRcdGxldCB3aGVyZSA9IFwiXCI7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlSm9pbjogYm9vbGVhbiA9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiA9PSBudWxsIHx8IFwiXCIgPT0gKHRoaXMuZnVlbnRlLndoZXJlSm9pbik7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsOiBib29sZWFuID0gdGhpcy5mdWVudGUud2hlcmVBZGljaW9uYWwgPT0gbnVsbCB8fCBcIlwiID09ICh0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCk7XHJcblx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gfHwgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHR3aGVyZSA9IFwiIFxcbldIRVJFIFwiO1xyXG5cdFx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gJiYgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiArIFwiIEFORCBcXG4oXCIgKyB0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCArIFwiKVwiO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCFlc3RhQmxhbmNvV2hlcmVKb2luKSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVKb2luO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgc3FsID0gXCJTRUxFQ1QgXFxuXCIgKyBjYW1wb3NTcWwgKyBcIiBcXG5GUk9NIFxcblwiICsgdGhpcy5mdWVudGUuZnJvbVNxbCArIHdoZXJlO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeShzcWwpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9IChzcWwpO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gc3FsO1xyXG5cdFx0XHR0aGlzLnRhYlByaW5jaXBhbCA9IDA7XHJcblx0XHRcdHRoaXMudGFibGFzRnJvbSA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKCdRdWVyeSBjcmVhZGEgc2F0aXNmYWN0b3JpYW1lbnRlLicpO1xyXG5cdFx0XHR0aGlzLmxvYWRpbmdHZW5lcmFyID0gZmFsc2U7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHRcdHRoaXMubG9hZGluZ0dlbmVyYXIgPSBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBhZGljaW9uYXJGb3JhbmVhKGV2ZW50bykge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9Gb3JlaW5nV3JhcGVyIFxyXG5cdFx0XHRsZXQgZm9yYW5lYTogRm9yZWluZ1dyYXBlck1vZGVsID0gZXZlbnRvLmRhdGE7XHJcblx0XHRcdGZvciAobGV0IHJlbCBvZiBmb3JhbmVhLmxsYXZlLnJlbGFjaW9uZXMpIHtcclxuXHRcdFx0XHRsZXQgcGFyID0gcmVsLnNwbGl0KFwiOlwiKTtcclxuXHRcdFx0XHRsZXQgam9pbiA9IG5ldyBKb2luRnJvbU1vZGVsKCk7XHJcblx0XHRcdFx0am9pbi5jb2x1bW5hMSA9IChmb3JhbmVhLmFsaWFzMSArIFwiLlwiICsgcGFyWzBdKTtcclxuXHRcdFx0XHRqb2luLmNvbHVtbmEyID0gKGZvcmFuZWEuYWxpYXMyICsgXCIuXCIgKyBwYXJbMV0pO1xyXG5cdFx0XHRcdGlmKHRoaXMuam9pbnNGcm9tLnNvbWUoZGF0YSA9PiBkYXRhLmNvbHVtbmExID09PSBqb2luLmNvbHVtbmExICYmIGRhdGEuY29sdW1uYTIgPT09IGpvaW4uY29sdW1uYTIpKXtcclxuXHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93V2FybmluZygnUmVnaXN0cm8geWEgc2UgZW5jdWVudHJhIGFzb2NpYWRvLicpXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR0aGlzLmpvaW5zRnJvbS5wdXNoKGpvaW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIGVsaW1pbmFyKCkge1xyXG5cdFx0dGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG5cdFx0XHR0YXJnZXQ6IGV2ZW50LnRhcmdldCxcclxuXHRcdFx0a2V5OiAnZWxpbWluYXInLFxyXG5cdFx0XHRtZXNzYWdlOiAgdGhpcy5nZW5lcmFsUGlwZS5NRU5TQUpFX0VMSU1JTkFSX0NPTkZJUk1BUixcclxuXHRcdFx0YWNjZXB0TGFiZWw6IHRoaXMuZ2VuZXJhbFBpcGUuU0lfREVTQyxcclxuXHRcdFx0aGVhZGVyOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY29uZmlybWFyJyksXHJcblx0XHRcdGFjY2VwdDogKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0UmVzcHVlc3RhKHRydWUpXHJcblx0XHRcdH0sXHJcblx0XHRcdHJlamVjdDogKCkgPT4ge1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc2V0UmVzcHVlc3RhKHJlc3B1ZXN0YTogYm9vbGVhbikge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHJlc3B1ZXN0YSkge1xyXG5cdFx0XHRcdHRoaXMucmVwb3J0ZXNTdmMuZWxpbWluYXJGdWVudGVEYXRvc0Nvbkhpam9zKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR0aGlzLnJlZ3Jlc2FyKCk7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTGEgZnVlbnRlIGhhIHNpZG8gZWxpbWluYWRhLlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFudGVyaW9yKCkge1xyXG5cdFx0aWYgKHRoaXMuYWN0dWFsID4gMCl7XHJcblx0XHRpZih0aGlzLmFjdHVhbCA9PSAyICYmIHRoaXMudGFibGFzRnJvbS5sZW5ndGggPT0gMSl7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHR0aGlzLmFjdHVhbC0tO1xyXG5cdFx0fVxyXG5cdFx0fVxyXG5cdFx0XHRcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyB2YWxpZGFyUXVlcnkoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclRleHRvU1FMKHRoaXMucXVlcnksIHRydWUsIHRydWUsIDgwMDAsIHRydWUpID09IG51bGwpIHtcclxuXHRcdFx0XHR0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeSh0aGlzLnF1ZXJ5KTtcclxuXHRcdFx0XHR0aGlzLmVycm9yUXVlcnkgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJFbCBxdWVyeSBlc3RhIGNvcnJlY3RvLlwiKTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dGhpcy5lcnJvclF1ZXJ5ID0gdHJ1ZTtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0Vycm9yKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSk7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0dGhpcy5lcnJvclF1ZXJ5ID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dFcnJvcihlKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckpvaW4oKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy5jb2wxICE9IG51bGwgJiYgdGhpcy5jb2wyICE9IG51bGwpIHtcclxuXHRcdFx0XHQvLyBUT0RPOiBGYWx0YSB2YWxpZGFyIGVsIHRpcG9cclxuXHRcdFx0XHRsZXQgbnVldm8gPSBuZXcgSm9pbkZyb21Nb2RlbCgpO1xyXG5cdFx0XHRcdG51ZXZvLmNvbHVtbmExID0gKHRoaXMuY29sMSk7XHJcblx0XHRcdFx0bnVldm8uY29sdW1uYTIgPSAodGhpcy5jb2wyKTtcclxuXHRcdFx0XHR0aGlzLmpvaW5zRnJvbS5wdXNoKG51ZXZvKTtcclxuXHRcdFx0XHR0aGlzLmNhbmNlbGFyTnVldm9Kb2luKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRGViZSBzZWxlY2Npb25hciBkb3MgY2FtcG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRudWV2b0pvaW4oKXtcclxuXHRcdHRoaXMudmVyTnVldm9Kb2luID0gdHJ1ZTtcclxuXHRcdHRoaXMuY29sMSA9ICAnJztcclxuXHRcdHRoaXMuY29sMiA9ICcnO1xyXG5cdH1cclxuXHJcblx0Y2FuY2VsYXJOdWV2b0pvaW4oKXtcclxuXHRcdHRoaXMudmVyTnVldm9Kb2luID0gZmFsc2U7XHJcblx0XHR0aGlzLmNvbDEgPSAgJyc7XHJcblx0XHR0aGlzLmNvbDIgPSAnJztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlbGltaW5hckpvaW4oYWUpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vbGV0ICBqb2luID0gKEpvaW5Gcm9tKSAoKFVJUGFyYW1ldGVyKSBhZS5nZXRDb21wb25lbnQoKS5maW5kQ29tcG9uZW50KFwiam9pblwiKSkuZ2V0VmFsdWUoKTtcclxuXHRcdFx0dGhpcy5qb2luc0Zyb20gPSAgdGhpcy5qb2luc0Zyb20uZmlsdGVyKChkYXRhKSA9PiBkYXRhLmNvbHVtbmExICE9PSBhZT8uY29sdW1uYTEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGVsaW1pbmFyVGFibGEoYWUpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vVGFibGFGcm9tIHRhYmxhID0gKFRhYmxhRnJvbSkgKChVSVBhcmFtZXRlcikgYWUuZ2V0Q29tcG9uZW50KCkuZmluZENvbXBvbmVudChcInRhYmxhXCIpKS5nZXRWYWx1ZSgpO1xyXG5cdFx0XHR0aGlzLnRhYmxhc0Zyb20gPSB0aGlzLnRhYmxhc0Zyb20uZmlsdGVyKChkYXRhKSA9PiBkYXRhICE9IGFlKTtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9FTElNSU5BUik7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYnVzY2FyVGFibGEoKSB7XHJcblx0XHR0aGlzLnBvcHVwVGFibGFzRnVlbnRlVUkuYnVzY2FyVGFibGEoXCJmdWVudGVVSS50YWJsYVNlbGVjY2lvbmFkYVwiKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRUYWJsYVNlbGVjY2lvbmFkYSh0YWJsYVNlbGVjY2lvbmFkYTogYW55W10pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCB0YWJsYXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgdGFibGEgb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdFx0aWYgKCF0YWJsYXMuaW5jbHVkZXModGFibGEudGFibGEpKSB7XHJcblx0XHRcdFx0XHR0YWJsYXMucHVzaCh0YWJsYS50YWJsYSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRhYmxhU2VsZWNjaW9uYWRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblx0XHRcdFx0dGhpcy5jYXJnYXJUYWJsYUVuTGlzdGEoZWxlbWVudC5vYmpldG8pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FyZ2FyVGFibGFFbkxpc3RhKHRhYmxhOiBzdHJpbmcpIHtcclxuXHRcdGxldCBwYXIgPSB0YWJsYS5zcGxpdChcIl9cIik7XHJcblx0XHRsZXQgYWxpYXMgPSBwYXJbMF07XHJcblx0XHRsZXQgaSA9IDE7XHJcblx0XHRsZXQgdGFibGFUZW1wID0gbmV3IFRhYmxhRnJvbU1vZGVsKClcclxuXHRcdHRhYmxhVGVtcC5hbGlhcyA9IGFsaWFzO1xyXG5cdFx0d2hpbGUgKHRoaXMudGFibGFzRnJvbS5pbmNsdWRlcyh0YWJsYVRlbXApKSB7XHJcblx0XHRcdGFsaWFzID0gdGFibGEgKyAoaSsrKTtcclxuXHRcdH1cclxuXHRcdGxldCB0ZW0gPSBuZXcgVGFibGFGcm9tTW9kZWwoKTtcclxuXHRcdHRlbS50YWJsYSA9IHRhYmxhO1xyXG5cdFx0dGVtLmFsaWFzID0gYWxpYXM7XHJcblx0XHR0aGlzLnRhYmxhc0Zyb20ucHVzaCh0ZW0pO1xyXG5cdFx0cmV0dXJuIGFsaWFzO1xyXG5cdH1cclxuXHJcblxyXG5cclxuXHRwdWJsaWMgY2FtYmlvSm9pbihjZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5saXN0YUpvaW4gPSBbXTtcclxuXHRcdFx0bGV0IG51ZXZvID0gY2UudmFsdWU7XHJcblx0XHRcdGlmIChudWV2byAhPSBudWxsKSB7XHJcblx0XHRcdFx0Ly9SZXBvcnRlQ29sdW1uYURUTyBcclxuXHRcdFx0XHRsZXQgYWN0OiBSZXBvcnRlQ29sdW1uYU1vZGVsID0gbnVsbDtcclxuXHRcdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdFx0aWYgKG51ZXZvID09KGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlKSkge1xyXG5cdFx0XHRcdFx0XHRhY3QgPSBjb2w7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdFx0aWYgKCFjb2wucmVwb3J0ZUZ1ZW50ZS5zdGFydHNXaXRoKGFjdC5yZXBvcnRlRnVlbnRlKSAmJiBjb2wudGlwb0RhdG8gPT0gKGFjdC50aXBvRGF0bykgJiYgY29sLm9yZGVuID09IChhY3Qub3JkZW4pKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWwgPSBjb2wucmVwb3J0ZUZ1ZW50ZSArIFwiLlwiICsgY29sLm5vbWJyZTtcclxuXHRcdFx0XHRcdFx0dGhpcy5saXN0YUpvaW4ucHVzaCh7IHZhbHVlOiB2YWwsIGxhYmVsOiB2YWwgfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWRpdGFyQ2FtcG8oZXZlbnRvKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgY29sOiBDb2x1bW5hRnVlbnRlTW9kZWwgPSBldmVudG8uZGF0YTtcclxuXHRcdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBjb2w7XHJcblx0XHRcdGxldCB2YXJzID0gW107XHJcblx0XHRcdGZvciAobGV0IGNhbXBvIG9mIHRoaXMuY2FtcG9zKSB7XHJcblx0XHRcdFx0bGV0IHZhcjE6IGFueTtcclxuXHRcdFx0XHR2YXIxLm5vbWJyZSA9IChjYW1wby5ub21icmUpO1xyXG5cdFx0XHRcdHZhcjEudGlwbyA9IChjYW1wby50aXBvRGF0byk7XHJcblx0XHRcdFx0dmFycy5wdXNoKHZhcjEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vZ2V0QmVhbihFZGl0b3JGb3JtdWxhVUkuY2xhc3MpLmVkaXRhcihjb2wuZ2V0U2ludGF4aXMoKSwgXCJmdWVudGVVSS5mb3JtdWxhXCIsIHZhcnMpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGVkaXRhcldoZXJlKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHZhcnMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY29sdW1uYXMpIHtcclxuXHRcdFx0XHR2YXJzLnB1c2goe25vbWJyZTogY29sLnJlcG9ydGVGdWVudGUgKyBcIi5cIiArIGNvbC5ub21icmUsIHRpcG86IGNvbC50aXBvRGF0b30pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucG9wdXBFZGl0b3JGb3JtdWxhLmVkaXRhcih0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCwnZnVlbnRlVUkuZnVlbnRlLndoZXJlQWRpY2lvbmFsJyx2YXJzKTtcclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGZ1ZW50ZS5nZXRXaGVyZUFkaWNpb25hbCgpLCBcImZ1ZW50ZVVJLmZ1ZW50ZS53aGVyZUFkaWNpb25hbFwiLCB2YXJzKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRGb3JtdWxhKGZvcm11bGEpIHtcclxuXHRcdGlmICh0aGlzLmNhbXBvRm9ybXVsYSAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuY2FtcG9Gb3JtdWxhLnNpbnRheGlzID0gKGZvcm11bGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckNvbHVtbmFzKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0Y29sLnNlbGVjY2lvbmFkbyA9IChmYWxzZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm1vc3RyYXJTZWxlY2Npb25hciA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWdyZWdhclNlbGVjY2lvbmFkb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRcdGlmIChjb2wuc2VsZWNjaW9uYWRvKSB7XHJcblx0XHRcdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdFx0XHRjYW1wby5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0XHRcdGNhbXBvLm5vbWJyZSA9IChjb2wuY29sdW1uYS5ub21icmUpO1xyXG5cdFx0XHRcdFx0Y2FtcG8uc2ludGF4aXMgPSAoY29sLmNvbHVtbmEubm9tYnJlKTtcclxuXHRcdFx0XHRcdHRoaXMuY2FtcG9zLnB1c2goY2FtcG8pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLm9jdWx0YXJTZWxlY2Npb25hcigpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIG9jdWx0YXJTZWxlY2Npb25hcigpIHtcclxuXHRcdHRoaXMubW9zdHJhclNlbGVjY2lvbmFyID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdmVyRGV0YWxsZShldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHRsZXQgZnVlbnRlRGF0b0RUTyA9IGV2ZW50bztcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKGZ1ZW50ZURhdG9EVE8ubGxhdmUpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyVW5pY2FGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLnF1ZXJ5MiAhPSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeSA9IHRoaXMuZnVlbnRlLnF1ZXJ5ICsgdGhpcy5mdWVudGUucXVlcnkyO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucXVlcnkgPSB0aGlzLmZ1ZW50ZS5xdWVyeTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdGxldCBjb2wgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdGNvbC5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhckNvbHVtbmFzRnVlbnRlKGNvbCkudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpID0+IHRoaXMucmVncmVzYXIoKSB9LCB7bGFiZWw6ICdNYW50ZW5pbWllbnRvIEZ1ZW50ZScsIH1dKTtcclxuXHRcdFx0dGhpcy5jYXJnYXNPcGNpb25lcygpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIG51ZXZvKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy52aXN0YVZpc3VhbGl6YXIgPSAnbWFudGVuaW1pZW50byc7XHJcblx0XHRcdHRoaXMuZnVlbnRlID0gbmV3IEZ1ZW50ZURhdG9Nb2RlbCgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5vcmlnZW4gPSAoXCJGXCIpO1xyXG5cdFx0XHR0aGlzLmNhbXBvcyA9IFtdO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gbnVsbDtcclxuXHRcdFx0dGhpcy50YWJQcmluY2lwYWwgPSAwO1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJywgY29tbWFuZDogKGV2ZW50KSA9PiB0aGlzLnJlZ3Jlc2FyKCkgfSwge2xhYmVsOiAnTWFudGVuaW1pZW50byBGdWVudGUnLCB9XSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FzT3BjaW9uZXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNhcmdhc09wY2lvbmVzKCl7XHJcblx0XHR0aGlzLm1lbnU9IFt7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2VsaW1pbmFyJyksIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtYmluJywgdmlzaWJsZTogdGhpcy5mdWVudGUubGxhdmUgIT0gbnVsbCwgY29tbWFuZDogKGV2ZW50KSA9PiB7dGhpcy5lbGltaW5hcigpfX0sXHJcblx0XHR7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX3ZhbGlkYXInKSwgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1jaGVjaycsIGNvbW1hbmQ6IChldmVudCkgPT4ge3RoaXMudmFsaWRhclF1ZXJ5KCl9fSxcclxuXHRcdHtsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpbmtfZ2VuZXJhcicpLCBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLXJlZnJlc2gnLHZpc2libGU6IHRoaXMuZnVlbnRlLmxsYXZlICE9IG51bGwsIGNvbW1hbmQ6IChldmVudCkgPT4ge3RoaXMuY29uc3RydWlyQ29sdW1uYXMoKX19LFxyXG5cdFx0XVxyXG5cdH1cclxuXHJcblx0cmVncmVzYXIoKXtcclxuXHRcdGNvbnNvbGUubG9nKCdob2xhJyk7XHJcblx0XHRcclxuXHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gbnVsbDtcclxuXHRcdHRoaXMubmdPbkluaXQoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdmFsaWRhcigpOiBib29sZWFuIHtcclxuXHRcdGxldCByZXMgPSB0cnVlO1xyXG5cdFx0dGhpcy5jbGlja0d1YXJkYXIgPSB0cnVlO1xyXG5cdFx0cmVzID0gcmVzICYmIHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHRoaXMuZnVlbnRlLmRlc2NyaXBjaW9uKTtcclxuXHRcdHJlcyA9IHJlcyAmJiAodGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclRleHRvU1FMKHRoaXMucXVlcnksIHRydWUsIHRydWUsIDgwMDAsIHRydWUpID09IG51bGwpO1xyXG5cdFx0cmV0dXJuIHJlcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZ2lzdHJhL2FjdHVhbGl6YSBsYSBpbmZvcm1hY2lvbiBnZW5lcmFsIGRlIGxhIGZ1ZW50ZSBkZSBkYXRvc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhc3luYyBndWFyZGFyKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMudmFsaWRhcigpKSB7XHJcblx0XHRcdFx0dGhpcy5jbGlja0d1YXJkYXIgPSBmYWxzZTtcclxuXHRcdFx0XHRpZiAodGhpcy5xdWVyeS5sZW5ndGggPiA0MDAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9ICh0aGlzLnF1ZXJ5LnN1YnN0cmluZygwLCAzOTk5KSk7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeTIgPSAodGhpcy5xdWVyeS5zdWJzdHJpbmcoMzk5OSwgdGhpcy5xdWVyeS5sZW5ndGgpKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkgPSAodGhpcy5xdWVyeSk7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeTIgPSAobnVsbCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5mdWVudGUubGxhdmUgPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUubGxhdmUgPSAodGhpcy51dGlsc1NlcnZpY2UuZ2VuZXJhckxsYXZlKCkpO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5pbnNlcnRhckZ1ZW50ZURhdG8odGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdFx0dGhpcy5jYXJnYXNPcGNpb25lcygpO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuYWN0dWFsaXphckZ1ZW50ZURhdG8odGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJMb3MgY2FtYmlvcyBoYW4gc2lkbyBndWFyZGFkb3NcIik7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93RXJyb3IodGhpcy5nZW5lcmFsUGlwZS5NRU5TQUpFX0NBTVBPU19PQkxJR0FUT1JJT1MpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fS8vZ3VhcmRhclxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RyYS9hY3R1YWxpemEgbGFzIGNvbHVtbmFzIGdlbmVyYWRvcyBwYXJhIGxhIGZ1ZW50ZSBkZSBkYXRvcyBjb21vIHJlZ2lzdHJvcyBkZSB0aXBvICdDb2x1bW5hRnVlbnRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhc3luYyBndWFyZGFyQ2FtcG9zKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLmxsYXZlID09IG51bGwpIHtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJQb3IgZmF2b3IgZGlsaWdlbmNpZSBwcmltZXJvIGxvcyBkYXRvcyBkZSBsYSBmdWVudGVcIik7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXJDYW1wb3MoKSkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuYWN0dWFsaXphckNvbHVtbmFzRnVlbnRlKHRoaXMuZnVlbnRlLCB0aGlzLmNhbXBvcykudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiU2UgaGFuIGd1YXJkYWRvIGxvcyBjYW1wb3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9ndWFyZGFyQ2FtcG9zXHJcblxyXG5cdC8qKlxyXG5cdCAqIFZlcmlmaWNhIHF1ZSBsb3MgdmFsb3JlcyBhc29jaWFkb3MgYSBsb3MgY2FtcG9zIHBhcmEgbGEgY3JlYWNpb24gZGUgbGFzIGNvbHVtbmFzIGRlIGxhIGZ1ZW50ZSBzZWFuIHbDoWxpZG9zXHJcblx0ICogQHJldHVybiBmYWxzZSBlbiBjYXNvIGRlIHF1ZSBsb3MgdmFsb3JlcyBhc2lnbmFkb3MgYSBsb3MgY2FtcG9zIHNlYW4gbnVsb3MgbyBubyBzZWFuIHBhbGFicmFzIHbDoWxpZGFzIGRlIGFjdWVyZG8gXHJcblx0ICogY29uIGxhcyBjb25kaWNpb25lcyBkYWRhcyBwb3IgVmFsaWRhZG9yVXRpbC52YWxpZGFyUGFsYWJyYSgpKSxcclxuXHQgKiBlbiBjYXNvIGNvbnRyYXJpbyByZXRvcm5hIHRydWVcclxuXHQgKi9cclxuXHRwcml2YXRlIHZhbGlkYXJDYW1wb3MoKSB7XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3MpIHtcclxuXHRcdFx0aWYgKGNvbC5ub21icmUgPT0gbnVsbCB8fCAhdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclBhbGFicmEoY29sLm5vbWJyZSkpIHtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJOb21icmUgbm8gdmFsaWRvIChcIiArIGNvbC5ub21icmUgKyBcIilcIik7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1eWUgbGFzIGNvbHVtbmFzIGRlIGxhIGZ1ZW50ZSBkZSBkYXRvcywgY29uIGJhc2UgZW4gbG9zIGNhbXBvcyBvYnRlbmlkb3MgXHJcblx0ICogZGUgbGEgY29uc3VsdGEgU1FMIGFzb2NpYWRhXHJcblx0ICovXHJcblx0cHVibGljIGFzeW5jIGNvbnN0cnVpckNvbHVtbmFzKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmdldENvbHVtbmFzU3FsKHRoaXMucXVlcnkpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1RhYmxhIGdlbmVyYWRhIHNhdGlzZmFjdG9yaWFtZW50ZS4nKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9jb25zdHJ1aXJDb2x1bW5hc1xyXG5cclxuXHJcblxyXG5cdHByaXZhdGUgdmFsaWRhcldpemFyZCgpIHtcclxuXHRcdGxldCBhbGlhczogc3RyaW5nW10gPSBbXTtcclxuXHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRpZiAoYWxpYXMuaW5jbHVkZXModGFibGEuYWxpYXMpKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm8gc2UgcHVlZGUgcmVwZXRpciBlbCBhbGlhcyBkZSBsYXMgdGFibGFzLlwiKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YWxpYXMucHVzaCh0YWJsYS5hbGlhcyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGFsaWFzID0gW107XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRpZiAoY29sLnNlbGVjY2lvbmFkbykge1xyXG5cdFx0XHRcdGlmIChhbGlhcy5pbmNsdWRlcyhjb2wuYWxpYXMpKSB7XHJcblx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJObyBzZSBwdWVkZSByZXBldGlyIGVsIGFsaWFzIGRlIGxhcyBjb2x1bW5hcy5cIik7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFsaWFzLnB1c2goY29sLmFsaWFzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2VuZXJhclNxbEZyb20oKSB7XHJcblx0XHRsZXQgcmVzID0gXCJcIjtcclxuXHRcdGxldCBpID0gMDtcclxuXHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRyZXMgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyB0YWJsYS50YWJsYSArIFwiIFwiICsgdGFibGEuYWxpYXM7XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdlbmVyYXJTcWxKb2luKCkge1xyXG5cdFx0bGV0IHJlcyA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCBqb2luIG9mIHRoaXMuam9pbnNGcm9tKSB7XHJcblx0XHRcdHJlcyArPSAoaSA9PSAwID8gXCJcIiA6IFwiIEFORCBcIikgKyBqb2luLmNvbHVtbmExICsgXCIgPSBcIiArIGpvaW4uY29sdW1uYTI7XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvL0lNUExFTUVOVEFDSU9OIFNURVBFUlxyXG5cdGluaXRTdGVwKCl7XHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMCwnU2VsZWNjaW9uZSBsYXMgdGFibGFzIG8gdmlzdGFzIGRlIGRvbmRlIGRlc2VhIG9idGVuZXIgbGEgaW5mb3JtYWNpJyt0aGlzLmdlbmVyYWxQaXBlLk9fVElETEVfTUlOKyduLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMSwnSW5kaXF1ZSBkZSBxdScrdGhpcy5nZW5lcmFsUGlwZS5FX1RJTERFX01JTisnIG1hbmVyYSBzZSByZWxhY2lvbmFuIGxvcyBvYmpldG9zIGVudHJlIHMnK3RoaXMuZ2VuZXJhbFBpcGUuSV9USUxERV9NSU4rJy4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDIsJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaScrdGhpcy5nZW5lcmFsUGlwZS5PX1RJRExFX01JTisnbi4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDMsJ1NlbGVjY2lvbmUgbG9zIGNhbXBvcyBxdWUgZGVzZWUgdmVyIGVuIGxhIGNvbnN1bHRhLicpXHJcblx0XHR0aGlzLml0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Zyb20nKSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG5cdFx0XHRcdHRpdGxlOidTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnam9pbicpLFxyXG5cdFx0XHRcdGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbmRpcXVlIGRlIHF1ZSBtYW5lcmEgc2UgcmVsYWNjaW9uYW4gbG9zIG9iamV0b3MgZW50cmUgc2kuJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3doZXJlJyksXHJcblx0XHRcdFx0Y29tbWFuZDogKGV2ZW50KSA9PiB7Y29uc29sZS5sb2coZXZlbnQpO30sXHJcblx0XHRcdFx0ZGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaW9uLidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjYW1wb3MnKSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuXHR9XHJcblxyXG5cdGFjdHVhbGl6YXJTZWxlY2Npb24oYm9vbGVhbm9nZW5lcmFsOiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLmZvckVhY2goKGVsZW1lbnRvKSA9PiB7XHJcblx0XHRcdGVsZW1lbnRvLnNlbGVjY2lvbmFkbyA9IGJvb2xlYW5vZ2VuZXJhbDtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0dG9kb3NTZWxlY2Npb25hZG9zKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIuZXZlcnkoZWxlbWVudG8gPT4gZWxlbWVudG8uc2VsZWNjaW9uYWRvKTtcclxuXHR9XHJcblx0XHJcblx0aXNRdWVyeVZhbGlkbygpOiBib29sZWFue1xyXG5cdFx0cmV0dXJuIHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSA9PSBudWxsO1xyXG5cdH1cclxuXHJcblxyXG59XHJcbiIsIjxwLWNvbmZpcm1EaWFsb2cgI2NkIGtleT1cImVsaW1pbmFyXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbiBwLWNvbXBvbmVudFwiIHBCdXR0b25cclxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiIGxhYmVsPVwiTm9cIiAoY2xpY2spPVwiY2QucmVqZWN0KClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktY2hlY2tcIiBsYWJlbD1cIlNpXCIgY2xhc3M9XCJwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNkLmFjY2VwdCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtY29uZmlybURpYWxvZz5cclxuQGlmKHZpc3RhVmlzdWFsaXphciA9PSBudWxsKXtcclxuPGgxPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fSB7eydyZXBvcnRlJ3wgdHJhbnNsYXRlfX08L2gxPlxyXG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgPGFwcC1maWx0cm8tZ2VuZXJhbCBbZmlsdHJvc109XCJmaWx0ZXJzXCIgW2RhdGF0YWJsZV09XCJ0YWJsYUdlbmVyYWxcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWZvcm0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBhdXRvZm9jdXMgdHlwZT1cInRleHRcIiBpZD1cImRlc2NyaXBjaW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2ZpbHRybycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2FwcC1maWx0cm8tZ2VuZXJhbD5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfbnVldm8nIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwibnVldm8oKVwiIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPGFwcC10YWJsYS1nZW5lcmFsICN0YWJsYUdlbmVyYWwgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFt2YWx1ZV09XCJwYWdpbmFkb3JcIiBbcm93c109XCJwYWdpbmF0b3Iucm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInBhZ2luYXRvci50b3RhbFJlY29yZHNcIiAob25Mb2FkKT1cImxvYWQoJGV2ZW50KVwiIChvblJvd1NlbGVjdCk9XCJ2ZXJEZXRhbGxlKCRldmVudClcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiPjwvYXBwLXRhYmxhLWdlbmVyYWw+XHJcbn1cclxuQGlmKHZpc3RhVmlzdWFsaXphciAhPSBudWxsKXtcclxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgIDxoMT57eydmdWVudGUnIHwgdHJhbnNsYXRlfX0ge3sncmVwb3J0ZSd8IHRyYW5zbGF0ZX19PC9oMT5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJyZWdyZXNhcigpXCIgbGFiZWw9XCJSZWdyZXNhclwiIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBmb250LXNlbWlib2xkXCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG48cC10YWJWaWV3IFsoYWN0aXZlSW5kZXgpXT1cInRhYlByaW5jaXBhbFwiPlxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ2Z1ZW50ZSd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgIDxoNT48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J2RhdG9zJ3wgdHJhbnNsYXRlfX0ge3snYmFzaWNvcyd8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgYXV0b2ZvY3VzIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwZXNvXCIgWyhuZ01vZGVsKV09XCJmdWVudGUuZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctZGlydHldPVwiKCF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8oZnVlbnRlLmRlc2NyaXBjaW9uKSAmJiBjbGlja0d1YXJkYXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWludmFsaWRdPVwiKCF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8oZnVlbnRlLmRlc2NyaXBjaW9uKSAmJiBjbGlja0d1YXJkYXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwZXNvXCI+e3snbm9tYnJlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsXCIgaWQ9XCJmbG9hdC1pbnB1dFwiIHJvd3M9XCI1XCIgY29scz1cIjMwXCIgcElucHV0VGV4dGFyZWEgWyhuZ01vZGVsKV09XCJxdWVyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctZGlydHldPVwiKCghaXNRdWVyeVZhbGlkbygpICYmIGNsaWNrR3VhcmRhcikgfHwgZXJyb3JRdWVyeSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWludmFsaWRdPVwiKCghaXNRdWVyeVZhbGlkbygpICYmIGNsaWNrR3VhcmRhcikgfHwgZXJyb3JRdWVyeSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzIFthdXRvUmVzaXplXT1cInRydWVcIj4gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snY29uc3VsdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwiZ3VhcmRhcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4gXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiICpuZ0lmPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHAtc3BsaXRCdXR0b24gY2xhc3M9XCJtbC0yXCIgbGFiZWw9XCJBY2Npb25lcyBGdWVudGVcIiBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJtZW51XCI+PC9wLXNwbGl0QnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJtbC0yIHAtYnV0dG9uIHAtYnV0dG9uLXNlY29uZGFyeVwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIlxyXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwiZ3VhcmRhckNhbXBvcygpXCI+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cC10YWJsZSAjdGFibGFHZW5lcmFsRW50cmFkYSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJjYW1wb3NcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJjYW1wb3MubGVuZ3RoXCIgW3BhZ2luYXRvcl09XCJjYW1wb3MubGVuZ3RoID4gMTBcIiBbcm93c109XCIxMFwiXHJcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiIGVkaXRNb2RlPVwicm93XCJcclxuICAgICAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gYWwge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiIFtsYXp5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgZGF0YUtleT1cImxsYXZlVGFibGFcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J25vbWJyZScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snc2ludGF4aXMnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3RpcG8nIHwgdHJhbnNsYXRlfX0gZGUge3snZGF0bycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1jYW1wbyBsZXQtZWRpdGluZz1cImVkaXRpbmdcIiBsZXQtcmk9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwiY2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImNhbXBvLm5vbWJyZSBcIiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2FtcG8udGlwb0RhdG99fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2FtcG8udGlwb0RhdG99fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG5cclxuXHJcbiAgICA8cC10YWJQYW5lbCBoZWFkZXI9XCJ7eyAnd2l6YXJkJ3wgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICA8cC1zdGVwcyBbbW9kZWxdPVwiaXRlbXNcIiBbcmVhZG9ubHldPVwiZmFsc2VcIiBbYWN0aXZlSW5kZXhdPVwiYWN0dWFsXCI+PC9wLXN0ZXBzPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZEluc3RydWNjaW9uZXMgbXQtNCBtYi0zXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwcHggIWltcG9ydGFudDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29ub1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWJlbGxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbmVkb3JcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDIlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3ttYXBhTWVuc2FqZXM/LmdldChhY3R1YWwpfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJhbnRlcmlvcigpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1sZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIkFudGVyaW9yXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcGxhY2Vob2xkZXI9XCJUb3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJhY3R1YWwgPD0gMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uIChvbkNsaWNrKT1cInNpZ3VpZW50ZSgpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1yaWdodFwiIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiICpuZ0lmPVwiYWN0dWFsICE9IDNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiYWN0dWFsICA9PT0gMyA/ICdUZXJtaW5hcic6ICdTaWd1aWVudGUnXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcGxhY2Vob2xkZXI9XCJUb3BcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gbGFiZWw9XCJ7eyd0ZXJtaW5hcicgfCB0cmFuc2xhdGV9fVwiIGljb249XCJwaSBwaS1hbmdsZS1yaWdodFwiIChjbGljayk9XCJzaWd1aWVudGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0dWFsID09PSAzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXJpcHBsZSBwLWVsZW1lbnQgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24tc2Vjb25kYXJ5IHAtMiBtbC0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAtcHJvZ3Jlc3NCYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICczcHgnIH1cIiAqbmdJZj1cImNhcmdhclBhc29cIiAvPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiIWNhcmdhclBhc29cIj5cclxuICAgICAgICAgICAgQGlmKGFjdHVhbCA9PT0gMCl7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snZnVlbnRlJyB8IHRyYW5zbGF0ZX19XCIgaWNvbj1cInBpIHBpLXBsdXNcIiAoY2xpY2spPVwiYnVzY2FyVGFibGEoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXJpcHBsZSBwLWVsZW1lbnQgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24tc2Vjb25kYXJ5IG1iLTIgbXQtM1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8cC10YWJsZSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJ0YWJsYXNGcm9tXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0YWJsYXNGcm9tLmxlbmd0aFwiIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIFtwYWdpbmF0b3JdPVwidGFibGFzRnJvbS5sZW5ndGggPiAxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiMTBcIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjAsIDMwXVwiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gYWwge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiIFtsYXp5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhS2V5PVwibGxhdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3RhYmxhJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J2FsaWFzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPiA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGEgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwidGFibGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEudGFibGF9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuYWxpYXN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRUxJTUlOQVIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwRGVsZXRlRWRpdGFibGVSb3cgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbGltaW5hclRhYmxhKHRhYmxhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLW91dGxpbmVkIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYoYWN0dWFsID09IDEpe1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGg0Pnt7J2ZvcmFuZWEnfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8cC10YWJsZSAjdGFibGFHZW5lcmFsRW50cmFkYSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJmb3JhbmVhc1wiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInNpbmdsZVwiIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgZWRpdE1vZGU9XCJyb3dcIiAob25Sb3dTZWxlY3QpPVwiYWRpY2lvbmFyRm9yYW5lYSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJ0cnVlXCIgZGF0YUtleT1cImxsYXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3RhYmxhJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snY2FtcG8nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGEgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgW3BTZWxlY3RhYmxlUm93XT1cInRhYmxhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5hbGlhczF9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuYWxpYXMyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmxsYXZlLm5vbWJyZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGEtcGxhbnRhLXBlcnNvbmFsXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDAlICFpbXBvcnRhbnQ7YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND57eydqb2luJ3wgdHJhbnNsYXRlfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gbGFiZWw9XCJ7eydhZ3JlZ2FyJyB8IHRyYW5zbGF0ZX19IHt7J2pvaW4nIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwibnVldm9Kb2luKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXJpcHBsZSBwLWVsZW1lbnQgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24tc2Vjb25kYXJ5IG1iLTJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZSAjdGFibGFHZW5lcmFsRW50cmFkYSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJqb2luc0Zyb21cIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwiYm90aFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdE1vZGU9XCJyb3dcIiBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhenldPVwidHJ1ZVwiIGRhdGFLZXk9XCJsbGF2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NDUlXCI+e3snY2FtcG8nIHwgdHJhbnNsYXRlfX0gMTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NSVcIj57eyc9JyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo0NSVcIj57eydjYW1wbycgfCB0cmFuc2xhdGV9fSAyPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3snJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCIgVGFibGFOdWV2b1JlZ2lzdHJvXCIgKm5nSWY9XCJ2ZXJOdWV2b0pvaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDo0NSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFDb2x1bW5hc1wiIG9wdGlvblZhbHVlPVwidmFsdWVcIiBbKG5nTW9kZWwpXT1cImNvbDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgW2F1dG9aSW5kZXhdPVwiZmFsc2VcIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCIgKG9uQ2hhbmdlKT1cImNhbWJpb0pvaW4oJGV2ZW50KVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjUlXCI+PTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImxpc3RhSm9pblwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiBbKG5nTW9kZWwpXT1cImNvbDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgW2F1dG9aSW5kZXhdPVwiZmFsc2VcIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWNoZWNrXCIgKGNsaWNrKT1cImFkaWNpb25hckpvaW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXN1Y2Nlc3MgbXItMiBtYi0yIHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbGFyTnVldm9Kb2luKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1lbGVtZW50IHAtcmlwcGxlIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tZGFuZ2VyIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGEgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cInRhYmxhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuY29sdW1uYTF9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snPSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuY29sdW1uYTJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcERlbGV0ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWxpbWluYXJKb2luKHRhYmxhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLW91dGxpbmVkIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYoYWN0dWFsID09IDIpe1xyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg1PjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWJvb2tcIj48L2k+e3snd2hlcmUnfCB0cmFuc2xhdGV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZsZXggcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWwgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsXCIgaWQ9XCJmbG9hdC1pbnB1dFwiIHJvd3M9XCI1XCIgY29scz1cIjMwXCIgcElucHV0VGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmdWVudGUud2hlcmVBZGljaW9uYWxcIiBhdXRvZm9jdXMgW2F1dG9SZXNpemVdPVwidHJ1ZVwiPiA8L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2NvbnN1bHRhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVkVSIEFUUklCVVRPUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibS0yIG1iLTEgcC1idXR0b24gcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtanVzdGlmeVwiIChjbGljayk9XCJlZGl0YXJXaGVyZSgpXCIgcFRvb2x0aXA9XCJ7eydhdHJpYnV0bycgfCB0cmFuc2xhdGV9fXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJtbC0yIHAtYnV0dG9uIHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIiBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0YXJXaGVyZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYoYWN0dWFsID09IDMpe1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGUgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiY2FtcG9zU2VsZWNjaW9uYXJcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aFwiIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIFtwYWdpbmF0b3JdPVwiY2FtcG9zU2VsZWNjaW9uYXIubGVuZ3RoID4gMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCIgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMTAsIDIwLCAzMF1cIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgZWRpdE1vZGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YUtleT1cImFsaWFzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIiBhbGlnbkZyb3plbj1cImxlZnRcIiBwRnJvemVuQ29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFtzdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogJzElJywnbWFyZ2luLXJpZ2h0JzonMSUnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWNjaW9uR2VuZXJhbFwiIFtiaW5hcnldPVwidHJ1ZVwiIFtuZ01vZGVsXT1cInRvZG9zU2VsZWNjaW9uYWRvcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiYWN0dWFsaXphclNlbGVjY2lvbigkZXZlbnQpXCI+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydjb2x1bW5hJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBjbGFzcz1cIm1yLTIgXCIgWyhuZ01vZGVsKV09XCJ0YWJsYS5zZWxlY2Npb25hZG9cIiBbYmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dElkPVwiYmluYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuY29sdW1uYS5yZXBvcnRlRnVlbnRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEubm9tYnJlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbjwvcC10YWJWaWV3PlxyXG5cclxufVxyXG48YXBwLXBvcHVwLWVkaXRvci1mb3JtdWxhICNwb3B1cEVkaXRvckZvcm11bGE+PC9hcHAtcG9wdXAtZWRpdG9yLWZvcm11bGE+XHJcblxyXG48YXBwLXBvcHVwLXRhYmxhcy1mdWVudGUgI3BvcHVwVGFibGFzRnVlbnRlVUlcclxuICAgIChhcGxpY2FyRGVzdGlub09jdWx0YXIpPVwic2V0VGFibGFTZWxlY2Npb25hZGEoJGV2ZW50KVwiPjwvYXBwLXBvcHVwLXRhYmxhcy1mdWVudGU+Il19
|