general-library-union 2.4.49 → 2.4.50

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.
@@ -336,12 +336,12 @@ export class DetalleEjecucionReportePage {
336
336
  return this.isPermisoVerTodos() || this.permiteModificarReporte || (this.isPermisoCrear() && this.operacion == 'N');
337
337
  }
338
338
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DetalleEjecucionReportePage, deps: [{ token: i1.TranslateService }, { token: i2.ActivatedRoute }, { token: i3.FormBuilder }, { token: i4.ToastService }, { token: i5.GeneralService }, { token: i2.Router }, { token: i6.UtilsService }, { token: i7.AuthService }, { token: i8.ReporteFuentePipe }, { token: i9.CargarControlFuncionalidadService }, { token: i10.ConfirmationService }, { token: i11.EjecucionReporteService }, { token: i12.GeneralPipe }, { token: i13.MenuService }], target: i0.ɵɵFactoryTarget.Component });
339
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: DetalleEjecucionReportePage, isStandalone: true, selector: "app-detalle-ejecucion-reporte", outputs: { regresar: "regresar" }, providers: [MessageService, ConfirmationService], ngImport: i0, template: "<div class=\"flex justify-content-between align-items-center ml-2 mt-2 mb-2\">\r\n <h1 class=\"mb-1\">Reportes</h1>\r\n <button pButton pRipple icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 ml-4\"\r\n (click)=\"regresarAction()\" label=\"{{'link_regresar' | translate}}\" >\r\n </button>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>\r\n <p-menubar [model]=\"items\" class=\"menu-accion-sara\"></p-menubar>\r\n <div class=\"card mt-3\" *ngIf=\"vistaVisualizar != 'reporte'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-book\"></i>{{'informacion' | translate}} {{'reporte' | translate}}</h5>\r\n <div class=\"Inputgroup p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <p-floatLabel>\r\n <input pInputText [disabled]=\"true\" [(ngModel)]=\"reporte.descripcion\">\r\n <label >{{('descripcion') | translate}}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\" *ngIf=\"vistaVisualizar == 'reporte'\">\r\n <div id=\"reportesListado\">\r\n <div class=\"card col-md-12\">\r\n <div class=\"Detallereporte mt-4\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"descripcion\" type=\"text\" [(ngModel)]=\"reporte.descripcion\" \r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\" />\r\n <label>{{'descripcion' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"titulo\" type=\"text\" [(ngModel)]=\"reporte.titulo\" />\r\n <label>{{'titulo' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"procedimiento\" type=\"text\" [(ngModel)]=\"reporte.procedimiento\" [disabled]=\"!isModificarReporte()\" />\r\n <label>{{'procedimiento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div [ngClass]=\"isFuente() ? 'field col-12 md:col-6' : 'field col-12 md:col-2' \">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaTipo\" [autoDisplayFirst]=\"false\" id=\"origenFuente\" [disabled]=\"reporte.llave != null || !controlFuncionService.getControlFuncionalidad('reporte:tipo')\"\r\n [(ngModel)]=\"reporte.origenFuente\" optionLabel=\"nombre\" optionValue=\"codigo\" ></p-dropdown>\r\n <label>{{'tipo' | translate }}*</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaFuente\" [autoDisplayFirst]=\"false\" id=\"fuenteDato\" [disabled]=\"!isModificarReporte()\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\" \r\n [(ngModel)]=\"reporte.fuenteDato\" optionLabel=\"descripcion\" optionValue=\"llave\"></p-dropdown>\r\n <label>{{'fuente' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-4\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaMomento\" [autoDisplayFirst]=\"false\" [(ngModel)]=\"reporte.momento\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [showClear]=\"true\">\r\n </p-dropdown>\r\n <label>{{'momento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-2\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaSiNo\" id=\"reporteExterno\" [(ngModel)]=\"reporte.reporteExterno\" [autoDisplayFirst]=\"false\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [disabled]=\"!isModificarReporte()\" >\r\n </p-dropdown>\r\n <label>{{'reporte' | translate }} {{'externo' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-4\" *ngIf=\"isFijo()\">\r\n <app-input-helper-seleccion-plantilla [readonly]=\"false\" [showDialog]=\"false\"\r\n [label]=\"reporte.jasperFijo ? reporte.jasperFijo: ''\" [mostrarX]=\"true\"\r\n [extensiones]=\"'jrxml'\" [mostraroblicargo]=\"!(!utilsService.validarCampoObligatorio(reporte.jasperFijo) && clickGuardar)\" [labelrar]=\"'jasper' | translate\"\r\n (onSelected)=\"setJasperFijo($event)\"></app-input-helper-seleccion-plantilla>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFijo()\">\r\n <p-floatLabel> \r\n <p-dropdown [options]=\"listaTipoCifrado\" [autoDisplayFirst]=\"false\" [showClear]=\"true\"\r\n [(ngModel)]=\"reporte.cifradoJasperFijo\" optionLabel=\"nombre\" optionValue=\"llaveTabla\"></p-dropdown>\r\n <label>{{'tipocifrado' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12\" *ngIf=\"isSql() || isFijo()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150\" rows=\"5\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.query\"></textarea>\r\n <label >{{'sql' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSql\"></textarea>\r\n <label>{{'where' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSqlReporte\"></textarea>\r\n <label>{{'where' | translate }} {{'reporte' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" *ngIf=\"isModificarReporte()\"\r\n icon=\"glyphicons {{reporte.llave ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" label=\"{{reporte.llave ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\"\r\n (click)=\"actualizar()\">\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporte.llave != null && isModificarReporte()\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'entrada'\"> \r\n <detalle-entrada-reporte [modificarReporte]=\"isModificarReporte()\" [llaveReporte]=\"reporte.llave\"></detalle-entrada-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'campo'\">\r\n <detalle-campo-reporte [reporteFuente]=\"reporte\"> </detalle-campo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'tipo'\">\r\n <detalle-tipo-reporte [listaFuentes]=\"listaFuente\" [llaveReporte]=\"reporte.llave\"></detalle-tipo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'distribucion'\">\r\n <detalle-distribucion-reporte [llaveReporte]=\"reporte.llave\"></detalle-distribucion-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'puntoproceso'\">\r\n <detalle-punto-proceso-reporte [llaveReporte]=\"reporte.llave\" [tipoRecurso]=\"'R'\"></detalle-punto-proceso-reporte>\r\n </div>\r\n\r\n <app-popup-reporte [mostrar]=\"mostrarPopupReporte\" [reporte]=\"reporte\" [aplicacion]=\"\"\r\n (regresar)=\"regresarPopupReporte($event)\"></app-popup-reporte>", styles: [":host ::ng-deep .min-w-full{min-height:230px!important;width:100%!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i15.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i16.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i17.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: MenubarModule }, { kind: "component", type: i18.Menubar, selector: "p-menubar", inputs: ["model", "style", "styleClass", "autoZIndex", "baseZIndex", "autoDisplay", "autoHide", "autoHideDelay", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onFocus", "onBlur"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i19.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: "component", type: DetalleEntradaReporteComponent, selector: "detalle-entrada-reporte", inputs: ["llaveReporte", "modificarReporte"], outputs: ["regresar"] }, { kind: "component", type: DetalleCampoReporteComponent, selector: "detalle-campo-reporte", inputs: ["reporteFuente"] }, { kind: "component", type: DetalleTipoReporteComponent, selector: "detalle-tipo-reporte", inputs: ["llaveReporte", "aplicacion", "listaFuentes"] }, { kind: "component", type: DetalleDistribucionReporteComponent, selector: "detalle-distribucion-reporte", inputs: ["modificarReporte", "llaveReporte"] }, { kind: "component", type: PopupReporteComponent, selector: "app-popup-reporte", inputs: ["mostrar", "aplicacion", "reporte", "entradasPuntoProceso"], outputs: ["regresar"] }, { kind: "component", type: DetallePuntoProcesoReporteComponent, selector: "detalle-punto-proceso-reporte", inputs: ["modificarReporte", "llaveReporte", "llaveFuente", "tipoRecurso"] }, { kind: "component", type: InputHelperSeleccionPlantillaComponent, selector: "app-input-helper-seleccion-plantilla", inputs: ["value", "label", "labelrar", "labelarch", "extensiones", "readonly", "propiedad", "anexoPropiedad", "showDialog", "propiedadDeSistema", "mostraroblicargo", "mostrarX", "booleano", "mostrarLabelInput"], outputs: ["onSelected"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i20.FloatLabel, selector: "p-floatLabel" }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i21.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }] });
339
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: DetalleEjecucionReportePage, isStandalone: true, selector: "app-detalle-ejecucion-reporte", outputs: { regresar: "regresar" }, providers: [MessageService, ConfirmationService], ngImport: i0, template: "<div class=\"flex justify-content-between align-items-center ml-2 mt-2 mb-2\">\r\n <h1 class=\"mb-1\">Reportes</h1>\r\n <button pButton pRipple icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 ml-4\"\r\n (click)=\"regresarAction()\" label=\"{{'link_regresar' | translate}}\" >\r\n </button>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>\r\n <p-menubar [model]=\"items\" class=\"menu-accion-sara\"></p-menubar>\r\n <div class=\"card mt-3\" *ngIf=\"vistaVisualizar != 'reporte'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-book\"></i>{{'informacion' | translate}} {{'reporte' | translate}}</h5>\r\n <div class=\"Inputgroup p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <p-floatLabel>\r\n <input pInputText [disabled]=\"true\" [(ngModel)]=\"reporte.descripcion\">\r\n <label >{{('descripcion') | translate}}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\" *ngIf=\"vistaVisualizar == 'reporte'\">\r\n <div id=\"reportesListado\">\r\n <div class=\"card col-md-12\">\r\n <div class=\"Detallereporte mt-4\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"descripcion\" type=\"text\" [(ngModel)]=\"reporte.descripcion\" \r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\" />\r\n <label>{{'descripcion' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"titulo\" type=\"text\" [(ngModel)]=\"reporte.titulo\" />\r\n <label>{{'titulo' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"procedimiento\" type=\"text\" [(ngModel)]=\"reporte.procedimiento\" [disabled]=\"!isModificarReporte()\" />\r\n <label>{{'procedimiento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div [ngClass]=\"isFuente() ? 'field col-12 md:col-6' : 'field col-12 md:col-2' \">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaTipo\" [autoDisplayFirst]=\"false\" id=\"origenFuente\" [disabled]=\"reporte.llave != null || !controlFuncionService.getControlFuncionalidad('reporte:tipo')\"\r\n [(ngModel)]=\"reporte.origenFuente\" optionLabel=\"nombre\" optionValue=\"codigo\" ></p-dropdown>\r\n <label>{{'tipo' | translate }}*</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaFuente\" [autoDisplayFirst]=\"false\" id=\"fuenteDato\" [disabled]=\"!isModificarReporte()\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\" \r\n [(ngModel)]=\"reporte.fuenteDato\" optionLabel=\"descripcion\" optionValue=\"llave\"></p-dropdown>\r\n <label>{{'fuente' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-4\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaMomento\" [autoDisplayFirst]=\"false\" [(ngModel)]=\"reporte.momento\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [showClear]=\"true\">\r\n </p-dropdown>\r\n <label>{{'momento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-2\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaSiNo\" id=\"reporteExterno\" [(ngModel)]=\"reporte.reporteExterno\" [autoDisplayFirst]=\"false\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [disabled]=\"!isModificarReporte()\" >\r\n </p-dropdown>\r\n <label>{{'reporte' | translate }} {{'externo' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-4\" *ngIf=\"isFijo()\">\r\n <app-input-helper-seleccion-plantilla [readonly]=\"false\" [showDialog]=\"false\"\r\n [label]=\"reporte.jasperFijo ? reporte.jasperFijo: ''\" [mostrarX]=\"true\"\r\n [extensiones]=\"'jrxml'\" [mostraroblicargo]=\"!(!utilsService.validarCampoObligatorio(reporte.jasperFijo) && clickGuardar)\" [labelrar]=\"'jasper' | translate\"\r\n (onSelected)=\"setJasperFijo($event)\"></app-input-helper-seleccion-plantilla>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFijo()\">\r\n <p-floatLabel> \r\n <p-dropdown [options]=\"listaTipoCifrado\" [autoDisplayFirst]=\"false\" [showClear]=\"true\"\r\n [(ngModel)]=\"reporte.cifradoJasperFijo\" optionLabel=\"nombre\" optionValue=\"llaveTabla\"></p-dropdown>\r\n <label>{{'tipocifrado' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12\" *ngIf=\"isSql() || isFijo()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150 max-h-300\" rows=\"5\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.query\"></textarea>\r\n <label >{{'sql' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150 max-h-300\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSql\"></textarea>\r\n <label>{{'where' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150 max-h-300\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSqlReporte\"></textarea>\r\n <label>{{'where' | translate }} {{'reporte' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" *ngIf=\"isModificarReporte()\"\r\n icon=\"glyphicons {{reporte.llave ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" label=\"{{reporte.llave ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\"\r\n (click)=\"actualizar()\">\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporte.llave != null && isModificarReporte()\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'entrada'\"> \r\n <detalle-entrada-reporte [modificarReporte]=\"isModificarReporte()\" [llaveReporte]=\"reporte.llave\"></detalle-entrada-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'campo'\">\r\n <detalle-campo-reporte [reporteFuente]=\"reporte\"> </detalle-campo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'tipo'\">\r\n <detalle-tipo-reporte [listaFuentes]=\"listaFuente\" [llaveReporte]=\"reporte.llave\"></detalle-tipo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'distribucion'\">\r\n <detalle-distribucion-reporte [llaveReporte]=\"reporte.llave\"></detalle-distribucion-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'puntoproceso'\">\r\n <detalle-punto-proceso-reporte [llaveReporte]=\"reporte.llave\" [tipoRecurso]=\"'R'\"></detalle-punto-proceso-reporte>\r\n </div>\r\n\r\n <app-popup-reporte [mostrar]=\"mostrarPopupReporte\" [reporte]=\"reporte\" [aplicacion]=\"\"\r\n (regresar)=\"regresarPopupReporte($event)\"></app-popup-reporte>", styles: [":host ::ng-deep .min-w-full{min-height:230px!important;width:100%!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i15.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i16.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i17.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: MenubarModule }, { kind: "component", type: i18.Menubar, selector: "p-menubar", inputs: ["model", "style", "styleClass", "autoZIndex", "baseZIndex", "autoDisplay", "autoHide", "autoHideDelay", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onFocus", "onBlur"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i19.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: "component", type: DetalleEntradaReporteComponent, selector: "detalle-entrada-reporte", inputs: ["llaveReporte", "modificarReporte"], outputs: ["regresar"] }, { kind: "component", type: DetalleCampoReporteComponent, selector: "detalle-campo-reporte", inputs: ["reporteFuente"] }, { kind: "component", type: DetalleTipoReporteComponent, selector: "detalle-tipo-reporte", inputs: ["llaveReporte", "aplicacion", "listaFuentes"] }, { kind: "component", type: DetalleDistribucionReporteComponent, selector: "detalle-distribucion-reporte", inputs: ["modificarReporte", "llaveReporte"] }, { kind: "component", type: PopupReporteComponent, selector: "app-popup-reporte", inputs: ["mostrar", "aplicacion", "reporte", "entradasPuntoProceso"], outputs: ["regresar"] }, { kind: "component", type: DetallePuntoProcesoReporteComponent, selector: "detalle-punto-proceso-reporte", inputs: ["modificarReporte", "llaveReporte", "llaveFuente", "tipoRecurso"] }, { kind: "component", type: InputHelperSeleccionPlantillaComponent, selector: "app-input-helper-seleccion-plantilla", inputs: ["value", "label", "labelrar", "labelarch", "extensiones", "readonly", "propiedad", "anexoPropiedad", "showDialog", "propiedadDeSistema", "mostraroblicargo", "mostrarX", "booleano", "mostrarLabelInput"], outputs: ["onSelected"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i20.FloatLabel, selector: "p-floatLabel" }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i21.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }] });
340
340
  }
341
341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DetalleEjecucionReportePage, decorators: [{
342
342
  type: Component,
343
- args: [{ standalone: true, imports: [CommonModule, TranslateModule, InputTextModule, FormsModule, ButtonModule, ConfirmPopupModule, MenubarModule, DropdownModule, DetalleEntradaReporteComponent, DetalleCampoReporteComponent, DetalleTipoReporteComponent, DetalleDistribucionReporteComponent, PopupReporteComponent, DetallePuntoProcesoReporteComponent, InputHelperSeleccionPlantillaComponent, FloatLabelModule, InputTextareaModule], selector: 'app-detalle-ejecucion-reporte', providers: [MessageService, ConfirmationService], template: "<div class=\"flex justify-content-between align-items-center ml-2 mt-2 mb-2\">\r\n <h1 class=\"mb-1\">Reportes</h1>\r\n <button pButton pRipple icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 ml-4\"\r\n (click)=\"regresarAction()\" label=\"{{'link_regresar' | translate}}\" >\r\n </button>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>\r\n <p-menubar [model]=\"items\" class=\"menu-accion-sara\"></p-menubar>\r\n <div class=\"card mt-3\" *ngIf=\"vistaVisualizar != 'reporte'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-book\"></i>{{'informacion' | translate}} {{'reporte' | translate}}</h5>\r\n <div class=\"Inputgroup p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <p-floatLabel>\r\n <input pInputText [disabled]=\"true\" [(ngModel)]=\"reporte.descripcion\">\r\n <label >{{('descripcion') | translate}}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\" *ngIf=\"vistaVisualizar == 'reporte'\">\r\n <div id=\"reportesListado\">\r\n <div class=\"card col-md-12\">\r\n <div class=\"Detallereporte mt-4\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"descripcion\" type=\"text\" [(ngModel)]=\"reporte.descripcion\" \r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\" />\r\n <label>{{'descripcion' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"titulo\" type=\"text\" [(ngModel)]=\"reporte.titulo\" />\r\n <label>{{'titulo' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"procedimiento\" type=\"text\" [(ngModel)]=\"reporte.procedimiento\" [disabled]=\"!isModificarReporte()\" />\r\n <label>{{'procedimiento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div [ngClass]=\"isFuente() ? 'field col-12 md:col-6' : 'field col-12 md:col-2' \">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaTipo\" [autoDisplayFirst]=\"false\" id=\"origenFuente\" [disabled]=\"reporte.llave != null || !controlFuncionService.getControlFuncionalidad('reporte:tipo')\"\r\n [(ngModel)]=\"reporte.origenFuente\" optionLabel=\"nombre\" optionValue=\"codigo\" ></p-dropdown>\r\n <label>{{'tipo' | translate }}*</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaFuente\" [autoDisplayFirst]=\"false\" id=\"fuenteDato\" [disabled]=\"!isModificarReporte()\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\" \r\n [(ngModel)]=\"reporte.fuenteDato\" optionLabel=\"descripcion\" optionValue=\"llave\"></p-dropdown>\r\n <label>{{'fuente' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-4\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaMomento\" [autoDisplayFirst]=\"false\" [(ngModel)]=\"reporte.momento\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [showClear]=\"true\">\r\n </p-dropdown>\r\n <label>{{'momento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-2\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaSiNo\" id=\"reporteExterno\" [(ngModel)]=\"reporte.reporteExterno\" [autoDisplayFirst]=\"false\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [disabled]=\"!isModificarReporte()\" >\r\n </p-dropdown>\r\n <label>{{'reporte' | translate }} {{'externo' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-4\" *ngIf=\"isFijo()\">\r\n <app-input-helper-seleccion-plantilla [readonly]=\"false\" [showDialog]=\"false\"\r\n [label]=\"reporte.jasperFijo ? reporte.jasperFijo: ''\" [mostrarX]=\"true\"\r\n [extensiones]=\"'jrxml'\" [mostraroblicargo]=\"!(!utilsService.validarCampoObligatorio(reporte.jasperFijo) && clickGuardar)\" [labelrar]=\"'jasper' | translate\"\r\n (onSelected)=\"setJasperFijo($event)\"></app-input-helper-seleccion-plantilla>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFijo()\">\r\n <p-floatLabel> \r\n <p-dropdown [options]=\"listaTipoCifrado\" [autoDisplayFirst]=\"false\" [showClear]=\"true\"\r\n [(ngModel)]=\"reporte.cifradoJasperFijo\" optionLabel=\"nombre\" optionValue=\"llaveTabla\"></p-dropdown>\r\n <label>{{'tipocifrado' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12\" *ngIf=\"isSql() || isFijo()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150\" rows=\"5\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.query\"></textarea>\r\n <label >{{'sql' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSql\"></textarea>\r\n <label>{{'where' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSqlReporte\"></textarea>\r\n <label>{{'where' | translate }} {{'reporte' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" *ngIf=\"isModificarReporte()\"\r\n icon=\"glyphicons {{reporte.llave ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" label=\"{{reporte.llave ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\"\r\n (click)=\"actualizar()\">\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporte.llave != null && isModificarReporte()\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'entrada'\"> \r\n <detalle-entrada-reporte [modificarReporte]=\"isModificarReporte()\" [llaveReporte]=\"reporte.llave\"></detalle-entrada-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'campo'\">\r\n <detalle-campo-reporte [reporteFuente]=\"reporte\"> </detalle-campo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'tipo'\">\r\n <detalle-tipo-reporte [listaFuentes]=\"listaFuente\" [llaveReporte]=\"reporte.llave\"></detalle-tipo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'distribucion'\">\r\n <detalle-distribucion-reporte [llaveReporte]=\"reporte.llave\"></detalle-distribucion-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'puntoproceso'\">\r\n <detalle-punto-proceso-reporte [llaveReporte]=\"reporte.llave\" [tipoRecurso]=\"'R'\"></detalle-punto-proceso-reporte>\r\n </div>\r\n\r\n <app-popup-reporte [mostrar]=\"mostrarPopupReporte\" [reporte]=\"reporte\" [aplicacion]=\"\"\r\n (regresar)=\"regresarPopupReporte($event)\"></app-popup-reporte>", styles: [":host ::ng-deep .min-w-full{min-height:230px!important;width:100%!important}\n"] }]
343
+ args: [{ standalone: true, imports: [CommonModule, TranslateModule, InputTextModule, FormsModule, ButtonModule, ConfirmPopupModule, MenubarModule, DropdownModule, DetalleEntradaReporteComponent, DetalleCampoReporteComponent, DetalleTipoReporteComponent, DetalleDistribucionReporteComponent, PopupReporteComponent, DetallePuntoProcesoReporteComponent, InputHelperSeleccionPlantillaComponent, FloatLabelModule, InputTextareaModule], selector: 'app-detalle-ejecucion-reporte', providers: [MessageService, ConfirmationService], template: "<div class=\"flex justify-content-between align-items-center ml-2 mt-2 mb-2\">\r\n <h1 class=\"mb-1\">Reportes</h1>\r\n <button pButton pRipple icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 ml-4\"\r\n (click)=\"regresarAction()\" label=\"{{'link_regresar' | translate}}\" >\r\n </button>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>\r\n <p-menubar [model]=\"items\" class=\"menu-accion-sara\"></p-menubar>\r\n <div class=\"card mt-3\" *ngIf=\"vistaVisualizar != 'reporte'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-book\"></i>{{'informacion' | translate}} {{'reporte' | translate}}</h5>\r\n <div class=\"Inputgroup p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <p-floatLabel>\r\n <input pInputText [disabled]=\"true\" [(ngModel)]=\"reporte.descripcion\">\r\n <label >{{('descripcion') | translate}}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\" *ngIf=\"vistaVisualizar == 'reporte'\">\r\n <div id=\"reportesListado\">\r\n <div class=\"card col-md-12\">\r\n <div class=\"Detallereporte mt-4\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"descripcion\" type=\"text\" [(ngModel)]=\"reporte.descripcion\" \r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.descripcion) && clickGuardar\" />\r\n <label>{{'descripcion' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"titulo\" type=\"text\" [(ngModel)]=\"reporte.titulo\" />\r\n <label>{{'titulo' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-6\">\r\n <p-floatLabel>\r\n <input pInputText id=\"procedimiento\" type=\"text\" [(ngModel)]=\"reporte.procedimiento\" [disabled]=\"!isModificarReporte()\" />\r\n <label>{{'procedimiento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div [ngClass]=\"isFuente() ? 'field col-12 md:col-6' : 'field col-12 md:col-2' \">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaTipo\" [autoDisplayFirst]=\"false\" id=\"origenFuente\" [disabled]=\"reporte.llave != null || !controlFuncionService.getControlFuncionalidad('reporte:tipo')\"\r\n [(ngModel)]=\"reporte.origenFuente\" optionLabel=\"nombre\" optionValue=\"codigo\" ></p-dropdown>\r\n <label>{{'tipo' | translate }}*</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaFuente\" [autoDisplayFirst]=\"false\" id=\"fuenteDato\" [disabled]=\"!isModificarReporte()\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.fuenteDato) && clickGuardar\" \r\n [(ngModel)]=\"reporte.fuenteDato\" optionLabel=\"descripcion\" optionValue=\"llave\"></p-dropdown>\r\n <label>{{'fuente' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-4\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaMomento\" [autoDisplayFirst]=\"false\" [(ngModel)]=\"reporte.momento\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [showClear]=\"true\">\r\n </p-dropdown>\r\n <label>{{'momento' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-2\">\r\n <p-floatLabel>\r\n <p-dropdown [options]=\"listaSiNo\" id=\"reporteExterno\" [(ngModel)]=\"reporte.reporteExterno\" [autoDisplayFirst]=\"false\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.reporteExterno) && clickGuardar\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\" [disabled]=\"!isModificarReporte()\" >\r\n </p-dropdown>\r\n <label>{{'reporte' | translate }} {{'externo' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-12 md:col-4\" *ngIf=\"isFijo()\">\r\n <app-input-helper-seleccion-plantilla [readonly]=\"false\" [showDialog]=\"false\"\r\n [label]=\"reporte.jasperFijo ? reporte.jasperFijo: ''\" [mostrarX]=\"true\"\r\n [extensiones]=\"'jrxml'\" [mostraroblicargo]=\"!(!utilsService.validarCampoObligatorio(reporte.jasperFijo) && clickGuardar)\" [labelrar]=\"'jasper' | translate\"\r\n (onSelected)=\"setJasperFijo($event)\"></app-input-helper-seleccion-plantilla>\r\n </div>\r\n <div class=\"field col-12 md:col-6\" *ngIf=\"isFijo()\">\r\n <p-floatLabel> \r\n <p-dropdown [options]=\"listaTipoCifrado\" [autoDisplayFirst]=\"false\" [showClear]=\"true\"\r\n [(ngModel)]=\"reporte.cifradoJasperFijo\" optionLabel=\"nombre\" optionValue=\"llaveTabla\"></p-dropdown>\r\n <label>{{'tipocifrado' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12\" *ngIf=\"isSql() || isFijo()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150 max-h-300\" rows=\"5\"\r\n [class.ng-dirty]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n [class.ng-invalid]=\"!utilsService.validarCampoObligatorio(reporte.query) && clickGuardar && isSql()\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.query\"></textarea>\r\n <label >{{'sql' | translate }} *</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150 max-h-300\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSql\"></textarea>\r\n <label>{{'where' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n <div class=\"field col-6 md:col-12\" *ngIf=\"isFuente()\">\r\n <p-floatLabel>\r\n <textarea class=\"w-full min-h-150 max-h-300\" rows=\"5\"\r\n cols=\"30\" pInputTextarea [(ngModel)]=\"reporte.whereSqlReporte\"></textarea>\r\n <label>{{'where' | translate }} {{'reporte' | translate }}</label>\r\n </p-floatLabel>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" *ngIf=\"isModificarReporte()\"\r\n icon=\"glyphicons {{reporte.llave ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" label=\"{{reporte.llave ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\"\r\n (click)=\"actualizar()\">\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporte.llave != null && isModificarReporte()\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'entrada'\"> \r\n <detalle-entrada-reporte [modificarReporte]=\"isModificarReporte()\" [llaveReporte]=\"reporte.llave\"></detalle-entrada-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'campo'\">\r\n <detalle-campo-reporte [reporteFuente]=\"reporte\"> </detalle-campo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'tipo'\">\r\n <detalle-tipo-reporte [listaFuentes]=\"listaFuente\" [llaveReporte]=\"reporte.llave\"></detalle-tipo-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'distribucion'\">\r\n <detalle-distribucion-reporte [llaveReporte]=\"reporte.llave\"></detalle-distribucion-reporte>\r\n </div>\r\n\r\n <div *ngIf=\"vistaVisualizar == 'puntoproceso'\">\r\n <detalle-punto-proceso-reporte [llaveReporte]=\"reporte.llave\" [tipoRecurso]=\"'R'\"></detalle-punto-proceso-reporte>\r\n </div>\r\n\r\n <app-popup-reporte [mostrar]=\"mostrarPopupReporte\" [reporte]=\"reporte\" [aplicacion]=\"\"\r\n (regresar)=\"regresarPopupReporte($event)\"></app-popup-reporte>", styles: [":host ::ng-deep .min-w-full{min-height:230px!important;width:100%!important}\n"] }]
344
344
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.ActivatedRoute }, { type: i3.FormBuilder }, { type: i4.ToastService }, { type: i5.GeneralService }, { type: i2.Router }, { type: i6.UtilsService }, { type: i7.AuthService }, { type: i8.ReporteFuentePipe }, { type: i9.CargarControlFuncionalidadService }, { type: i10.ConfirmationService }, { type: i11.EjecucionReporteService }, { type: i12.GeneralPipe }, { type: i13.MenuService }], propDecorators: { regresar: [{
345
345
  type: Output
346
346
  }] } });
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZS5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZWplY3VjaW9uLXJlcG9ydGUvZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZS9kZXRhbGxlLWVqZWN1Y2lvbi1yZXBvcnRlLnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3dlYmNvbW1vbi9wYWdlcy9lamVjdWNpb24tcmVwb3J0ZS9kZXRhbGxlLWVqZWN1Y2lvbi1yZXBvcnRlL2RldGFsbGUtZWplY3VjaW9uLXJlcG9ydGUucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUF1QyxXQUFXLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBR3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBWSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU0xRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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QUFFLHFCQUFxQiwySkFBRSxtQ0FBbUMsc0pBQUUsc0NBQXNDLDZUQUFFLGdCQUFnQixxR0FBRSxtQkFBbUI7OzJGQU10WSwyQkFBMkI7a0JBUnZDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLG1DQUFtQyxFQUFFLHFCQUFxQixFQUFFLG1DQUFtQyxFQUFFLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFFLFlBRXpZLCtCQUErQixhQUU5QixDQUFDLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQzs4ZEFxQi9CLFFBQVE7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2dlbmVyYWwucGlwZSc7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2lvcy9nZW5lcmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlcG9ydGVGdWVudGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvcmVwb3J0ZS1mdWVudGUucGlwZSc7XHJcbmltcG9ydCB7IEVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWplY3VjaW9ucmVwb3J0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0ZUZ1ZW50ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvUmVwb3J0ZUZ1ZW50ZU1vZGVsJztcclxuaW1wb3J0IHsgRnVlbnRlRGF0b01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRnVlbnRlRGF0byc7XHJcbmltcG9ydCB7IEdlbmVyYWxNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0dlbmVyYWxNb2RlbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IENhcmdhckNvbnRyb2xGdW5jaW9uYWxpZGFkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL2Nhcmdhci1jb250cm9sLWZ1bmNpb25hbGlkYWQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDb25maXJtUG9wdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1wb3B1cCc7XHJcbmltcG9ydCB7IE1lbnViYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL21lbnViYXInO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBEZXRhbGxlRW50cmFkYVJlcG9ydGVDb21wb25lbnQgfSBmcm9tICcuLi9kZXRhbGxlLWVudHJhZGEtcmVwb3J0ZS9kZXRhbGxlLWVudHJhZGEtcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZXRhbGxlQ2FtcG9SZXBvcnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV0YWxsZS1jYW1wby1yZXBvcnRlL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZXRhbGxlVGlwb1JlcG9ydGVDb21wb25lbnQgfSBmcm9tICcuLi9kZXRhbGxlLXRpcG8tcmVwb3J0ZS9kZXRhbGxlLXRpcG8tcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZXRhbGxlRGlzdHJpYnVjaW9uUmVwb3J0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2RldGFsbGUtZGlzdHJpYnVjaW9uLXJlcG9ydGUvZGV0YWxsZS1kaXN0cmlidWNpb24tcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb3B1cFJlcG9ydGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wb3B1cHMvcG9wdXAtcmVwb3J0ZS9wb3B1cC1yZXBvcnRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERldGFsbGVQdW50b1Byb2Nlc29SZXBvcnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV0YWxsZS1wdW50by1wcm9jZXNvLXJlcG9ydGUvZGV0YWxsZS1wdW50by1wcm9jZXNvLXJlcG9ydGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5wdXRIZWxwZXJTZWxlY2Npb25QbGFudGlsbGFDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50ZXMvaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGEvaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmxvYXRMYWJlbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmxvYXRsYWJlbCc7XHJcbmltcG9ydCB7IElucHV0VGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dGFyZWEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIElucHV0VGV4dE1vZHVsZSwgRm9ybXNNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgQ29uZmlybVBvcHVwTW9kdWxlLCBNZW51YmFyTW9kdWxlLCBEcm9wZG93bk1vZHVsZSwgRGV0YWxsZUVudHJhZGFSZXBvcnRlQ29tcG9uZW50LCBEZXRhbGxlQ2FtcG9SZXBvcnRlQ29tcG9uZW50LCBEZXRhbGxlVGlwb1JlcG9ydGVDb21wb25lbnQsIERldGFsbGVEaXN0cmlidWNpb25SZXBvcnRlQ29tcG9uZW50LCBQb3B1cFJlcG9ydGVDb21wb25lbnQsIERldGFsbGVQdW50b1Byb2Nlc29SZXBvcnRlQ29tcG9uZW50LCBJbnB1dEhlbHBlclNlbGVjY2lvblBsYW50aWxsYUNvbXBvbmVudCwgRmxvYXRMYWJlbE1vZHVsZSwgSW5wdXRUZXh0YXJlYU1vZHVsZSBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhbGxlLWVqZWN1Y2lvbi1yZXBvcnRlLnBhZ2UuaHRtbCcsXHJcbiAgc2VsZWN0b3I6ICdhcHAtZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZScsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZS5wYWdlLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgQ29uZmlybWF0aW9uU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhbGxlRWplY3VjaW9uUmVwb3J0ZVBhZ2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXTtcclxuICBwdWJsaWMgcmVwb3J0ZTogUmVwb3J0ZUZ1ZW50ZU1vZGVsID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gIHB1YmxpYyB2aXN0YVZpc3VhbGl6YXI6IHN0cmluZyA9IG51bGw7XHJcbiAgcHVibGljIGxsYXZlVGFibGE6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vbGlzdGFzXHJcbiAgcHVibGljIGxpc3RhVGlwbztcclxuICBwdWJsaWMgbGlzdGFTaU5vO1xyXG4gIHB1YmxpYyBsaXN0YU1vbWVudG87XHJcbiAgcHVibGljIGxpc3RhVGlwb0NpZnJhZG87XHJcblxyXG4gIHB1YmxpYyB2ZXJUb2Rvczpib29sZWFuO1xyXG4gIHB1YmxpYyBsaXN0YUZ1ZW50ZSA6IEZ1ZW50ZURhdG9Nb2RlbFtdO1xyXG4gIHB1YmxpYyBwZXJtaXRlTW9kaWZpY2FyUmVwb3J0ZTogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIG1vc3RyYXJQb3B1cFJlcG9ydGU6Ym9vbGVhbiA9ZmFsc2U7XHJcbiAgcHVibGljIG9wZXJhY2lvbjogc3RyaW5nO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIHJlZ3Jlc2FyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBjbGlja0d1YXJkYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNpb25lc0J1c1NlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRlRnVlbnRlUGlwZTogUmVwb3J0ZUZ1ZW50ZVBpcGUsXHJcbiAgICBwdWJsaWMgY29udHJvbEZ1bmNpb25TZXJ2aWNlOiBDYXJnYXJDb250cm9sRnVuY2lvbmFsaWRhZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlOiBFamVjdWNpb25SZXBvcnRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZ2VuZXJhbFBpcGU6IEdlbmVyYWxQaXBlLFxyXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGxhdmVUYWJsYSA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdsbGF2ZVRhYmxhJyk7XHJcbiAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9ICdyZXBvcnRlJ1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnTGlzdGFkbyBFamVjdWNpw7NuIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpPT57dGhpcy5yZWdyZXNhckFjdGlvbigpfX0sIFxyXG4gICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpfV0pO1xyXG4gICAgdGhpcy5yZXBvcnRlID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gICAgaWYgKHRoaXMubGxhdmVUYWJsYSl7XHJcbiAgICAgIHRoaXMuZWplY3VjaW9uUmVwb3J0ZVNlcnZpY2UuZ2V0RGF0b3NFamVjdWNpb25SZXBvcnRlKHtsbGF2ZTogdGhpcy5sbGF2ZVRhYmxhfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZSA9IGRhdGEucmVwb3J0ZTtcclxuICAgICAgICBkZWxldGUgdGhpcy5yZXBvcnRlWydhbGlhcyddXHJcbiAgICAgICAgdGhpcy5saXN0YUZ1ZW50ZSA9IGRhdGEubGlzdGFGdWVudGVcclxuICAgICAgICB0aGlzLnZlclRvZG9zID0gZGF0YS5wZXJtaXNvVmVyVG9kb3M7XHJcbiAgICAgICAgdGhpcy5jYXJnYXJNZW51KCk7XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhcmdhck1lbnUoKTtcclxuICAgICAgdGhpcy5yZXBvcnRlID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYXJnYXJMaXN0YXMoKTtcclxuXHJcbiAgfVxyXG5cclxuICBudWV2b1JlcG9ydGUoKSB7XHJcbiAgICBpZih0aGlzLmlzUGVybWlzb1ZlclRvZG9zKCkpIHtcclxuICAgICAgdGhpcy5saXN0YVRpcG8gPXRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuTElTVEFfVElQTztcclxuICAgIH1lbHNlIHtcclxuICAgICAgdGhpcy5saXN0YVRpcG8gPXRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuTElTVEFfVElQT19TSU5fUEVSTUlTTztcclxuICAgIH1cclxuICAgIHRoaXMub3BlcmFjaW9uID0gXCJOXCI7IC8vbnVldm8gcmVwb3J0ZVxyXG4gICAgdGhpcy5yZXBvcnRlID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gICAgLy90aGlzLnJlcG9ydGUub3JpZ2VuRnVlbnRlID0gdGhpcy5yZXBvcnRlRnVlbnRlUGlwZS5GVUVOVEU7XHJcbiAgICB0aGlzLnJlcG9ydGUudW5pY29BcmNoaXZvID0gdGhpcy5nZW5lcmFsUGlwZS5TSTtcclxuICAgIHRoaXMucmVwb3J0ZS5kb2JsZUxpbmVhID0gdGhpcy5nZW5lcmFsUGlwZS5OTztcclxuICAgIHZhciBmdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcbiAgICBmdWVudGUub3JpZ2VuID0gJ0YnO1xyXG4gICAgaWYgKCF0aGlzLmlzUGVybWlzb1ZlclRvZG9zKCkpe1xyXG4gICAgICBmdWVudGUucm9sID0gdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbktleSgnYWxpYXNSb2wnKTtcclxuICAgICAgZnVlbnRlLmxvZ2luID0gdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbktleSgndXN1YXJpbycpXHJcbiAgICB9XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLnF1ZXJ5Rm9yTGlzdChuZXcgR2VuZXJhbE1vZGVsKCdGdWVudGVEYXRvRFRPJywgbnVsbCwgZmFsc2UsIGZ1ZW50ZSkpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5saXN0YUZ1ZW50ZSA9IGRhdGE7XHJcbiAgICB9KVxyXG4gICAgXHJcbiAgICB0aGlzLmNhcmdhckxpc3RhcygpO1xyXG4gICAgdGhpcy5jYXJnYXJNZW51KCk7XHJcbiAgICAvL2NhbWJpYXJWYWxvclRpcG8oYWN0dWFsLmdldE9yaWdlbkZ1ZW50ZSgpKTtcclxuICB9XHJcblxyXG4gIHRyYWVyUmVwb3J0ZShyZXBvcnRlQmFzZTogUmVwb3J0ZUZ1ZW50ZU1vZGVsKXtcclxuICAgIHRoaXMuZWplY3VjaW9uUmVwb3J0ZVNlcnZpY2UuZ2V0RGF0b3NFamVjdWNpb25SZXBvcnRlKHtsbGF2ZTogcmVwb3J0ZUJhc2UubGxhdmV9KS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMucmVwb3J0ZSA9IGRhdGEucmVwb3J0ZTtcclxuICAgICAgZGVsZXRlIHRoaXMucmVwb3J0ZVsnYWxpYXMnXVxyXG4gICAgICB0aGlzLmxpc3RhRnVlbnRlID0gZGF0YS5saXN0YUZ1ZW50ZVxyXG4gICAgICB0aGlzLnZlclRvZG9zID0gZGF0YS5wZXJtaXNvVmVyVG9kb3M7XHJcbiAgICAgIHRoaXMucGVybWl0ZU1vZGlmaWNhclJlcG9ydGUgPSBkYXRhLnBlcm1pdGVNb2RpZmljYXJSZXBvcnRlO1xyXG4gICAgICB0aGlzLmNhcmdhckxpc3RhcygpO1xyXG4gICAgICB0aGlzLmNhcmdhck1lbnUoKTtcclxuICAgICAgdGhpcy5vcGVyYWNpb24gPSAnTSdcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhcmdhck1lbnUoKSB7XHJcbiAgICBpZiAodGhpcy5yZXBvcnRlLmxsYXZlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpLFxyXG4gICAgICAgICAgICAgIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtcGx1cy1zaWduJyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ3JlcG9ydGUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnTGlzdGFkbyBFamVjdWNpw7NuIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpPT57dGhpcy5yZWdyZXNhckFjdGlvbigpfX0sIFxyXG4gICAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpfV0pO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2VudHJhZGEnKSxcclxuICAgICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWZpbGUtbWludXMnLFxyXG4gICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSAnZW50cmFkYSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZW50cmFkYScpfV0pO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5yZXBvcnRlLmxsYXZlICE9IG51bGwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NhbXBvJyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1sb2ctYm9vaycsXHJcbiAgICAgICAgICAgICAgY29tbWFuZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9ICdjYW1wbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY2FtcG8nKX1dKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IHRoaXMucmVwb3J0ZS5sbGF2ZSAhPSBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0aXBvJyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1ub3Rlcy0yJyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ3RpcG8nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnTGlzdGFkbyBFamVjdWNpw7NuIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpPT57dGhpcy5yZWdyZXNhckFjdGlvbigpfX0sIFxyXG4gICAgICAgICAgICAgICAge2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbWFudGVuaW1pZW50bycpICsgJyAnICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3RpcG8nKX1dKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IHRoaXMucmVwb3J0ZS5sbGF2ZSAhPSBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkaXN0cmlidWNpb24nKSxcclxuICAgICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLXRyYW5zZmVyJyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ2Rpc3RyaWJ1Y2lvbic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZGlzdHJpYnVjaW9uJyl9XSk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnJlcG9ydGUubGxhdmUgIT0gbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncHVudG9wcm9jZXNvJyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1zZXJ2ZXItbmV3JyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ3B1bnRvcHJvY2Vzbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncHVudG9wcm9jZXNvJyl9XSk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnJlcG9ydGUubGxhdmUgIT0gbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZWplY3V0YXInKSxcclxuICAgICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWRpc2stZXhwb3J0JyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9zdHJhclBvcHVwUmVwb3J0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnJlcG9ydGUubGxhdmUgIT0gbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdyZXBvcnRlJyksXHJcbiAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLXBsdXMtc2lnbicsXHJcbiAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSAncmVwb3J0ZSc7XHJcbiAgICAgICAgICAgIHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0xpc3RhZG8gRWplY3VjacOzbiBSZXBvcnRlJywgY29tbWFuZDogKGV2ZW50KT0+e3RoaXMucmVncmVzYXJBY3Rpb24oKX19LCBcclxuICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpfV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgICAgICAgIFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhcmdhckxpc3Rhcygpe1xyXG4gICAgdGhpcy5saXN0YVRpcG8gPSB0aGlzLnJlcG9ydGVGdWVudGVQaXBlLkxJU1RBX1RJUE87XHJcbiAgICB0aGlzLmxpc3RhTW9tZW50byA9IHRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuTElTVEFfTU9NRU5UTztcclxuICAgIHRoaXMubGlzdGFTaU5vID0gdGhpcy5nZW5lcmFsUGlwZS5MSVNUQV9TSU5PO1xyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5xdWVyeUZvckxpc3QobmV3IEdlbmVyYWxNb2RlbCgnRW5jcmlwY2lvbkFyY2hpdm9EVE8nLCBudWxsLCBmYWxzZSwge30pKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdGFUaXBvQ2lmcmFkbyA9IGRhdGE7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdHVhbGl6YXIoKXtcclxuICAgIHRoaXMuY2xpY2tHdWFyZGFyID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy52YWxpZGFyKCkpe1xyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93RXJyb3IoJ0ZhbHRhbiBjYW1wb3Mgb2JsaWdhdG9yaW9zJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnV0aWxzU2VydmljZS5pc05vdEJsYW5rKHRoaXMucmVwb3J0ZS5sbGF2ZSkpe1xyXG4gICAgICB0aGlzLmVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlLmd1YXJkYXJSZXBvcnRlKHRoaXMucmVwb3J0ZSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5jbGlja0d1YXJkYXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhcmdhck1lbnUoKVxyXG4gICAgICAgIHRoaXMubm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9BQ1RVQUxJWkFSKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8qICB0aGlzLmdlbmVyYWxTZXJ2aWNlLnVwZGF0ZShuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlRnVlbnRlRFRPJywgbnVsbCwgZmFsc2UsIHRoaXMucmVwb3J0ZSkpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfQUNUVUFMSVpBUik7XHJcbiAgICAgICAgdGhpcy5jbGlja0d1YXJkYXIgPSBmYWxzZTtcclxuICAgICAgICBkZWxldGUgdGhpcy5yZXBvcnRlWydhbGlhcyddXHJcbiAgICAgIH0vO1xyXG4gICAgICAqL1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lamVjdWNpb25SZXBvcnRlU2VydmljZS5ndWFyZGFyUmVwb3J0ZSh0aGlzLnJlcG9ydGUpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLnJlcG9ydGUgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2xpY2tHdWFyZGFyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYXJnYXJNZW51KClcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfR1VBUkRBUik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgdmFsaWRhcigpe1xyXG4gICAgdmFyIHZhbGlkYWRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICB2YWxpZGFkb3IgPSB2YWxpZGFkb3IgJiYgdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8odGhpcy5yZXBvcnRlLmRlc2NyaXBjaW9uKTtcclxuICAgIHZhbGlkYWRvciA9IHZhbGlkYWRvciAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLnJlcG9ydGUucmVwb3J0ZUV4dGVybm8pO1xyXG4gICAgaWYgKHRoaXMuaXNGdWVudGUoKSl7XHJcbiAgICAgIHZhbGlkYWRvciA9IHZhbGlkYWRvciAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLnJlcG9ydGUuZnVlbnRlRGF0byk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1NxbCgpKXtcclxuICAgICAgdmFsaWRhZG9yID0gdmFsaWRhZG9yICYmIHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHRoaXMucmVwb3J0ZS5xdWVyeSk7XHJcbiAgICAgIGxldCBtZW5zYWplID0gdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclRleHRvU1FMKHRoaXMucmVwb3J0ZS5xdWVyeSwgZmFsc2UsIHRydWUsIDAsIHRydWUpXHJcbiAgICAgIGlmIChtZW5zYWplKXtcclxuICAgICAgICB2YWxpZGFkb3IgPSB2YWxpZGFkb3IgJiYgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNpb25lc0J1c1NlcnZpY2Uuc2hvd1dhcm5pbmcobWVuc2FqZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRmlqbygpKXtcclxuICAgICAgdmFsaWRhZG9yID0gdmFsaWRhZG9yICYmIHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHRoaXMucmVwb3J0ZS5qYXNwZXJGaWpvKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGFkb3I7XHJcbiAgfVxyXG5cclxuICBzZXRKYXNwZXJGaWpvKGV2ZW50KXtcclxuICAgIHRoaXMucmVwb3J0ZS5qYXNwZXJGaWpvID0gZXZlbnQuZGF0YVxyXG4gIH1cclxuXHJcbiAgcmVncmVzYXJBY3Rpb24oKXtcclxuICAgIHRoaXMucmVncmVzYXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcmVncmVzYXJQb3B1cFJlcG9ydGUoZXZlbnQpe1xyXG4gICAgdGhpcy5tb3N0cmFyUG9wdXBSZXBvcnRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbGltaW5hcihldmVudCl7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfRUxJTUlOQVJfQ09ORklSTUFSLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy5nZW5lcmFsUGlwZS5TSV9ERVNDLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlLmVsaW1pbmFyUmVwb3J0ZSh0aGlzLnJlcG9ydGUpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlLnNob3dJbmZvKCdTZSBoYSBlbGltaW5hZG8gZWwgcmVwb3J0ZScpXHJcbiAgICAgICAgICB0aGlzLnJlZ3Jlc2FyQWN0aW9uKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgcmVqZWN0OiAoKSA9PiB7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRmlqbygpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5maWx0cm9PcmlnZW5GdWVudGUodGhpcy5yZXBvcnRlRnVlbnRlUGlwZS5GSUpPKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1NxbCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5maWx0cm9PcmlnZW5GdWVudGUodGhpcy5yZXBvcnRlRnVlbnRlUGlwZS5TUUwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRnVlbnRlKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmZpbHRyb09yaWdlbkZ1ZW50ZSh0aGlzLnJlcG9ydGVGdWVudGVQaXBlLkZVRU5URSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdHJvT3JpZ2VuRnVlbnRlKHRpcG86c3RyaW5nKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMucmVwb3J0ZS5vcmlnZW5GdWVudGUgPT0gdGlwbztcclxuICB9XHJcbiAgICBcclxuXHRwdWJsaWMgaXNQZXJtaXNvVmVyVG9kb3MoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoXCJyZXBvcnRlOnZlcnRvZG9zXCIpO1xyXG5cdH1cclxuXHRcclxuXHRwdWJsaWMgaXNQZXJtaXNvQ3JlYXIoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoXCJyZXBvcnRlOmNyZWFyXCIpO1xyXG5cdH1cclxuXHJcbiAgcHVibGljIGlzTW9kaWZpY2FyUmVwb3J0ZSgpe1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQZXJtaXNvVmVyVG9kb3MoKSB8fCB0aGlzLnBlcm1pdGVNb2RpZmljYXJSZXBvcnRlIHx8ICh0aGlzLmlzUGVybWlzb0NyZWFyKCkgJiYgdGhpcy5vcGVyYWNpb24gPT0gJ04nKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWwtMiBtdC0yIG1iLTJcIj5cclxuICA8aDEgY2xhc3M9XCJtYi0xXCI+UmVwb3J0ZXM8L2gxPlxyXG4gIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgZm9udC1zZW1pYm9sZCBmbGV4LXNocmluay0wIG1sLTRcIlxyXG4gICAgKGNsaWNrKT1cInJlZ3Jlc2FyQWN0aW9uKClcIiBsYWJlbD1cInt7J2xpbmtfcmVncmVzYXInIHwgdHJhbnNsYXRlfX1cIiA+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG48cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD5cclxuICA8cC1tZW51YmFyIFttb2RlbF09XCJpdGVtc1wiIGNsYXNzPVwibWVudS1hY2Npb24tc2FyYVwiPjwvcC1tZW51YmFyPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG10LTNcIiAqbmdJZj1cInZpc3RhVmlzdWFsaXphciAhPSAncmVwb3J0ZSdcIj5cclxuICAgIDxoNSBjbGFzcz1cIm10LTNcIj48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J2luZm9ybWFjaW9uJyB8IHRyYW5zbGF0ZX19IHt7J3JlcG9ydGUnIHwgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cIklucHV0Z3JvdXAgcC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTIgbGc6Y29sLTEyXCI+XHJcbiAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IFtkaXNhYmxlZF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJyZXBvcnRlLmRlc2NyaXBjaW9uXCI+XHJcbiAgICAgICAgICA8bGFiZWwgPnt7KCdkZXNjcmlwY2lvbicpIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTJcIiAqbmdJZj1cInZpc3RhVmlzdWFsaXphciA9PSAncmVwb3J0ZSdcIj5cclxuICAgIDxkaXYgaWQ9XCJyZXBvcnRlc0xpc3RhZG9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJEZXRhbGxlcmVwb3J0ZSBtdC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGlkPVwiZGVzY3JpcGNpb25cIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicmVwb3J0ZS5kZXNjcmlwY2lvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUuZGVzY3JpcGNpb24pICYmIGNsaWNrR3VhcmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWludmFsaWRdPVwiIXV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3JpbyhyZXBvcnRlLmRlc2NyaXBjaW9uKSAmJiBjbGlja0d1YXJkYXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snZGVzY3JpcGNpb24nIHwgdHJhbnNsYXRlIH19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGlkPVwidGl0dWxvXCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInJlcG9ydGUudGl0dWxvXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3RpdHVsbycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGlkPVwicHJvY2VkaW1pZW50b1wiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJyZXBvcnRlLnByb2NlZGltaWVudG9cIiBbZGlzYWJsZWRdPVwiIWlzTW9kaWZpY2FyUmVwb3J0ZSgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3Byb2NlZGltaWVudG8nIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImlzRnVlbnRlKCkgPyAnZmllbGQgY29sLTEyIG1kOmNvbC02JyA6ICdmaWVsZCBjb2wtMTIgbWQ6Y29sLTInIFwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFUaXBvXCIgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIiBpZD1cIm9yaWdlbkZ1ZW50ZVwiICBbZGlzYWJsZWRdPVwicmVwb3J0ZS5sbGF2ZSAhPSBudWxsIHx8ICFjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3JlcG9ydGU6dGlwbycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlcG9ydGUub3JpZ2VuRnVlbnRlXCIgb3B0aW9uTGFiZWw9XCJub21icmVcIiBvcHRpb25WYWx1ZT1cImNvZGlnb1wiID48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyd0aXBvJyB8IHRyYW5zbGF0ZSB9fSo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNlwiICpuZ0lmPVwiaXNGdWVudGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFGdWVudGVcIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiIGlkPVwiZnVlbnRlRGF0b1wiIFtkaXNhYmxlZF09XCIhaXNNb2RpZmljYXJSZXBvcnRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUuZnVlbnRlRGF0bykgJiYgY2xpY2tHdWFyZGFyXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUuZnVlbnRlRGF0bykgJiYgY2xpY2tHdWFyZGFyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXBvcnRlLmZ1ZW50ZURhdG9cIiBvcHRpb25MYWJlbD1cImRlc2NyaXBjaW9uXCIgb3B0aW9uVmFsdWU9XCJsbGF2ZVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGUgfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3AtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNFwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFNb21lbnRvXCIgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIiAgWyhuZ01vZGVsKV09XCJyZXBvcnRlLm1vbWVudG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibm9tYnJlXCIgb3B0aW9uVmFsdWU9XCJjb2RpZ29cIiBbc2hvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snbW9tZW50bycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTJcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImxpc3RhU2lOb1wiIGlkPVwicmVwb3J0ZUV4dGVybm9cIiBbKG5nTW9kZWwpXT1cInJlcG9ydGUucmVwb3J0ZUV4dGVybm9cIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWRpcnR5XT1cIiF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8ocmVwb3J0ZS5yZXBvcnRlRXh0ZXJubykgJiYgY2xpY2tHdWFyZGFyXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUucmVwb3J0ZUV4dGVybm8pICYmIGNsaWNrR3VhcmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJub21icmVcIiBvcHRpb25WYWx1ZT1cImNvZGlnb1wiIFtkaXNhYmxlZF09XCIhaXNNb2RpZmljYXJSZXBvcnRlKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3JlcG9ydGUnIHwgdHJhbnNsYXRlIH19IHt7J2V4dGVybm8nIHwgdHJhbnNsYXRlIH19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNFwiICpuZ0lmPVwiaXNGaWpvKClcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGEgW3JlYWRvbmx5XT1cImZhbHNlXCIgW3Nob3dEaWFsb2ddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVwb3J0ZS5qYXNwZXJGaWpvID8gcmVwb3J0ZS5qYXNwZXJGaWpvOiAnJ1wiIFttb3N0cmFyWF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2V4dGVuc2lvbmVzXT1cIidqcnhtbCdcIiBbbW9zdHJhcm9ibGljYXJnb109XCIhKCF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8ocmVwb3J0ZS5qYXNwZXJGaWpvKSAmJiBjbGlja0d1YXJkYXIpXCIgW2xhYmVscmFyXT1cIidqYXNwZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0ZWQpPVwic2V0SmFzcGVyRmlqbygkZXZlbnQpXCI+PC9hcHAtaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNlwiICpuZ0lmPVwiaXNGaWpvKClcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+ICBcclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFUaXBvQ2lmcmFkb1wiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlcG9ydGUuY2lmcmFkb0phc3BlckZpam9cIiBvcHRpb25MYWJlbD1cIm5vbWJyZVwiIG9wdGlvblZhbHVlPVwibGxhdmVUYWJsYVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3RpcG9jaWZyYWRvJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3AtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTJcIiAqbmdJZj1cImlzU3FsKCkgfHwgaXNGaWpvKClcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbCBtaW4taC0xNTBcIiByb3dzPVwiNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWRpcnR5XT1cIiF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8ocmVwb3J0ZS5xdWVyeSkgJiYgY2xpY2tHdWFyZGFyICYmIGlzU3FsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZy1pbnZhbGlkXT1cIiF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8ocmVwb3J0ZS5xdWVyeSkgJiYgY2xpY2tHdWFyZGFyICYmIGlzU3FsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHM9XCIzMFwiIHBJbnB1dFRleHRhcmVhIFsobmdNb2RlbCldPVwicmVwb3J0ZS5xdWVyeVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCA+e3snc3FsJyB8IHRyYW5zbGF0ZSB9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtNiBtZDpjb2wtMTJcIiAqbmdJZj1cImlzRnVlbnRlKClcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbCBtaW4taC0xNTBcIiByb3dzPVwiNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29scz1cIjMwXCIgcElucHV0VGV4dGFyZWEgWyhuZ01vZGVsKV09XCJyZXBvcnRlLndoZXJlU3FsXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3doZXJlJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3AtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTYgbWQ6Y29sLTEyXCIgKm5nSWY9XCJpc0Z1ZW50ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LWZ1bGwgbWluLWgtMTUwXCIgcm93cz1cIjVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHM9XCIzMFwiIHBJbnB1dFRleHRhcmVhIFsobmdNb2RlbCldPVwicmVwb3J0ZS53aGVyZVNxbFJlcG9ydGVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snd2hlcmUnIHwgdHJhbnNsYXRlIH19IHt7J3JlcG9ydGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIiAqbmdJZj1cImlzTW9kaWZpY2FyUmVwb3J0ZSgpXCJcclxuICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIHt7cmVwb3J0ZS5sbGF2ZSA/ICdnbHlwaGljb25zLXJlZnJlc2gnIDogJ2dseXBoaWNvbnMtZmxvcHB5LXNhdmUnIH19XCIgbGFiZWw9XCJ7e3JlcG9ydGUubGxhdmUgPyAoJ2xpbmtfYWN0dWFsaXphcicgfCB0cmFuc2xhdGUpIDogKCdsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlKX19XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3R1YWxpemFyKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbi1vdXRsaW5lZFwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtYmluXCIgKm5nSWY9XCJyZXBvcnRlLmxsYXZlICE9IG51bGwgJiYgaXNNb2RpZmljYXJSZXBvcnRlKClcIlxyXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX2VsaW1pbmFyJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImVsaW1pbmFyKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICdlbnRyYWRhJ1wiPiBcclxuICAgIDxkZXRhbGxlLWVudHJhZGEtcmVwb3J0ZSBbbW9kaWZpY2FyUmVwb3J0ZV09XCJpc01vZGlmaWNhclJlcG9ydGUoKVwiIFtsbGF2ZVJlcG9ydGVdPVwicmVwb3J0ZS5sbGF2ZVwiPjwvZGV0YWxsZS1lbnRyYWRhLXJlcG9ydGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJ2aXN0YVZpc3VhbGl6YXIgPT0gJ2NhbXBvJ1wiPlxyXG4gICAgPGRldGFsbGUtY2FtcG8tcmVwb3J0ZSBbcmVwb3J0ZUZ1ZW50ZV09XCJyZXBvcnRlXCI+IDwvZGV0YWxsZS1jYW1wby1yZXBvcnRlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICd0aXBvJ1wiPlxyXG4gICAgPGRldGFsbGUtdGlwby1yZXBvcnRlIFtsaXN0YUZ1ZW50ZXNdPVwibGlzdGFGdWVudGVcIiBbbGxhdmVSZXBvcnRlXT1cInJlcG9ydGUubGxhdmVcIj48L2RldGFsbGUtdGlwby1yZXBvcnRlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICdkaXN0cmlidWNpb24nXCI+XHJcbiAgICA8ZGV0YWxsZS1kaXN0cmlidWNpb24tcmVwb3J0ZSBbbGxhdmVSZXBvcnRlXT1cInJlcG9ydGUubGxhdmVcIj48L2RldGFsbGUtZGlzdHJpYnVjaW9uLXJlcG9ydGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJ2aXN0YVZpc3VhbGl6YXIgPT0gJ3B1bnRvcHJvY2VzbydcIj5cclxuICAgIDxkZXRhbGxlLXB1bnRvLXByb2Nlc28tcmVwb3J0ZSBbbGxhdmVSZXBvcnRlXT1cInJlcG9ydGUubGxhdmVcIiBbdGlwb1JlY3Vyc29dPVwiJ1InXCI+PC9kZXRhbGxlLXB1bnRvLXByb2Nlc28tcmVwb3J0ZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGFwcC1wb3B1cC1yZXBvcnRlIFttb3N0cmFyXT1cIm1vc3RyYXJQb3B1cFJlcG9ydGVcIiBbcmVwb3J0ZV09XCJyZXBvcnRlXCIgW2FwbGljYWNpb25dPVwiXCJcclxuICAgIChyZWdyZXNhcik9XCJyZWdyZXNhclBvcHVwUmVwb3J0ZSgkZXZlbnQpXCI+PC9hcHAtcG9wdXAtcmVwb3J0ZT4iXX0=
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZS5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZWplY3VjaW9uLXJlcG9ydGUvZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZS9kZXRhbGxlLWVqZWN1Y2lvbi1yZXBvcnRlLnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3dlYmNvbW1vbi9wYWdlcy9lamVjdWNpb24tcmVwb3J0ZS9kZXRhbGxlLWVqZWN1Y2lvbi1yZXBvcnRlL2RldGFsbGUtZWplY3VjaW9uLXJlcG9ydGUucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUF1QyxXQUFXLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBR3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBWSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU0xRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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QUFFLHFCQUFxQiwySkFBRSxtQ0FBbUMsc0pBQUUsc0NBQXNDLDZUQUFFLGdCQUFnQixxR0FBRSxtQkFBbUI7OzJGQU10WSwyQkFBMkI7a0JBUnZDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLG1DQUFtQyxFQUFFLHFCQUFxQixFQUFFLG1DQUFtQyxFQUFFLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFFLFlBRXpZLCtCQUErQixhQUU5QixDQUFDLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQzs4ZEFxQi9CLFFBQVE7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2dlbmVyYWwucGlwZSc7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2lvcy9nZW5lcmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlcG9ydGVGdWVudGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvcmVwb3J0ZS1mdWVudGUucGlwZSc7XHJcbmltcG9ydCB7IEVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWplY3VjaW9ucmVwb3J0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0ZUZ1ZW50ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvUmVwb3J0ZUZ1ZW50ZU1vZGVsJztcclxuaW1wb3J0IHsgRnVlbnRlRGF0b01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRnVlbnRlRGF0byc7XHJcbmltcG9ydCB7IEdlbmVyYWxNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0dlbmVyYWxNb2RlbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IENhcmdhckNvbnRyb2xGdW5jaW9uYWxpZGFkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL2Nhcmdhci1jb250cm9sLWZ1bmNpb25hbGlkYWQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDb25maXJtUG9wdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1wb3B1cCc7XHJcbmltcG9ydCB7IE1lbnViYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL21lbnViYXInO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBEZXRhbGxlRW50cmFkYVJlcG9ydGVDb21wb25lbnQgfSBmcm9tICcuLi9kZXRhbGxlLWVudHJhZGEtcmVwb3J0ZS9kZXRhbGxlLWVudHJhZGEtcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZXRhbGxlQ2FtcG9SZXBvcnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV0YWxsZS1jYW1wby1yZXBvcnRlL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZXRhbGxlVGlwb1JlcG9ydGVDb21wb25lbnQgfSBmcm9tICcuLi9kZXRhbGxlLXRpcG8tcmVwb3J0ZS9kZXRhbGxlLXRpcG8tcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZXRhbGxlRGlzdHJpYnVjaW9uUmVwb3J0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2RldGFsbGUtZGlzdHJpYnVjaW9uLXJlcG9ydGUvZGV0YWxsZS1kaXN0cmlidWNpb24tcmVwb3J0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb3B1cFJlcG9ydGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wb3B1cHMvcG9wdXAtcmVwb3J0ZS9wb3B1cC1yZXBvcnRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERldGFsbGVQdW50b1Byb2Nlc29SZXBvcnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV0YWxsZS1wdW50by1wcm9jZXNvLXJlcG9ydGUvZGV0YWxsZS1wdW50by1wcm9jZXNvLXJlcG9ydGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5wdXRIZWxwZXJTZWxlY2Npb25QbGFudGlsbGFDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50ZXMvaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGEvaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmxvYXRMYWJlbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmxvYXRsYWJlbCc7XHJcbmltcG9ydCB7IElucHV0VGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dGFyZWEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIElucHV0VGV4dE1vZHVsZSwgRm9ybXNNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgQ29uZmlybVBvcHVwTW9kdWxlLCBNZW51YmFyTW9kdWxlLCBEcm9wZG93bk1vZHVsZSwgRGV0YWxsZUVudHJhZGFSZXBvcnRlQ29tcG9uZW50LCBEZXRhbGxlQ2FtcG9SZXBvcnRlQ29tcG9uZW50LCBEZXRhbGxlVGlwb1JlcG9ydGVDb21wb25lbnQsIERldGFsbGVEaXN0cmlidWNpb25SZXBvcnRlQ29tcG9uZW50LCBQb3B1cFJlcG9ydGVDb21wb25lbnQsIERldGFsbGVQdW50b1Byb2Nlc29SZXBvcnRlQ29tcG9uZW50LCBJbnB1dEhlbHBlclNlbGVjY2lvblBsYW50aWxsYUNvbXBvbmVudCwgRmxvYXRMYWJlbE1vZHVsZSwgSW5wdXRUZXh0YXJlYU1vZHVsZSBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhbGxlLWVqZWN1Y2lvbi1yZXBvcnRlLnBhZ2UuaHRtbCcsXHJcbiAgc2VsZWN0b3I6ICdhcHAtZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZScsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGV0YWxsZS1lamVjdWNpb24tcmVwb3J0ZS5wYWdlLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgQ29uZmlybWF0aW9uU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhbGxlRWplY3VjaW9uUmVwb3J0ZVBhZ2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXTtcclxuICBwdWJsaWMgcmVwb3J0ZTogUmVwb3J0ZUZ1ZW50ZU1vZGVsID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gIHB1YmxpYyB2aXN0YVZpc3VhbGl6YXI6IHN0cmluZyA9IG51bGw7XHJcbiAgcHVibGljIGxsYXZlVGFibGE6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vbGlzdGFzXHJcbiAgcHVibGljIGxpc3RhVGlwbztcclxuICBwdWJsaWMgbGlzdGFTaU5vO1xyXG4gIHB1YmxpYyBsaXN0YU1vbWVudG87XHJcbiAgcHVibGljIGxpc3RhVGlwb0NpZnJhZG87XHJcblxyXG4gIHB1YmxpYyB2ZXJUb2Rvczpib29sZWFuO1xyXG4gIHB1YmxpYyBsaXN0YUZ1ZW50ZSA6IEZ1ZW50ZURhdG9Nb2RlbFtdO1xyXG4gIHB1YmxpYyBwZXJtaXRlTW9kaWZpY2FyUmVwb3J0ZTogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIG1vc3RyYXJQb3B1cFJlcG9ydGU6Ym9vbGVhbiA9ZmFsc2U7XHJcbiAgcHVibGljIG9wZXJhY2lvbjogc3RyaW5nO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIHJlZ3Jlc2FyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBjbGlja0d1YXJkYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNpb25lc0J1c1NlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRlRnVlbnRlUGlwZTogUmVwb3J0ZUZ1ZW50ZVBpcGUsXHJcbiAgICBwdWJsaWMgY29udHJvbEZ1bmNpb25TZXJ2aWNlOiBDYXJnYXJDb250cm9sRnVuY2lvbmFsaWRhZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlOiBFamVjdWNpb25SZXBvcnRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZ2VuZXJhbFBpcGU6IEdlbmVyYWxQaXBlLFxyXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGxhdmVUYWJsYSA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdsbGF2ZVRhYmxhJyk7XHJcbiAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9ICdyZXBvcnRlJ1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnTGlzdGFkbyBFamVjdWNpw7NuIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpPT57dGhpcy5yZWdyZXNhckFjdGlvbigpfX0sIFxyXG4gICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpfV0pO1xyXG4gICAgdGhpcy5yZXBvcnRlID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gICAgaWYgKHRoaXMubGxhdmVUYWJsYSl7XHJcbiAgICAgIHRoaXMuZWplY3VjaW9uUmVwb3J0ZVNlcnZpY2UuZ2V0RGF0b3NFamVjdWNpb25SZXBvcnRlKHtsbGF2ZTogdGhpcy5sbGF2ZVRhYmxhfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZSA9IGRhdGEucmVwb3J0ZTtcclxuICAgICAgICBkZWxldGUgdGhpcy5yZXBvcnRlWydhbGlhcyddXHJcbiAgICAgICAgdGhpcy5saXN0YUZ1ZW50ZSA9IGRhdGEubGlzdGFGdWVudGVcclxuICAgICAgICB0aGlzLnZlclRvZG9zID0gZGF0YS5wZXJtaXNvVmVyVG9kb3M7XHJcbiAgICAgICAgdGhpcy5jYXJnYXJNZW51KCk7XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhcmdhck1lbnUoKTtcclxuICAgICAgdGhpcy5yZXBvcnRlID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYXJnYXJMaXN0YXMoKTtcclxuXHJcbiAgfVxyXG5cclxuICBudWV2b1JlcG9ydGUoKSB7XHJcbiAgICBpZih0aGlzLmlzUGVybWlzb1ZlclRvZG9zKCkpIHtcclxuICAgICAgdGhpcy5saXN0YVRpcG8gPXRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuTElTVEFfVElQTztcclxuICAgIH1lbHNlIHtcclxuICAgICAgdGhpcy5saXN0YVRpcG8gPXRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuTElTVEFfVElQT19TSU5fUEVSTUlTTztcclxuICAgIH1cclxuICAgIHRoaXMub3BlcmFjaW9uID0gXCJOXCI7IC8vbnVldm8gcmVwb3J0ZVxyXG4gICAgdGhpcy5yZXBvcnRlID0gbmV3IFJlcG9ydGVGdWVudGVNb2RlbCgpO1xyXG4gICAgLy90aGlzLnJlcG9ydGUub3JpZ2VuRnVlbnRlID0gdGhpcy5yZXBvcnRlRnVlbnRlUGlwZS5GVUVOVEU7XHJcbiAgICB0aGlzLnJlcG9ydGUudW5pY29BcmNoaXZvID0gdGhpcy5nZW5lcmFsUGlwZS5TSTtcclxuICAgIHRoaXMucmVwb3J0ZS5kb2JsZUxpbmVhID0gdGhpcy5nZW5lcmFsUGlwZS5OTztcclxuICAgIHZhciBmdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcbiAgICBmdWVudGUub3JpZ2VuID0gJ0YnO1xyXG4gICAgaWYgKCF0aGlzLmlzUGVybWlzb1ZlclRvZG9zKCkpe1xyXG4gICAgICBmdWVudGUucm9sID0gdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbktleSgnYWxpYXNSb2wnKTtcclxuICAgICAgZnVlbnRlLmxvZ2luID0gdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbktleSgndXN1YXJpbycpXHJcbiAgICB9XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLnF1ZXJ5Rm9yTGlzdChuZXcgR2VuZXJhbE1vZGVsKCdGdWVudGVEYXRvRFRPJywgbnVsbCwgZmFsc2UsIGZ1ZW50ZSkpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5saXN0YUZ1ZW50ZSA9IGRhdGE7XHJcbiAgICB9KVxyXG4gICAgXHJcbiAgICB0aGlzLmNhcmdhckxpc3RhcygpO1xyXG4gICAgdGhpcy5jYXJnYXJNZW51KCk7XHJcbiAgICAvL2NhbWJpYXJWYWxvclRpcG8oYWN0dWFsLmdldE9yaWdlbkZ1ZW50ZSgpKTtcclxuICB9XHJcblxyXG4gIHRyYWVyUmVwb3J0ZShyZXBvcnRlQmFzZTogUmVwb3J0ZUZ1ZW50ZU1vZGVsKXtcclxuICAgIHRoaXMuZWplY3VjaW9uUmVwb3J0ZVNlcnZpY2UuZ2V0RGF0b3NFamVjdWNpb25SZXBvcnRlKHtsbGF2ZTogcmVwb3J0ZUJhc2UubGxhdmV9KS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMucmVwb3J0ZSA9IGRhdGEucmVwb3J0ZTtcclxuICAgICAgZGVsZXRlIHRoaXMucmVwb3J0ZVsnYWxpYXMnXVxyXG4gICAgICB0aGlzLmxpc3RhRnVlbnRlID0gZGF0YS5saXN0YUZ1ZW50ZVxyXG4gICAgICB0aGlzLnZlclRvZG9zID0gZGF0YS5wZXJtaXNvVmVyVG9kb3M7XHJcbiAgICAgIHRoaXMucGVybWl0ZU1vZGlmaWNhclJlcG9ydGUgPSBkYXRhLnBlcm1pdGVNb2RpZmljYXJSZXBvcnRlO1xyXG4gICAgICB0aGlzLmNhcmdhckxpc3RhcygpO1xyXG4gICAgICB0aGlzLmNhcmdhck1lbnUoKTtcclxuICAgICAgdGhpcy5vcGVyYWNpb24gPSAnTSdcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhcmdhck1lbnUoKSB7XHJcbiAgICBpZiAodGhpcy5yZXBvcnRlLmxsYXZlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpLFxyXG4gICAgICAgICAgICAgIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtcGx1cy1zaWduJyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ3JlcG9ydGUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnTGlzdGFkbyBFamVjdWNpw7NuIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpPT57dGhpcy5yZWdyZXNhckFjdGlvbigpfX0sIFxyXG4gICAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpfV0pO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2VudHJhZGEnKSxcclxuICAgICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWZpbGUtbWludXMnLFxyXG4gICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSAnZW50cmFkYSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZW50cmFkYScpfV0pO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5yZXBvcnRlLmxsYXZlICE9IG51bGwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NhbXBvJyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1sb2ctYm9vaycsXHJcbiAgICAgICAgICAgICAgY29tbWFuZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9ICdjYW1wbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY2FtcG8nKX1dKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IHRoaXMucmVwb3J0ZS5sbGF2ZSAhPSBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0aXBvJyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1ub3Rlcy0yJyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ3RpcG8nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnTGlzdGFkbyBFamVjdWNpw7NuIFJlcG9ydGUnLCBjb21tYW5kOiAoZXZlbnQpPT57dGhpcy5yZWdyZXNhckFjdGlvbigpfX0sIFxyXG4gICAgICAgICAgICAgICAge2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbWFudGVuaW1pZW50bycpICsgJyAnICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3RpcG8nKX1dKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IHRoaXMucmVwb3J0ZS5sbGF2ZSAhPSBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkaXN0cmlidWNpb24nKSxcclxuICAgICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLXRyYW5zZmVyJyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ2Rpc3RyaWJ1Y2lvbic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZGlzdHJpYnVjaW9uJyl9XSk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnJlcG9ydGUubGxhdmUgIT0gbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncHVudG9wcm9jZXNvJyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1zZXJ2ZXItbmV3JyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ3B1bnRvcHJvY2Vzbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdMaXN0YWRvIEVqZWN1Y2nDs24gUmVwb3J0ZScsIGNvbW1hbmQ6IChldmVudCk9Pnt0aGlzLnJlZ3Jlc2FyQWN0aW9uKCl9fSwgXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncHVudG9wcm9jZXNvJyl9XSk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnJlcG9ydGUubGxhdmUgIT0gbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZWplY3V0YXInKSxcclxuICAgICAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWRpc2stZXhwb3J0JyxcclxuICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9zdHJhclBvcHVwUmVwb3J0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnJlcG9ydGUubGxhdmUgIT0gbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdyZXBvcnRlJyksXHJcbiAgICAgICAgICBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLXBsdXMtc2lnbicsXHJcbiAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSAncmVwb3J0ZSc7XHJcbiAgICAgICAgICAgIHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0xpc3RhZG8gRWplY3VjacOzbiBSZXBvcnRlJywgY29tbWFuZDogKGV2ZW50KT0+e3RoaXMucmVncmVzYXJBY3Rpb24oKX19LCBcclxuICAgICAgICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtYW50ZW5pbWllbnRvJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncmVwb3J0ZScpfV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgICAgICAgIFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhcmdhckxpc3Rhcygpe1xyXG4gICAgdGhpcy5saXN0YVRpcG8gPSB0aGlzLnJlcG9ydGVGdWVudGVQaXBlLkxJU1RBX1RJUE87XHJcbiAgICB0aGlzLmxpc3RhTW9tZW50byA9IHRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuTElTVEFfTU9NRU5UTztcclxuICAgIHRoaXMubGlzdGFTaU5vID0gdGhpcy5nZW5lcmFsUGlwZS5MSVNUQV9TSU5PO1xyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5xdWVyeUZvckxpc3QobmV3IEdlbmVyYWxNb2RlbCgnRW5jcmlwY2lvbkFyY2hpdm9EVE8nLCBudWxsLCBmYWxzZSwge30pKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdGFUaXBvQ2lmcmFkbyA9IGRhdGE7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdHVhbGl6YXIoKXtcclxuICAgIHRoaXMuY2xpY2tHdWFyZGFyID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy52YWxpZGFyKCkpe1xyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93RXJyb3IoJ0ZhbHRhbiBjYW1wb3Mgb2JsaWdhdG9yaW9zJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnV0aWxzU2VydmljZS5pc05vdEJsYW5rKHRoaXMucmVwb3J0ZS5sbGF2ZSkpe1xyXG4gICAgICB0aGlzLmVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlLmd1YXJkYXJSZXBvcnRlKHRoaXMucmVwb3J0ZSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5jbGlja0d1YXJkYXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhcmdhck1lbnUoKVxyXG4gICAgICAgIHRoaXMubm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9BQ1RVQUxJWkFSKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8qICB0aGlzLmdlbmVyYWxTZXJ2aWNlLnVwZGF0ZShuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlRnVlbnRlRFRPJywgbnVsbCwgZmFsc2UsIHRoaXMucmVwb3J0ZSkpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfQUNUVUFMSVpBUik7XHJcbiAgICAgICAgdGhpcy5jbGlja0d1YXJkYXIgPSBmYWxzZTtcclxuICAgICAgICBkZWxldGUgdGhpcy5yZXBvcnRlWydhbGlhcyddXHJcbiAgICAgIH0vO1xyXG4gICAgICAqL1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lamVjdWNpb25SZXBvcnRlU2VydmljZS5ndWFyZGFyUmVwb3J0ZSh0aGlzLnJlcG9ydGUpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLnJlcG9ydGUgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2xpY2tHdWFyZGFyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYXJnYXJNZW51KClcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfR1VBUkRBUik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgdmFsaWRhcigpe1xyXG4gICAgdmFyIHZhbGlkYWRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICB2YWxpZGFkb3IgPSB2YWxpZGFkb3IgJiYgdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8odGhpcy5yZXBvcnRlLmRlc2NyaXBjaW9uKTtcclxuICAgIHZhbGlkYWRvciA9IHZhbGlkYWRvciAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLnJlcG9ydGUucmVwb3J0ZUV4dGVybm8pO1xyXG4gICAgaWYgKHRoaXMuaXNGdWVudGUoKSl7XHJcbiAgICAgIHZhbGlkYWRvciA9IHZhbGlkYWRvciAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLnJlcG9ydGUuZnVlbnRlRGF0byk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1NxbCgpKXtcclxuICAgICAgdmFsaWRhZG9yID0gdmFsaWRhZG9yICYmIHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHRoaXMucmVwb3J0ZS5xdWVyeSk7XHJcbiAgICAgIGxldCBtZW5zYWplID0gdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclRleHRvU1FMKHRoaXMucmVwb3J0ZS5xdWVyeSwgZmFsc2UsIHRydWUsIDAsIHRydWUpXHJcbiAgICAgIGlmIChtZW5zYWplKXtcclxuICAgICAgICB2YWxpZGFkb3IgPSB2YWxpZGFkb3IgJiYgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNpb25lc0J1c1NlcnZpY2Uuc2hvd1dhcm5pbmcobWVuc2FqZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRmlqbygpKXtcclxuICAgICAgdmFsaWRhZG9yID0gdmFsaWRhZG9yICYmIHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHRoaXMucmVwb3J0ZS5qYXNwZXJGaWpvKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGFkb3I7XHJcbiAgfVxyXG5cclxuICBzZXRKYXNwZXJGaWpvKGV2ZW50KXtcclxuICAgIHRoaXMucmVwb3J0ZS5qYXNwZXJGaWpvID0gZXZlbnQuZGF0YVxyXG4gIH1cclxuXHJcbiAgcmVncmVzYXJBY3Rpb24oKXtcclxuICAgIHRoaXMucmVncmVzYXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcmVncmVzYXJQb3B1cFJlcG9ydGUoZXZlbnQpe1xyXG4gICAgdGhpcy5tb3N0cmFyUG9wdXBSZXBvcnRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbGltaW5hcihldmVudCl7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfRUxJTUlOQVJfQ09ORklSTUFSLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy5nZW5lcmFsUGlwZS5TSV9ERVNDLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlLmVsaW1pbmFyUmVwb3J0ZSh0aGlzLnJlcG9ydGUpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlLnNob3dJbmZvKCdTZSBoYSBlbGltaW5hZG8gZWwgcmVwb3J0ZScpXHJcbiAgICAgICAgICB0aGlzLnJlZ3Jlc2FyQWN0aW9uKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgcmVqZWN0OiAoKSA9PiB7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRmlqbygpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5maWx0cm9PcmlnZW5GdWVudGUodGhpcy5yZXBvcnRlRnVlbnRlUGlwZS5GSUpPKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1NxbCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5maWx0cm9PcmlnZW5GdWVudGUodGhpcy5yZXBvcnRlRnVlbnRlUGlwZS5TUUwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRnVlbnRlKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmZpbHRyb09yaWdlbkZ1ZW50ZSh0aGlzLnJlcG9ydGVGdWVudGVQaXBlLkZVRU5URSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdHJvT3JpZ2VuRnVlbnRlKHRpcG86c3RyaW5nKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMucmVwb3J0ZS5vcmlnZW5GdWVudGUgPT0gdGlwbztcclxuICB9XHJcbiAgICBcclxuXHRwdWJsaWMgaXNQZXJtaXNvVmVyVG9kb3MoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoXCJyZXBvcnRlOnZlcnRvZG9zXCIpO1xyXG5cdH1cclxuXHRcclxuXHRwdWJsaWMgaXNQZXJtaXNvQ3JlYXIoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoXCJyZXBvcnRlOmNyZWFyXCIpO1xyXG5cdH1cclxuXHJcbiAgcHVibGljIGlzTW9kaWZpY2FyUmVwb3J0ZSgpe1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQZXJtaXNvVmVyVG9kb3MoKSB8fCB0aGlzLnBlcm1pdGVNb2RpZmljYXJSZXBvcnRlIHx8ICh0aGlzLmlzUGVybWlzb0NyZWFyKCkgJiYgdGhpcy5vcGVyYWNpb24gPT0gJ04nKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWwtMiBtdC0yIG1iLTJcIj5cclxuICA8aDEgY2xhc3M9XCJtYi0xXCI+UmVwb3J0ZXM8L2gxPlxyXG4gIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgZm9udC1zZW1pYm9sZCBmbGV4LXNocmluay0wIG1sLTRcIlxyXG4gICAgKGNsaWNrKT1cInJlZ3Jlc2FyQWN0aW9uKClcIiBsYWJlbD1cInt7J2xpbmtfcmVncmVzYXInIHwgdHJhbnNsYXRlfX1cIiA+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG48cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD5cclxuICA8cC1tZW51YmFyIFttb2RlbF09XCJpdGVtc1wiIGNsYXNzPVwibWVudS1hY2Npb24tc2FyYVwiPjwvcC1tZW51YmFyPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG10LTNcIiAqbmdJZj1cInZpc3RhVmlzdWFsaXphciAhPSAncmVwb3J0ZSdcIj5cclxuICAgIDxoNSBjbGFzcz1cIm10LTNcIj48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J2luZm9ybWFjaW9uJyB8IHRyYW5zbGF0ZX19IHt7J3JlcG9ydGUnIHwgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cIklucHV0Z3JvdXAgcC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTIgbGc6Y29sLTEyXCI+XHJcbiAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IFtkaXNhYmxlZF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJyZXBvcnRlLmRlc2NyaXBjaW9uXCI+XHJcbiAgICAgICAgICA8bGFiZWwgPnt7KCdkZXNjcmlwY2lvbicpIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTJcIiAqbmdJZj1cInZpc3RhVmlzdWFsaXphciA9PSAncmVwb3J0ZSdcIj5cclxuICAgIDxkaXYgaWQ9XCJyZXBvcnRlc0xpc3RhZG9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJEZXRhbGxlcmVwb3J0ZSBtdC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGlkPVwiZGVzY3JpcGNpb25cIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicmVwb3J0ZS5kZXNjcmlwY2lvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUuZGVzY3JpcGNpb24pICYmIGNsaWNrR3VhcmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWludmFsaWRdPVwiIXV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3JpbyhyZXBvcnRlLmRlc2NyaXBjaW9uKSAmJiBjbGlja0d1YXJkYXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snZGVzY3JpcGNpb24nIHwgdHJhbnNsYXRlIH19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGlkPVwidGl0dWxvXCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInJlcG9ydGUudGl0dWxvXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3RpdHVsbycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGlkPVwicHJvY2VkaW1pZW50b1wiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJyZXBvcnRlLnByb2NlZGltaWVudG9cIiBbZGlzYWJsZWRdPVwiIWlzTW9kaWZpY2FyUmVwb3J0ZSgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3Byb2NlZGltaWVudG8nIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImlzRnVlbnRlKCkgPyAnZmllbGQgY29sLTEyIG1kOmNvbC02JyA6ICdmaWVsZCBjb2wtMTIgbWQ6Y29sLTInIFwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFUaXBvXCIgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIiBpZD1cIm9yaWdlbkZ1ZW50ZVwiICBbZGlzYWJsZWRdPVwicmVwb3J0ZS5sbGF2ZSAhPSBudWxsIHx8ICFjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3JlcG9ydGU6dGlwbycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlcG9ydGUub3JpZ2VuRnVlbnRlXCIgb3B0aW9uTGFiZWw9XCJub21icmVcIiBvcHRpb25WYWx1ZT1cImNvZGlnb1wiID48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyd0aXBvJyB8IHRyYW5zbGF0ZSB9fSo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNlwiICpuZ0lmPVwiaXNGdWVudGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFGdWVudGVcIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiIGlkPVwiZnVlbnRlRGF0b1wiIFtkaXNhYmxlZF09XCIhaXNNb2RpZmljYXJSZXBvcnRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUuZnVlbnRlRGF0bykgJiYgY2xpY2tHdWFyZGFyXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUuZnVlbnRlRGF0bykgJiYgY2xpY2tHdWFyZGFyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXBvcnRlLmZ1ZW50ZURhdG9cIiBvcHRpb25MYWJlbD1cImRlc2NyaXBjaW9uXCIgb3B0aW9uVmFsdWU9XCJsbGF2ZVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGUgfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3AtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNFwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFNb21lbnRvXCIgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIiAgWyhuZ01vZGVsKV09XCJyZXBvcnRlLm1vbWVudG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibm9tYnJlXCIgb3B0aW9uVmFsdWU9XCJjb2RpZ29cIiBbc2hvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snbW9tZW50bycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTJcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImxpc3RhU2lOb1wiIGlkPVwicmVwb3J0ZUV4dGVybm9cIiBbKG5nTW9kZWwpXT1cInJlcG9ydGUucmVwb3J0ZUV4dGVybm9cIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5nLWRpcnR5XT1cIiF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8ocmVwb3J0ZS5yZXBvcnRlRXh0ZXJubykgJiYgY2xpY2tHdWFyZGFyXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUucmVwb3J0ZUV4dGVybm8pICYmIGNsaWNrR3VhcmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJub21icmVcIiBvcHRpb25WYWx1ZT1cImNvZGlnb1wiIFtkaXNhYmxlZF09XCIhaXNNb2RpZmljYXJSZXBvcnRlKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3JlcG9ydGUnIHwgdHJhbnNsYXRlIH19IHt7J2V4dGVybm8nIHwgdHJhbnNsYXRlIH19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9wLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNFwiICpuZ0lmPVwiaXNGaWpvKClcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGEgW3JlYWRvbmx5XT1cImZhbHNlXCIgW3Nob3dEaWFsb2ddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVwb3J0ZS5qYXNwZXJGaWpvID8gcmVwb3J0ZS5qYXNwZXJGaWpvOiAnJ1wiIFttb3N0cmFyWF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2V4dGVuc2lvbmVzXT1cIidqcnhtbCdcIiBbbW9zdHJhcm9ibGljYXJnb109XCIhKCF1dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8ocmVwb3J0ZS5qYXNwZXJGaWpvKSAmJiBjbGlja0d1YXJkYXIpXCIgW2xhYmVscmFyXT1cIidqYXNwZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0ZWQpPVwic2V0SmFzcGVyRmlqbygkZXZlbnQpXCI+PC9hcHAtaW5wdXQtaGVscGVyLXNlbGVjY2lvbi1wbGFudGlsbGE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNlwiICpuZ0lmPVwiaXNGaWpvKClcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+ICBcclxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFUaXBvQ2lmcmFkb1wiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlcG9ydGUuY2lmcmFkb0phc3BlckZpam9cIiBvcHRpb25MYWJlbD1cIm5vbWJyZVwiIG9wdGlvblZhbHVlPVwibGxhdmVUYWJsYVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7J3RpcG9jaWZyYWRvJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3AtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTJcIiAqbmdJZj1cImlzU3FsKCkgfHwgaXNGaWpvKClcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbCBtaW4taC0xNTAgbWF4LWgtMzAwXCIgcm93cz1cIjVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUucXVlcnkpICYmIGNsaWNrR3VhcmRhciAmJiBpc1NxbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCIhdXRpbHNTZXJ2aWNlLnZhbGlkYXJDYW1wb09ibGlnYXRvcmlvKHJlcG9ydGUucXVlcnkpICYmIGNsaWNrR3VhcmRhciAmJiBpc1NxbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xzPVwiMzBcIiBwSW5wdXRUZXh0YXJlYSBbKG5nTW9kZWwpXT1cInJlcG9ydGUucXVlcnlcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgPnt7J3NxbCcgfCB0cmFuc2xhdGUgfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3AtZmxvYXRMYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTYgbWQ6Y29sLTEyXCIgKm5nSWY9XCJpc0Z1ZW50ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LWZ1bGwgbWluLWgtMTUwIG1heC1oLTMwMFwiIHJvd3M9XCI1XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xzPVwiMzBcIiBwSW5wdXRUZXh0YXJlYSBbKG5nTW9kZWwpXT1cInJlcG9ydGUud2hlcmVTcWxcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snd2hlcmUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtNiBtZDpjb2wtMTJcIiAqbmdJZj1cImlzRnVlbnRlKClcIj5cclxuICAgICAgICAgICAgICAgIDxwLWZsb2F0TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbCBtaW4taC0xNTAgbWF4LWgtMzAwXCIgcm93cz1cIjVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHM9XCIzMFwiIHBJbnB1dFRleHRhcmVhIFsobmdNb2RlbCldPVwicmVwb3J0ZS53aGVyZVNxbFJlcG9ydGVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3snd2hlcmUnIHwgdHJhbnNsYXRlIH19IHt7J3JlcG9ydGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvcC1mbG9hdExhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIiAqbmdJZj1cImlzTW9kaWZpY2FyUmVwb3J0ZSgpXCJcclxuICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIHt7cmVwb3J0ZS5sbGF2ZSA/ICdnbHlwaGljb25zLXJlZnJlc2gnIDogJ2dseXBoaWNvbnMtZmxvcHB5LXNhdmUnIH19XCIgbGFiZWw9XCJ7e3JlcG9ydGUubGxhdmUgPyAoJ2xpbmtfYWN0dWFsaXphcicgfCB0cmFuc2xhdGUpIDogKCdsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlKX19XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3R1YWxpemFyKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbi1vdXRsaW5lZFwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtYmluXCIgKm5nSWY9XCJyZXBvcnRlLmxsYXZlICE9IG51bGwgJiYgaXNNb2RpZmljYXJSZXBvcnRlKClcIlxyXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX2VsaW1pbmFyJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImVsaW1pbmFyKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICdlbnRyYWRhJ1wiPiBcclxuICAgIDxkZXRhbGxlLWVudHJhZGEtcmVwb3J0ZSBbbW9kaWZpY2FyUmVwb3J0ZV09XCJpc01vZGlmaWNhclJlcG9ydGUoKVwiIFtsbGF2ZVJlcG9ydGVdPVwicmVwb3J0ZS5sbGF2ZVwiPjwvZGV0YWxsZS1lbnRyYWRhLXJlcG9ydGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJ2aXN0YVZpc3VhbGl6YXIgPT0gJ2NhbXBvJ1wiPlxyXG4gICAgPGRldGFsbGUtY2FtcG8tcmVwb3J0ZSBbcmVwb3J0ZUZ1ZW50ZV09XCJyZXBvcnRlXCI+IDwvZGV0YWxsZS1jYW1wby1yZXBvcnRlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICd0aXBvJ1wiPlxyXG4gICAgPGRldGFsbGUtdGlwby1yZXBvcnRlIFtsaXN0YUZ1ZW50ZXNdPVwibGlzdGFGdWVudGVcIiBbbGxhdmVSZXBvcnRlXT1cInJlcG9ydGUubGxhdmVcIj48L2RldGFsbGUtdGlwby1yZXBvcnRlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICdkaXN0cmlidWNpb24nXCI+XHJcbiAgICA8ZGV0YWxsZS1kaXN0cmlidWNpb24tcmVwb3J0ZSBbbGxhdmVSZXBvcnRlXT1cInJlcG9ydGUubGxhdmVcIj48L2RldGFsbGUtZGlzdHJpYnVjaW9uLXJlcG9ydGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJ2aXN0YVZpc3VhbGl6YXIgPT0gJ3B1bnRvcHJvY2VzbydcIj5cclxuICAgIDxkZXRhbGxlLXB1bnRvLXByb2Nlc28tcmVwb3J0ZSBbbGxhdmVSZXBvcnRlXT1cInJlcG9ydGUubGxhdmVcIiBbdGlwb1JlY3Vyc29dPVwiJ1InXCI+PC9kZXRhbGxlLXB1bnRvLXByb2Nlc28tcmVwb3J0ZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGFwcC1wb3B1cC1yZXBvcnRlIFttb3N0cmFyXT1cIm1vc3RyYXJQb3B1cFJlcG9ydGVcIiBbcmVwb3J0ZV09XCJyZXBvcnRlXCIgW2FwbGljYWNpb25dPVwiXCJcclxuICAgIChyZWdyZXNhcik9XCJyZWdyZXNhclBvcHVwUmVwb3J0ZSgkZXZlbnQpXCI+PC9hcHAtcG9wdXAtcmVwb3J0ZT4iXX0=